index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. <template>
  2. <!-- <div class="title">召测配置页面</div> -->
  3. <el-form ref="queryFormRef" :model="queryParams" :inline="true">
  4. <el-form-item label="设备SN:" style="width: 190px;">
  5. <el-input v-model="queryParams.deviceSn" placeholder="设备SN" width="90px" size="small" maxlength="11" />
  6. </el-form-item>
  7. <el-form-item label="遥测站编码:" style="margin-left: 10px;width: 200px;">
  8. <el-input v-model="queryParams.stationCode" placeholder="遥测站编码" width="90px" size="small" maxlength="10"/>
  9. </el-form-item>
  10. <el-form-item label="任务类型:" style="margin-left: 10px;width: 220px;">
  11. <el-select v-model="queryParams.taskType" class="filter-item" placeholder="安装/召测/配置" size="small"
  12. style="max-width: 150px;">
  13. <el-option v-for="(key, value) in taskTypeQueryMap" :key="key" :label="key" :value="value" />
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="任务等级:" style="margin-left: 10px;width: 200px;">
  17. <el-select v-model="queryParams.taskLevel" class="filter-item" placeholder="任务等级" size="small">
  18. <el-option v-for="item in taskLevelsQuery" :key="item.value" :label="item.label" :value="item.value" />
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="创建日期:" style="margin-left: 10px;">
  22. <el-config-provider :locale="locale">
  23. <el-date-picker v-model="queryParams.createTimeStart" type="date" placeholder="选择开始日期" :shortcuts="shortcuts"
  24. value-format="YYYY-MM-DD 00:00:00" size="small" style="max-width: 150px;" />
  25. </el-config-provider>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-config-provider :locale="locale">
  29. <el-date-picker v-model="queryParams.createTimeEnd" type="date" placeholder="选择结束日期" :shortcuts="shortcuts"
  30. value-format="YYYY-MM-DD 23:59:59" size="small" style="max-width: 150px;" />
  31. </el-config-provider>
  32. </el-form-item>
  33. <el-form-item>
  34. <el-button type="primary" class="button" :disabled="state.search_disabled" @click="queryList">
  35. 查询任务
  36. </el-button>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button type="primary" class="button" @click="handleAdd">新增任务</el-button>
  40. </el-form-item>
  41. </el-form>
  42. <el-table v-loading="loading" :data="state.tableData" border stripe style="width: 100%" :height="tableHeight"
  43. highlight-current-row @current-change="handleCurrentRowChange"
  44. :header-cell-style="{ background: '#606266', color: '#FFFFFF' }">
  45. <el-table-column fixed type="index" width="50" align="center" />
  46. <el-table-column fixed prop="deviceSn" label="设备SN" header-align="center" width="120" />
  47. <!-- <el-table-column prop="deviceName" label="设备名称" header-align="center" width="100" /> -->
  48. <el-table-column fit prop="stationCode" label="遥测站编码" header-align="center" width="100" />
  49. <el-table-column label="任务类型" header-align="center" width="100" align="center">
  50. <template #default="scope">
  51. <span v-if="scope.row.taskType === '1'">召测配置</span>
  52. <span v-if="scope.row.taskType === '2'">召测数据</span>
  53. <span v-if="scope.row.taskType === '3'">远程配置</span>
  54. <span v-if="scope.row.taskType === '4'">审核结果</span>
  55. </template>
  56. </el-table-column>
  57. <el-table-column label="任务等级" header-align="center" width="100" align="center">
  58. <template #default="scope">
  59. <span v-if="scope.row.taskLevel === 1">常规任务</span>
  60. <span v-if="scope.row.taskLevel === 2">普通任务</span>
  61. <span v-if="scope.row.taskLevel === 3">紧急任务</span>
  62. <span v-if="scope.row.taskLevel === 99">特权任务</span>
  63. </template>
  64. </el-table-column>
  65. <el-table-column prop="createMan" label="创建人" header-align="center" width="100" align="center" />
  66. <el-table-column prop="createTime" label="创建时间" header-align="center" width="160" />
  67. <el-table-column label="执行状态" header-align="center" align="center" width="100">
  68. <template #default="scope">
  69. <span v-if="scope.row.finishedFlag === '0'">未执行</span>
  70. <span v-if="scope.row.finishedFlag === '1'">已执行</span>
  71. <span v-if="scope.row.finishedFlag === '2'">已完成</span>
  72. </template>
  73. </el-table-column>
  74. <el-table-column prop="finishedTime" label="完成时间" header-align="center" width="160" />
  75. <el-table-column label="" align="left" width="150">
  76. <template #default="scope">
  77. <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button>
  78. <el-button type="text" @click="submitDeleteForm(scope.row)">删除</el-button>
  79. </template>
  80. </el-table-column>
  81. <el-table-column fixed="right" />
  82. </el-table>
  83. <el-config-provider :locale="locale">
  84. <el-pagination v-model:currentPage="queryParams.page" v-model:page-size="queryParams.rows"
  85. :page-sizes="[10, 15, 20, 25, 100]" :small="state.small" :disabled="state.disabled" :background="state.background"
  86. layout="total, sizes, prev, pager, next, jumper" :total="state.total"
  87. style="text-align: center; margin-top: 10px; height: 30px" @size-change="handleSizeChange"
  88. @current-change="handleCurrentChange" />
  89. </el-config-provider>
  90. <el-dialog :title="adddialog.title" v-model="adddialog.visible" width="450px" draggable center>
  91. <el-form ref="addFormRef" :model="formAddData" :rules="state.rules" label-width="100px">
  92. <el-form-item label="设备SN:" prop="deviceSn">
  93. <el-input v-model="formAddData.deviceSn" placeholder="设备SN" width="120px" maxlength="11" show-word-limit />
  94. </el-form-item>
  95. <el-form-item label="任务类型:">
  96. <el-select v-model="formAddData.taskType" class="filter-item" placeholder="任务类型" width="10px">
  97. <el-option v-for="(key, value) in taskTypeMap" :key="key" :label="key" :value="value" />
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item label="任务等级:">
  101. <el-select v-model="formAddData.taskLevel" class="filter-item" placeholder="任务等级" width="10px">
  102. <el-option v-for="item in taskLevels" :key="item.value" :label="item.label" :value="item.value" />
  103. </el-select>
  104. </el-form-item>
  105. </el-form>
  106. <template #footer>
  107. <span class="dialog-footer">
  108. <el-button @click="cancel(0)">取消</el-button>
  109. <el-button type="primary" @click="submitAddForm">确定</el-button>
  110. </span>
  111. </template>
  112. </el-dialog>
  113. <el-dialog :title="editdialog.title" v-model="editdialog.visible" width="450px" draggable center>
  114. <el-form ref="editFormRef" :model="formEditData" label-width="100px">
  115. <el-form-item label="设备SN:">
  116. <el-input v-model="formEditData.deviceSn" placeholder="设备SN" width="120px" />
  117. </el-form-item>
  118. <el-form-item label="任务类型:">
  119. <el-select v-model="formEditData.taskType" class="filter-item" placeholder="任务类型" width="120px">
  120. <el-option v-for="(key, value) in taskTypeMap" :key="key" :label="key" :value="value" />
  121. </el-select>
  122. </el-form-item>
  123. <el-form-item label="任务等级:">
  124. <el-select v-model="formEditData.taskLevel" class="filter-item" placeholder="任务等级" width="120px">
  125. <el-option v-for="item in taskLevels" :key="item.value" :label="item.label" :value="item.value" />
  126. </el-select>
  127. </el-form-item>
  128. </el-form>
  129. <template #footer>
  130. <span class="dialog-footer">
  131. <el-button @click="cancel(1)">取消</el-button>
  132. <el-button type="primary" @click="submitEditForm">确定</el-button>
  133. </span>
  134. </template>
  135. </el-dialog>
  136. </template>
  137. <script lang="ts" setup>
  138. import { reactive, toRefs, toRef, ref, onMounted } from "vue";
  139. import { ElForm, ElMessage, ElMessageBox } from "element-plus";
  140. import TTaskDownAction from "@/api/downlinktask/ttaskdown";
  141. import { TTaskDownQueryParam, TTaskDown, Dialog, PageResult } from "@/types";
  142. import zhCn from "element-plus/lib/locale/lang/zh-cn";
  143. let locale = ref(zhCn);
  144. const addFormRef = ref(ElForm); // 属性名必须和元素的ref属性值一致
  145. const loading = ref(false);
  146. const state = reactive({
  147. queryParams: { page: 1, rows: 10 } as TTaskDownQueryParam,
  148. total: 0,
  149. small: false,
  150. background: true,
  151. disabled: false,
  152. search_disabled: false,
  153. adddialog: {} as Dialog,
  154. editdialog: {} as Dialog,
  155. formAddData: {} as TTaskDown,
  156. formEditData: {} as TTaskDown,
  157. tableData: [] as TTaskDown[],
  158. rules: {
  159. deviceSn: [
  160. { required: true, message: "设备SN不能为空", trigger: "blur" },
  161. { min: 11, max: 11, message: "设备SN长度不合法", trigger: "blur" },
  162. ],
  163. },
  164. });
  165. const {
  166. queryParams,
  167. total,
  168. adddialog,
  169. editdialog,
  170. formAddData,
  171. formEditData,
  172. tableData,
  173. } = toRefs(state);
  174. const tableHeight = ref(document.documentElement.clientHeight - 250);
  175. const currentRow = ref();
  176. const handleCurrentRowChange = (val: TTaskDown | undefined) => {
  177. currentRow.value = val;
  178. };
  179. //任务类型
  180. const taskTypeMap = {
  181. '1': "召测配置",
  182. '2': "召测数据",
  183. '3': "远程配置",
  184. '4': "审核结果",
  185. };
  186. const taskTypeQueryMap = {
  187. '1': "召测配置",
  188. '2': "召测数据",
  189. '3': "远程配置",
  190. '4': "审核结果",
  191. '0': "全部",
  192. };
  193. /* const taskLevelMap = {
  194. 1: "常规任务",
  195. 2: "普通任务",
  196. 3: "紧急任务",
  197. 99: "特权任务",
  198. };
  199. */
  200. //任务等级
  201. const taskLevels = [
  202. {
  203. value: 1,
  204. label: '常规任务',
  205. },
  206. {
  207. value: 2,
  208. label: '普通任务',
  209. },
  210. {
  211. value: 3,
  212. label: '紧急任务',
  213. },
  214. {
  215. value: 99,
  216. label: '特权任务',
  217. },
  218. ]
  219. //任务等级
  220. const taskLevelsQuery = [
  221. {
  222. value: 1,
  223. label: '常规任务',
  224. },
  225. {
  226. value: 2,
  227. label: '普通任务',
  228. },
  229. {
  230. value: 3,
  231. label: '紧急任务',
  232. },
  233. {
  234. value: 99,
  235. label: '特权任务',
  236. },
  237. {
  238. value: 0,
  239. label: '全部',
  240. },
  241. ]
  242. const handleAdd = () => {
  243. state.adddialog = {
  244. title: "新增召测任务",
  245. visible: true,
  246. };
  247. };
  248. const handleEdit = (row: any) => {
  249. state.formEditData = row;
  250. state.editdialog = {
  251. title: "编辑召测任务",
  252. visible: true,
  253. };
  254. };
  255. const queryList = () => {
  256. loading.value = true;
  257. state.search_disabled = true;
  258. TTaskDownAction.QueryTTaskDownList(state.queryParams)
  259. .then((result) => {
  260. if (result.status === 200) {
  261. const { res, flag, error } = result.data;
  262. if (flag != undefined && flag == 1) {
  263. const pageData = res as PageResult<TTaskDown[]>;
  264. state.tableData = pageData.list;
  265. state.total = pageData.total;
  266. } else {
  267. }
  268. loading.value = false;
  269. state.search_disabled = false;
  270. }
  271. })
  272. .catch((error) => {
  273. //请求失败时的操作
  274. ElMessage.error(error);
  275. loading.value = false;
  276. state.search_disabled = false;
  277. });
  278. };
  279. const handleSizeChange = (val: number) => {
  280. queryParams.value.rows = val;
  281. console.log(queryParams);
  282. queryList();
  283. };
  284. const handleCurrentChange = (val: number) => {
  285. queryParams.value.page = val;
  286. console.log(queryParams);
  287. queryList();
  288. };
  289. const submitAddForm = () => {
  290. addFormRef.value.validate((valid: any) => {
  291. if (valid) {
  292. state.formAddData.createMan = localStorage.getItem("UserName") + "";
  293. TTaskDownAction.AddTTaskDown(state.formAddData).then((result) => {
  294. const { res, flag, error } = result.data;
  295. if (flag === "1") {
  296. ElMessage.success("新增成功");
  297. cancel(0);
  298. queryList();
  299. }
  300. else{
  301. ElMessage.warning(error);
  302. }
  303. });
  304. }
  305. });
  306. };
  307. const submitEditForm = () => {
  308. TTaskDownAction.EditTTaskDown(state.formEditData).then((result) => {
  309. ElMessage.success("编辑成功");
  310. cancel(1);
  311. queryList();
  312. });
  313. };
  314. const submitDeleteForm = (row: any) => {
  315. ElMessageBox.confirm(" 是否删除设备[" + row.deviceSn + "]? ", "提示", {
  316. cancelButtonText: "取消",
  317. confirmButtonText: "确认",
  318. type: "warning",
  319. center: true,
  320. })
  321. .then(() => {
  322. TTaskDownAction.DeleteTTaskDown(row.id).then((result) => {
  323. ElMessage.success("删除成功");
  324. queryList();
  325. });
  326. })
  327. .catch(() => {
  328. ElMessage({
  329. type: "info",
  330. message: "取消删除成功!",
  331. });
  332. });
  333. };
  334. const cancel = (dialogType: number) => {
  335. if (dialogType == 0) {
  336. //addFormRef.value.resetFields();
  337. state.formAddData = {} as TTaskDown;
  338. state.formEditData= {} as TTaskDown;
  339. state.adddialog.visible = false;
  340. } else {
  341. //editFormRef.value.resetFields();
  342. state.formAddData = {} as TTaskDown;
  343. state.formEditData = {} as TTaskDown;
  344. state.editdialog.visible = false;
  345. }
  346. };
  347. onMounted(() => {
  348. window.onresize = function () {
  349. tableHeight.value = document.documentElement.clientHeight - 250;
  350. };
  351. queryList();
  352. });
  353. /* 日期控件开始 */
  354. const size = ref<'' | 'large' | 'small'>('')
  355. const shortcuts = [
  356. {
  357. text: '今天',
  358. value: new Date(),
  359. },
  360. {
  361. text: '昨天',
  362. value: () => {
  363. const date = new Date()
  364. date.setTime(date.getTime() - 3600 * 1000 * 24)
  365. return date
  366. },
  367. },
  368. {
  369. text: '前一周',
  370. value: () => {
  371. const date = new Date()
  372. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
  373. return date
  374. },
  375. },
  376. ]
  377. /* 日期控件结束 */
  378. </script>
  379. <style lang="scss" scoped>
  380. .title {
  381. font-size: 30px;
  382. }
  383. </style>