From 19824ba58a83eb98c0ed547067fbe988875b7283 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 29 九月 2025 17:08:05 +0800
Subject: [PATCH] 最新版本541200007

---
 admin/src/components/business/OperaWarningRuleWindow.vue |  222 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 183 insertions(+), 39 deletions(-)

diff --git a/admin/src/components/business/OperaWarningRuleWindow.vue b/admin/src/components/business/OperaWarningRuleWindow.vue
index 5635278..2f8126f 100644
--- a/admin/src/components/business/OperaWarningRuleWindow.vue
+++ b/admin/src/components/business/OperaWarningRuleWindow.vue
@@ -1,43 +1,57 @@
 <template>
   <GlobalWindow
     :title="title"
+    width="50%"
     :visible.sync="visible"
     :confirm-working="isWorking"
     @confirm="confirm"
   >
+    <p class="tip-warn"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛�<br>
+      1.璇锋寜闇�閰嶇疆鎺ㄩ�佽鍒欙紝閰嶉�佸涓鍒欐椂锛屽嵆涓哄涓鍒欐弧瓒虫椂鎵嶆帹閫�;<br>
+      2.鍙戠敓鍖哄煙闈炲繀濉紝涓嶅~鍒欒〃绀鸿瑙勫垯涓嬫墍鏈夊尯鍩熺殑鐩稿簲鎶ヨ绫诲瀷鍧囬�氱煡;<br>
+    </p>
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
-        <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+      <el-form-item label="閫夋嫨绛惧埌閫氱煡浜哄憳" prop="memberIds" style="margin-bottom: 30px" >
+        <el-select v-model="memberSelect" filterable multiple clearable  placeholder="璇烽�夋嫨" @change="changeMembers">
+          <el-option v-for="item in memberList" :key="'member_'+item.id" :label="item.name+'-'+item.companyName" :value="item.id+''">
+          </el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
-        <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+      <div style="display: flex;" v-for="(item,index) in form.detailList" :key="'region_'+item.random" >
+        <span style="line-height: 32px;font-size: 14px;"><b style="color: #F56C6C;margin-right: 4px;font-size: 11px;">*</b>{{'瑙勫垯'+(index +1)}}</span>
+        <el-form-item label=""   style="display: inline-block;margin-left: 10px; " >
+          <el-select v-model="item.warningId" filterable      placeholder="璇烽�夋嫨鎶ヨ绫诲瀷"    >
+            <el-option v-for="item in warningList"   :label="item.name" :value="item.id">  </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label=""  style="display: inline-block;margin-left: 10px">
+<!--          <el-select v-model="item.regionId" filterable multiple clearable  placeholder="璇烽�夋嫨鍙戠敓鍖哄煙" >
+            <el-option v-for="item in regionList" :key="item.id" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>-->
+          <treeselect
+              style="width: 200px;height:32px;display: inline-block"
+              @input="changeSel(index)"
+              v-model="item.regionId"
+              placeholder="璇烽�夋嫨鍙戠敓鍖哄煙"
+              :options="regionList"
+              :normalizer="normalizeOptions"
+              :default-expand-level="1"
+              noChildrenText="娌℃湁瀛愰�夐」"
+              noOptionsText="娌℃湁鍙�夐」"
+              noResultsText="娌℃湁鍖归厤鐨勭粨鏋�" />
+        </el-form-item>
+        <el-button type="danger" style="margin-left: 10px;height: 32px; " @click="delDo(index)" v-if="index>0 || form.detailList.length>1">鍒犻櫎</el-button>
+      </div>
+      <el-button type="primary" style="margin-left: 10px;margin-bottom: 20px;" @click="addDo">澧炲姞瑙勫垯</el-button>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-radio-group v-model="form.status">
+          <el-radio :label="0" :value="0">绂佺敤</el-radio>
+          <el-radio :label="1" :value="1">鍚敤</el-radio>
+        </el-radio-group>
       </el-form-item>
-      <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
-        <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
-        <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
-      </el-form-item>
-      <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
-        <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶囨敞" prop="info">
-        <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
-      </el-form-item>
-      <el-form-item label="鍐呴儴浜哄憳缂栫爜锛堝叧鑱攎ember)" prop="memberId">
-        <el-input v-model="form.memberId" placeholder="璇疯緭鍏ュ唴閮ㄤ汉鍛樼紪鐮侊紙鍏宠仈member)" v-trim/>
-      </el-form-item>
-      <el-form-item label="澶氳鍒欓棿闅旀椂闂�(绉掞級" prop="intervalSec">
-        <el-input v-model="form.intervalSec" placeholder="璇疯緭鍏ュ瑙勫垯闂撮殧鏃堕棿(绉掞級" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
-        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
-      </el-form-item>
-      <el-form-item label="鐘舵�� 0绂佺敤 1鍚敤" prop="status">
-        <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0绂佺敤 1鍚敤" v-trim/>
-      </el-form-item>
-      <el-form-item label="鎶ヨ绫诲瀷缂栫爜(鍏宠仈warning锛�" prop="warningId">
-        <el-input v-model="form.warningId" placeholder="璇疯緭鍏ユ姤璀︾被鍨嬬紪鐮�(鍏宠仈warning锛�" v-trim/>
+      <el-form-item label="鍙戠敓闂撮殧鏃堕棿(绉掞級" prop="intervalSec">
+        <el-input type="number" v-model="form.intervalSec" placeholder="璇疯緭鍏ュ瑙勫垯闂撮殧鏃堕棿(绉掞級" v-trim/>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -46,6 +60,8 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { allList } from '@/api/business/member'
+import { allList as warningList, regionList } from '@/api/business/warning'
 export default {
   name: 'OperaWarningRuleWindow',
   extends: BaseOpera,
@@ -55,20 +71,20 @@
       // 琛ㄥ崟鏁版嵁
       form: {
         id: null,
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        info: '',
-        memberId: '',
+        memberIds: '',
         intervalSec: '',
         sortnum: '',
-        status: '',
-        warningId: ''
+        status: 0,
+        detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null ,warningId:null}]
       },
