From 6b32ec29b1cd3ed12845d543e18da18f8456cdda Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期二, 18 十月 2022 18:18:33 +0800
Subject: [PATCH] 1.安灯设置开发完成

---
 src/views/jcsz/adsz.vue |  451 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 402 insertions(+), 49 deletions(-)

diff --git a/src/views/jcsz/adsz.vue b/src/views/jcsz/adsz.vue
index 319f824..6d4edf7 100644
--- a/src/views/jcsz/adsz.vue
+++ b/src/views/jcsz/adsz.vue
@@ -12,18 +12,20 @@
         />
         <el-tree
           ref="tree"
-          class="filter-tree"
+          class="filter-tree body_left_tree"
           :data="shopTree"
           :props="defaultProps"
           highlight-current
+          node-key="org_code"
           default-expand-all
           :style="{height: contentHeight+'px',overflowY:'auto'}"
           :filter-node-method="filterNode"
+          @current-change="currentTreeChange"
         />
       </div>
       <div class="body_right">
-        <el-tabs type="border-card">
-          <el-tab-pane label="鐢ㄦ埛绠$悊">
+        <el-tabs ref="elTabs" type="border-card" @tab-click="tabClick">
+          <el-tab-pane v-for="item in AnDengTypeArr" :key="item.id" :label="item.name">
             <div :style="{height: (contentHeight+51)+'px'}">
               <div class="pane_top">
                 <div style="display: flex;align-items: center">
@@ -31,42 +33,30 @@
                   <div>鍝嶅簲浜哄憳</div>
                   <el-button
                     icon="el-icon-circle-plus-outline"
-                    style="height: 30px;line-height: 30px;color: #42b983;font-size: 22px;padding:   10px"
+                    :disabled="allowClose"
+                    :style="{color:allowClose?'#6f6e6f':'#42b983'}"
+                    style="height: 30px;line-height: 30px;font-size: 22px;padding:   10px"
+                    @click="responseUserClick"
                   />
                 </div>
                 <div>
-                  <el-checkbox v-model="allowClose">鍏佽鍏抽棴</el-checkbox>
+                  <el-checkbox v-model="allowClose" @change="allowCloseChange">鍏佽鍏抽棴</el-checkbox>
                 </div>
               </div>
-              <el-empty v-if="tags.length===0" :image-size="200" description="鏆傛棤鏁版嵁" />
+              <el-empty v-if="AnDengResponUserArr.length===0" :image-size="200" description="鏆傛棤鏁版嵁" />
               <div v-else class="pane_content" :style="{maxHeight:contentHeight+'px',overflowY: 'scroll'}">
                 <el-tag
-                  v-for="tag in tags"
-                  :key="tag.name"
-                  closable
+                  v-for="tag in AnDengResponUserArr"
+                  :key="tag.id"
+                  :closable="!allowClose"
                   type="success"
                   style="margin-right: 10px;margin-bottom: 10px"
-                  @close="val=>tagClose(val,tag)"
+                  @close="val=>tagClose(val,item,tag)"
                 >
-                  {{ tag.name }}
+                  {{ tag.username }}
                 </el-tag>
 
               </div>
-            </div>
-          </el-tab-pane>
-          <el-tab-pane label="閰嶇疆绠$悊">
-            <div :style="{height: (contentHeight+51)+'px'}">
-              閰嶇疆绠$悊
-            </div>
-          </el-tab-pane>
-          <el-tab-pane label="瑙掕壊绠$悊">
-            <div :style="{height: (contentHeight+51)+'px'}">
-              瑙掕壊绠$悊
-            </div>
-          </el-tab-pane>
-          <el-tab-pane label="瀹氭椂浠诲姟琛ュ伩">
-            <div :style="{height: (contentHeight+51)+'px'}">
-              瀹氭椂浠诲姟琛ュ伩
             </div>
           </el-tab-pane>
         </el-tabs>
@@ -79,13 +69,172 @@
       </div>
     </div>
 
