From 4a8ff39b0fab0627ef8f7459587d514cc01c3676 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 20 十月 2025 10:52:02 +0800
Subject: [PATCH] Merge branch 'wuhuyancao' of http://139.186.142.91:10010/r/productDev/dmvisit into wuhuyancao
---
admin/src/components/business/OperaDeviceRoleWindow.vue | 185 ++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 171 insertions(+), 14 deletions(-)
diff --git a/admin/src/components/business/OperaDeviceRoleWindow.vue b/admin/src/components/business/OperaDeviceRoleWindow.vue
index 76ddcfb..84844fb 100644
--- a/admin/src/components/business/OperaDeviceRoleWindow.vue
+++ b/admin/src/components/business/OperaDeviceRoleWindow.vue
@@ -2,32 +2,39 @@
<GlobalWindow
:title="title"
:visible.sync="visible"
+ width="1000px"
:confirm-working="isWorking"
@confirm="confirm"
>
<el-form :model="form" ref="form" :rules="rules">
- <el-form-item label="鍚嶇О" prop="name">
+ <el-form-item label="闂ㄧ鐐瑰垎缁勫悕绉�" prop="name">
<el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
</el-form-item>
- <el-form-item label="鏄惁榛樿" prop="isDefault">
+ <el-form-item label="榛樿闂ㄧ鐐瑰垎缁�" prop="isDefault">
<el-switch
v-model="form.isDefault"
active-color="#13ce66"
inactive-color="#ff4949"
- :active-value="1"
- :inactive-value="0">
+ :active-value="0"
+ :inactive-value="1">
</el-switch>
</el-form-item>
<el-form-item label="鎺堟潈闂ㄧ" prop="doorIds">
- <el-radio-group v-model="form.doorIds">
- <el-radio :label="3">鍏ㄩ儴闂ㄧ</el-radio>
- <el-radio :label="6">閮ㄥ垎闂ㄧ</el-radio>
+ <el-radio-group v-model="form.radio" @input="changeRadio">
+ <el-radio :label="0">鍏ㄩ儴闂ㄧ</el-radio>
+ <el-radio :label="1">閮ㄥ垎闂ㄧ</el-radio>
</el-radio-group>
- <el-checkbox-group v-model="form.doorIds">
- <el-checkbox label="闂ㄧA"></el-checkbox>
- <el-checkbox label="闂ㄧB"></el-checkbox>
- <el-checkbox label="闂ㄧC"></el-checkbox>
- </el-checkbox-group>
+ <el-transfer
+ v-if="form.radio === 1"
+ style="margin-top: 15px;"
+ :titles="['鏈�夐棬绂佺偣', '宸查�夐棬绂佺偣']"
+ filterable
+ :filter-method="filterMethod"
+ filter-placeholder="璇疯緭鍏ラ棬绂佺偣鎴栧尯鍩熷悕绉�"
+ v-model="form.doorIds"
+ class="transfer"
+ :data="device">
+ </el-transfer>
</el-form-item>
</el-form>
</GlobalWindow>
@@ -36,21 +43,43 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+import { getList } from '@/api/business/device'
export default {
name: 'OperaDeviceRoleWindow',
extends: BaseOpera,
components: { GlobalWindow },
data () {
+ var validatePass = (rule, value, callback) => {
+ if (this.form.radio === 1) {
+ if (value.length === 0) {
+ callback(new Error('璇烽�夋嫨闂ㄧ璁惧'))
+ }
+ }
+ callback()
+ };
return {
// 琛ㄥ崟鏁版嵁
form: {
id: null,
name: '',
- isDefault: '',
- doorIds: ''
+ isDefault: 1,
+ doorIds: [],
+ status: 1,
+ radio: 0
+ },
+ device: [],
+ filterMethod(query, item) {
+ if (!query) return item;
+ return item.label.indexOf(query) > -1 || item.area.indexOf(query) > -1;
},
// 楠岃瘉瑙勫垯
rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ラ棬绂佺粍鍚嶇О' }
+ ],
+ doorIds: [
+ { validator: validatePass, trigger: 'blur' }
+ ]
}
}
},
@@ -59,6 +88,134 @@
api: '/business/deviceRole',
'field.id': 'id'
})
+ },
+ methods: {
+ confirm () {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ // 璋冪敤鏂板缓鎺ュ彛
+ this.isWorking = true
+ if (this.form.id == null || this.form.id === '') {
+ const doorNames = []
+ this.form.doorIds.forEach(item => {
+ this.device.forEach(row => {
+ if (item === row.id) {
+ doorNames.push(row.name)
+ }
+ })
+ })
+ this.api.create({
+ name: this.form.name,
+ status: this.form.status,
+ doorNames: doorNames.join(','),
+ type: 2,
+ isDefault: this.form.isDefault,
+ doorIds: this.form.doorIds.join(',')
+ })
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('鏂板缓鎴愬姛')
+ this.$emit('success')
+ })
+ .catch(e => {
+ // this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ } else {
+ const doorNames = []
+ this.form.doorIds.forEach(item => {
+ this.device.forEach(row => {
+ if (item === row.id) {
+ doorNames.push(row.name)
+ }
+ })
+ })
+ this.api.updateById({
+ id: this.form.id,
+ name: this.form.name,
+ status: this.form.status,
+ isDefault: this.form.isDefault,
+ type: 2,
+ doorNames: doorNames.join(','),
+ doorIds: this.form.doorIds.join(',')
+ })
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('淇敼鎴愬姛')
+ this.$emit('success')
+ })
+ .catch(e => {
+ // this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ }
+ })
+ },
+ // 鑾峰彇璁惧
+ getLists () {
+ getList({type:0, isdeleted:0 })
+ .then(res => {
+ this.device = res.map(item => {
+ return {
+ label: item.doorName,
+ area: item.regionPathName,
+ key: item.id
+ }
+ })
+ console.log(this.device)
+ })
+ },
+ changeRadio (e) {
+ this.form.doorIds = []
+ },
+ open (title, target) {
+ this.getLists()
+ this.title = title
+ this.visible = true
+ // 鏂板缓
+ 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]
+ }
+ })
+ }
}
}
</script>
+
+<style lang="scss" scoped>
+.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