role-manage.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. <template>
  2. <el-form ref="sizeForm" :model="sizeForm" label-suffix=":" :rules="rules" label-width="120px">
  3. <el-form-item prop="name" label="角色名称">
  4. <el-input placeholder="请输入角色名称" v-model="sizeForm.name" clearable maxlength="20"></el-input>
  5. </el-form-item>
  6. <el-form-item prop="code" label="角色代码">
  7. <el-input placeholder="请输入角色代码" v-model="sizeForm.code" clearable maxlength="30"></el-input>
  8. </el-form-item>
  9. <el-form-item prop="roleCategory" label="关键状态">
  10. <dg-select placeholder="请选择关键状态" v-model="sizeForm.roleCategory">
  11. <el-option value="ALL" label="全局角色"></el-option>
  12. <el-option value="LOCAL" label="本地角色"></el-option>
  13. </dg-select>
  14. </el-form-item>
  15. <el-form-item v-if="sizeForm.roleCategory === 'LOCAL'" prop="roleLevel" label="角色层级">
  16. <dg-select
  17. placeholder="请选择角色层级"
  18. v-model="sizeForm.roleLevel"
  19. clearable
  20. filterable
  21. code="DM_ROLE_LEVEL"
  22. ></dg-select>
  23. </el-form-item>
  24. <el-form-item v-if="sizeForm.roleCategory === 'LOCAL'" prop="policeCategory" label="警种">
  25. <dg-select
  26. placeholder="请选择警种"
  27. v-model="sizeForm.policeCategory"
  28. clearable
  29. filterable
  30. code="T_MD_POLICE_TYPE"
  31. ></dg-select>
  32. </el-form-item>
  33. <el-form-item v-if="sizeForm.roleCategory === 'LOCAL'" prop="roleBusiness" label="业务域">
  34. <dg-tree-drop
  35. v-model="sizeForm.roleBusiness"
  36. placeholder="请选择业务域"
  37. :props="{
  38. value: 'code',
  39. label: 'name',
  40. children: 'child'
  41. }"
  42. :data="tagTree"
  43. clearable
  44. filterable
  45. multiple
  46. visible-type="leaf"
  47. style="width: 100%"
  48. @change="handleTagTreeChange"
  49. ></dg-tree-drop>
  50. </el-form-item>
  51. <el-form-item prop="isNotLimitCount" label="是否限制配额">
  52. <dg-select
  53. placeholder="请选择是否限制配额"
  54. v-model="sizeForm.isNotLimitCount"
  55. code="DM_ISENABLED"
  56. ></dg-select>
  57. </el-form-item>
  58. <el-form-item v-if="sizeForm.roleCategory === 'LOCAL'" prop="detail" label="详细描述">
  59. <el-input type="textarea" :rows="2" v-model="sizeForm.detail"></el-input>
  60. </el-form-item>
  61. <div class="dg-layer-demo" v-footer>
  62. <dg-button @click="handleClose">取消</dg-button>
  63. <dg-button type="primary" @click="handlSave">保存</dg-button>
  64. </div>
  65. </el-form>
  66. </template>
  67. <script>
  68. import * as roleinfoManageApi from "@/api/roleinfo-manage.js"
  69. import * as regular from "@/utils/regular"
  70. import { getBusinessTagTree } from "@/api/data-auth"
  71. export default {
  72. name: "index",
  73. // 接收父页面传过来的属性
  74. props: {
  75. type: {
  76. type: String,
  77. default: "create"
  78. },
  79. createType: {
  80. type: String,
  81. default: "role"
  82. },
  83. formData: {
  84. type: Object,
  85. default: () => {}
  86. },
  87. appId: {
  88. type: String,
  89. default: ""
  90. }
  91. },
  92. // 页面数据绑定
  93. data() {
  94. const checkCode = (rule, value, callback) => {
  95. if (!value) {
  96. return callback(new Error("请输入角色代码"))
  97. }
  98. if (value && !regular.checkNumLetter(value)) {
  99. return callback(new Error("角色代码只能由数字、字母、_组成"))
  100. }
  101. callback()
  102. }
  103. return {
  104. sizeForm: {
  105. appId: "", // 应用id
  106. name: "", // 角色名称
  107. code: "", // 角色代码
  108. roleCategory: "", // 关键状态
  109. roleLevel: "", // 角色层级
  110. policeCategory: "", // 警种
  111. roleBusiness: [], // 业务域
  112. isNotLimitCount: "0", // 是否限额
  113. detail: "" // 详细描述
  114. },
  115. url: "",
  116. rules: {
  117. name: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
  118. code: [
  119. { required: true, message: "请输入角色代码", trigger: "blur" },
  120. { validator: checkCode, trigger: "blur" }
  121. ],
  122. roleCategory: [{ required: true, message: "请选择关键状态", trigger: "change" }]
  123. },
  124. tagTree: []
  125. }
  126. },
  127. created() {
  128. this.init()
  129. },
  130. // 方法
  131. methods: {
  132. handleClose() {
  133. this.$emit("success")
  134. },
  135. handlSave() {
  136. this.sizeForm.name = this.sizeForm.name.trim()
  137. let sizeForm = { ...this.sizeForm }
  138. sizeForm.roleBusiness = String(sizeForm.roleBusiness || "") // 业务域格式
  139. let api = ""
  140. if (this.type === "create") {
  141. api = this.createType === "role" ? "addRole" : "roleApply"
  142. }
  143. if (this.type === "update") {
  144. api = this.createType === "role" ? "editRole" : "roleApply"
  145. }
  146. if (this.createType === "apply") {
  147. sizeForm = {
  148. roleSaveVo: sizeForm,
  149. operate: this.formData && this.formData.id ? "20" : "10"
  150. }
  151. }
  152. this.$refs.sizeForm.validate(valid => {
  153. if (!valid) {
  154. return
  155. }
  156. roleinfoManageApi[api](sizeForm)
  157. .then(res => {
  158. this.$message.success("保存成功")
  159. this.$emit("success", true)
  160. })
  161. .catch(error => {
  162. this.$message.error(error)
  163. })
  164. })
  165. },
  166. // 改变标签域
  167. handleTagTreeChange(codes, nodes) {
  168. let tags = []
  169. for (let i = 0; i < nodes.length; i++) {
  170. const item = nodes[i]
  171. if (!item.parent) {
  172. tags.push(item.code)
  173. }
  174. }
  175. this.sizeForm.roleBusiness = tags.join(",")
  176. },
  177. // 获取标签树
  178. getTagTree() {
  179. return new Promise(resolve => {
  180. getBusinessTagTree().then(res => {
  181. const tree = res.data.content.map(item => {
  182. let disabled = true
  183. if (item.parent && item.child) {
  184. disabled = false
  185. }
  186. return {
  187. ...item,
  188. disabled
  189. }
  190. })
  191. resolve(tree)
  192. })
  193. })
  194. },
  195. async init() {
  196. this.getTagTree()
  197. // 关联应用id
  198. this.$set(this.sizeForm, "appId", this.appId)
  199. if (this.type == "create") {
  200. // 业务域默认
  201. // that.changeUrl("01");
  202. } else {
  203. this.sizeForm = this.formData
  204. // const { policeCategory } = that.sizeForm;
  205. // const { roleBusiness } = that.sizeForm;
  206. // if (roleBusiness) {
  207. // that.changeUrl(policeCategory);
  208. // that.$set(that.sizeForm, "roleBusiness", roleBusiness.split(","));
  209. // } else {
  210. // if (policeCategory) {
  211. // that.changeUrl(policeCategory);
  212. // } else {
  213. // that.changeUrl("01");
  214. // }
  215. // }
  216. }
  217. }
  218. }
  219. }
  220. </script>
  221. <style scoped></style>