+    <!--    鑷畾涔夊懠鍙被鍨�-->
+    <el-dialog
+      title="鑷畾涔夊懠鍙被鍨�"
+      :visible.sync="settingDialogVisible"
+      width="800px"
+      top="15vh"
+      :close-on-click-modal="false"
+      @closed="handleClose"
+      @close="handleClose"
+    >
+      <el-button
+        type="primary"
+        style="margin-bottom: 10px;"
+        icon="el-icon-circle-plus-outline"
+        @click="addRow()"
+      >鏂板
+      </el-button>
+      <el-table
+        ref="dialogTableDataArrRef"
+        class="tableFixed"
+        :data="settingDialogTableData"
+        :height="contentHeight-300"
+        :style="{width: 100+'%',height:contentHeight-300+'px',}"
+        border
+        :row-class-name="tableRowClassName"
+        highlight-current-row
+        :header-cell-style="this.$headerCellStyle"
+        :cell-style="this.$cellStyle"
+      >
+        <el-table-column
+          width="50"
+          label="搴忓彿"
+          type="index"
+          fixed
+        />
+
+        <el-table-column
+          prop="code"
+          label="绫诲瀷缂栫爜"
+        >
+          <template slot-scope="{row}">
+            <el-input
+              v-if="row.isVisible===1"
+              v-model="row.code"
+              oninput="value=value.replace(/[^0-9a-zA-Z]/g,'')"
+              placeholder="璇疯緭鍏�"
+            />
+            <div v-if="row.isVisible===0">{{ row.code }}</div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="name"
+          label="绫诲瀷鍚嶇О"
+        >
+          <template slot-scope="{row}">
+            <el-input
+              v-if="row.isVisible===1"
+              v-model="row.name"
+              placeholder="璇疯緭鍏�"
+            />
+            <div v-if="row.isVisible===0">{{ row.name }}</div>
+          </template>
+        </el-table-column>
+
+        <el-table-column
+          label="鎿嶄綔"
+          width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <div class="operationClass">
+              <el-button v-if="row.isVisible===1" type="text" @click="saveRow(row)">淇濆瓨</el-button>
+              <el-button v-if="row.isVisible===1" type="text" @click="cancelRow(row)">鍙栨秷</el-button>
+              <!--              <el-button v-if="row.isVisible===0" type="text" @click="editRow(row)">缂栬緫</el-button>-->
+              <el-button v-if="row.isVisible===0" type="text" @click="delRow(row)">鍒犻櫎</el-button>
+            </div>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <span slot="footer" class="dialog-footer">
+        <div class="footerButton">
+          <el-button @click="dialogVisibleCancel">杩� 鍥�</el-button>
+        </div>
+      </span>
+    </el-dialog>
+
+    <el-dialog
+      title="鍝嶅簲浜哄憳"
+      :visible.sync="userDialogVisible"
+      width="800px"
+      top="15vh"
+      :close-on-click-modal="false"
+      @closed="handleUserClose"
+      @close="handleUserClose"
+    >
+      <div
+        style=" background-color: #fafafa;  padding: 10px;  min-height: 120px;"
+        :style="{maxHeight:(contentHeight-300)+'px',overflowY: 'scroll'}"
+      >
+        <el-tag
+          v-for="tag in userDialogArr"
+          :key="tag.usercode"
+          closable
+          type="success"
+          style="margin-right: 10px;margin-bottom: 10px"
+          @close="val=>userTagClose(val,tag)"
+        >
+          {{ tag.username }}
+        </el-tag>
+      </div>
+      <div>
+        <i class="el-icon-s-comment" style="color:#42b983;margin: 20px 10px 20px 0" />浜哄憳锛�
+      </div>
+      <div
+        style=" background-color: #fafafa;  padding: 10px;  min-height: 420px;"
+        :style="{maxHeight:(contentHeight-300)+'px',overflowY: 'scroll'}"
+      >
+
+        <el-input
+          v-model="filterUserText"
+          placeholder="杈撳叆鍏抽敭瀛楄繘琛岃繃婊�"
+          style="margin-bottom: 20px; "
+        />
+        <el-tree
+          ref="userTree"
+          class="filter-tree"
+          :data="userTree"
+          :props="userDefaultProps"
+          node-key="usercode"
+          show-checkbox
+          default-expand-all
+          :style="{height: (contentHeight-370)+'px',overflowY:'auto'}"
+          :filter-node-method="filterUserNode"
+          @check="userTreeCheck"
+        />
+        <!--        @check-change="handleCheckChange"-->
+
+      </div>
+
+      <span slot="footer" class="dialog-footer">
+        <div class="footerButton">
+          <el-button @click="dialogVisibleUserCancel">鍙� 娑�</el-button>
+          <el-button
+            type="primary"
+            :loading="$store.state.app.buttonIsDisabled"
+            :disabled="$store.state.app.buttonIsDisabled"
+            @click="dialogVisibleUserConfirm"
+          >淇� 瀛�</el-button>
+        </div>
+      </span>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
 
 import { ShopSearch } from '@/api/dzkb'