+      memberSelect: [],
+      memberList: [],
+      warningList: [],
+      regionList: [],
       // 楠岃瘉瑙勫垯
       rules: {
+        memberIds: [{ required: true, message: '璇烽�夋嫨閫氱煡浜哄憳', tigger: 'blur' }],
+        status: [{ required: true, message: '璇烽�夋嫨鐘舵��'}]
       }
     }
   },
@@ -77,6 +93,134 @@
       api: '/business/warningRule',
       'field.id': 'id'
     })
+  },
+  methods: {
+    normalizeOptions (node) {
+      if (!node.childList || !node.childList.length) {
+        // 鍘绘帀children=[]鐨刢hildren灞炴��
+        delete node.childList
+      }
+      return {
+        id: node.indexCode,
+        label: node.name,
+        children: node.childList
+      }
+    },
+    changeSel(opt){
+      var item = this.form.detailList[opt]
+      this.form.detailList[opt].regionCode = null
+      this.form.detailList[opt].regionName = null
+      if(item.regionId){
+        var reg = this.getSelectedObject(item.regionId)
+        if(reg){
+          this.form.detailList[opt].regionCode = reg.indexCode
+          this.form.detailList[opt].regionName = reg.name
+        }
+      }
+      console.log(" this.form.detailList[opt]",reg, this.form.detailList[opt])
+    },
+    getSelectedObject(id) {
+      if (!id) {
+        return null  // 娌℃湁閫変腑椤规椂杩斿洖 null 鎴� {} 鏍规嵁闇�瑕佸鐞�
+      }
+      const findSelected = (options) => {
+        for (const option of options) {
+          if (option.indexCode === id) {
+            return option // 杩斿洖鍖归厤鐨勫畬鏁村璞�
+          } else if (option.childList && option.childList.length > 0) {
+            const found = findSelected(option.childList) // 閫掑綊鎼滅储瀛愰�夐」
+            if (found) return found // 濡傛灉鎵惧埌杩斿洖璇ュ璞�
+          }
+        }
+        return null; // 鏈壘鍒拌繑鍥� null 鎴� {} 鏍规嵁闇�瑕佸鐞�
+      }
+      return findSelected(this.regionList); // 寮�濮嬫悳绱㈠苟杩斿洖缁撴灉
+    },
+    addDo () {
+      this.form.detailList.push({random:Math.random(), regionId: null, regionName: null, regionCode: null,warningId:null })
+    },
+    delDo (index) {
+      if (this.form.detailList.length > 1 && this.form.detailList.length > index) {
+        this.form.detailList.splice(index, 1)
+      }
+    },
+    changeMembers () {
+      console.log(this.memberSelect)
+      this.form.memberIds = ''
+      if (!this.memberSelect || !this.memberSelect.length) {
+        return
+      }
+      this.form.memberIds = this.memberSelect.join(',')
+    },
+    open (title, target) {
+      this.memberSelect =[]
+      this.title = title
+      this.loadMember()
+      this.loadRegions()
+      this.loadWarning()
+      this.visible = true
+      this.form = {
+        id: null,
+        memberIds: '',
+        intervalSec: '',
+        sortnum: '',
+        status: 0,
+        detailList: [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }]
+      }
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        if (!this.form.detailList || !this.form.detailList.length) {
+          this.form.detailList = [{ random:Math.random(),regionId: null, regionName: null, regionCode: null,warningId:null }]
+        }
+        if(this.form.memberIds){
+          this.memberSelect = this.form.memberIds.split(",")
+        }
+      })
+    },
+    loadMember () {
+      allList({
+        type: 2
+      }).then(res => {
+        this.memberList = res
+      })
+    },
+    loadWarning () {
+      warningList({
+      }).then(res => {
+        this.warningList = res
+      })
+    },
+    loadRegions () {
+      regionList({
+      }).then(res => {
+        this.regionList = res
+      })
+    }
   }
 }
 </script>
+<style scoped lang="scss">
+.inline {
+  width: 178px;
+}
+.vue-treeselect {
+  line-height: 30px;
+  ::v-deep .vue-treeselect__control {
+    height: 32px;
+    .vue-treeselect__single-value {
+      line-height: 30px;
+    }
+  }
+}
+</style>

--
Gitblit v1.9.3