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