-import { AnDengTypeSearch } from '@/api/jcsz'
+import {
+  AddUpdateAnDengType, AnDengDigoResponUserSearch, AnDengDigoResponUserSeave, AnDengResponUserCloseSeave,
+  AnDengResponUserDeleteSeave,
+  AnDengResponUserSearch,
+  AnDengTypeSearch,
+  DeleteAnDengType
+} from '@/api/jcsz'
 
 export default {
   name: 'Zzjg',
@@ -100,19 +249,29 @@
         children: 'children',
         label: 'org_name'
       },
-      allowClose: true, // 鍏佽鍏抽棴
-      tags: [
-        { name: '鏍囩涓�' },
-        { name: '鏍囩浜�' },
-        { name: '鏍囩涓�' },
-        { name: '鏍囩鍥�' }
-      ]
+      settingDialogVisible: false,
+      settingDialogTableData: [],
+      allowClose: false, // 鍏佽鍏抽棴
+      AnDengTypeArr: [], // 瀹夌伅绫诲瀷
+      AnDengResponUserArr: [], // 瀹夌伅鐢ㄦ埛
+      userDialogVisible: false,
+      userDefaultProps: {
+        children: 'children',
+        label: 'username'
+      },
+      userDialogArr: [],
+      userTree: [],
+      filterUserText: '',
+      treeCheckedKey: []// 鏍戝舰澶嶉�夋閫変腑鐨剈sercode
 
     }
   },
   watch: {
     filterText(val) {
       this.$refs.tree.filter(val)
+    },
+    filterUserText(val) {
+      this.$refs.userTree.filter(val)
     }
   },
   created() {
@@ -130,34 +289,223 @@
         }
       })
     },
+    // 鑾峰彇宸︿晶杞﹂棿淇℃伅
     async getShopSearch() {
-      const { data: res } = await ShopSearch()
-      this.shopTree = res
+      const res = await ShopSearch()
+      this.shopTree = res.data
+      this.$nextTick(() => {
+        this.$refs.tree.setCurrentKey(this.shopTree[0].org_code) // 榛樿閫変腑鑺傜偣绗竴涓�
+      })
+      return { code: res.code }
     },
+    // 鑾峰彇瀹夌伅绫诲瀷
     async getAnDengTypeSearch() {
-      // const { data: res } = await AnDengTypeSearch()
+      const { data: res } = await AnDengTypeSearch()
+      this.AnDengTypeArr = res
+      await this.getAnDengResponUserSearch(this.AnDengTypeArr[0].name)
     },
+    // 鑾峰彇瀹夌伅浜哄憳
+    async getAnDengResponUserSearch(name) {
+      const data = {
+        wkshopcode: this.$refs.tree.getCurrentKey(),
+        calltypecode: this.AnDengTypeArr.find(item => item.name === name).code
+      }
+      const { data: res } = await AnDengResponUserSearch(data)
+      this.AnDengResponUserArr = res || []
 
+      this.allowClose = this.AnDengResponUserArr[0] ? this.AnDengResponUserArr[0].enable === 'Y' : false
+    },
+    // tab鍒囨崲鐐瑰嚮
+    tabClick(val) {
+      this.getAnDengResponUserSearch(val.label)
+    },
+    // 瀹夌伅绯荤粺/鍝嶅簲浜哄憳鍒犻櫎
+    async tagClose(val, tab, tag) {
+      const data = {
+        ando_cogfigid: tab.id,
+        id: tag.id
+      }
+      const res = await AnDengResponUserDeleteSeave(data)
+      if (res.code === '200') {
+        await this.getAnDengResponUserSearch(tab.name)
+      }
+    },
     // 杩囨护鑺傜偣
     filterNode(value, data) {
       if (!value) return true
-      return data.label.indexOf(value) !== -1
+      return data.org_name.indexOf(value) !== -1
     },
     // 鑷畾涔夊懠鍙被鍨�
