From 3a86d19862b7f436195e255833f094dfb5e4881d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cyiyousong=E2=80=9D?= <鈥測ousong_yi@foxmail.com鈥�> Date: Wed, 21 Jun 2023 15:57:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=BC=96=E8=BE=91=EF=BC=8C=E6=8C=89=E8=AE=BE=E5=A4=87mac?= =?UTF-8?q?=E5=92=8C=E8=AE=BE=E5=A4=87ip=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/src/api/device.js | 27 ++++ .../src/pages/hardware/NumberWriteDevice.vue | 104 ++++++++++--- .../src/pages/hardware/modal/AddDevice.vue | 142 +++++++++++++----- 3 files changed, 214 insertions(+), 59 deletions(-) diff --git a/sample-form-manager-ui/admin/src/api/device.js b/sample-form-manager-ui/admin/src/api/device.js index 545215c..70e0656 100644 --- a/sample-form-manager-ui/admin/src/api/device.js +++ b/sample-form-manager-ui/admin/src/api/device.js @@ -36,3 +36,30 @@ export const delDeviceMatter = (params) => { params, }); }; + +// 淇敼淇濆瓨璁惧淇℃伅 +export const saveDevice = (data) => { + return request({ + url: `/sampleform/device/save`, + method: "post", + data, + }); +}; + +// 璁惧婵€娲� +export const saveDeviceActive = (data) => { + return request({ + url: `/sampleform/device/active`, + method: "post", + data, + }); +}; + +// 璁惧鍚仠鐢� +export const saveDeviceEnable = (data) => { + return request({ + url: `/sampleform/device/enable`, + method: "post", + data, + }); +}; diff --git a/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue b/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue index 1592c19..ae1caaf 100644 --- a/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue +++ b/sample-form-manager-ui/admin/src/pages/hardware/NumberWriteDevice.vue @@ -21,11 +21,21 @@ --> </div> <div slot="right" class="flex"> + <el-select + class="select" + size="small" + v-model="type" + placeholder="璇烽€夋嫨鎼滅储绫诲瀷" + > + <el-option label="鎸夎澶囧悕绉�" :value="1"> </el-option> + <el-option label="鎸塵ac鍦板潃" :value="2"> </el-option> + <el-option label="鎸夎澶嘔P" :value="3"> </el-option> + </el-select> <el-input size="small" v-model="searchVal" class="ml10 mr10" - placeholder="璇疯緭鍏ヨ澶囧悕绉版悳绱�" + placeholder="璇疯緭鍏ュ叧閿瓧鎼滅储" @keyup.native.enter="handleSearch" ></el-input> <el-button size="small" type="primary" @click="handleSearch" @@ -114,37 +124,44 @@ <el-tag size="small" v-else type="danger">绂荤嚎</el-tag> </template> </el-table-column> - <!-- <el-table-column align="center" prop="enabled" label="鍚敤/鍋滅敤"> + <el-table-column align="center" prop="enabled" label="鍚敤/鍋滅敤"> <template slot-scope="scope"> - <el-tag - size="small" - :type="scope.row.enabled === 1 ? 'success' : 'danger'" - >{{ scope.row.enabled === 1 ? "鏄�" : "鍚�" }}</el-tag + <el-switch + class="tableScopeSwitch" + :active-value="1" + :inactive-value="0" + v-model="scope.row.enabled" + @change="handleChange(scope.row)" + inactive-text="鍋滅敤" + active-text="鍚敤" > + </el-switch> </template> - </el-table-column> --> - <el-table-column align="center" label="鎿嶄綔" width="100"> + </el-table-column> + <el-table-column align="center" prop="deviceRemark" label="澶囨敞"> + </el-table-column> + <el-table-column align="center" label="鎿嶄綔" width="160"> <template slot-scope="scope"> <div class="flex jca"> - <!-- <span - v-if="scope.row.active !== 1" + <span + v-if="scope.row.deviceStatus == 0" class="primary pointer" @click="handleActive(scope.row)" >婵€娲�</span > <span - v-if="scope.row.active == 1" + v-if="scope.row.active != 0" style="opacity: 0" class="primary" >婵€娲�</span - > --> + > <span class="primary pointer" @click="handleBound(scope.row)" >缁戝畾琛ㄥ崟</span > - <!-- <span class="primary pointer" @click="handleEdit(scope.row)" + <span class="primary pointer" @click="handleEdit(scope.row)" >缂栬緫</span > - <span class="delete pointer" @click="handleDel(scope.row.id)" + <!-- <span class="delete pointer" @click="handleDel(scope.row.id)" >鍒犻櫎</span > --> </div> @@ -162,9 +179,11 @@ </el-card> <!-- 鏂板璁惧 --> <AddDevice + :dict="dict" :dialogVisible.sync="dialogVisible" :title="title" ref="AddDevice" + @addSuccess="getDeviceList" ></AddDevice> <!-- 鍏宠仈浜嬮」 --> <AddMatter ref="AddMatter" :matterDrawer.sync="matterDrawer"></AddMatter> @@ -176,7 +195,11 @@ import TableHeader from "@/components/TableHeader.vue"; import Pagination from "@/components/Pagination.vue"; import AddMatter from "./modal/AddMatter.vue"; import AddDevice from "./modal/AddDevice.vue"; -import { getDeviceList } from "@/api/device"; +import { + getDeviceList, + saveDeviceEnable, + saveDeviceActive, +} from "@/api/device"; import local from "@/utils/local"; export default { components: { @@ -199,6 +222,8 @@ export default { title: "鏂板鏁板瓧鏍疯〃璁惧", loading: false, matterDrawer: false, + dict: {}, // 瀛楀吀 + type: 1, }; }, created() { @@ -208,18 +233,29 @@ export default { // 鑾峰彇璁惧鍒楄〃 async getDeviceList() { this.loading = true; - let res = await getDeviceList({ + let obj = { siteId: this.siteId, page: this.current, size: this.size, - deviceName: `%${this.searchVal}%`, productName: "鏍疯〃鏈�", - }); + }; + if (this.type == 1) { + obj.deviceName = `%${this.searchVal}%`; + } else if (this.type == 2) { + obj.deviceMac = `%${this.searchVal}%`; + } else if (this.type == 3) { + obj.ip = `%${this.searchVal}%`; + } + + let res = await getDeviceList(obj); this.loading = false; - let { data, total } = res.data.data; - this.total = total; - this.tableData = data; - this.$refs.multipleTable.bodyWrapper.scrollTop = 0; + if (res.data.code == 1) { + let { data, total, dict } = res.data.data; + this.total = total; + this.tableData = data; + this.dict = dict; + this.$refs.multipleTable.bodyWrapper.scrollTop = 0; + } }, // 鏂板 handleAdd() { @@ -237,6 +273,7 @@ export default { searchReset() { this.searchVal = ""; this.current = 1; + this.type = 1; this.getDeviceList(); }, // 缈婚〉 @@ -262,7 +299,12 @@ export default { type: "warning", }) .then(async () => { - console.log(row); + let res = await saveDeviceActive({ deviceCode: row.deviceCode }); + let { code, msg } = res.data; + if (code == 1) { + this.$message.success(msg); + this.getDeviceList(); + } }) .catch(() => { console.log("鍙栨秷鎴愬姛锛�"); @@ -290,8 +332,17 @@ export default { }); }, // 鍚仠鐢� - handleChange(row) { - console.log(row); + async handleChange(row) { + let obj = { + id: row.id, + enabled: row.enabled, + }; + let res = await saveDeviceEnable(obj); + let { code } = res.data; + if (code == 1) { + this.$message.success("淇敼鎴愬姛"); + this.getDeviceList(); + } }, // 缁戝畾琛ㄥ崟 handleBound(row) { @@ -312,6 +363,9 @@ export default { :deep(.el-card) { height: auto; } + .select { + width: 220px !important; + } } // .table-content { // height: 550px; diff --git a/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue b/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue index c7782e4..06f9afc 100644 --- a/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue +++ b/sample-form-manager-ui/admin/src/pages/hardware/modal/AddDevice.vue @@ -6,37 +6,48 @@ width="50%" @close="handleClose" > - <el-form ref="form" size="small" :model="form" label-width="80px"> + <el-form + ref="form" + size="small" + :model="form" + :rules="rules" + label-width="80px" + > <el-row :gutter="20"> <el-col :span="12" - ><el-form-item label="璁惧鍚嶇О" prop="name"> + ><el-form-item label="璁惧鍚嶇О" prop="deviceName"> <el-input - v-model="form.name" + v-model="form.deviceName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" ></el-input> </el-form-item ></el-col> <el-col :span="12" - ><el-form-item label="璁惧绫诲瀷" prop="name"> - <el-input - v-model="form.name" - placeholder="璇疯緭鍏ヨ澶囧悕绉�" - ></el-input> </el-form-item + ><el-form-item label="璁惧绫诲瀷"> + <el-input disabled value="鏁板瓧鏍疯〃"></el-input> </el-form-item ></el-col> </el-row> <el-row :gutter="20"> <el-col :span="12" - ><el-form-item label="mac鍦板潃" prop="name"> + ><el-form-item label="mac鍦板潃" prop="deviceMac"> <el-input - v-model="form.name" + v-model="form.deviceMac" placeholder="璇疯緭鍏ac鍦板潃" ></el-input> </el-form-item ></el-col> <el-col :span="12" - ><el-form-item label="璁惧鍘傚晢" prop="name"> - <el-input - v-model="form.name" - placeholder="璇疯緭鍏ヨ澶囧巶鍟�" - ></el-input> </el-form-item + ><el-form-item label="璁惧鍘傚晢" prop="deviceFirmId"> + <el-select + v-model="form.deviceFirmId" + placeholder="璇烽€夋嫨璁惧鍘傚晢" + > + <el-option + v-for="(v, key) in dict.deviceFirmId" + :key="key" + :label="v" + :value="Number(key)" + > + </el-option> + </el-select> </el-form-item ></el-col> </el-row> <el-row :gutter="20"> @@ -53,60 +64,70 @@ </el-select> </el-form-item ></el-col> <el-col :span="12" - ><el-form-item label="璁惧IP" prop="name"> + ><el-form-item label="璁惧IP" prop="ip"> <el-input - v-model="form.name" + v-model="form.ip" placeholder="璇疯緭鍏ヨ澶嘔P" ></el-input> </el-form-item ></el-col> </el-row> <el-row :gutter="20"> <el-col :span="12" - ><el-form-item label="绔彛鍙�" prop="name"> + ><el-form-item label="绔彛鍙�" prop="port"> <el-input - v-model="form.name" + v-model="form.port" placeholder="璇疯緭鍏ョ鍙e彿" ></el-input> </el-form-item ></el-col> <el-col :span="12" - ><el-form-item label="璐熻矗浜�" prop="name"> + ><el-form-item label="璐熻矗浜�" prop="leadingOfficial"> <el-input - v-model="form.name" + v-model="form.leadingOfficial" placeholder="璇疯緭鍏ヨ矗浠讳汉濮撳悕" ></el-input> </el-form-item ></el-col> </el-row> <el-row :gutter="20"> <el-col :span="12" - ><el-form-item label="鎵嬫満鍙�" prop="name"> + ><el-form-item label="鎵嬫満鍙�" prop="leadingOfficialTelephone"> <el-input - v-model="form.name" + v-model="form.leadingOfficialTelephone" placeholder="璇疯緭鍏ヨ矗浠讳汉鎵嬫満鍙�" ></el-input> </el-form-item ></el-col> <el-col :span="12" - ><el-form-item label="璁惧浣嶇疆" prop="name"> + ><el-form-item label="璁惧缁忓害" prop="lon"> <el-input - v-model="form.name" - placeholder="璇疯緭鍏ヨ澶囦綅缃紙X鍧愭爣锛孻鍧愭爣锛�" + v-model="form.lon" + placeholder="璇疯緭鍏ヨ澶囩粡搴�" ></el-input> </el-form-item ></el-col> </el-row> <el-row :gutter="20"> <el-col :span="12" - ><el-form-item label="鎵€鍦ㄦゼ鏍�" prop="name"> + ><el-form-item label="璁惧绾害" prop="lati"> + <el-input + v-model="form.lati" + placeholder="璇疯緭鍏ヨ澶囩含搴�" + ></el-input> </el-form-item + ></el-col> + + <el-col :span="12" + ><el-form-item label="鎵€鍦ㄦゼ鏍�" prop="deviceInBuilding"> <el-input-number - v-model="form.num" + v-model="form.deviceInBuilding" controls-position="right" :min="1" :max="100" placeholder="璇疯緭鍏ユゼ鏍�" ></el-input-number> </el-form-item ></el-col> + </el-row> + <el-row :gutter="20"> <el-col :span="12" - ><el-form-item label="鎵€鍦ㄦゼ灞�" prop="name"> + ><el-form-item label="鎵€鍦ㄦゼ灞�" prop="deviceInFloor"> <el-input-number - v-model="form.num" + v-model="form.deviceInFloor" controls-position="right" :min="1" :max="100" @@ -116,13 +137,13 @@ </el-row> <el-row :gutter="20"> <el-col :span="24" - ><el-form-item label="澶囨敞" prop="name"> + ><el-form-item label="澶囨敞" prop="deviceRemark"> <el-input type="textarea" :autosize="{ minRows: 4, maxRows: 4 }" clearable placeholder="璇疯緭鍏ュ娉�" - v-model="form.textarea" + v-model="form.deviceRemark" resize="none" > </el-input> </el-form-item @@ -140,6 +161,7 @@ </template> <script> +import { saveDevice } from "@/api/device"; export default { props: { title: { @@ -152,11 +174,53 @@ export default { required: true, default: false, }, + dict: { + type: Object, + required: true, + default: () => {}, + }, }, data() { return { form: { - name: "", + deviceId: "", // 璁惧id + deviceName: "", // 璁惧鍚嶇О + deviceCode: "", // 璁惧缂栫爜 + deviceMac: "", // 璁惧鐨凪AC鍦板潃 + siteId: "", // 绔欑偣Id + siteCode: "", // 绔欑偣缂栧彿 + siteName: "", // 绔欑偣鍚嶇О + productCode: "", // 浜у搧缂栫爜 + productName: "", // 浜у搧鍚嶇О + deviceSrc: "", // 璁惧鏉ユ簮(0.瀛愯澶囷紝1.缃戝叧璁惧锛�2.鐩磋繛璁惧) + lon: "", // 缁忓害 + lati: "", // 绾害 + leadingOfficial: "", // 璐熻矗浜� + leadingOfficialTelephone: "", // 鑱旂郴鐢佃瘽 + // deviceStatus: "", // 璁惧鐘舵€� (0.鏈縺娲伙紝1.绂荤嚎,2.鍦ㄧ嚎) + deviceRemark: "", // 澶囨敞 + source: "", // 璁惧鏉ユ簮(0.鏃ц澶囷紝1.鏂拌澶�) + deviceFirmId: "", // 璁惧鐢熶骇鍘傚晢ID + deviceFirmname: "", // 璁惧鐢熶骇鍘傚晢鍚嶇О + ip: "", // 璁惧璁块棶ip + port: "", // 绔彛 + // enabled: "", // 鍚敤鐘舵€� (0.鍋滄锛�1.鍚敤) + deviceInBuilding: "", // 鎵€鍦ㄦゼ瀹� + deviceInFloor: "", // 鎵€鍦ㄦゼ灞� + }, + rules: { + deviceName: [ + { required: true, message: "璇疯緭鍏ヨ澶囧悕绉�", trigger: "blur" }, + ], + deviceMac: [ + { required: true, message: "璇疯緭鍏ヨ澶噈ac鍦板潃", trigger: "blur" }, + ], + leadingOfficial: [ + { required: true, message: "璇疯緭鍏ヨ礋璐d汉濮撳悕", trigger: "blur" }, + ], + leadingOfficialTelephone: [ + { required: true, message: "璇疯緭鍏ヨ礋璐d汉鎵嬫満鍙风爜", trigger: "blur" }, + ], }, options: [ { @@ -185,7 +249,17 @@ export default { this.$refs.form.resetFields(); }, handleOk() { - console.log(1); + this.$refs.form.validate(async (valid) => { + if (valid) { + let res = await saveDevice(this.form); + let { code, msg } = res.data; + if (code == 1) { + this.$message.success(msg); + this.$emit("addSuccess"); + this.handleClose(); + } + } + }); }, // 鏂板 onAdd() { -- 2.24.3