From 6dfb5e44a7072d78ca6c04d21b7ed8ad126b874f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 01 七月 2025 14:05:44 +0800
Subject: [PATCH] 1.巡检管理频次选择逻辑修改
---
src/api/inspectionManagement/index.js | 24 ++++
src/views/inspectionManagement/components/formDia.vue | 121 ++++++++++++++++++++---
src/views/inspectionManagement/index.vue | 113 ++++++++++++++-------
3 files changed, 200 insertions(+), 58 deletions(-)
diff --git a/src/api/inspectionManagement/index.js b/src/api/inspectionManagement/index.js
index a33c185..d0c444a 100644
--- a/src/api/inspectionManagement/index.js
+++ b/src/api/inspectionManagement/index.js
@@ -25,6 +25,14 @@
data: query
})
}
+// 瀹氭椂宸℃浠诲姟琛ㄥ垹闄�
+export function delTimingTask(query) {
+ return request({
+ url: '/timingTask/delTimingTask',
+ method: 'delete',
+ data: query
+ })
+}
// /inspectionTask/addOrEditInspectionTask
// 宸℃涓婁紶
@@ -34,4 +42,20 @@
method: 'post',
data: query
})
+}
+// 瀹氭椂宸℃浠诲姟琛ㄦ煡璇�
+export function timingTaskList(query) {
+ return request({
+ url: '/timingTask/list',
+ method: 'get',
+ params: query
+ })
+}
+// 瀹氭椂宸℃浠诲姟琛ㄦ柊澧炰慨鏀�
+export function addOrEditTimingTask(query) {
+ return request({
+ url: '/timingTask/addOrEditTimingTask',
+ method: 'post',
+ data: query
+ })
}
\ No newline at end of file
diff --git a/src/views/inspectionManagement/components/formDia.vue b/src/views/inspectionManagement/components/formDia.vue
index 8da91ef..91e9c5c 100644
--- a/src/views/inspectionManagement/components/formDia.vue
+++ b/src/views/inspectionManagement/components/formDia.vue
@@ -10,20 +10,79 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鍦扮偣" prop="port">
- <el-input v-model="form.port" placeholder="璇疯緭鍏ュ湴鐐�" maxlength="30" />
+ <el-form-item label="鍦扮偣" prop="inspectionLocation">
+ <el-input v-model="form.inspectionLocation" placeholder="璇疯緭鍏ュ湴鐐�" maxlength="30" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="宸℃浜�" prop="inspector">
- <el-input v-model="form.inspector" placeholder="宸℃浜�" maxlength="30" />
+ <el-select v-model="form.inspector" placeholder="璇烽�夋嫨" multiple clearable>
+ <el-option v-for="item in userList" :label="item.nickName" :value="item.userId" :key="item.userId"/>
+ </el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="澶囨敞" prop="remarks">
<el-input v-model="form.remarks" placeholder="璇疯緭鍏ュ娉�" type="textarea" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="浠诲姟棰戠巼" prop="frequencyType">
+ <el-select v-model="form.frequencyType" placeholder="璇烽�夋嫨" clearable>
+ <el-option label="姣忔棩" value="DAILY"/>
+ <el-option label="姣忓懆" value="WEEKLY"/>
+ <el-option label="姣忔湀" value="MONTHLY"/>
+ <el-option label="瀛e害" value="QUARTERLY"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="form.frequencyType === 'DAILY' && form.frequencyType">
+ <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+ <el-time-picker v-model="form.frequencyDetail" placeholder="閫夋嫨鏃堕棿" format="HH:mm"
+ value-format="HH:mm" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="form.frequencyType === 'WEEKLY' && form.frequencyType">
+ <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+ <el-select v-model="form.week" placeholder="璇烽�夋嫨" clearable style="width: 50%">
+ <el-option label="鍛ㄤ竴" value="MON"/>
+ <el-option label="鍛ㄤ簩" value="TUE"/>
+ <el-option label="鍛ㄤ笁" value="WED"/>
+ <el-option label="鍛ㄥ洓" value="THU"/>
+ <el-option label="鍛ㄤ簲" value="FRI"/>
+ <el-option label="鍛ㄥ叚" value="SAT"/>
+ <el-option label="鍛ㄦ棩" value="SUN"/>
+ </el-select>
+ <el-time-picker v-model="form.frequencyDetail" placeholder="閫夋嫨鏃堕棿" format="HH:mm"
+ value-format="HH:mm" style="width: 50%"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="form.frequencyType === 'MONTHLY' && form.frequencyType">
+ <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+ <el-date-picker
+ v-model="form.frequencyDetail"
+ type="datetime"
+ clearable
+ placeholder="閫夋嫨寮�濮嬫棩鏈�"
+ format="DD,HH:mm"
+ value-format="DD,HH:mm"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12" v-if="form.frequencyType === 'QUARTERLY' && form.frequencyType">
+ <el-form-item label="鏃ユ湡" prop="frequencyDetail">
+ <el-date-picker
+ v-model="form.frequencyDetail"
+ type="datetime"
+ clearable
+ placeholder="閫夋嫨寮�濮嬫棩鏈�"
+ format="MM,DD,HH:mm"
+ value-format="MM,DD,HH:mm"
+ />
</el-form-item>
</el-col>
</el-row>
@@ -39,9 +98,10 @@
</template>
<script setup>
-import {reactive, ref} from "vue";
+import {reactive, ref, computed} from "vue";
import useUserStore from '@/store/modules/user'
-import {addOrEditInspectionTask} from "@/api/inspectionManagement/index.js";
+import {addOrEditTimingTask} from "@/api/inspectionManagement/index.js";
+import {userListAll} from "@/api/publicApi/index.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits()
@@ -51,43 +111,66 @@
const data = reactive({
form: {
taskName: '',
- port: '',
+ inspectionLocation: '',
inspector: '',
+ inspectorIds: '',
remarks: '',
+ frequencyType: '',
+ frequencyDetail: '',
},
rules: {
taskName: [{ required: true, message: "璇疯緭鍏ヤ换鍔″悕绉�", trigger: "blur" },],
- port: [{ required: true, message: "璇疯緭鍏ュ湴鐐�", trigger: "blur" },],
+ inspectionLocation: [{ required: true, message: "璇疯緭鍏ュ湴鐐�", trigger: "blur" },],
inspector: [{ required: true, message: "璇疯緭鍏ュ贰妫�浜�", trigger: "blur" },],
}
})
-
const { form, rules } = toRefs(data)
+const userList = ref([])
// 鎵撳紑寮规
const openDialog = async (type, row) => {
dialogVisitable.value = true
+ userListAll().then(res => {
+ userList.value = res.data
+ })
if (type === 'edit') {
form.value = {...row}
}
}
-// 鎻愪氦鍚堝苟琛ㄥ崟
-const submitForm = () => {
- proxy.$refs["formRef"].validate(valid => {
- if (valid) {
- addOrEditInspectionTask(form.value).then(() => {
- cancel()
- proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
- })
- }
- })
-}
+
// 鍏抽棴鍚堝苟琛ㄥ崟
const cancel = () => {
proxy.resetForm("formRef")
dialogVisitable.value = false
emit('closeDia')
}
+const selectedDateTime = ref(null)
+
+// 璁$畻鏄熸湡鍑�
+const dayOfWeek = computed(() => {
+ if (!selectedDateTime.value) return ''
+
+ const date = new Date(selectedDateTime.value)
+ const dayIndex = date.getDay()
+
+ const weekDays = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�']
+ return weekDays[dayIndex]
+})
+// 鎻愪氦鍚堝苟琛ㄥ崟
+const submitForm = () => {
+ proxy.$refs["formRef"].validate(valid => {
+ if (valid) {
+ form.value.inspectorIds = form.value.inspector.join(',')
+ if (form.value.frequencyType === 'WEEKLY') {
+ form.value.frequencyDetail = form.value.week + ',' + form.value.frequencyDetail
+ }
+ addOrEditTimingTask(form.value).then(() => {
+ cancel()
+ proxy.$modal.msgSuccess('鎻愪氦鎴愬姛')
+ })
+ }
+ })
+}
defineExpose({ openDialog })
</script>
diff --git a/src/views/inspectionManagement/index.vue b/src/views/inspectionManagement/index.vue
index c967f7b..e0ba31f 100644
--- a/src/views/inspectionManagement/index.vue
+++ b/src/views/inspectionManagement/index.vue
@@ -1,7 +1,7 @@
<template>
<div class="app-container">
<el-form :inline="true" :model="queryParams" class="search-form">
- <el-form-item label="渚涘簲鍟嗗悕绉�">
+ <el-form-item label="鏃堕棿">
<el-input
v-model="queryParams.supplierName"
placeholder="璇疯緭鍏�"
@@ -9,7 +9,7 @@
:style="{ width: '100%' }"
/>
</el-form-item>
- <el-form-item label="鐓ょ">
+ <el-form-item label="璁惧鍚嶇О">
<el-input
v-model="queryParams.coal"
placeholder="璇疯緭鍏�"
@@ -36,12 +36,20 @@
:name="tab.name"
/>
</el-tabs>
- <!-- 鎿嶄綔鎸夐挳鍖� -->
- <el-space v-if="tabName !== 'qrCodeScanRecord'">
- <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button>
- <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
- <!-- <el-button type="info" plain :icon="Download">瀵煎嚭</el-button> -->
- </el-space>
+ <div style="display: flex;flex-direction: row;justify-content: space-between;" v-if="tabName === 'task'">
+ <el-radio-group v-model="activeRadio" @change="radioChange">
+ <el-radio-button v-for="tab in radios"
+ :key="tab.name"
+ :label="tab.label"
+ :value="tab.name"/>
+ </el-radio-group>
+ <!-- 鎿嶄綔鎸夐挳鍖� -->
+ <el-space v-if="activeRadio !== 'task'">
+ <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button>
+ <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
+ <!-- <el-button type="info" plain :icon="Download">瀵煎嚭</el-button> -->
+ </el-space>
+ </div>
<div>
<div>
<ETable :loading="tableLoading"
@@ -55,9 +63,9 @@
:operations="operationsArr"
@edit="handleAdd"
@viewFile="viewFile"
- v-if="tabName !== 'qrCodeScanRecord'"
+ v-if="tabName === 'task'"
></ETable>
- <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" border v-else style="width: 100%;height: calc(100vh - 27em)">
+ <el-table ref="table" :data="tableData" height="480" v-loading="tableLoading" border v-else style="width: 100%;height: calc(100vh - 25em)">
<el-table-column label="搴忓彿" type="index" width="60" align="center" />
<el-table-column prop="deviceName" label="璁惧鍚嶇О" :show-overflow-tooltip="true">
<template #default="scope">
@@ -103,7 +111,12 @@
import ETable from "@/components/Table/ETable.vue";
import FormDia from "@/views/inspectionManagement/components/formDia.vue";
import QrCodeDia from "@/views/inspectionManagement/components/qrCodeDia.vue";
-import {delInspectionTask, inspectionTaskList} from "@/api/inspectionManagement/index.js";
+import {
+ delInspectionTask,
+ delTimingTask,
+ inspectionTaskList,
+ timingTaskList
+} from "@/api/inspectionManagement/index.js";
import ViewFiles from "@/views/inspectionManagement/components/viewFiles.vue";
import {delQrCode, qrCodeList, qrCodeScanRecordList} from "@/api/inspectionUpload/index.js";
import ViewQrCodeFiles from "@/views/inspectionManagement/components/viewQrCodeFiles.vue";
@@ -122,9 +135,15 @@
const tabName = ref("task");
// 鏍囩椤垫暟鎹�
const tabs = reactive([
- { name: "task", label: "浠诲姟涓嬪彂" },
- { name: "qrCode", label: "浜岀淮鐮佺鐞�" },
+ { name: "task", label: "鐢熶骇宸℃" },
{ name: "qrCodeScanRecord", label: "鐜板満宸℃璁板綍" },
+]);
+// 鍗曢�夋
+const activeRadio = ref("taskManage");
+const radios = reactive([
+ { name: "taskManage", label: "瀹氭椂浠诲姟绠$悊" },
+ { name: "task", label: "瀹氭椂浠诲姟璁板綍" },
+ { name: "qrCode", label: "浜岀淮鐮佺鐞�" },
]);
// 琛ㄦ牸
const selectedRows = ref([]);
@@ -140,6 +159,8 @@
{ prop: "port", label: "鍦扮偣", minWidth: 120 },
{ prop: "remarks", label: "澶囨敞", minWidth: 150 },
{ prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 150 },
+ { prop: "inspector", label: "棰戞", minWidth: 150 },
+ { prop: "inspector", label: "寮�濮嬫棩鏈�", minWidth: 150 },
{ prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
{ prop: "createTime", label: "鐧昏鏃ユ湡", minWidth: 100 },
]);
@@ -151,21 +172,24 @@
]);
onMounted(() => {
- handleTabClick({ props: { name: "task" } });
+ radioChange('taskManage');
});
// 鏍囩椤电偣鍑�
const handleTabClick = (tab) => {
tabName.value = tab.props.name;
tableData.value = [];
- if (tabName.value === "task") {
- tableColumns.value = columns.value;
- operationsArr.value = ['edit', 'viewFile']
- } else {
- tableColumns.value = columns1.value;
- operationsArr.value = ['edit']
- }
getList();
};
+const radioChange = (value) => {
+ if (value !== "task") {
+ tableColumns.value = columns.value;
+ operationsArr.value = ['edit']
+ } else {
+ tableColumns.value = columns1.value;
+ operationsArr.value = ['viewFile']
+ }
+ getList();
+}
// 鐐瑰嚮鏌ヨ
const handleQuery = () => {
pageNum.value = 1
@@ -174,18 +198,26 @@
}
const getList = () => {
tableLoading.value = true;
- if (tabName.value === "task") {
- inspectionTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- total.value = res.data.total;
- })
- } else if (tabName.value === "qrCode") {
- qrCodeList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- total.value = res.data.total;
- })
+ if (tabName.value === 'task') {
+ if (activeRadio.value === "task") {
+ inspectionTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+ tableLoading.value = false;
+ tableData.value = res.data.records;
+ total.value = res.data.total;
+ })
+ } else if (activeRadio.value === "qrCode") {
+ qrCodeList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+ tableLoading.value = false;
+ tableData.value = res.data.records;
+ total.value = res.data.total;
+ })
+ } else {
+ timingTaskList({...queryParams, size: pageSize.value, current: pageNum.value}).then(res => {
+ tableLoading.value = false;
+ tableData.value = res.data.records;
+ total.value = res.data.total;
+ })
+ }
} else {
qrCodeScanRecordList({size: pageSize.value, current: pageNum.value}).then(res => {
tableLoading.value = false;
@@ -193,6 +225,7 @@
total.value = res.data.total;
})
}
+
};
// 閲嶇疆鏌ヨ
@@ -209,10 +242,12 @@
const handleAdd = (row) => {
const type = row === undefined ? 'add' : 'edit'
nextTick(() => {
- if (tabName.value === "task") {
- formDia.value?.openDialog(type, row)
- } else if (tabName.value === "qrCode") {
- qrCodeDia.value?.openDialog(type, row)
+ if (tabName.value === 'task') {
+ if (activeRadio.value === "taskManage") {
+ formDia.value?.openDialog(type, row)
+ } else if (activeRadio.value === "qrCode") {
+ qrCodeDia.value?.openDialog(type, row)
+ }
} else {
viewQrCodeFiles.value?.openDialog(row)
}
@@ -232,8 +267,8 @@
}
const deleteIds = selectedRows.value.map(item => item.id);
proxy.$modal.confirm('鏄惁纭鍒犻櫎鎵�閫夋暟鎹」锛�').then(function() {
- if (tabName.value === "task") {
- return delInspectionTask(deleteIds)
+ if (activeRadio.value === "taskManage") {
+ return delTimingTask(deleteIds)
} else {
return delQrCode(deleteIds)
}
--
Gitblit v1.9.3