From 7ae73495487e9bebb986d53ca923a9ebac231618 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 16 八月 2024 16:40:54 +0800 Subject: [PATCH] 资产管理动态字段 --- src/views/system/monitor/video/index.vue | 1 src/views/system/data-manage/equipment/index.vue | 35 +++++++++-- src/components/RightToolbar/index.vue | 75 +++++++++++++++++++++++++ src/api/platform/dynamicColumn.js | 35 +++++++++++ 4 files changed, 138 insertions(+), 8 deletions(-) diff --git a/src/api/platform/dynamicColumn.js b/src/api/platform/dynamicColumn.js new file mode 100644 index 0000000..b5464f3 --- /dev/null +++ b/src/api/platform/dynamicColumn.js @@ -0,0 +1,35 @@ +import axios from '@/utils/request'; + +// 鑾峰彇鍔ㄦ�佸垪鍒楄〃 +export const getDynamicColumnList = () => { + return axios({ + url: "/api/dynamic-column/list", + method: "GET" + }) +} + +// 閫氳繃id鍒犻櫎鍔ㄦ�佸垪 +export const deleteDynamicColumnById = (params) => { + return axios({ + url: "/api/dynamic-column/" + params, + method: "DELETE" + }) +} + +// 淇敼鍔ㄦ�佸垪 +export const editDynamicColumn = (data) => { + return axios({ + url: "/api/dynamic-column", + method: "PUT", + data: data + }) +} + +// 娣诲姞鍔ㄦ�佸垪 +export const addDynamicColumn = (params) => { + return axios({ + url: "/api/dynamic-column", + method: "POST", + data: params + }) +} diff --git a/src/components/RightToolbar/index.vue b/src/components/RightToolbar/index.vue index 67da293..d125e60 100644 --- a/src/components/RightToolbar/index.vue +++ b/src/components/RightToolbar/index.vue @@ -7,6 +7,9 @@ <el-tooltip class="item" effect="dark" content="鍒锋柊" placement="top"> <el-button size="mini" circle icon="el-icon-refresh" @click="refresh()" /> </el-tooltip> + <el-tooltip class="item" effect="dark" content="鑷畾涔夊垪" placement="top"> + <el-button size="mini" circle icon="el-icon-refresh" @click="addDynamicColumn()" /> + </el-tooltip> <el-tooltip class="item" effect="dark" content="鏄鹃殣鍒�" placement="top" v-if="columns"> <el-button size="mini" circle icon="el-icon-menu" @click="showColumn()" v-if="showColumnsType == 'transfer'"/> <el-dropdown trigger="click" :hide-on-click="false" style="padding-left: 12px" v-if="showColumnsType == 'checkbox'"> @@ -29,13 +32,45 @@ @change="dataChange" ></el-transfer> </el-dialog> + + + <el-dialog + title="娣诲姞鍔ㄦ�佸垪" + :visible.sync="showDynamicColumn" + width="500px" + :before-close="dynamicColumnClose"> + <div> + <div style="margin-bottom: 8px"> + <el-button style="float: right" type="primary" @click="addColumn" size="small">鏂板涓�鏉�</el-button> + </div> + <div v-for="(dynamicColumn, index) in dynamicColumnList" :key="index"> + <el-form :inline="true" size="small"> + <el-form-item label="鍒楀悕" prop="labelValue"> + <div style="display: flex; flex-direction: row"> + <el-input v-model="dynamicColumn.labelValue"></el-input> + <el-button style="margin-left: 8px" type="danger" @click="delColumn(dynamicColumn.id, index)">鍒犻櫎</el-button> + </div> + </el-form-item> + </el-form> + </div> + </div> + + <span slot="footer" class="dialog-footer"> + <el-button size="small" @click="dynamicColumnClose">鍙� 娑�</el-button> + <el-button type="primary" size="small" :disabled="!dynamicColumnList || dynamicColumnList.length < 1" @click="saveColumns">淇� 瀛�</el-button> + </span> + </el-dialog> + </div> </template> <script> +import { addDynamicColumn, deleteDynamicColumnById, editDynamicColumn, getDynamicColumnList } from '@/api/platform/dynamicColumn' export default { name: "RightToolbar", data() { return { + dynamicColumnList: [], + showDynamicColumn: false, // 鏄鹃殣鏁版嵁 value: [], // 寮瑰嚭灞傛爣棰� @@ -80,6 +115,7 @@ } }, created() { + this.getDyColumn() if (this.showColumnsType == 'transfer') { // 鏄鹃殣鍒楀垵濮嬮粯璁ら殣钘忓垪 for (let item in this.columns) { @@ -90,6 +126,45 @@ } }, methods: { + getDyColumn() { + if (this.$route.path.concat("equipment")) { + // 鏌ヨ鍔ㄦ�佸垪 + let params = { + tableName: 't_monitor' + } + getDynamicColumnList(params).then(res => { + this.dynamicColumnList = res.data + }) + } + }, + addDynamicColumn() { + this.showDynamicColumn = true + }, + saveColumns() { + editDynamicColumn(this.dynamicColumnList).then(res => { + this.$message.success("淇濆瓨鎴愬姛") + this.showDynamicColumn = false + }) + }, + addColumn() { + this.dynamicColumnList.push({ + id: null, + labelValue: '' + }) + }, + delColumn(id, index) { + if (! id) { + this.dynamicColumnList.splice(index, 1) + return + } + deleteDynamicColumnById(id).then(res => { + this.$message.success("鍒犻櫎鎴愬姛") + this.getDyColumn(); + }) + }, + dynamicColumnClose() { + this.showDynamicColumn = false + }, // 鎼滅储 toggleSearch() { this.$emit("update:showSearch", !this.showSearch); diff --git a/src/views/system/data-manage/equipment/index.vue b/src/views/system/data-manage/equipment/index.vue index bb28103..76b4ea0 100644 --- a/src/views/system/data-manage/equipment/index.vue +++ b/src/views/system/data-manage/equipment/index.vue @@ -41,9 +41,9 @@ </el-card> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> - <el-form-item label="鍏抽敭瀛�" prop="name"> + <el-form-item label="鍏抽敭瀛�" prop="keyword"> <el-input - v-model="queryParams.name" + v-model="queryParams.keyword" placeholder="璇疯緭鍏ュ叧閿瓧" clearable @keyup.enter.native="handleQuery" @@ -107,12 +107,17 @@ <el-table-column label="鏍囩" align="center" prop="publicSecurity" width="180" v-if="columns[0].visible"/> <el-table-column label="鍖哄煙" align="center" prop="address" width="180" v-if="columns[1].visible"/> <el-table-column label="璁惧鐘舵��" align="center" prop="onState" v-if="columns[2].visible"> - <template slot-scope="scope"> - <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/> - </template> + <template slot-scope="scope"> + <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/> + </template> </el-table-column> <el-table-column label="鏁版嵁鏃堕棿" align="center" prop="installedTime" width="180" v-if="columns[3].visible"/> <el-table-column label="绠$悊鍗曚綅" align="center" prop="managementUnit" width="180" v-if="columns[4].visible"/> + <el-table-column v-for="(column, index) in dynamicColumnList" :key="index" :label="column.labelValue" :prop="column.propName" align="center"> + <template slot-scope="scope"> + {{ getDynamicValue(scope.row, column.propName) }} + </template> + </el-table-column> <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" fixed="right"> <template slot-scope="scope"> <el-button @@ -167,12 +172,14 @@ <script> import { videoCount, listMonitor, getMonitor, delMonitor, addMonitor, updateMonitor } from "@/api/platform/monitor"; +import { getDynamicColumnList } from '@/api/platform/dynamicColumn' import { dataCenter } from "@/api/platform/data-center"; export default { name: "Monitor", dicts: ['sys_normal_disable', 'platform_yes_no','camera_state'], data() { return { + dynamicColumnList: [], // 鍒椾俊鎭� columns: [ { key: 0, label: `鏍囩`, visible: true }, @@ -213,7 +220,7 @@ pageNum: 1, pageSize: 10, serialNumber: null, - name: null, + keyword: '鐞冩満', onState: null, address: null, installedTime: null, @@ -243,12 +250,26 @@ created() { this.getVideoCount(); this.getList(); - this.getCountyList(); + this.getDyColumn() }, methods: { + getDyColumn() { + // 鏌ヨ鍔ㄦ�佸垪 + let params = { + tableName: 't_monitor' + } + getDynamicColumnList(params).then(res => { + this.dynamicColumnList = res.data + }) + }, + getDynamicValue(row, propName) { + let target = row.dynamicColumnList.filter(item => item.propName === propName) + return target && target.length > 0 ? target[0].columnValue : '' + }, /** 鏌ヨ璁惧璧勪骇鍒楄〃 */ getList() { this.loading = true; + this.getDyColumn() dataCenter('assetManagement', this.queryParams).then(response => { this.monitorList = response.data; this.total = response.total; diff --git a/src/views/system/monitor/video/index.vue b/src/views/system/monitor/video/index.vue index 87296d4..0736845 100644 --- a/src/views/system/monitor/video/index.vue +++ b/src/views/system/monitor/video/index.vue @@ -288,7 +288,6 @@ created() { this.getVideoCount(); this.getList(); - this.getCountyList(); }, methods: { /** 鏌ヨ璁惧璧勪骇鍒楄〃 */ -- Gitblit v1.8.0