From 69a1b3bf45738f048361ee4ccb6bdc64fce35720 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 12 三月 2025 11:31:46 +0800
Subject: [PATCH] 更新

---
 admin/src/components/business/OperaMemberRoleWindow.vue |  220 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 220 insertions(+), 0 deletions(-)

diff --git a/admin/src/components/business/OperaMemberRoleWindow.vue b/admin/src/components/business/OperaMemberRoleWindow.vue
new file mode 100644
index 0000000..89cacdb
--- /dev/null
+++ b/admin/src/components/business/OperaMemberRoleWindow.vue
@@ -0,0 +1,220 @@
+<template>
+  <GlobalWindow :title="title" :visible.sync="visible" width="900px" :confirm-working="isWorking" @confirm="confirm">
+    <p class="tip-warn"><i class="el-icon-warning"></i>鎻愰啋锛�<br>
+      1.闂ㄧ鏉冮檺閰嶇疆鎴愬姛鍚庯紝鎺堟潈浠诲姟鍗宠繘鍏ユ潈闄愪笅鍙戦槦鍒楋紝鍙墠寰�銆愪汉鍛樻巿鏉冭褰曘�戞煡鐪嬩笅鍙戣繘搴�;<br>
+      2.濡傛灉闇�瑕佹竻绌哄綋鍓嶉�変腑浜哄憳涓嬪彂鏉冮檺锛屼互涓嬨�愬凡閫夐棬绂佺偣鍒嗙粍銆戜负绌烘彁浜ゅ嵆鍙��
+    </p>
+    <p class="tip" v-if="form.names != null">姝e湪涓�<em>銆恵{ form.names.map(item => `${item}`).join('锛�') }}銆�</em> 閰嶇疆闂ㄧ鏉冮檺</p>
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="闂ㄧ鏈夋晥鏈燂細" prop="timeType">
+        <el-radio-group v-model="form.timeType">
+          <el-radio :label="0">闀挎湡鏈夋晥</el-radio>
+          <el-radio :label="1">鑷畾涔夋椂闂�</el-radio>
+          <el-radio :label="2" v-if="companyType === 0">鍩硅鏈夋晥鏈�</el-radio>
+        </el-radio-group>
+        <div v-if="form.timeType == 1" style="margin-top: 10px">
+          <el-date-picker @change="seleTime" v-model="time" type="datetimerange" format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡">
+          </el-date-picker>
+        </div>
+      </el-form-item>
+      <el-form-item label="闂ㄧ鐐瑰垎缁勶細" prop="roleIds">
+        <el-transfer style="margin-top: 15px;font-size: 12px" :titles="['鏈�夐棬绂佺偣鍒嗙粍', '宸查�夐棬绂佺偣鍒嗙粍']" filterable
+          :filter-method="filterMethod" filter-placeholder="璇疯緭鍏ラ棬绂佺偣鍒嗙粍鍚嶇О" v-model="form.roleIds" class="transfer"
+          :data="roles">
+        </el-transfer>
+      </el-form-item>
+
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getDeviceRoleList } from '@/api/business/device'
+export default {
+  name: 'OperaDeviceRoleWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data() {
+    var validateTime = (rule, value, callback) => {
+      if (this.form.timeType == null) {
+        callback(new Error('璇峰~鍐欐纭殑闂ㄧ鏈夋晥鏈熸椂闂�'))
+        return
+      }
+      if (this.form.timeType === 1 && (this.form.startTime == null || this.form.endTime == null)) {
+        callback(new Error('璇峰~鍐欐纭殑闂ㄧ鏈夋晥鏈熸椂闂�'))
+        return
+      }
+      callback()
+    }
+    return {
+      // 琛ㄥ崟鏁版嵁
+      time: null,
+      companyType: 1,
+      form: {
+        ids: [],
+        names: [],
+        timeType: 0,
+        roleIds: [],
+        status: 1,
+        startTime: null,
+        endTime: null,
+        radio: 0
+      },
+      roles: [],
+      rules: {
+        // 楠岃瘉瑙勫垯
+        timeType: [
+          { required: true, validator: validateTime, message: '璇烽�変腑闂ㄧ鏈夋晥鏈�' }
+        ],
+        startTime: [
+          { validator: validateTime, trigger: 'blur' }
+        ],
+        endTime: [
+          { validator: validateTime, trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  created() {
+    this.config({
+      api: '/business/member',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    filterMethod(query, item) {
+      if (!query) return item
+      return item.label.indexOf(query) > -1
+    },
+    seleTime(e) {
+      if (e && e.length >= 2) {
+        this.form.startTime = e[0]
+        this.form.endTime = e[1]
+      } else {
+        this.form.startTime = null
+        this.form.endTime = null
+      }
+    },
+    confirm() {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        if (this.form.roleIds == null || this.form.roleIds.length == 0) {
+          this.$dialog.actionConfirm('鏉冮檺涓虹┖锛屾彁浜ゅ悗鍗虫竻闄ゆ墍閫変汉鍛樺凡鍒嗛厤鏉冮檺锛佽璋ㄦ厧鎿嶄綔', '鎮ㄧ‘璁よ繘琛岃鎿嶄綔鍚楋紵')
+            .then(() => {
+              this.confirmDo()
+            })
+            .catch(() => { })
+        } else {
+          this.confirmDo()
+        }
+      })
+    },
+    confirmDo() {
+      // 璋冪敤鏂板缓鎺ュ彛
+      this.isWorking = true
+      this.api.batchRoleAuth({
+        ids: this.form.ids,
+        timeType: this.form.timeType,
+        startTime: this.form.startTime,
+        endTime: this.form.endTime,
+        roleIds: this.form.roleIds
+      })
+        .then(() => {
+          this.visible = false
+          this.$tip.apiSuccess('鎺堟潈鎴愬姛锛屽彲鍓嶅線銆愪汉鍛樻巿鏉冭褰曘�戞煡鐪嬩笅鍙戣繘搴�')
+          this.$emit('success')
+        })
+        .catch(e => {
+          //  this.$tip.apiFailed(e)
+        })
+        .finally(() => {
+          this.isWorking = false
+        })
+    },
+    // 鑾峰彇璁惧
+    getLists() {
+      getDeviceRoleList({ type: 2 })
+        .then(res => {
+          this.roles = res.map(item => {
+            return {
+              label: item.name,
+              area: item.name,
+              key: item.id
+            }
+          })
+        })
+    },
+    open(title, ids, names, companyType) {
+      this.roles = []
+      this.getLists()
+      this.title = title
+      this.visible = true
+      this.companyType = companyType
+      // 鏂板缓
+      this.$nextTick(() => {
+        this.$refs.form.resetFields()
+        this.form[this.configData['field.id']] = null
+        this.form.ids = ids
+        this.form.names = names
+
+        console.log(names)
+      })
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+@import "@/assets/style/variables.scss";
+
+// 瑙掕壊閰嶇疆
+.global-window {
+  .tip {
+    em {
+      font-style: normal;
+      color: $primary-color;
+      font-weight: bold;
+    }
+  }
+
+  .tip-warn {
+    margin: 4px 0 12px 0;
+    font-size: 12px;
+    color: #999;
+
+    i {
+      color: orange;
+      margin-right: 4px;
+      font-size: 14px;
+      position: relative;
+      top: 1px;
+    }
+  }
+}
+
+.transfer {
+  height: 600px;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  ::v-deep .el-transfer-panel {
+    flex: 1;
+    height: 100%;
+  }
+
+  ::v-deep .el-transfer-panel__body {
+    height: 500px;
+  }
+
+  ::v-deep .el-transfer-panel__list.is-filterable {
+    height: 480px;
+  }
+}
+</style>

--
Gitblit v1.9.3