index.vue 20 KB

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