| src/api/environmentAccess/accessVehicle.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/api/environmentAccess/inspection.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/environmentAccess/accessManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/environmentAccess/intelligentInspectionManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/environmentAccess/accessVehicle.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ import request from "@/utils/request"; // ===== é¨ç¦è½¦è¾/ç§»å¨æºæ¢°å°è´¦ ===== export function listVehicle(query) { return request({ url: "/environmentAccess/vehicle/page", method: "get", params: query }); } export function addVehicle(data) { return request({ url: "/environmentAccess/vehicle/add", method: "post", data }); } export function updateVehicle(data) { return request({ url: "/environmentAccess/vehicle/update", method: "post", data }); } export function deleteVehicle(ids) { return request({ url: "/environmentAccess/vehicle/delete", method: "delete", data: ids }); } // ===== è®¾å¤æ éï¼å¤ç¨ device 模å /defectï¼===== export function listDefect(query) { return request({ url: "/defect/page", method: "get", params: query }); } export function addDefect(data) { return request({ url: "/defect/add", method: "post", data }); } export function updateDefect(data) { return request({ url: "/defect/update", method: "post", data }); } export function deleteDefect(ids) { return request({ url: "/defect/delete", method: "delete", data: ids }); } src/api/environmentAccess/inspection.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ import request from "@/utils/request"; // ===== æºè½å·¡æ£å°è´¦ ===== export function listInspection(query) { return request({ url: "/environmentAccess/inspection/page", method: "get", params: query }); } export function addInspection(data) { return request({ url: "/environmentAccess/inspection/add", method: "post", data }); } export function updateInspection(data) { return request({ url: "/environmentAccess/inspection/update", method: "post", data }); } export function deleteInspection(ids) { return request({ url: "/environmentAccess/inspection/delete", method: "delete", data: ids }); } // èªå¨çæå·¡æ£æ¥å export function generateInspectionReport(id) { return request({ url: "/environmentAccess/inspection/report/" + id, method: "get" }); } src/views/environmentAccess/accessManagement/index.vue
@@ -1,512 +1,242 @@ <template> <div class="app-container"> <div class="search_form"> <div> <span class="search_title">é¨ç¦åç§°ï¼</span> <el-input v-model="searchForm.customerName" style="width: 240px" placeholder="请è¾å ¥" @change="handleQuery" clearable :prefix-icon="Search" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px" >æç´¢</el-button > <el-tabs v-model="activeTab" @tab-change="handleTabChange"> <el-tab-pane label="è¿åºå车è¾" name="1" /> <el-tab-pane label="åå 车è¾ä½¿ç¨" name="2" /> <el-tab-pane label="ééè·¯ç§»å¨æºæ¢°" name="3" /> <el-tab-pane label="è®¾å¤æ é" name="defect" /> </el-tabs> <!-- 车è¾/æºæ¢° --> <template v-if="activeTab !== 'defect'"> <div class="search_form"> <div> <span class="search_title">车ç/æºæ¢°ç¼å·ï¼</span> <el-input v-model="searchForm.plateNo" style="width: 200px" placeholder="请è¾å ¥" clearable @change="handleQuery" /> <span class="search_title ml10">使ç¨äººï¼</span> <el-input v-model="searchForm.driverName" style="width: 160px" placeholder="请è¾å ¥" clearable @change="handleQuery" /> <span class="search_title ml10">æ¶é´ï¼</span> <el-date-picker v-model="searchForm.dateRange" type="daterange" value-format="YYYY-MM-DD" format="YYYY-MM-DD" start-placeholder="å¼å§" end-placeholder="ç»æ" clearable @change="changeRange" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> </div> <div> <el-button type="primary" @click="openForm('add')">æ°å¢</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> </div> </div> <div> <el-button type="primary" @click="openForm('add')">æ°å¢</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> <div class="table_list"> <PIMTable rowKey="id" :column="vehicleColumns" :tableData="tableData" :page="page" :isSelection="true" @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"></PIMTable> </div> </div> <div class="table_list"> <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination" ></PIMTable> </div> <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? 'æ°å¢é¨ç¦ä¿¡æ¯' : 'ç¼è¾é¨ç¦ä¿¡æ¯'" width="70%" @close="closeDia" > <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef" > </template> <!-- è®¾å¤æ é --> <template v-else> <div class="search_form"> <div> <span class="search_title">设å¤å°è´¦IDï¼</span> <el-input v-model="defectSearch.deviceLedgerId" style="width: 200px" placeholder="请è¾å ¥" clearable @change="handleQuery" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> </div> <div> <el-button type="primary" @click="openDefect('add')">æ°å¢</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> </div> </div> <div class="table_list"> <PIMTable rowKey="id" :column="defectColumns" :tableData="tableData" :page="page" :isSelection="true" @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"></PIMTable> </div> </template> <!-- 车è¾å¼¹çª --> <el-dialog v-model="dialogVisible" :title="operationType === 'add' ? 'æ°å¢' : 'ç¼è¾'" width="60%" @close="closeDia"> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="é¨ç¦åç§°ï¼" prop="customerName"> <el-input v-model="form.customerName" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="åºåï¼" prop="taxpayerIdentificationNumber" > <el-input v-model="form.taxpayerIdentificationNumber" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"><el-form-item label="车ç/æºæ¢°ç¼å·ï¼" prop="plateNo"><el-input v-model="form.plateNo" placeholder="请è¾å ¥" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="车è¾/æºæ¢°åå·ï¼" prop="vehicleModel"><el-input v-model="form.vehicleModel" placeholder="请è¾å ¥" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ä½ç½®ï¼" prop="companyAddress"> <el-input v-model="form.companyAddress" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"><el-form-item label="使ç¨äººï¼" prop="driverName"><el-input v-model="form.driverName" placeholder="请è¾å ¥" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="èç³»çµè¯ï¼" prop="driverPhone"><el-input v-model="form.driverPhone" placeholder="请è¾å ¥" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="ç»´æ¤äººï¼" prop="maintainer"> <el-select v-model="form.maintainer" placeholder="è¯·éæ©" clearable disabled > <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="ç»´æ¤æ¶é´ï¼" prop="maintenanceTime"> <el-date-picker style="width: 100%" v-model="form.maintenanceTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="è¯·éæ©" clearable disabled /> </el-form-item> </el-col> <el-col :span="12"><el-form-item label="ç¨éï¼" prop="usePurpose"><el-input v-model="form.usePurpose" placeholder="请è¾å ¥" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="æ¶é´ï¼" prop="occurTime"> <el-date-picker v-model="form.occurTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" placeholder="è¯·éæ©" style="width:100%" /> </el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12" v-if="activeTab === '1'"><el-form-item label="æ¹åï¼" prop="direction"> <el-select v-model="form.direction" placeholder="è¯·éæ©" style="width:100%"> <el-option label="è¿å" :value="1" /><el-option label="åºå" :value="0" /> </el-select> </el-form-item></el-col> <el-col :span="12"><el-form-item label="ç¶æï¼" prop="status"><el-input v-model="form.status" placeholder="请è¾å ¥" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="24"><el-form-item label="夿³¨ï¼" prop="remark"><el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请è¾å ¥" /></el-form-item></el-col> </el-row> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitForm">确认</el-button> <el-button @click="closeDia">åæ¶</el-button> </div> <el-button type="primary" @click="submitForm">确认</el-button> <el-button @click="closeDia">åæ¶</el-button> </template> </el-dialog> <!-- ç¨æ·å¯¼å ¥å¯¹è¯æ¡ --> <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body > <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :before-upload="upload.beforeUpload" :on-progress="upload.onProgress" :on-success="upload.onSuccess" :on-error="upload.onError" :on-change="upload.onChange" :auto-upload="false" drag > <el-icon class="el-icon--upload"><upload-filled /></el-icon> <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> <template #tip> <div class="el-upload__tip text-center"> <span>ä» å è®¸å¯¼å ¥xlsãxlsxæ ¼å¼æä»¶ã</span> <!-- <el-link--> <!-- type="primary"--> <!-- :underline="false"--> <!-- style="font-size: 12px; vertical-align: baseline"--> <!-- @click="importTemplate"--> <!-- >ä¸è½½æ¨¡æ¿</el-link--> <!-- >--> </div> </template> </el-upload> <!-- è®¾å¤æ éå¼¹çª --> <el-dialog v-model="defectVisible" :title="defectType === 'add' ? 'æ°å¢è®¾å¤æ é' : 'ç¼è¾è®¾å¤æ é'" width="50%"> <el-form :model="defectForm" label-width="140px" label-position="top"> <el-form-item label="设å¤å°è´¦IDï¼"><el-input-number v-model="defectForm.deviceLedgerId" :min="0" style="width:100%" /></el-form-item> <el-form-item label="ç¼ºé·æè¿°ï¼"><el-input v-model="defectForm.defectDescription" type="textarea" :rows="3" /></el-form-item> <el-form-item label="ç¶æï¼"> <el-select v-model="defectForm.status" style="width:100%"> <el-option label="æªæ¶é¤" value="0" /><el-option label="å·²æ¶é¤" value="1" /> </el-select> </el-form-item> <el-form-item label="æ¶é¤æ¶é´ï¼"><el-date-picker v-model="defectForm.eliminateTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" style="width:100%" /></el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitFileForm">ç¡® å®</el-button> <el-button @click="upload.open = false">å æ¶</el-button> </div> <el-button type="primary" @click="submitDefect">确认</el-button> <el-button @click="defectVisible = false">åæ¶</el-button> </template> </el-dialog> </div> </template> <script setup> import {onMounted, ref} from "vue"; import { Search } from "@element-plus/icons-vue"; import { addCustomer, delCustomer, getCustomer, listCustomer, updateCustomer, } from "@/api/basicData/customerFile.js"; import { ref, reactive, toRefs, onMounted, getCurrentInstance } from "vue"; import { ElMessageBox } from "element-plus"; import { userListNoPage } from "@/api/system/user.js"; import useUserStore from "@/store/modules/user"; import { getToken } from "@/utils/auth.js"; const { proxy } = getCurrentInstance(); const userStore = useUserStore(); import { listVehicle, addVehicle, updateVehicle, deleteVehicle, listDefect, addDefect, updateDefect, deleteDefect, } from "@/api/environmentAccess/accessVehicle.js"; const tableColumn = ref([ const { proxy } = getCurrentInstance(); const activeTab = ref("1"); const dirText = (d) => (d == 1 ? "è¿å" : d == 0 ? "åºå" : ""); const defectStatusText = (s) => (s == 0 ? "æªæ¶é¤" : s == 1 ? "å·²æ¶é¤" : (s ?? "")); const vehicleColumns = ref([ { label: "车ç/æºæ¢°ç¼å·", prop: "plateNo" }, { label: "车è¾/æºæ¢°åå·", prop: "vehicleModel" }, { label: "使ç¨äºº", prop: "driverName" }, { label: "èç³»çµè¯", prop: "driverPhone", width: 140 }, { label: "ç¨é", prop: "usePurpose" }, { label: "æ¶é´", prop: "occurTime", width: 170 }, { label: "æ¹å", prop: "direction", width: 80, dataType: "tag", formatData: (p) => dirText(p), formatType: () => "primary" }, { label: "ç¶æ", prop: "status", width: 90 }, { label: "夿³¨", prop: "remark", showOverflowTooltip: true }, { label: "é¨ç¦åç§°", prop: "customerName", width: 220, }, { label: "åºå", prop: "taxpayerIdentificationNumber", width: 220, }, { label: "ä½ç½®", prop: "companyAddress", width: 220, }, { label: "ç»´æ¤äºº", prop: "maintainer", }, { label: "ç»´æ¤æ¶é´", prop: "maintenanceTime", width: 100, }, { dataType: "action", label: "æä½", align: "center", fixed: 'right', operation: [ { name: "ç¼è¾", type: "text", clickFun: (row) => { openForm("edit", row); }, disabled: (row) => { return row.maintainer !== userStore.nickName } }, ], dataType: "action", label: "æä½", align: "center", fixed: "right", width: 100, operation: [{ name: "ç¼è¾", type: "text", clickFun: (row) => openForm("edit", row) }], }, ]); const defectColumns = ref([ { label: "设å¤å°è´¦ID", prop: "deviceLedgerId", width: 120 }, { label: "ç¼ºé·æè¿°", prop: "defectDescription", showOverflowTooltip: true }, { label: "ç¶æ", prop: "status", width: 100, dataType: "tag", formatData: (p) => defectStatusText(p), formatType: (p) => (p == 1 ? "success" : "danger") }, { label: "æ¶é¤æ¶é´", prop: "eliminateTime", width: 170 }, { label: "å建æ¶é´", prop: "createTime", width: 170 }, { dataType: "action", label: "æä½", align: "center", fixed: "right", width: 100, operation: [{ name: "ç¼è¾", type: "text", clickFun: (row) => openDefect("edit", row) }], }, ]); const data = reactive({ searchForm: { plateNo: "", driverName: "", dateRange: [], entryDateStart: "", entryDateEnd: "" } }); const { searchForm } = toRefs(data); const defectSearch = ref({ deviceLedgerId: "" }); const tableData = ref([]); const selectedRows = ref([]); const userList = ref([]); const tableLoading = ref(false); const page = reactive({ current: 1, size: 100, total: 0, }); const total = ref(0); const page = reactive({ current: 1, size: 100, total: 0 }); // ç¨æ·ä¿¡æ¯è¡¨åå¼¹æ¡æ°æ® const operationType = ref(""); const dialogFormVisible = ref(false); const formYYs = ref({ // å ¶ä»å段... contactList: [ { contactPerson: "", contactPhone: "" } ] }); const data = reactive({ searchForm: { customerName: "", }, form: { customerName: "", taxpayerIdentificationNumber: "", companyAddress: "", companyPhone: "", contactPerson: "", contactPhone: "", maintainer: "", maintenanceTime: "", basicBankAccount: "", bankAccount: "", bankCode: "", }, rules: { customerName: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], taxpayerIdentificationNumber: [ { required: true, message: "请è¾å ¥", trigger: "blur" }, ], companyAddress: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], companyPhone: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], // contactPerson: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], // contactPhone: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], maintainer: [{ required: false, message: "è¯·éæ©", trigger: "change" }], maintenanceTime: [ { required: false, message: "è¯·éæ©", trigger: "change" }, ], basicBankAccount: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], bankAccount: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], bankCode: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], }, }); const upload = reactive({ // æ¯å¦æ¾ç¤ºå¼¹åºå±ï¼å®¢æ·å¯¼å ¥ï¼ open: false, // å¼¹åºå±æ é¢ï¼å®¢æ·å¯¼å ¥ï¼ title: "", // æ¯å¦ç¦ç¨ä¸ä¼ isUploading: false, // 设置ä¸ä¼ ç请æ±å¤´é¨ headers: { Authorization: "Bearer " + getToken() }, // ä¸ä¼ çå°å url: import.meta.env.VITE_APP_BASE_API + "/basic/customer/importData", // æä»¶ä¸ä¼ åçåè° beforeUpload: (file) => { console.log('æä»¶å³å°ä¸ä¼ ', file); // å¯ä»¥å¨æ¤å¤åæä»¶ç±»åæå¤§å°æ ¡éª const isValid = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.name.endsWith('.xlsx') || file.name.endsWith('.xls'); if (!isValid) { proxy.$modal.msgError("åªè½ä¸ä¼ Excel æä»¶"); } return isValid; }, // æä»¶ç¶ææ¹åæ¶çåè° onChange: (file, fileList) => { console.log('æä»¶ç¶ææ¹å', file, fileList); }, // æä»¶ä¸ä¼ æåæ¶çåè° onSuccess: (response, file, fileList) => { console.log('ä¸ä¼ æå', response, file, fileList); if(response.code === 200){ proxy.$modal.msgSuccess("æä»¶ä¸ä¼ æå"); }else if(response.code === 500){ proxy.$modal.msgError(response.msg); }else{ proxy.$modal.msgWarning(response.msg); } }, // æä»¶ä¸ä¼ 失败æ¶çåè° onError: (error, file, fileList) => { console.error('ä¸ä¼ 失败', error, file, fileList); proxy.$modal.msgError("æä»¶ä¸ä¼ 失败"); }, // æä»¶ä¸ä¼ è¿åº¦åè° onProgress: (event, file, fileList) => { console.log('ä¸ä¼ ä¸...', event.percent); } }); const { searchForm, form, rules } = toRefs(data); const addNewContact = () => { formYYs.value.contactList.push({ contactPerson: "", contactPhone: "" }); }; // 车è¾å¼¹çª const dialogVisible = ref(false); const operationType = ref("add"); const formRef = ref(); const form = ref({}); const rules = { plateNo: [{ required: true, message: "请è¾å ¥è½¦ç/æºæ¢°ç¼å·", trigger: "blur" }] }; const removeContact = (index) => { if (formYYs.value.contactList.length > 1) { formYYs.value.contactList.splice(index, 1); } }; // æ¥è¯¢å表 /** æç´¢æé®æä½ */ const handleQuery = () => { page.current = 1; // æ éå¼¹çª const defectVisible = ref(false); const defectType = ref("add"); const defectForm = ref({}); const changeRange = (v) => { searchForm.value.entryDateStart = v?.[0] || ""; searchForm.value.entryDateEnd = v?.[1] || ""; getList(); }; const pagination = (obj) => { page.current = obj.page; page.size = obj.limit; getList(); }; const handleTabChange = () => { page.current = 1; getList(); }; const handleQuery = () => { page.current = 1; getList(); }; const pagination = (obj) => { page.current = obj.page; page.size = obj.limit; getList(); }; const handleSelectionChange = (s) => { selectedRows.value = s; }; const getList = () => { tableLoading.value = true; listCustomer({ ...searchForm.value, ...page }).then((res) => { tableLoading.value = false; tableData.value = res.records; page.total = res.total; }); if (activeTab.value === "defect") { listDefect({ ...defectSearch.value, ...page }).then((res) => { tableLoading.value = false; tableData.value = res.data.records; page.total = res.data.total; }).catch(() => { tableLoading.value = false; }); } else { const p = { ...searchForm.value, vehicleType: Number(activeTab.value), ...page }; delete p.dateRange; listVehicle(p).then((res) => { tableLoading.value = false; tableData.value = res.data.records; page.total = res.data.total; }).catch(() => { tableLoading.value = false; }); } }; // è¡¨æ ¼éæ©æ°æ® const handleSelectionChange = (selection) => { selectedRows.value = selection; }; /** æäº¤ä¸ä¼ æä»¶ */ function submitFileForm() { proxy.$refs["uploadRef"].submit(); } /** å¯¼å ¥æé®æä½ */ function handleImport() { upload.title = "客æ·å¯¼å ¥"; upload.open = true; } // æå¼å¼¹æ¡ const openForm = (type, row) => { operationType.value = type; form.value = {}; form.value.maintainer = userStore.nickName; formYYs.value.contactList = [ { contactPerson: "", contactPhone: "" } ]; form.value.maintenanceTime = getCurrentDate(); userListNoPage().then((res) => { userList.value = res.data; }); if (type === "edit") { getCustomer(row.id).then((res) => { form.value = { ...res.data }; formYYs.value.contactList = res.data.contactPerson.split(",").map((item, index) => { return { contactPerson: item, contactPhone: res.data.contactPhone.split(",")[index] } }); }); } dialogFormVisible.value = true; form.value = type === "add" ? { vehicleType: Number(activeTab.value) } : { ...row }; dialogVisible.value = true; }; // æäº¤è¡¨å const closeDia = () => { proxy.resetForm("formRef"); dialogVisible.value = false; }; const submitForm = () => { proxy.$refs["formRef"].validate((valid) => { if (valid) { if (operationType.value === "edit") { submitEdit(); } else { submitAdd(); } } formRef.value.validate((valid) => { if (!valid) return; form.value.vehicleType = Number(activeTab.value); const p = operationType.value === "add" ? addVehicle(form.value) : updateVehicle(form.value); p.then(() => { proxy.$modal.msgSuccess("æäº¤æå"); closeDia(); getList(); }); }); }; // æäº¤æ°å¢ const submitAdd = () => { if(formYYs.value.contactList.length < 1){ return proxy.$modal.msgWarning("请è³å°æ·»å ä¸ä¸ªè系人"); } form.value.contactPerson = formYYs.value.contactList.map(item => item.contactPerson).join(","); form.value.contactPhone = formYYs.value.contactList.map(item => item.contactPhone).join(","); addCustomer(form.value).then((res) => { proxy.$modal.msgSuccess("æäº¤æå"); closeDia(); getList(); }); const openDefect = (type, row) => { defectType.value = type; defectForm.value = type === "add" ? { status: "0" } : { ...row }; defectVisible.value = true; }; // æäº¤ä¿®æ¹ const submitEdit = () => { form.value.contactPerson = formYYs.value.contactList.map(item => item.contactPerson).join(","); form.value.contactPhone = formYYs.value.contactList.map(item => item.contactPhone).join(","); updateCustomer(form.value).then((res) => { proxy.$modal.msgSuccess("æäº¤æå"); closeDia(); getList(); }); const submitDefect = () => { const p = defectType.value === "add" ? addDefect(defectForm.value) : updateDefect(defectForm.value); p.then(() => { proxy.$modal.msgSuccess("æäº¤æå"); defectVisible.value = false; getList(); }); }; // å ³éå¼¹æ¡ const closeDia = () => { proxy.resetForm("formRef"); dialogFormVisible.value = false; }; // å¯¼åº const handleOut = () => { ElMessageBox.confirm("éä¸çå 容å°è¢«å¯¼åºï¼æ¯å¦ç¡®è®¤å¯¼åºï¼", "导åº", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning", }) .then(() => { proxy.download("/basic/customer/export", {}, "å®¢æ·æ¡£æ¡.xlsx"); }) .catch(() => { proxy.$modal.msg("已忶"); }); }; // å é¤ const handleDelete = () => { let ids = []; if (selectedRows.value.length > 0) { // æ£æ¥æ¯å¦æä»äººç»´æ¤çæ°æ® const unauthorizedData = selectedRows.value.filter(item => item.maintainer !== userStore.nickName); if (unauthorizedData.length > 0) { proxy.$modal.msgWarning("ä¸å¯å é¤ä»äººç»´æ¤çæ°æ®"); return; } ids = selectedRows.value.map((item) => item.id); } else { proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); return; } ElMessageBox.confirm("éä¸çå 容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "å é¤æç¤º", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning", }) .then(() => { tableLoading.value = true; delCustomer(ids) .then((res) => { proxy.$modal.msgSuccess("å 餿å"); getList(); }) .finally(() => { tableLoading.value = false; }); }) .catch(() => { proxy.$modal.msg("已忶"); }); if (!selectedRows.value.length) { proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); return; } const ids = selectedRows.value.map((i) => i.id); ElMessageBox.confirm("æ¯å¦ç¡®è®¤å é¤ï¼", "å é¤", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning" }) .then(() => { const p = activeTab.value === "defect" ? deleteDefect(ids) : deleteVehicle(ids); p.then(() => { proxy.$modal.msgSuccess("å 餿å"); getList(); }); }).catch(() => {}); }; // è·åå½åæ¥æå¹¶æ ¼å¼å为 YYYY-MM-DD function getCurrentDate() { const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, "0"); // æä»½ä»0å¼å§ const day = String(today.getDate()).padStart(2, "0"); return `${year}-${month}-${day}`; } onMounted(() => { getList(); }); onMounted(() => { getList(); }); </script> <style scoped lang="scss"></style> <style scoped lang="scss"> .ml10 { margin-left: 10px; } .table_list { margin-top: unset; } </style> src/views/environmentAccess/intelligentInspectionManagement/index.vue
@@ -3,464 +3,193 @@ <div class="search_form"> <div> <span class="search_title">å·¡æ£åç§°ï¼</span> <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="è¾å ¥å·¡æ£åç§°æç´¢" @change="handleQuery" clearable :prefix-icon="Search" /> <el-button type="primary" @click="handleQuery" style="margin-left: 10px" >æç´¢</el-button > <el-input v-model="searchForm.inspectionName" style="width: 200px" placeholder="请è¾å ¥" clearable @change="handleQuery" /> <span class="search_title ml10">å·¡æ£ç±»åï¼</span> <el-select v-model="searchForm.inspectionType" style="width: 140px" placeholder="å ¨é¨" clearable @change="handleQuery"> <el-option label="宿巡æ£" :value="1" /><el-option label="临æ¶å·¡æ£" :value="2" /><el-option label="æ éå·¡æ£" :value="3" /> </el-select> <span class="search_title ml10">ç¶æï¼</span> <el-select v-model="searchForm.status" style="width: 120px" placeholder="å ¨é¨" clearable @change="handleQuery"> <el-option label="å¾ æ§è¡" :value="0" /><el-option label="æ§è¡ä¸" :value="1" /><el-option label="已宿" :value="2" /><el-option label="已忶" :value="3" /> </el-select> <el-button type="primary" @click="handleQuery" style="margin-left: 10px">æç´¢</el-button> </div> <div> <el-button type="primary" @click="openForm('add')" >æ°å¢</el-button> <el-button type="primary" @click="openForm('add')">æ°å¢å·¡æ£</el-button> <el-button @click="handleOut">导åº</el-button> <el-button type="danger" plain @click="handleDelete">å é¤</el-button> </div> </div> <div class="table_list"> <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination" ></PIMTable> <PIMTable rowKey="id" :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" @selection-change="handleSelectionChange" :tableLoading="tableLoading" @pagination="pagination"></PIMTable> </div> <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? 'æ°å¢å·¡æ£ä¿¡æ¯' : 'ç¼è¾å·¡æ£ä¿¡æ¯'" width="70%" @close="closeDia" > <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef" > <el-dialog v-model="dialogVisible" :title="operationType === 'add' ? 'æ°å¢å·¡æ£' : 'ç¼è¾å·¡æ£'" width="70%" @close="closeDia"> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å·¡æ£åç§°ï¼" prop="supplierName"> <el-input v-model="form.supplierName" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å·¡æ£ç±»åï¼" prop="taxpayerIdentificationNum" > <el-select style="width:100%" v-model="form.taxpayerIdentificationNum" clearable> <el-option v-for="(item,index) in typeList" :key="index" :label="item.label" :value="item.value"/> </el-select> </el-form-item> </el-col> <el-col :span="12"><el-form-item label="å·¡æ£åç§°ï¼" prop="inspectionName"><el-input v-model="form.inspectionName" placeholder="请è¾å ¥" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="å·¡æ£ç±»åï¼" prop="inspectionType"> <el-select v-model="form.inspectionType" placeholder="è¯·éæ©" style="width:100%"> <el-option label="宿巡æ£" :value="1" /><el-option label="临æ¶å·¡æ£" :value="2" /><el-option label="æ éå·¡æ£" :value="3" /> </el-select> </el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å·¡æ£åºåï¼" prop="companyAddress"> <el-input v-model="form.companyAddress" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="计åå¼å§æ¶é´ï¼" prop="companyPhone"> <el-date-picker style="width:100%" clearable value-format="YYYY-MM-DD" type="date" placeholder="éæ©æ¥ææ¶é´" v-model="form.companyPhone"></el-date-picker> </el-form-item> </el-col> <el-col :span="12"><el-form-item label="å·¡æ£åºåï¼" prop="area"><el-input v-model="form.area" placeholder="请è¾å ¥" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="å·¡æ£äººåï¼" prop="inspector"><el-input v-model="form.inspector" placeholder="请è¾å ¥" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="计åç»ææ¶é´ï¼" prop="bankAccountName"> <el-date-picker style="width:100%" clearable value-format="YYYY-MM-DD" type="date" placeholder="éæ©æ¥ææ¶é´" v-model="form.bankAccountName"></el-date-picker> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å®é å¼å§æ¶é´ï¼" prop="bankAccountNum"> <el-date-picker style="width:100%" clearable value-format="YYYY-MM-DD" type="date" placeholder="éæ©æ¥ææ¶é´" v-model="form.bankAccountNum"></el-date-picker> </el-form-item> </el-col> <el-col :span="24"><el-form-item label="å·¡æ£è·¯å¾è§åï¼" prop="routePlan"> <el-input v-model="form.routePlan" type="textarea" :rows="2" placeholder="请è¾å ¥å·¡æ£è·¯å¾è§å" /> </el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="å®é ç»ææ¶é´ï¼" prop="contactUserName"> <el-date-picker style="width:100%" clearable value-format="YYYY-MM-DD" type="date" placeholder="éæ©æ¥ææ¶é´" v-model="form.contactUserName"></el-date-picker> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="å·¡æ£äººåï¼" prop="contactUserPhone"> <el-input v-model="form.contactUserPhone" placeholder="请è¾å ¥" clearable /> </el-form-item> </el-col> <el-col :span="12"><el-form-item label="计åå¼å§ï¼" prop="planStartTime"><el-date-picker v-model="form.planStartTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" style="width:100%" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="计åç»æï¼" prop="planEndTime"><el-date-picker v-model="form.planEndTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" style="width:100%" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"><el-form-item label="å®é å¼å§ï¼"><el-date-picker v-model="form.actualStartTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" style="width:100%" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="å®é ç»æï¼"><el-date-picker v-model="form.actualEndTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" style="width:100%" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"><el-form-item label="ç¶æï¼"><el-select v-model="form.status" style="width:100%"> <el-option label="å¾ æ§è¡" :value="0" /><el-option label="æ§è¡ä¸" :value="1" /><el-option label="已宿" :value="2" /><el-option label="已忶" :value="3" /> </el-select></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="24"><el-form-item label="å·¡æ£ç»æ/è®°å½ï¼"><el-input v-model="form.inspectionResult" type="textarea" :rows="2" placeholder="请è¾å ¥å·¡æ£ç»æ" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"><el-form-item label="AIè§é¢åæç»æï¼"><el-input v-model="form.aiAnalysis" type="textarea" :rows="2" placeholder="é¢çï¼AIè§é¢åæç»æ" /></el-form-item></el-col> <el-col :span="12"><el-form-item label="æ 人æº/æºå¨äººæ°æ®ï¼"><el-input v-model="form.uavData" type="textarea" :rows="2" placeholder="é¢çï¼æ 人æº/æºå¨äººåä¼ æ°æ®" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="24"><el-form-item label="å·¡æ£æ¥åï¼"><el-input v-model="form.reportPath" type="textarea" :rows="2" placeholder="èªå¨çæ/å¡«åå·¡æ£æ¥å" /></el-form-item></el-col> </el-row> <el-row :gutter="30"> <el-col :span="24"><el-form-item label="夿³¨ï¼"><el-input v-model="form.remark" type="textarea" :rows="2" placeholder="请è¾å ¥" /></el-form-item></el-col> </el-row> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitForm">确认</el-button> <el-button @click="closeDia">åæ¶</el-button> </div> <el-button type="primary" @click="submitForm">确认</el-button> <el-button @click="closeDia">åæ¶</el-button> </template> </el-dialog> <!-- ä¾åºåå¯¼å ¥å¯¹è¯æ¡ --> <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body > <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag > <el-icon class="el-icon--upload"><upload-filled /></el-icon> <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> <template #tip> <div class="el-upload__tip text-center"> <span>ä» å è®¸å¯¼å ¥xlsãxlsxæ ¼å¼æä»¶ã</span> <!-- <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate" >ä¸è½½æ¨¡æ¿</el-link > --> </div> </template> </el-upload> <!-- å·¡æ£æ¥å --> <el-dialog v-model="reportVisible" :title="reportTitle" width="70%"> <div v-html="reportContent" style="line-height: 1.8"></div> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitFileForm">ç¡® å®</el-button> <el-button @click="upload.open = false">å æ¶</el-button> </div> <el-button type="primary" @click="downloadReport">ä¸è½½æ¥å</el-button> <el-button @click="reportVisible = false">å ³é</el-button> </template> </el-dialog> </div> </template> <script setup> import { onMounted, ref } from "vue"; import { Search } from "@element-plus/icons-vue"; import { delSupplier } from "@/api/basicData/supplierManageFile.js"; import { ref, reactive, toRefs, onMounted, getCurrentInstance } from "vue"; import { ElMessageBox } from "element-plus"; import { userListNoPage } from "@/api/system/user.js"; import { addSupplier, getSupplier, listSupplier, updateSupplier, } from "@/api/basicData/supplierManageFile.js"; import useUserStore from "@/store/modules/user"; import { getToken } from "@/utils/auth.js"; import { listInspection, addInspection, updateInspection, deleteInspection, generateInspectionReport } from "@/api/environmentAccess/inspection.js"; const { proxy } = getCurrentInstance(); const userStore = useUserStore(); const typeText = (t) => (t == 1 ? "宿巡æ£" : t == 2 ? "临æ¶å·¡æ£" : t == 3 ? "æ éå·¡æ£" : ""); const statusText = (s) => (s == 0 ? "å¾ æ§è¡" : s == 1 ? "æ§è¡ä¸" : s == 2 ? "已宿" : s == 3 ? "已忶" : ""); const statusType = (s) => (s == 0 ? "info" : s == 1 ? "primary" : s == 2 ? "success" : s == 3 ? "danger" : ""); const data = reactive({ searchForm: { inspectionName: "", inspectionType: undefined, status: undefined } }); const { searchForm } = toRefs(data); const tableColumn = ref([ { label: "å·¡æ£åç§°", prop: "inspectionName" }, { label: "å·¡æ£ç±»å", prop: "inspectionType", width: 100, dataType: "tag", formatData: (p) => typeText(p), formatType: () => "warning" }, { label: "å·¡æ£åºå", prop: "area" }, { label: "å·¡æ£è·¯å¾è§å", prop: "routePlan", showOverflowTooltip: true }, { label: "计åå¼å§", prop: "planStartTime", width: 160 }, { label: "å·¡æ£äººå", prop: "inspector", width: 100 }, { label: "ç¶æ", prop: "status", width: 90, dataType: "tag", formatData: (p) => statusText(p), formatType: (p) => statusType(p) }, { label: "å·¡æ£ç»æ", prop: "inspectionResult", showOverflowTooltip: true }, { label: "å·¡æ£åç§°", prop: "supplierName", width: 250, }, { label: "å·¡æ£ç±»å", prop: "taxpayerIdentificationNum", width: 230, }, { label: "计åå¼å§æ¶é´", prop: "companyPhone", width:150 }, { label: "计åç»ææ¶é´", prop: "bankAccountName", width: 220, }, { label: "å®é å¼å§æ¶é´", prop: "bankAccountNum", width: 220, }, { label: "å®é ç»ææ¶é´", prop: "contactUserName", }, { label: "å·¡æ£äººå", prop: "contactUserPhone", width: 150, }, { label: "å·¡æ£åºå", prop: "companyAddress", }, { dataType: "action", label: "æä½", align: "center", fixed: 'right', dataType: "action", label: "æä½", align: "center", fixed: "right", width: 100, operation: [ { name: "ç¼è¾", type: "text", clickFun: (row) => { openForm("edit", row); }, disabled: (row) => { return row.maintainUserName !== userStore.nickName } }, { name: "ç¼è¾", type: "text", clickFun: (row) => openForm("edit", row) }, { name: "çææ¥å", type: "text", clickFun: (row) => openReport(row) }, ], }, ]); const tableData = ref([]); const selectedRows = ref([]); const userList = ref([]); const tableLoading = ref(false); const page = reactive({ current: 1, size: 100, total: 0, }); const typeList = ref([ { label: "æ¥å¸¸å·¡æ£", value: "æ¥å¸¸å·¡æ£" }, { label: "ä¸é¡¹å·¡æ£", value: "ä¸é¡¹å·¡æ£" }, { label: "临æ¶å·¡æ£", value: "临æ¶å·¡æ£" }, ]); const page = reactive({ current: 1, size: 100, total: 0 }); // ç¨æ·ä¿¡æ¯è¡¨åå¼¹æ¡æ°æ® const operationType = ref(""); const dialogFormVisible = ref(false); const data = reactive({ searchForm: { supplierName: "", }, form: { supplierName: "", taxpayerIdentificationNum: "", companyAddress: "", companyPhone: "", bankAccountName: "", bankAccountNum: "", contactUserName: "", contactUserPhone: "", maintainUserId: "", maintainTime: "", }, rules: { supplierName: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], taxpayerIdentificationNum: [ { required: true, message: "请è¾å ¥", trigger: "blur" }, ], companyAddress: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], companyPhone: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], bankAccountName: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], bankAccountNum: [{ required: true, message: "请è¾å ¥", trigger: "blur" }], contactUserName: [{ required: false, message: "请è¾å ¥", trigger: "blur" }], contactUserPhone: [{ required: false, message: "请è¾å ¥", trigger: "blur" }], maintainUserId: [{ required: false, message: "è¯·éæ©", trigger: "change" }], maintainTime: [{ required: false, message: "è¯·éæ©", trigger: "change" }], }, }); const { searchForm, form, rules } = toRefs(data); const dialogVisible = ref(false); const operationType = ref("add"); const formRef = ref(); const form = ref({}); const rules = { inspectionName: [{ required: true, message: "请è¾å ¥å·¡æ£åç§°", trigger: "blur" }] }; // æ¥è¯¢å表 /** æç´¢æé®æä½ */ const handleQuery = () => { page.current = 1; getList(); // å·¡æ£æ¥å const reportVisible = ref(false); const reportContent = ref(""); const reportTitle = ref("æºè½å·¡æ£æ¥å"); const openReport = (row) => { generateInspectionReport(row.id).then((res) => { reportContent.value = res.data; reportTitle.value = (row.inspectionName || "æºè½å·¡æ£") + " - å·¡æ£æ¥å"; reportVisible.value = true; }).catch(() => { proxy.$modal.msgError("çææ¥å失败"); }); }; const pagination = (obj) => { page.current = obj.page; page.size = obj.limit; getList(); const downloadReport = () => { const blob = new Blob([reportContent.value], { type: "application/msword" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = reportTitle.value + ".doc"; a.click(); URL.revokeObjectURL(a.href); }; /** æäº¤ä¸ä¼ æä»¶ */ function submitFileForm() { console.log(upload.url + '?updateSupport=' + upload.updateSupport) proxy.$refs["uploadRef"].submit(); } const handleQuery = () => { page.current = 1; getList(); }; const pagination = (obj) => { page.current = obj.page; page.size = obj.limit; getList(); }; const handleSelectionChange = (s) => { selectedRows.value = s; }; const getList = () => { tableLoading.value = true; listSupplier({ ...searchForm.value, ...page }).then((res) => { listInspection({ ...searchForm.value, ...page }).then((res) => { tableLoading.value = false; tableData.value = res.data.records; page.total = res.data.total; }); }).catch(() => { tableLoading.value = false; }); }; const upload = reactive({ // æ¯å¦æ¾ç¤ºå¼¹åºå±ï¼ä¾åºåå¯¼å ¥ï¼ open: false, // å¼¹åºå±æ é¢ï¼ä¾åºåå¯¼å ¥ï¼ title: "", // æ¯å¦ç¦ç¨ä¸ä¼ isUploading: false, // æ¯å¦æ´æ°å·²ç»åå¨çç¨æ·æ°æ® updateSupport: 1, // 设置ä¸ä¼ ç请æ±å¤´é¨ headers: { Authorization: "Bearer " + getToken() }, // ä¸ä¼ çå°å url: import.meta.env.VITE_APP_BASE_API + "/system/supplier/import", }); /** å¯¼å ¥æé®æä½ */ function handleImport() { upload.title = "ä¾åºåå¯¼å ¥"; upload.open = true; } /**æä»¶ä¸ä¼ ä¸å¤ç */ const handleFileUploadProgress = (event, file, fileList) => { upload.isUploading = true; }; /** æä»¶ä¸ä¼ æåå¤ç */ const handleFileSuccess = (response, file, fileList) => { upload.open = false; upload.isUploading = false; proxy.$refs["uploadRef"].handleRemove(file); getList(); }; // è¡¨æ ¼éæ©æ°æ® const handleSelectionChange = (selection) => { selectedRows.value = selection; }; // æå¼å¼¹æ¡ const openForm = (type, row) => { operationType.value = type; form.value = {}; form.value.maintainUserId = userStore.id; form.value.maintainTime = getCurrentDate(); userListNoPage().then((res) => { userList.value = res.data; }); if (type === "edit") { getSupplier(row.id).then((res) => { form.value = { ...res.data }; }); } dialogFormVisible.value = true; form.value = type === "add" ? { status: 0 } : { ...row }; dialogVisible.value = true; }; // æäº¤è¡¨å const closeDia = () => { proxy.resetForm("formRef"); dialogVisible.value = false; }; const submitForm = () => { proxy.$refs["formRef"].validate((valid) => { if (valid) { if (operationType.value === "edit") { submitEdit(); } else { submitAdd(); } } formRef.value.validate((valid) => { if (!valid) return; const p = operationType.value === "add" ? addInspection(form.value) : updateInspection(form.value); p.then(() => { proxy.$modal.msgSuccess("æäº¤æå"); closeDia(); getList(); }); }); }; // æäº¤æ°å¢ const submitAdd = () => { addSupplier(form.value).then((res) => { proxy.$modal.msgSuccess("æäº¤æå"); closeDia(); getList(); }); }; // æäº¤ä¿®æ¹ const submitEdit = () => { updateSupplier(form.value).then((res) => { proxy.$modal.msgSuccess("æäº¤æå"); closeDia(); getList(); }); }; // å ³éå¼¹æ¡ const closeDia = () => { proxy.resetForm("formRef"); dialogFormVisible.value = false; }; // å¯¼åº const handleOut = () => { ElMessageBox.confirm("éä¸çå 容å°è¢«å¯¼åºï¼æ¯å¦ç¡®è®¤å¯¼åºï¼", "导åº", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning", }) .then(() => { proxy.download("/system/supplier/export", {}, "ä¾åºåæ¡£æ¡.xlsx"); }) .catch(() => { proxy.$modal.msg("已忶"); }); }; // å é¤ const handleDelete = () => { let ids = []; if (selectedRows.value.length > 0) { // æ£æ¥æ¯å¦æä»äººç»´æ¤çæ°æ® const unauthorizedData = selectedRows.value.filter(item => item.maintainUserName !== userStore.nickName); if (unauthorizedData.length > 0) { proxy.$modal.msgWarning("ä¸å¯å é¤ä»äººç»´æ¤çæ°æ®"); return; } ids = selectedRows.value.map((item) => item.id); } else { proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); return; } ElMessageBox.confirm("éä¸çå 容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "å é¤æç¤º", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning", }) .then(() => { tableLoading.value = true; delSupplier(ids) .then((res) => { proxy.$modal.msgSuccess("å 餿å"); getList(); }) .finally(() => { tableLoading.value = false; }); }) .catch(() => { proxy.$modal.msg("已忶"); }); if (!selectedRows.value.length) { proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); return; } const ids = selectedRows.value.map((i) => i.id); ElMessageBox.confirm("æ¯å¦ç¡®è®¤å é¤ï¼", "å é¤", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning" }) .then(() => { deleteInspection(ids).then(() => { proxy.$modal.msgSuccess("å 餿å"); getList(); }); }).catch(() => {}); }; const handleOut = () => { ElMessageBox.confirm("æ¯å¦ç¡®è®¤å¯¼åºï¼", "导åº", { confirmButtonText: "确认", cancelButtonText: "åæ¶", type: "warning" }) .then(() => { proxy.download("/environmentAccess/inspection/export", { ...searchForm.value }, "æºè½å·¡æ£å°è´¦.xlsx"); }).catch(() => {}); }; // è·åå½åæ¥æå¹¶æ ¼å¼å为 YYYY-MM-DD function getCurrentDate() { const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, "0"); // æä»½ä»0å¼å§ const day = String(today.getDate()).padStart(2, "0"); return `${year}-${month}-${day}`; } onMounted(() => { getList(); }); onMounted(() => { getList(); }); </script> <style scoped lang="scss"></style> <style scoped lang="scss"> .ml10 { margin-left: 10px; } .table_list { margin-top: unset; } </style>