Mr.Shi
2023-08-11 5a7fb4358eb902ce139096f20ef3c0625adcd7f4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<template>
  <GlobalWindow
    :title="title"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
  >
    <div v-if="isCopy" style="font-size:14px">
      您正在复制角色
      <span style="color:#2E68EC">超级管理员</span>
      会自动赋予新建角色对应的菜单和权限
    </div>
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="角色编码" prop="code" required>
        <el-input v-model="form.code" placeholder="请输入角色编码" v-trim maxlength="50"/>
      </el-form-item>
      <el-form-item label="角色名称" prop="name" required>
        <el-input v-model="form.name" placeholder="请输入角色名称" v-trim maxlength="50"/>
      </el-form-item>
      <el-form-item label="角色备注" prop="remark">
        <el-input v-model="form.remark" type="textarea" placeholder="请输入角色备注" :rows="3" v-trim maxlength="500"/>
      </el-form-item>
    </el-form>
  </GlobalWindow>
</template>
 
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
import { validateSpecialKey } from '@/assets/js/validate'
export default {
  name: 'OperaRoleWindow',
  extends: BaseOpera,
  components: { GlobalWindow },
  data () {
    return {
      // 是否为复制
      isCopy: false,
      // 复制的角色ID
      copyId: null,
      // 原角色码
      originRoleCode: '',
      // 表单数据
      form: {
        id: null,
        code: '',
        name: '',
        remark: ''
      },
      // 验证规则
      rules: {
        code: [
          { required: true, message: '请输入角色编码', trigger: 'blur' },
          { max: 20, message: '输入字数不超过20', trigger: 'blur' },
          { validator: validateSpecialKey, trigger: 'blur' }
        ],
        name: [
          { max: 20, message: '输入字数不超过20', trigger: 'blur' },
          { required: true, message: '请输入角色名称', trigger: 'blur' }
        ],
        remark: [
          { max: 200, message: '输入字数不超过200', trigger: 'change' },
        ]
      }
    }
  },
  methods: {
    /**
     * 打开窗口
     *
     * @param title 窗口标题
     * @param target 行对象(仅编辑需该参数)
     */
    open (title, target, isCopy = false) {
      this.title = title
      this.visible = true
      this.isCopy = isCopy
      // 复制
      if (this.isCopy) {
        this.$refs.form.resetFields()
        this.copyId = target.id
        return
      }
      // 新建
      if (target == null) {
        this.$nextTick(() => {
          this.$refs.form.resetFields()
          this.form[this.configData['field.id']] = null
        })
        return
      }
      // 编辑
      this.$nextTick(() => {
        this.originRoleCode = target.code
        for (const key in this.form) {
          this.form[key] = target[key]
        }
      })
    },
    /**
     * 确认
     */
    confirm () {
      // 复制
      if (this.isCopy) {
        // 调用复制接口
        // TODO
        return
      }
      // 新建
      if (this.form.id == null || this.form.id === '') {
        this.__confirmCreate()
        return
      }
      // 编辑:未修改角色编码的情况
      if (this.originRoleCode === this.form.code) {
        this.__confirmEdit()
        return
      }
      // 编辑:修改了角色编码的情况
      this.$dialog.confirm('检测到您修改了角色编码,角色编码修改后前后端均可能需要调整代码,确认修改吗?', '提示', {
        confirmButtonText: '确认修改',
        type: 'warning'
      })
        .then(() => {
          this.__confirmEdit()
        })
    }
  },
  created () {
    this.config({
      api: '/system/role'
    })
  }
}
</script>