index.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  1. <template>
  2. <div class="airportInfo scroll-y">
  3. <div class="wrap">
  4. <Minheader :is-auth="true" :is-statuser="true" powerData="alert_alarm_settings_add_button" @addForm="addForm" @searchForms="searchForms">
  5. <template #header>
  6. <div class="status flex-wrap">
  7. <div class="manageTitle">预警告警维护</div>
  8. </div>
  9. </template>
  10. </Minheader>
  11. <div class="app-containers">
  12. <DataTable :tableHeader="tableCols" :tableData="tableData" :tableBtnGroup="tableBtnGroup" :tableProperty="{ rowKey: 'ID' }" @btnClick="btnClick" />
  13. </div>
  14. <Dialog width="600px" :flag="flag" :type="type" :msgTitle="msgTitle" :delName="delName" @resetForm="resetForm" @delRest="delRest" @submitForm="submitForm" @delRemove="delRemove">
  15. <div class="diacont">
  16. <el-form :model="tableForm" :rules="formRules" ref="warningSetForm">
  17. <el-row :gutter="24">
  18. <!-- <el-col :span="12">
  19. <el-form-item label="策略名称" size="default">
  20. <el-input
  21. v-model="tableForm.name"
  22. placeholder="请输入策略名称"
  23. />
  24. </el-form-item>
  25. </el-col> -->
  26. <el-col :span="12">
  27. <el-form-item label="起飞机场" size="default" prop="departmentAirport" :rules="formRules.isNotNull">
  28. <el-select style="width: 100%" v-model="tableForm.departmentAirport" class="input-shadow" filterable allow-create default-first-option clearable placeholder="请选择起飞机场">
  29. <el-option v-for="item in tableOptionser" :key="item.airportID" :label="item.IATACode" :value="item.IATACode">
  30. </el-option>
  31. </el-select>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="12">
  35. <el-form-item label="降落机场" size="default">
  36. <el-select style="width: 100%" v-model="tableForm.landingAirport" class="input-shadow" filterable allow-create default-first-option clearable placeholder="请选择降落机场">
  37. <el-option v-for="item in tableOptionser" :key="item.airportID" :label="item.IATACode" :value="item.IATACode">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="12">
  43. <el-form-item label="航司二字码" size="default" prop="IATACode">
  44. <el-select style="width: 100%" v-model="tableForm.IATACode" class="input-shadow" filterable allow-create default-first-option clearable placeholder="请选择航司二字码">
  45. <el-option v-for="item in iaCodeArr" :key="item.airlineCompanyID" :label="item.ITATCode" :value="item.ITATCode">
  46. </el-option>
  47. </el-select>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="国内国际" size="default" prop="ditype" :rules="formRules.isNotNull">
  52. <el-select style="width: 100%" v-model="tableForm.ditype" class="input-shadow" filterable allow-create default-first-option placeholder="请选择国内国际">
  53. <el-option v-for="(item,index) in ditypeAll" :key="index" :label="item.k" :value="item.v">
  54. </el-option>
  55. </el-select>
  56. </el-form-item>
  57. </el-col>
  58. <el-col>
  59. <el-form-item label="航班号" size="default">
  60. <el-input v-model="tableForm.flightNo" placeholder="请输入航班号" />
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="12">
  64. <el-form-item label="机型" prop="planetype" size="default">
  65. <el-select style="width: 100%" v-model="tableForm.planetype" class="input-shadow" filterable allow-create default-first-option placeholder="请选择机型">
  66. <el-option label="宽体机" value="宽体机" />
  67. <el-option label="窄体机" value="窄体机" />
  68. <el-option label="全部" value="全部" />
  69. </el-select>
  70. </el-form-item>
  71. </el-col>
  72. <el-col :span="12">
  73. <el-form-item label="停机位" prop="landingstand" size="default">
  74. <el-input ref="inputRef" v-model="tableForm.landingstand" placeholder="请输入停机位" />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="12">
  78. <el-form-item label="生效时间" size="default" prop="startDate" :rules="formRules.isNotNull">
  79. <el-date-picker v-model="tableForm.startDate" :rows="1" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="选择日期时间">
  80. </el-date-picker>
  81. </el-form-item>
  82. </el-col>
  83. <el-col :span="12">
  84. <el-form-item label="失效时间" size="default" prop="endDate">
  85. <el-date-picker format="YYYY-MM-DD" value-format="YYYY-MM-DD" v-model="tableForm.endDate" :rows="1" type="date" placeholder="选择日期时间">
  86. </el-date-picker>
  87. </el-form-item>
  88. </el-col>
  89. <!-- <el-col>
  90. <el-form-item label="备注" size="default">
  91. <el-input
  92. type="textarea"
  93. v-model="tableForm.text"
  94. placeholder="请输入备注"
  95. />
  96. </el-form-item>
  97. </el-col> -->
  98. </el-row>
  99. </el-form>
  100. </div>
  101. </Dialog>
  102. <el-popover
  103. ref="popoverRef"
  104. :virtual-ref="inputRef"
  105. virtual-triggering
  106. placement="right"
  107. trigger="click"
  108. content="多个停机位用逗号分隔,例如 51,52"
  109. />
  110. </div>
  111. </div>
  112. </template>
  113. <script setup lang="ts">
  114. import DataTable from "@/components/tableTemp/index.vue";
  115. import Minheader from "@/components/minheader/index.vue";
  116. import Dialog from "@/components/dialog/index.vue";
  117. import {
  118. Query,
  119. GeneralDataReception,
  120. htQuery,
  121. dataToChange,
  122. } from "@/api/webApi";
  123. import { ElMessage } from "element-plus";
  124. import { onMounted } from "vue";
  125. const formRules = useElement().formRules;
  126. const page = ref<number>(0); //分页参数
  127. const dataContent = ref<object>({});
  128. const noMore = ref<boolean>(false);
  129. const rowTitle = ref<string>("");
  130. const tableCols = ref<any>([]); //表头数据
  131. const iaCodeArr = ref<any>([]); //航司二字码
  132. const serviceId = ref<string | any>("");
  133. const tableObj = ref({}); //增删改数据缓存
  134. const router = useRouter();
  135. const flag = ref<boolean>(false); //弹窗开关
  136. const type = ref<string>(""); //判断是否删除
  137. const msgTitle = ref<string>("新增告警预警维护"); //弹窗标题
  138. const tableColsCopys = reactive<Object>({}); //弹窗\
  139. const tableOptionser = ref<any>([]); //弹窗下拉
  140. const submitID = ref<string | any>("");
  141. const delName = ref<string>("");
  142. const listqueryTemplateID = ref<string | any>("");
  143. const inputRef = ref(null)
  144. const tableForm = reactive<any>({
  145. IATACode: null,
  146. departmentAirport: null,
  147. landingAirport: null,
  148. flightNo: null,
  149. startDate: null,
  150. endDate: null,
  151. ditype: "ALL",
  152. planetype: null,
  153. landingstand: null,
  154. // alarmSceneId: "",
  155. // event: "",
  156. }); //弹窗内容
  157. //列表
  158. const tableData = ref<any>([]);
  159. const ditypeAll = ref<any>([
  160. {
  161. k: "全部",
  162. v: "ALL",
  163. },
  164. {
  165. k: "国内",
  166. v: "DOM",
  167. },
  168. {
  169. k: "国际",
  170. v: "INT",
  171. },
  172. ]);
  173. //表头
  174. const state = reactive({
  175. list: [
  176. { label: "名称", key: "name" },
  177. { label: "中文简称", key: "china" },
  178. { label: "英文简称", key: "englin" },
  179. { label: "航司二字码", key: "two" },
  180. { label: "航司三字码", key: "three" },
  181. { label: "备注", key: "text" },
  182. ],
  183. listLoading: true,
  184. });
  185. const tableBtnGroup = ref([
  186. {
  187. name: "编辑",
  188. className: "editBtn",
  189. param: 2,
  190. is: "edit_alert_alarm_settings_button",
  191. },
  192. {
  193. name: "删除",
  194. className: "delBtn",
  195. param: 3,
  196. is: "delete_alert_alarm_settings_button",
  197. },
  198. ]);
  199. //获取弹框-下拉数据
  200. const getSelectData = async (id: number, name?: string) => {
  201. const { code, returnData } = await Query({
  202. id,
  203. dataContent: name ? [name] : name === null ? [null] : [],
  204. });
  205. if (code == 0) {
  206. tableOptionser.value = returnData.listValues;
  207. } else {
  208. tableOptionser.value = [];
  209. }
  210. };
  211. //新增
  212. const addForm = () => {
  213. msgTitle.value = "新增告警预警策略";
  214. flag.value = true;
  215. type.value = "";
  216. // tableForm.event = 1;
  217. };
  218. //取消
  219. const resetForm = () => {
  220. flag.value = false;
  221. tableForm.IATACode = "";
  222. tableForm.departmentAirport = "";
  223. tableForm.landingAirport = "";
  224. tableForm.flightNo = "";
  225. tableForm.startDate = "";
  226. tableForm.endDate = "";
  227. tableForm.planetype = '',
  228. tableForm.landingstand = '',
  229. // tableForm.event = "";
  230. delName.value = "";
  231. };
  232. //编辑
  233. // const editDialog = (data) => {
  234. // msgTitle.value = "编辑航司信息维护";
  235. // flag.value = true;
  236. // type.value = "";
  237. // tableForm.name = data.name;
  238. // tableForm.china = data.china;
  239. // tableForm.englin = data.englin;
  240. // tableForm.two = data.two;
  241. // tableForm.three = data.three;
  242. // tableForm.text = data.text;
  243. // };
  244. //编辑-删除
  245. const btnClick = (row, index, param) => {
  246. if (param === 2) {
  247. router.push({
  248. path: "/BasicsData/warningEdit",
  249. query: {
  250. alarmSceneId: index.alarmSceneId,
  251. submitID: submitID.value,
  252. listqueryTemplateID: listqueryTemplateID.value,
  253. },
  254. });
  255. } else if (param === 3) {
  256. msgTitle.value = "删除告警预警维护";
  257. flag.value = true;
  258. type.value = "del";
  259. // tableForm.event = 3;
  260. delName.value = index.flightNo;
  261. tableForm.alarmSceneId = index.alarmSceneId;
  262. tableForm.IATACode = index.IATACode;
  263. tableForm.departmentAirport = index.departmentAirport;
  264. tableForm.landingAirport = index.landingAirport;
  265. tableForm.flightNo = index.flightNo;
  266. tableForm.startDate = index.startDate;
  267. tableForm.endDate = index.endDate;
  268. } else if (param === 4) {
  269. }
  270. };
  271. //删除
  272. const eleDialog = () => {
  273. msgTitle.value = "删除告警预警维护";
  274. flag.value = true;
  275. type.value = "del";
  276. };
  277. const delRemove = () => {
  278. // tableForm.event = 3;
  279. generalDataReception(tableForm, 3);
  280. };
  281. //删除
  282. const delRest = () => {
  283. flag.value = false;
  284. };
  285. //获取表格数据
  286. const getQuery = async (data?) => {
  287. try {
  288. const columnSet = [
  289. {
  290. queryTemplateColumnSetID: 290,
  291. queryTemplateID: 13,
  292. columnName: "alarmStrategyID",
  293. columnLabel: "策略编号",
  294. columnDescribe: "策略编号",
  295. needSort: 0,
  296. needFilters: 1,
  297. needShow: 0,
  298. needGroup: 0,
  299. dataType: "int",
  300. listqueryTemplateID: null,
  301. needCount: null,
  302. orderNumber: null,
  303. needSearch: null,
  304. },
  305. {
  306. queryTemplateColumnSetID: 291,
  307. queryTemplateID: 13,
  308. columnName: "IATACode",
  309. columnLabel: "航司二字码",
  310. columnDescribe: "航司二字码",
  311. needSort: 0,
  312. needFilters: 1,
  313. needShow: 1,
  314. needGroup: 0,
  315. dataType: "varchar",
  316. listqueryTemplateID: null,
  317. needCount: null,
  318. orderNumber: null,
  319. needSearch: null,
  320. },
  321. {
  322. queryTemplateColumnSetID: 292,
  323. queryTemplateID: 13,
  324. columnName: "flightNo",
  325. columnLabel: "航班号",
  326. columnDescribe: "航班号",
  327. needSort: 0,
  328. needFilters: 1,
  329. needShow: 1,
  330. needGroup: 0,
  331. dataType: "int",
  332. listqueryTemplateID: 1803423,
  333. needCount: null,
  334. orderNumber: null,
  335. needSearch: null,
  336. },
  337. {
  338. queryTemplateColumnSetID: 292,
  339. queryTemplateID: 13,
  340. columnName: "ditype",
  341. columnLabel: "国内国际",
  342. columnDescribe: "国内国际",
  343. needSort: 0,
  344. needFilters: 1,
  345. needShow: 1,
  346. needGroup: 0,
  347. dataType: "int",
  348. listqueryTemplateID: 1803423,
  349. needCount: null,
  350. orderNumber: null,
  351. needSearch: null,
  352. },
  353. {
  354. queryTemplateColumnSetID: 293,
  355. queryTemplateID: 13,
  356. columnName: "departmentAirport",
  357. columnLabel: "起飞机场",
  358. columnDescribe: "起飞机场",
  359. needSort: 0,
  360. needFilters: 1,
  361. needShow: 1,
  362. needGroup: 0,
  363. dataType: "number",
  364. listqueryTemplateID: null,
  365. needCount: null,
  366. orderNumber: null,
  367. needSearch: null,
  368. },
  369. {
  370. queryTemplateColumnSetID: 294,
  371. queryTemplateID: 13,
  372. columnName: "landingAirport",
  373. columnLabel: "降落机场",
  374. columnDescribe: "降落机场",
  375. needSort: 0,
  376. needFilters: 1,
  377. needShow: 1,
  378. needGroup: 0,
  379. dataType: "number",
  380. listqueryTemplateID: null,
  381. needCount: null,
  382. orderNumber: null,
  383. needSearch: null,
  384. },
  385. {
  386. queryTemplateColumnSetID: 297,
  387. queryTemplateID: 13,
  388. columnName: "planetype",
  389. columnLabel: "机型",
  390. columnDescribe: "宽体机/窄体机",
  391. needSort: 0,
  392. needFilters: 1,
  393. needShow: 1,
  394. needGroup: 0,
  395. dataType: "varchar",
  396. listqueryTemplateID: null,
  397. needCount: null,
  398. orderNumber: null,
  399. needSearch: null,
  400. },
  401. {
  402. queryTemplateColumnSetID: 298,
  403. queryTemplateID: 13,
  404. columnName: "landingstand",
  405. columnLabel: "停机位",
  406. columnDescribe: "停机位",
  407. needSort: 0,
  408. needFilters: 1,
  409. needShow: 1,
  410. needGroup: 0,
  411. dataType: "varchar",
  412. listqueryTemplateID: null,
  413. needCount: null,
  414. orderNumber: null,
  415. needSearch: null,
  416. },
  417. {
  418. queryTemplateColumnSetID: 295,
  419. queryTemplateID: 13,
  420. columnName: "startDate",
  421. columnLabel: "生效时间",
  422. columnDescribe: "生效时间",
  423. needSort: 0,
  424. needFilters: 1,
  425. needShow: 1,
  426. needGroup: 0,
  427. dataType: "varchar",
  428. listqueryTemplateID: 1803424,
  429. needCount: null,
  430. orderNumber: null,
  431. needSearch: null,
  432. },
  433. {
  434. queryTemplateColumnSetID: 296,
  435. queryTemplateID: 13,
  436. columnName: "endDate",
  437. columnLabel: "失效时间",
  438. columnDescribe: "失效时间",
  439. needSort: 0,
  440. needFilters: 1,
  441. needShow: 1,
  442. needGroup: 0,
  443. dataType: "varchar",
  444. listqueryTemplateID: 1803425,
  445. needCount: null,
  446. orderNumber: null,
  447. needSearch: null,
  448. },
  449. ];
  450. const { code, returnData } = await Query({
  451. id: DATACONTENT_ID.sysServiceCjId,
  452. needPage: ++page.value,
  453. dataContent: data ? [data] : [],
  454. });
  455. if (code === "0") {
  456. // console.log(returnData);
  457. if (returnData.length === 0) {
  458. page.value--;
  459. noMore.value = true;
  460. }
  461. tableData.value.push(...returnData);
  462. tableCols.value = columnSet;
  463. // console.log(tableData);
  464. // const titleColumn = returnData.columnSet.find(
  465. // (item) => item.needShow === 1
  466. // );
  467. // if (titleColumn) {
  468. // rowTitle.value = titleColumn.columnName;
  469. // }
  470. // submitID.value = returnData.submitID;
  471. // tableData.value.push(...returnData);
  472. // console.log(tableData);
  473. // tableCols.value = returnData.columnSet;
  474. // returnData.columnSet.forEach((item) => {
  475. // if (item.listqueryTemplateID && item.columnName === "landingAirport") {
  476. // listqueryTemplateID.value = item.listqueryTemplateID;
  477. // // getSelectData(item.listqueryTemplateID);
  478. // }
  479. // });
  480. // tableCols.value.forEach((element) => {
  481. // element.label = element.columnLabel;
  482. // element.key = element.columnName;
  483. // });
  484. serviceId.value = DATACONTENT_ID.sysServiceCjIds;
  485. } else {
  486. tableCols.value = columnSet;
  487. page.value--;
  488. }
  489. } catch (error) {
  490. page.value--;
  491. }
  492. };
  493. //确认提交
  494. const warningSetForm: any = ref(null);
  495. const submitForm = () => {
  496. warningSetForm.value.validate((valid: any) => {
  497. if (valid) {
  498. generalDataReception(tableForm, 1);
  499. } else {
  500. return false;
  501. }
  502. });
  503. };
  504. const resetTable = () => {
  505. page.value = 0;
  506. noMore.value = false;
  507. tableData.value = [];
  508. };
  509. //新增-编辑-删除
  510. const generalDataReception = async (data, event) => {
  511. try {
  512. data = {
  513. ...data,
  514. };
  515. const { code } = await dataToChange(serviceId.value, data, event);
  516. if (code == 0) {
  517. ElMessage.success(`操作成功`);
  518. // this.$message.success("操作成功");
  519. resetTable();
  520. getQuery();
  521. resetForm();
  522. flag.value = false;
  523. // rmFlag.value = false;
  524. tableObj.value = {};
  525. // this.$router.go(0);
  526. } else {
  527. ElMessage.error(`操作失败`);
  528. // this.$message.error("操作失败");
  529. // this.flag = false;
  530. // this.rmFlag = false;
  531. tableObj.value = {};
  532. resetForm();
  533. }
  534. } catch (error) {
  535. flag.value = false;
  536. // rmFlag.value = false;
  537. tableObj.value = {};
  538. resetForm();
  539. }
  540. };
  541. //清除
  542. const searchForms = (data) => {
  543. page.value = 0;
  544. tableData.value = [];
  545. getQuery(data);
  546. };
  547. //获取航司二字码
  548. const getIaCode = async () => {
  549. const result = await htQuery(DATACONTENT_ID.sysServiceHsId);
  550. iaCodeArr.value = result;
  551. };
  552. //获取机场
  553. const getAirpot = async () => {
  554. const result = await htQuery(DATACONTENT_ID.sysServiceHzId);
  555. tableOptionser.value = result;
  556. };
  557. onMounted(() => {
  558. getIaCode();
  559. getAirpot();
  560. });
  561. // getQuery();
  562. </script>
  563. <style lang="scss" scoped>
  564. ::v-deep .el-form-item__label {
  565. width: 100px;
  566. }
  567. </style>