-    setting() {
+    async setting() {
+      const { data: res } = await AnDengTypeSearch()
+      this.settingDialogTableData = res
+      this.settingDialogVisible = true
 
+      this.settingDialogTableData.forEach(item => {
+        let number = Math.random() * Math.random()// 浣滀负鍒犻櫎鏃剁殑鏍囪瘑绗�
+        number = number === 0 ? (10 + Math.random()) : number
+        item.number = number
+        item.isVisible = 0
+      })
     },
-    // tag鍏抽棴浜嬩欢
-    tagClose(val, tag) {
-      console.log(val, tag)
+    addRow() {
+      if (this.settingDialogTableData.find(i => i.isVisible === 1)) {
+        return this.$message.info('璇峰厛淇濆瓨鎴栧彇娑堟湰鏉¤褰曪紒')
+      }
+      let number = Math.random() * Math.random()// 浣滀负鍒犻櫎鏃剁殑鏍囪瘑绗�
+      number = number === 0 ? (10 + Math.random()) : number
+      this.settingDialogTableData.push({
+        number,
+        isVisible: 1,
+        code: '',
+        name: ''
+      })
     },
+    async saveRow(row) {
+      const res = await AddUpdateAnDengType([row])
+      if (res.code === '200') {
+        await this.setting()
+      }
+    },
+    cancelRow(row) {
+      this.settingDialogTableData.splice(this.settingDialogTableData.length - 1, 1)
+    },
+    delRow(row) {
+      if (this.settingDialogTableData.find(i => i.isVisible === 1)) {
+        return this.$message.info('璇峰厛淇濆瓨鎴栧彇娑堟湰鏉¤褰曪紒')
+      }
+      DeleteAnDengType({ andengtypecode: row.code }).then(res => {
+        this.setting()
+      })
+    },
+    handleClose() {
+      this.settingDialogTableData = []
+    },
+    // 杩斿洖
+    dialogVisibleCancel() {
+      this.settingDialogVisible = false
+      this.getAnDengTypeSearch()
+    },
+    // 鍏佽鍏抽棴鐐瑰嚮浜嬩欢
+    async allowCloseChange() {
+      const data = {
+        wkshopcode: this.$refs.tree.getCurrentKey(),
+        calltypecode: this.AnDengTypeArr[parseInt(this.$refs.elTabs.currentName)].code,
+        enable: this.allowClose ? 'Y' : 'N'
+      }
+      await AnDengResponUserCloseSeave(data)
+    },
+    // 鏍戝舰閫変腑琛屽垏鎹㈢偣鍑�
+    currentTreeChange(val) {
+      this.getAnDengResponUserSearch(this.AnDengTypeArr[parseInt(this.$refs.elTabs.currentName)].name)
+    },
+    // 鍝嶅簲浜哄憳鐐瑰嚮
+    responseUserClick() {
+      const loading = this.$loading({
+        lock: true,
+        text: '姝e湪鍔犺浇鏁版嵁锛岃绋嶇瓑...',
+        spinner: 'el-icon-loading',
+        customClass: 'osloading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
 
+      const data = {
+        wkshopcode: this.$refs.tree.getCurrentKey(),
+        calltypecode: this.AnDengTypeArr[parseInt(this.$refs.elTabs.currentName)].code
+      }
+      AnDengDigoResponUserSearch(data).then(res => {
+        if (res.code === '200') {
+          this.userTree.push({
+            username: '鍏ㄩ儴',
+            children: res.data
+          })
+
+          res.data.forEach(item => {
+            if (item.flag === 'Y') {
+              this.treeCheckedKey.push(item.usercode)
+              this.userDialogArr.push(item)
+            }
+          })
+
+          loading.close()
+          this.userDialogVisible = true
+
+          this.$nextTick(() => {
+            this.$refs.userTree.setCheckedKeys(this.treeCheckedKey)
+          })
+        }
+      })
+    },
+    handleUserClose() {
+      this.userTree = []
+      this.userDialogArr = []
+      this.treeCheckedKey = []
+    },
+    dialogVisibleUserCancel() {
+      this.userDialogVisible = false
+    },
+    async dialogVisibleUserConfirm() {
+      const data = []
+
+      this.$refs.userTree.getCheckedKeys().forEach(i => {
+        // console.log(i)
+        if (i !== undefined) {
+          data.push({
+            code: i
+          })
+        }
+      })
+      this.$store.state.app.buttonIsDisabled = true
+      const res = await AnDengDigoResponUserSeave(this.$refs.tree.getCurrentKey(), this.AnDengTypeArr[parseInt(this.$refs.elTabs.currentName)].code, this.allowClose ? 'Y' : 'N', data)
+      if (res.code === '200') {
+        // this.$refs.userTree.setCheckedKeys([])
+        this.userDialogVisible = false
+        this.$message.success('淇濆瓨鎴愬姛锛�')
+        this.$store.state.app.buttonIsDisabled = false
+        await this.getAnDengResponUserSearch(this.AnDengTypeArr[parseInt(this.$refs.elTabs.currentName)].name)
+      }
+    },
+    userTagClose(val, tag) {
+      this.treeCheckedKey = this.treeCheckedKey.filter(i => i !== tag.usercode)
+      this.userDialogArr = this.userDialogArr.filter(i => i.usercode !== tag.usercode)
+      this.$refs.userTree.setCheckedKeys(this.treeCheckedKey)
+    },
+    userTreeCheck(obj, { checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys }) {
+      // console.log(obj, checkedNodes, checkedKeys, halfCheckedNodes, halfCheckedKeys, 6)
+      this.treeCheckedKey = checkedKeys.filter(i => i !== undefined)
+      this.userTree[0].children.forEach(i => {
+        if (this.treeCheckedKey.includes(i.usercode)) {
+          i.flag = 'Y'
+        } else {
+          i.flag = 'N'
+        }
+      })
+      this.userDialogArr = this.userTree[0].children.filter(i => i.flag === 'Y')
+    },
+    // handleCheckChange(data) {
+    //   if (data.children) {
+    //     data.children.forEach((item) => {
+    //       const node = this.$refs.userTree.getNode(item)
+    //       if (!node.visible) {
+    //         this.$refs.userTree.setChecked(item, false)
+    //       }
+    //     })
+    //   }
+    // },
+    // 杩囨护鑺傜偣
+    filterUserNode(value, data) {
+      if (!value) return true
+      return data.username.indexOf(value) !== -1
+    },
     // 鑾峰彇椤甸潰楂樺害
     getHeight() {
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 85
         this.contentHeight = this.mainHeight - 142
       })
+    },
+    tableRowClassName({ row, rowIndex }) {
+      return 'custom-row'
     }
 
   }
@@ -186,7 +534,7 @@
   margin: 10px 0 10px 10px;
 }
 
-.pane_top{
+.pane_top {
   background-color: #fafafa;
   height: 50px;
   display: flex;
@@ -194,7 +542,8 @@
   justify-content: space-between;
   padding: 0 10px;
   margin-bottom: 20px;
-  .bar{
+
+  .bar {
     width: 4px;
     height: 20px;
     border-radius: 2px;
@@ -202,15 +551,19 @@
     margin-right: 10px;
   }
 }
-.pane_content{
+
+.pane_content {
   background-color: #fafafa;
   padding: 10px;
   min-height: 400px;
 }
 
-::v-deep .is-current>.el-tree-node__content{
-  background-color: $main_color;
- font-weight: bolder;
+.body_left_tree {
+  ::v-deep .is-current > .el-tree-node__content {
+    background-color: $main_color !important;
+    font-weight: bolder;
+    color: #FFFFFF;
+  }
 }
 </style>
 
@@ -251,7 +604,7 @@
 }
 
 ::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
+  padding: 10px 20px 20px 20px !important;
 }
 
 ::v-deep .dialogVisibleRoles .el-dialog__body {

--
Gitblit v1.9.3