role-edit.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <!-- 角色编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="460px"
  5. :visible="visible"
  6. :close-on-click-modal="false"
  7. :title="isUpdate ? '修改角色' : '添加角色'"
  8. @update:visible="updateVisible"
  9. :maxable="true"
  10. >
  11. <el-form ref="form" :model="form" :rules="rules" label-width="82px">
  12. <el-form-item label="角色名称:" prop="name">
  13. <el-input
  14. clearable
  15. :maxlength="20"
  16. v-model="form.name"
  17. placeholder="请输入角色名称"
  18. />
  19. </el-form-item>
  20. <el-form-item label="编码:" prop="code">
  21. <el-input placeholder=" " v-model="form.code" />
  22. </el-form-item>
  23. <el-form-item label="启用状态:" prop="enable">
  24. <el-switch
  25. v-model="form.enable"
  26. active-color="#13ce66"
  27. inactive-color="#ff4949"
  28. :active-value="1"
  29. :inactive-value="0"
  30. >
  31. </el-switch>
  32. </el-form-item>
  33. <el-form-item label="密级:" prop="secretLevel">
  34. <el-select v-model="form.secretLevel" style="width: 100%">
  35. <el-option
  36. v-for="item in secretLevelList()"
  37. :key="item.value"
  38. :label="item.label"
  39. :value="item.value"
  40. ></el-option>
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item label="权限范围" prop="dataScope">
  44. <DictSelection
  45. dictName="角色数据权限字典"
  46. clearable
  47. v-model="form.dataScope"
  48. >
  49. </DictSelection>
  50. </el-form-item>
  51. <el-form-item prop="dataScope">
  52. <el-scrollbar
  53. v-if="form.dataScope == '2'"
  54. v-loading="authLoading"
  55. style="height: 40vh"
  56. wrap-style="overflow-x: hidden;"
  57. >
  58. <el-tree
  59. ref="tree"
  60. :data="deptData"
  61. :check-strictly="true"
  62. highlight-current
  63. node-key="id"
  64. :props="{ label: 'name' }"
  65. :expand-on-click-node="false"
  66. show-checkbox
  67. :default-expand-all="true"
  68. :default-checked-keys="checkedKeys"
  69. />
  70. </el-scrollbar>
  71. </el-form-item>
  72. </el-form>
  73. <template v-slot:footer>
  74. <el-button @click="updateVisible(false)">取消</el-button>
  75. <el-button type="primary" @click="save" :loading="loading">
  76. 保存
  77. </el-button>
  78. </template>
  79. </ele-modal>
  80. </template>
  81. <script>
  82. import { addRole, putRoles } from '@/api/system/role';
  83. import { listOrganizations } from '@/api/system/organization';
  84. import { secretLevelList } from '@/enum/dict';
  85. export default {
  86. props: {
  87. // 弹窗是否打开
  88. visible: Boolean,
  89. // 修改回显的数据
  90. data: Object
  91. },
  92. created() {
  93. this.getListOrganizations();
  94. },
  95. data() {
  96. const defaultForm = {
  97. name: '',
  98. groupId: '',
  99. enable: 1,
  100. dataScope: '',
  101. dataScopeDeptIds: '',
  102. secretLevel: 1,code:''
  103. };
  104. return {
  105. defaultForm,
  106. // 表单数据
  107. form: { ...defaultForm },
  108. // 表单验证规则
  109. rules: {
  110. name: [
  111. {
  112. required: true,
  113. message: '请输入角色名称',
  114. trigger: 'blur'
  115. }
  116. ],
  117. groupId: [
  118. {
  119. required: true,
  120. message: '请输入组织ID',
  121. trigger: 'blur'
  122. }
  123. ]
  124. },
  125. // 提交状态
  126. loading: false,
  127. // 是否是修改
  128. isUpdate: false,
  129. authLoading: false,
  130. organizationList: []
  131. };
  132. },
  133. methods: {
  134. secretLevelList() {
  135. return secretLevelList;
  136. },
  137. query() {
  138. this.loading = true;
  139. listOrganizations()
  140. .then((list) => {
  141. this.loading = false;
  142. this.organizationList = this.$util.toTreeData({
  143. data: list,
  144. idField: 'id',
  145. parentIdField: 'parentId'
  146. });
  147. })
  148. .catch((e) => {
  149. this.loading = false;
  150. });
  151. },
  152. getListOrganizations() {
  153. this.authLoading = true;
  154. listOrganizations()
  155. .then((list) => {
  156. let _list = list.filter((i) => i.name != '超级管理员');
  157. this.authLoading = false;
  158. this.deptData = this.$util.toTreeData({
  159. data: _list,
  160. idField: 'id',
  161. parentIdField: 'parentId'
  162. });
  163. })
  164. .catch((e) => {
  165. this.loading = false;
  166. // this.$message.error(e.message);
  167. });
  168. },
  169. /* 保存编辑 */
  170. save() {
  171. this.$refs.form.validate((valid) => {
  172. if (!valid) {
  173. return false;
  174. }
  175. this.loading = true;
  176. if (this.form.dataScope == '2') {
  177. const ids = this.$refs.tree
  178. .getCheckedKeys()
  179. .concat(this.$refs.tree.getHalfCheckedKeys());
  180. this.form.dataScopeDeptIds = ids.join(',');
  181. }
  182. const saveOrUpdate = this.isUpdate ? putRoles : addRole;
  183. saveOrUpdate(this.form)
  184. .then((msg) => {
  185. this.loading = false;
  186. this.$message.success(this.isUpdate ? '修改' : '增加' + msg);
  187. this.updateVisible(false);
  188. this.$emit('done');
  189. })
  190. .catch((e) => {
  191. this.loading = false;
  192. // this.$message.error(e.message);
  193. });
  194. });
  195. },
  196. /* 更新visible */
  197. updateVisible(value) {
  198. this.$emit('update:visible', value);
  199. }
  200. },
  201. watch: {
  202. visible(visible) {
  203. if (visible) {
  204. this.query();
  205. if (this.data != null) {
  206. // this.$util.assignObject(this.form, this.data);
  207. // this.form = this.data;
  208. this.form = Object.assign(this.data);
  209. this.form.dataScope = this.form.dataScope + '';
  210. this.$nextTick(() => {
  211. if (this.form.dataScope == '2') {
  212. this.$refs.tree.setCheckedKeys(
  213. this.form.dataScopeDeptIds.split(',')
  214. );
  215. }
  216. });
  217. this.isUpdate = true;
  218. } else {
  219. this.isUpdate = false;
  220. }
  221. } else {
  222. this.$refs.form.clearValidate();
  223. this.form = { ...this.defaultForm };
  224. }
  225. }
  226. }
  227. };
  228. </script>