From b9bd29a1a81f6f7de479e3cc3fdfe3d85fc660bf Mon Sep 17 00:00:00 2001 From: he wei <858544502@qq.com> Date: 星期三, 23 四月 2025 13:35:06 +0800 Subject: [PATCH] UA 整理提交 --- src/views/device/locks/addEdit.vue | 816 ++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 486 insertions(+), 330 deletions(-) diff --git a/src/views/device/locks/addEdit.vue b/src/views/device/locks/addEdit.vue index a04f605..12910a9 100644 --- a/src/views/device/locks/addEdit.vue +++ b/src/views/device/locks/addEdit.vue @@ -1,359 +1,515 @@ <script setup> - import { ref, onMounted } from "vue"; - import { getAreaTreeApi } from "@/api/area"; - import { formatAreaTree } from "@/utils/tree"; - import { updateLock, addLock, getScreenType, getScreenProduct } from "@/api/lockManager.js"; - import useElement from "@/hooks/useElement.js"; - const { $loading, $message, $confirm } = useElement(); - const areaList = ref([]); - const emit = defineEmits(["close", "ok"]); - const formRef = ref(); - const typeList = ref([ +import { ref, onMounted, reactive, computed } from "vue"; +// import { getAreaTreeApi } from "@/api/area"; +// import { formatAreaTree } from "@/utils/tree"; +import { updateLock, addLock, getScreenType, getScreenProduct } from "@/api/lockManager.js"; +import useElement from "@/hooks/useElement.js"; +import useStation from '@/hooks/useStationList.js'; +const { + stationName1, + stationName2, + stationName3, + stationName4, + stationList1, + stationList2, + stationList3, + stationList4, + getProviceList, getCityList, getCountryList, getStationList +} = useStation(); - ]); - const productList = ref([ - ]); - const rules = { - count: [ - { - required: true, - message: "涓嶈兘涓虹┖", - trigger: ["change", "blur"], - }, - { - validator: (rule, value, callback) => { - const reg = /^\d+$/; - if (!reg.test(value)) { - callback(new Error("鍙兘涓烘暟瀛�")); - } else { - if (value > 1000) { - callback(new Error("鏈�澶ф敮鎸佹壒閲忔柊澧�1000濂�")); - } else if (value < 1) { - callback(new Error("杈撳叆涓嶈兘灏忎簬1")); - } else { - callback(); - } - } - }, - trigger: ["change", "blur"], - }, - ], - areaId: [ - { - required: true, - message: "涓嶈兘涓虹┖", - trigger: ["change", "blur"], - }, - { - validator: (rule, value, callback) => { - if (Object.prototype.toString.call(value) === '[object Array]' && !value.length) { - callback(new Error("璇烽�夋嫨鍖哄煙")); - } else { - callback(); - } - }, - trigger: ["change", "blur"], - }, - ], - lockName: [ - { - required: true, - message: "涓嶈兘涓虹┖", - trigger: ["change", "blur"], - }, - ], - screenFlag: [ - { - required: true, - message: "涓嶈兘涓虹┖", - trigger: ["change", "blur"], - }, - ], - screenBoxType: [ - { - required: true, - message: "涓嶈兘涓虹┖", - trigger: ["change", "blur"], - }, - ], - screenBoxProduct: [ - { - required: true, - message: "涓嶈兘涓虹┖", - trigger: ["change", "blur"], - }, - ], - // 缁忓害 - longitude: [ - { - validator: (rule, value, callback) => { - let reg = /^-?1?(\d{1,2}(\.\d+)?|\d{1}(\.\d+))$/; - if (value && !reg.test(value)) { - callback(new Error("璇疯緭鍏ユ纭殑缁忓害")); - } else { - callback(); - } +const { $loading, $message, $confirm } = useElement(); +const areaList = ref([]); +const emit = defineEmits(["close", "ok"]); +const formRef = ref(); +const typeList = ref([ - }, - trigger: ["change", "blur"], - }, - ], - // 绾害 - latitude: [ - { - validator: (rule, value, callback) => { - let reg = /^-?(\d{1,2}(\.\d+)?|\d{1}(\.\d+))$/; - if (value && !reg.test(value)) { - callback(new Error("璇疯緭鍏ユ纭殑绾害")); - } else { - callback(); - } +]); +const productList = ref([ - }, - trigger: ["change", "blur"], - }, - ] - }; - const formLock = ref({ - areaId: "", - lockId: "", - lockType: 3, - lockName: "", - count: 1, - }); - - const lockTypes = ref([ +]); +const rules = { + lockName: [ { - label: "瀹炰綋閿�", - value: 3, + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], }, - ]); - - const props = defineProps({ - info: { - type: Object, + ], + stationName1: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], }, - isAdd: { - type: Boolean, - default: false, + ], + stationName2: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], }, - isBatch: { - type: Boolean, - default: false, + ], + stationName3: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], }, - }); - - function ok() { - if (props.isAdd) { - add(); - } else { - update(); - } - } - - async function getTypeList() { - let res = await getScreenType(); - let { code, data, data2 } = res; - let _list = []; - if (code && data) { - // console.log(data); - _list = data2; - } - typeList.value = _list; - } - - async function getProdList () { - let res = await getScreenProduct(); - let { code, data,data2 } = res; - let _list = []; - if (code && data) { - // console.log(data); - _list = data2; - } - productList.value = _list; - } - - async function add() { - let valid = await formRef.value.validate(() => { }); - if (!valid) { - $message.error("琛ㄥ崟楠岃瘉澶辫触"); - return false; - } - - let areaId; - if (formLock.value.areaId && formLock.value.areaId.length) { - areaId = formLock.value.areaId[formLock.value.areaId.length - 1]; - } - let params = {}; - let param2 = { - lockName: formLock.value.lockName, - areaId, - // 鐩墠鍥哄畾 - lockType: formLock.value.lockType, - screenFlag: formLock.value.screenFlag, - screenBoxType: formLock.value.screenBoxType, - screenBoxProduct: formLock.value.screenBoxProduct, - longitude: formLock.value.longitude || 0, - latitude: formLock.value.latitude || 0, - }; - if (props.isBatch) { - params["num"] = formLock.value.count; - } - let loading = $loading(); - addLock(params, param2) - .then((res) => { - let { code, data } = res; - loading.close(); - if (code && data) { - $message.success("鎿嶄綔鎴愬姛"); - emit("ok"); + ], + stationName4: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], + }, + ], + screenFlag: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], + }, + ], + screenBoxType: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], + }, + ], + screenBoxProduct: [ + { + required: true, + message: "涓嶈兘涓虹┖", + trigger: ["change", "blur"], + }, + ], + // 缁忓害 + longitude: [ + { + validator: (rule, value, callback) => { + let reg = /^-?1?(\d{1,2}(\.\d+)?|\d{1}(\.\d+))$/; + if (value && !reg.test(value)) { + callback(new Error("璇疯緭鍏ユ纭殑缁忓害")); } else { - $message.error("鎿嶄綔澶辫触"); + callback(); } - }) - .catch((err) => { - loading.close(); - console.log(err); - }); - } - async function update() { - // lockId lockName areaId lockType - let valid = await formRef.value.validate(() => { }); - if (!valid) { - $message.error("琛ㄥ崟楠岃瘉澶辫触"); - return false; - } - - let areaId; - if (formLock.value.areaId && formLock.value.areaId.length) { - areaId = formLock.value.areaId[formLock.value.areaId.length - 1]; - } - let params = { - lockId: formLock.value.lockId, - lockName: formLock.value.lockName, - areaId, - // 鐩墠鍥哄畾 - lockType: formLock.value.lockType, - screenFlag: formLock.value.screenFlag, - screenBoxType: formLock.value.screenBoxType, - screenBoxProduct: formLock.value.screenBoxProduct, - longitude: formLock.value.longitude || 0, - latitude: formLock.value.latitude || 0, - }; - let loading = $loading(); - updateLock(params) - .then((res) => { - let { code, data } = res; - loading.close(); - if (code && data) { - $message.success("鎿嶄綔鎴愬姛"); - emit("ok"); + }, + trigger: ["change", "blur"], + }, + ], + // 绾害 + latitude: [ + { + validator: (rule, value, callback) => { + let reg = /^-?(\d{1,2}(\.\d+)?|\d{1}(\.\d+))$/; + if (value && !reg.test(value)) { + callback(new Error("璇疯緭鍏ユ纭殑绾害")); } else { - $message.error("鎿嶄綔澶辫触"); + callback(); } - }) - .catch((err) => { - loading.close(); - console.log(err); - }); - } - function close() { - emit("close"); - } + }, + trigger: ["change", "blur"], + }, + ] +}; +const formLock = reactive({ + lockName: "", + lockId: "", + lockType: 1, + lockAddress: '', + screenFlag: 1, + screenBoxType: '', + screenBoxProduct: '', + longitude: '', + latitude: '', + stationName1: stationName1.value, + stationName2: stationName2.value, + stationName3: stationName3.value, + stationName4: stationName4.value +}); - async function getAreaTree() { - try { - const res = await getAreaTreeApi(); - let _data = []; - if (res.code === 1 && res.data) { - _data = res.data2; +const layout = { + gutter: 16, + span: 12, +}; + +function stationNameChange(idx, val) { + console.log('idx, val', idx, val, '============='); + + switch (idx) { + case 1: + stationName1.value = val; + formLock.stationName2 = ''; + formLock.stationName3 = ''; + formLock.stationName4 = ''; + break; + case 2: + stationName2.value = val; + formLock.stationName3 = ''; + formLock.stationName4 = ''; + break; + case 3: + stationName3.value = val; + formLock.stationName4 = ''; + break; default: + break; + } +} + +const lockTypes = ref([ + { + label: "瀹炰綋閿�", + value: 3, + }, +]); + +const props = defineProps({ + info: { + type: Object, + }, + isAdd: { + type: Boolean, + default: false, + }, +}); + +function ok() { + if (props.isAdd) { + add(); + } else { + update(); + } +} + +async function getTypeList() { + let res = await getScreenType(); + let { code, data, data2 } = res; + let _list = []; + if (code && data) { + // console.log(data); + _list = data2; + } + typeList.value = _list; +} + +async function getProdList() { + let res = await getScreenProduct(); + let { code, data, data2 } = res; + let _list = []; + if (code && data) { + // console.log(data); + _list = data2; + } + productList.value = _list; +} + +async function add() { + let valid = await formRef.value.validate(() => { }); + if (!valid) { + $message.error("琛ㄥ崟楠岃瘉澶辫触"); + return false; + } + let params = { + lockName: formLock.lockName, + // 鐩墠鍥哄畾 + lockType: formLock.lockType, + lockName: formLock.lockName, + lockAddress: formLock.lockAddress, + screenFlag: formLock.screenFlag, + screenBoxType: formLock.screenBoxType, + screenBoxProduct: formLock.screenBoxProduct, + stationName1: formLock.stationName1, + stationName2: formLock.stationName2, + stationName3: formLock.stationName3, + stationName4: formLock.stationName4, + longitude: formLock.longitude || 0, + latitude: formLock.latitude || 0, + }; + let loading = $loading(); + addLock(params) + .then((res) => { + let { code, data } = res; + loading.close(); + if (code && data) { + $message.success("鎿嶄綔鎴愬姛"); + emit("ok"); + } else { + $message.error("鎿嶄綔澶辫触"); } - const treeList = []; - let ids = _data.map((v) => v.id); - for (let i = 0; i < _data.length; i++) { - formatAreaTree(_data[i], ids, treeList); - } - // console.log(_data, 'data'); - // console.log(treeList, 'treeList'); - areaList.value = treeList; - } catch (e) { - console.log(e); - } + }) + .catch((err) => { + loading.close(); + console.log(err); + }); +} + +async function update() { + // lockId lockName areaId lockType + let valid = await formRef.value.validate(() => { }); + if (!valid) { + $message.error("琛ㄥ崟楠岃瘉澶辫触"); + return false; } - onMounted(() => { - if (!props.isAdd) { - console.log("info ", props.info, "============="); + let params = { + lockName: formLock.lockName, + // 鐩墠鍥哄畾 + lockType: formLock.lockType, + lockName: formLock.lockName, + lockAddress: formLock.lockAddress, + screenFlag: formLock.screenFlag, + screenBoxType: formLock.screenBoxType, + screenBoxProduct: formLock.screenBoxProduct, + stationName1: formLock.stationName1, + stationName2: formLock.stationName2, + stationName3: formLock.stationName3, + stationName4: formLock.stationName4, + longitude: formLock.longitude || 0, + latitude: formLock.latitude || 0, + }; + let loading = $loading(); + updateLock(params) + .then((res) => { + let { code, data } = res; + loading.close(); + if (code && data) { + $message.success("鎿嶄綔鎴愬姛"); + emit("ok"); + } else { + $message.error("鎿嶄綔澶辫触"); + } + }) + .catch((err) => { + loading.close(); + console.log(err); + }); +} - formLock.value = props.info; - } - getAreaTree(); - getTypeList(); - getProdList(); - }); +function close() { + emit("close"); +} + + +onMounted(async() => { + if (!props.isAdd) { + console.log("info ", props.info, "============="); + for(let key in props.info){ + formLock[key] = props.info[key]; + } + + await getProviceList(); + stationName1.value = props.info.stationName1; + await getCityList(); + stationName2.value = props.info.stationName2; + await getCountryList(); + stationName3.value = props.info.stationName3; + await getStationList(); + stationName4.value = props.info.stationName4; + } + getTypeList(); + getProdList(); +}); </script> <template> - <el-form ref="formRef" label-position="left" label-width="auto" :model="formLock" :rules="rules" - style="max-width: 600px"> - <!-- 鎵�灞炲尯鍩� --> - <el-form-item label="鎵�灞炲尯鍩�" label-position="right" prop="areaId"> - <el-cascader class="select" filterable clearable v-model="formLock.areaId" - :props="{ value: 'id', checkStrictly: true }" :options="areaList"><template #default="{ node, data }"> - <span>{{ data.label }}</span> - <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> - </template></el-cascader> - </el-form-item> - <!-- 绫诲瀷 --> - <el-form-item label="绫诲瀷" label-position="right" prop="lockType"> - <el-select v-model="formLock.lockType" placeholder="Select" style="width: 240px"> - <el-option v-for="item in lockTypes" :key="item.value" :label="item.label" :value="item.value" /> - </el-select> - </el-form-item> - <!-- 閿佸叿鍚嶇О --> - <el-form-item label="閿佸叿鍚嶇О" label-position="right" prop="lockName"> - <el-input v-model="formLock.lockName" /> - </el-form-item> - <!-- 閿佸叿瀹夎浣嶇疆 1灞忔煖 2 鍏朵粬 --> - <el-form-item label="閿佸叿瀹夎浣嶇疆" label-position="right" prop="screenFlag"> - <el-select v-model="formLock.screenFlag" placeholder="璇烽�夋嫨" style="width: 240px"> - <el-option label="灞忔煖" :value="1" /> - <el-option label="鍏朵粬" :value="2" /> - </el-select> - </el-form-item> - - <!-- 閿佸叿瀹夎浣嶇疆 绫诲瀷 --> - <el-form-item label="閿佸叿瀹夎浣嶇疆绫诲瀷" label-position="right" prop="screenBoxType"> - <el-select v-model="formLock.screenBoxType" filterable allow-create placeholder="璇烽�夋嫨鎴栨墜鍔ㄨ緭鍏ュ悗閫夋嫨" style="width: 240px"> - <el-option v-for="(item, idx) in typeList" :key="'type_' + idx" :label="item" :value="item" /> - </el-select> - </el-form-item> - - <!-- 閿佸叿瀹夎浣嶇疆 鍝佺墝 --> - <el-form-item label="閿佸叿瀹夎浣嶇疆鍝佺墝" label-position="right" prop="screenBoxProduct"> - <el-select v-model="formLock.screenBoxProduct" filterable allow-create placeholder="璇烽�夋嫨鎴栨墜鍔ㄨ緭鍏ュ悗閫夋嫨" style="width: 240px"> - <el-option v-for="(item, idx) in productList" :key="'product_' + idx" :label="item" :value="item" /> - </el-select> - </el-form-item> - <!-- 缁忓害 --> - <el-form-item label="缁忓害" label-position="right" prop="longitude"> - <el-input v-model="formLock.longitude" /> - </el-form-item> - <!-- 绾害 --> - <el-form-item label="绾害" label-position="right" prop="latitude"> - <el-input v-model="formLock.latitude" /> - </el-form-item> - <!-- 鎵归噺娣诲姞鏁伴噺 --> - <el-form-item label="鎵归噺娣诲姞鏁伴噺" label-position="right" prop="count" v-if="isBatch"> - <el-input v-model="formLock.count" /> - </el-form-item> + <el-form + ref="formRef" + label-position="left" + label-width="auto" + :model="formLock" + :rules="rules" + style="max-width: 680px" + > + <el-row :gutter="layout.gutter"> + <el-col :span="24"> + <!-- 閿佸叿鍚嶇О --> + <el-form-item label="閿佸叿鍚嶇О" label-position="right" prop="lockName"> + <el-input v-model="formLock.lockName" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="layout.span"> + <!-- 鐪� --> + <el-form-item label="鐪�" label-position="right" prop="stationName1"> + <el-select + v-model="formLock.stationName1" + filterable + allow-create + placeholder="璇烽�夋嫨" + @change="(val) => stationNameChange(1, val)" + style="width: 180px" + > + <el-option + v-for="(item, idx) in stationList1" + :key="'province_' + idx" + :label="item" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="layout.span"> + <!-- 甯� --> + <el-form-item label="甯�" label-position="right" prop="stationName2"> + <el-select + v-model="formLock.stationName2" + filterable + allow-create + placeholder="璇烽�夋嫨" + @change="(val) => stationNameChange(2, val)" + style="width: 180px" + > + <el-option + v-for="(item, idx) in stationList2" + :key="'list2_' + idx" + :label="item" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="layout.span"> + <!-- 鍖哄幙 --> + <el-form-item label="鍖哄幙" label-position="right" prop="stationName3"> + <el-select + v-model="formLock.stationName3" + filterable + allow-create + placeholder="璇烽�夋嫨" + @change="(val) => stationNameChange(3, val)" + style="width: 180px" + > + <el-option + v-for="(item, idx) in stationList3" + :key="'list3_' + idx" + :label="item" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="layout.span"> + <!-- 鏈烘埧 --> + <el-form-item label="鏈烘埧" label-position="right" prop="stationName4"> + <el-select + v-model="formLock.stationName4" + filterable + allow-create + placeholder="璇烽�夋嫨" + style="width: 180px" + > + <el-option + v-for="(item, idx) in stationList4" + :key="'list4_' + idx" + :label="item" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="24"> + <!-- 鍦板潃 --> + <el-form-item label="鍦板潃" label-position="right" prop="lockAddress"> + <el-input v-model="formLock.lockAddress" /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="24"> + <!-- 閿佸叿瀹夎浣嶇疆 1灞忔煖 2 鍏朵粬 --> + <el-form-item + label="閿佸叿瀹夎浣嶇疆" + label-position="right" + prop="screenFlag" + > + <el-select + v-model="formLock.screenFlag" + placeholder="璇烽�夋嫨" + style="width: 100%" + > + <el-option label="灞忔煖" :value="1" /> + <el-option label="鍏朵粬" :value="2" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="24"> + <!-- 閿佸叿瀹夎浣嶇疆 绫诲瀷 --> + <el-form-item + label="閿佸叿瀹夎浣嶇疆绫诲瀷" + label-position="right" + prop="screenBoxType" + > + <el-select + v-model="formLock.screenBoxType" + filterable + allow-create + placeholder="璇烽�夋嫨鎴栨墜鍔ㄨ緭鍏ュ悗閫夋嫨" + style="width: 100%" + > + <el-option + v-for="(item, idx) in typeList" + :key="'type_' + idx" + :label="item" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="24"> + <!-- 閿佸叿瀹夎浣嶇疆 鍝佺墝 --> + <el-form-item + label="閿佸叿瀹夎浣嶇疆鍝佺墝" + label-position="right" + prop="screenBoxProduct" + > + <el-select + v-model="formLock.screenBoxProduct" + filterable + allow-create + placeholder="璇烽�夋嫨鎴栨墜鍔ㄨ緭鍏ュ悗閫夋嫨" + style="width: 100%" + > + <el-option + v-for="(item, idx) in productList" + :key="'product_' + idx" + :label="item" + :value="item" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="layout.gutter"> + <el-col :span="layout.span"> + <!-- 缁忓害 --> + <el-form-item label="缁忓害" label-position="right" prop="longitude"> + <el-input v-model="formLock.longitude" /> + </el-form-item> + </el-col> + <el-col :span="layout.span"> + <!-- 绾害 --> + <el-form-item label="绾害" label-position="right" prop="latitude"> + <el-input v-model="formLock.latitude" /> + </el-form-item> + </el-col> + </el-row> </el-form> <div class="footer"> - <el-button size="small" @click="close">鍙栨秷</el-button> - <el-button type="primary" size="small" @click="ok">纭畾</el-button> + <el-button @click="close">鍙栨秷</el-button> + <el-button type="primary" @click="ok">纭畾</el-button> </div> </template> -- Gitblit v1.9.1