index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. <template>
  2. <div class="airportInfo scroll-y">
  3. <div class="wrap">
  4. <Minheader
  5. :is-auth="true"
  6. :is-statuser="true"
  7. :is-Search="true"
  8. @addForm="addForm"
  9. >
  10. <template #header>
  11. <div class="status flex-wrap">
  12. <div class="manageTitle">告警预警维护</div>
  13. </div>
  14. </template></Minheader
  15. >
  16. <div class="app-containers">
  17. <DataTable
  18. :tableHeader="tableCols"
  19. :tableData="tableData"
  20. :tableBtnGroup="tableBtnGroup"
  21. :tableProperty="{ rowKey: 'ID' }"
  22. @btnClick="btnClick"
  23. />
  24. </div>
  25. <Dialog
  26. width="600px"
  27. :flag="flag"
  28. :type="type"
  29. :msgTitle="msgTitle"
  30. @resetForm="resetForm"
  31. @delRest="delRest"
  32. @submitForm="submitForm"
  33. @delRemove="delRemove"
  34. >
  35. <div class="diacont">
  36. <el-form :model="tableForm" :rules="formRules" ref="warningSetForm">
  37. <el-row :gutter="24">
  38. <!-- <el-col :span="12">
  39. <el-form-item label="策略名称" size="default">
  40. <el-input
  41. v-model="tableForm.name"
  42. placeholder="请输入策略名称"
  43. />
  44. </el-form-item>
  45. </el-col> -->
  46. <el-col :span="12">
  47. <el-form-item
  48. label="航司二字码"
  49. size="default"
  50. prop="IATACode"
  51. :rules="formRules.isNotNull"
  52. >
  53. <el-input
  54. v-model="tableForm.IATACode"
  55. placeholder="请输入航司二字码"
  56. />
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12">
  60. <el-form-item
  61. label="起飞机场"
  62. size="default"
  63. prop="departmentAirport"
  64. :rules="formRules.isNotNull"
  65. >
  66. <el-select
  67. style="width: 100%"
  68. v-model="tableForm.departmentAirport"
  69. class="input-shadow"
  70. filterable
  71. default-first-option
  72. clearable
  73. placeholder="请选择起飞机场"
  74. >
  75. <el-option
  76. v-for="item in tableOptionser"
  77. :key="item.v ? item.v : item.planDepartureApt"
  78. :label="item.k ? item.k : item.planDepartureApt"
  79. :value="item.v ? item.v : item.planDepartureApt"
  80. >
  81. </el-option>
  82. </el-select>
  83. </el-form-item>
  84. </el-col>
  85. <el-col :span="12">
  86. <el-form-item
  87. label="降落机场"
  88. size="default"
  89. prop="landingAirport"
  90. :rules="formRules.isNotNull"
  91. >
  92. <el-select
  93. style="width: 100%"
  94. v-model="tableForm.landingAirport"
  95. class="input-shadow"
  96. filterable
  97. default-first-option
  98. clearable
  99. placeholder="请选择降落机场"
  100. >
  101. <el-option
  102. v-for="item in tableOptionser"
  103. :key="item.v ? item.v : item.planDepartureApt"
  104. :label="item.k ? item.k : item.planDepartureApt"
  105. :value="item.v ? item.v : item.planDepartureApt"
  106. >
  107. </el-option>
  108. </el-select>
  109. </el-form-item>
  110. </el-col>
  111. <el-col>
  112. <el-form-item
  113. label="航班号"
  114. size="default"
  115. prop="flightNo"
  116. :rules="formRules.isNotNull"
  117. >
  118. <el-input
  119. v-model="tableForm.flightNo"
  120. placeholder="请输入航班号"
  121. />
  122. </el-form-item>
  123. </el-col>
  124. <el-col :span="12">
  125. <el-form-item
  126. label="生效时间"
  127. size="default"
  128. prop="startDate"
  129. :rules="formRules.isNotNull"
  130. >
  131. <el-date-picker
  132. v-model="tableForm.startDate"
  133. :rows="1"
  134. type="datetime"
  135. format="YYYY-MM-DD HH:mm:ss"
  136. value-format="YYYY-MM-DD HH:mm:ss"
  137. placeholder="选择日期时间"
  138. >
  139. </el-date-picker>
  140. </el-form-item>
  141. </el-col>
  142. <el-col :span="12">
  143. <el-form-item
  144. label="失效时间"
  145. size="default"
  146. prop="endDate"
  147. :rules="formRules.isNotNull"
  148. >
  149. <el-date-picker
  150. format="YYYY-MM-DD HH:mm:ss"
  151. value-format="YYYY-MM-DD HH:mm:ss"
  152. v-model="tableForm.endDate"
  153. :rows="1"
  154. type="datetime"
  155. placeholder="选择日期时间"
  156. >
  157. </el-date-picker>
  158. </el-form-item>
  159. </el-col>
  160. <!-- <el-col>
  161. <el-form-item label="备注" size="default">
  162. <el-input
  163. type="textarea"
  164. v-model="tableForm.text"
  165. placeholder="请输入备注"
  166. />
  167. </el-form-item>
  168. </el-col> -->
  169. </el-row>
  170. </el-form>
  171. </div>
  172. </Dialog>
  173. </div>
  174. </div>
  175. </template>
  176. <script setup lang="ts">
  177. import DataTable from "@/components/tableTemp/index.vue";
  178. import Minheader from "@/components/minheader/index.vue";
  179. import Dialog from "@/components/dialog/index.vue";
  180. import { Query, GeneralDataReception } from "@/api/webApi";
  181. import { ElMessage } from "element-plus";
  182. const formRules = useElement().formRules;
  183. const page = ref<number>(0); //分页参数
  184. const dataContent = ref<object>({});
  185. const noMore = ref<Boolean>(false);
  186. const rowTitle = ref<String>("");
  187. const tableCols = ref([]); //表头数据
  188. const serviceId = ref<String>("");
  189. const tableObj = ref({}); //增删改数据缓存
  190. const router = useRouter();
  191. const flag = ref<Boolean>(false); //弹窗开关
  192. const type = ref<String>(""); //判断是否删除
  193. const msgTitle = ref<String>("新增告警预警维护"); //弹窗标题
  194. const tableColsCopys = reactive<Object>({}); //弹窗\
  195. const tableOptionser = ref<Array>([]); //弹窗下拉
  196. const submitID = ref<String>("");
  197. const tableForm = reactive({
  198. IATACode: "",
  199. departmentAirport: "",
  200. landingAirport: "",
  201. flightNo: "",
  202. startDate: "",
  203. endDate: "",
  204. event: "",
  205. }); //弹窗内容
  206. //列表
  207. const tableData = ref([]);
  208. //表头
  209. const state = reactive({
  210. list: [
  211. { label: "名称", key: "name" },
  212. { label: "中文简称", key: "china" },
  213. { label: "英文简称", key: "englin" },
  214. { label: "航司二字码", key: "two" },
  215. { label: "航司三字码", key: "three" },
  216. { label: "备注", key: "text" },
  217. ],
  218. listLoading: true,
  219. });
  220. const tableBtnGroup = ref([
  221. {
  222. name: "编辑",
  223. className: "editBtn",
  224. param: 2,
  225. },
  226. {
  227. name: "删除",
  228. className: "delBtn",
  229. param: 3,
  230. },
  231. ]);
  232. //获取弹框-下拉数据
  233. const getSelectData = async (id, name) => {
  234. const { code, returnData } = await Query({
  235. id,
  236. dataContent: name ? [name] : name === null ? [null] : [],
  237. });
  238. if (code == 0) {
  239. tableOptionser.value = returnData.listValues;
  240. } else {
  241. tableOptionser.value = [];
  242. }
  243. };
  244. //新增
  245. const addForm = () => {
  246. msgTitle.value = "新增告警预警维护";
  247. flag.value = true;
  248. type.value = "";
  249. tableForm.event = 1;
  250. };
  251. //取消
  252. const resetForm = () => {
  253. flag.value = false;
  254. tableForm.name = "";
  255. tableForm.china = "";
  256. tableForm.englin = "";
  257. tableForm.two = "";
  258. tableForm.three = "";
  259. tableForm.text = "";
  260. };
  261. //编辑
  262. // const editDialog = (data) => {
  263. // msgTitle.value = "编辑航司信息维护";
  264. // flag.value = true;
  265. // type.value = "";
  266. // tableForm.name = data.name;
  267. // tableForm.china = data.china;
  268. // tableForm.englin = data.englin;
  269. // tableForm.two = data.two;
  270. // tableForm.three = data.three;
  271. // tableForm.text = data.text;
  272. // };
  273. //编辑-删除
  274. const btnClick = (row, index, param) => {
  275. if (param === 2) {
  276. router.push({
  277. path: "/systemSettings/warningEdit",
  278. query: {
  279. alarmSceneId: index.alarmSceneId,
  280. submitID: submitID.value,
  281. },
  282. });
  283. } else if (param === 3) {
  284. msgTitle.value = "删除告警预警维护";
  285. flag.value = true;
  286. type.value = "del";
  287. tableForm.event = 3;
  288. tableForm.IATACode = index.IATACode;
  289. tableForm.departmentAirport = index.departmentAirport;
  290. tableForm.landingAirport = index.landingAirport;
  291. tableForm.flightNo = index.flightNo;
  292. tableForm.startDate = index.startDate;
  293. tableForm.endDate = index.endDate;
  294. } else if (param === 4) {
  295. }
  296. };
  297. //删除
  298. const eleDialog = () => {
  299. msgTitle.value = "删除告警预警维护";
  300. flag.value = true;
  301. type.value = "del";
  302. };
  303. const delRemove = () => {
  304. tableForm.event = 3;
  305. generalDataReception(tableForm);
  306. };
  307. //删除
  308. const delRest = () => {
  309. flag.value = false;
  310. };
  311. //获取表格数据
  312. const getQuery = async () => {
  313. try {
  314. const { code, returnData } = await Query({
  315. id: DATACONTENT_ID.sysServiceWarningId,
  316. needPage: ++page.value,
  317. dataContent: Object.values(dataContent.value),
  318. });
  319. if (code === "0") {
  320. if (returnData.listValues.length === 0) {
  321. page.value--;
  322. noMore.value = true;
  323. }
  324. const titleColumn = returnData.columnSet.find(
  325. (item) => item.needShow === 1
  326. );
  327. if (titleColumn) {
  328. rowTitle.value = titleColumn.columnName;
  329. }
  330. submitID.value = returnData.submitID;
  331. tableData.value.push(...returnData.listValues);
  332. tableCols.value = returnData.columnSet;
  333. returnData.columnSet.forEach((item) => {
  334. if (item.listqueryTemplateID && item.columnName === "landingAirport") {
  335. getSelectData(item.listqueryTemplateID);
  336. }
  337. });
  338. tableCols.value.forEach((element) => {
  339. element.label = element.columnLabel;
  340. element.key = element.columnName;
  341. });
  342. serviceId.value = returnData.submitID;
  343. } else {
  344. page.value--;
  345. }
  346. } catch (error) {
  347. page.value--;
  348. }
  349. };
  350. //确认提交
  351. const warningSetForm: any = ref(null);
  352. const submitForm = () => {
  353. warningSetForm.value.validate((valid: any) => {
  354. if (valid) {
  355. generalDataReception(tableForm);
  356. } else {
  357. return false;
  358. }
  359. });
  360. };
  361. const resetTable = () => {
  362. page.value = 0;
  363. noMore.value = false;
  364. tableData.value = [];
  365. };
  366. //新增-编辑-删除
  367. const generalDataReception = async (data) => {
  368. try {
  369. data = {
  370. ...data,
  371. };
  372. const { code } = await GeneralDataReception({
  373. serviceId: serviceId.value,
  374. dataContent: JSON.stringify(data),
  375. });
  376. if (code == 0) {
  377. ElMessage.success(`操作成功`);
  378. // this.$message.success("操作成功");
  379. resetTable();
  380. getQuery();
  381. resetForm();
  382. flag.value = false;
  383. // rmFlag.value = false;
  384. tableObj.value = {};
  385. // this.$router.go(0);
  386. } else {
  387. ElMessage.error(`操作失败`);
  388. // this.$message.error("操作失败");
  389. // this.flag = false;
  390. // this.rmFlag = false;
  391. tableObj.value = {};
  392. resetForm();
  393. }
  394. } catch (error) {
  395. flag.value = false;
  396. // rmFlag.value = false;
  397. tableObj.value = {};
  398. resetForm();
  399. }
  400. };
  401. getQuery();
  402. </script>
  403. <style lang="scss" scoped>
  404. ::v-deep .el-form-item__label {
  405. width: 100px;
  406. }
  407. </style>