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