privilege_tree.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. <template>
  2. <section class="content">
  3. <div class="box box-info">
  4. <div class="box-body">
  5. <!-- 权限树 -->
  6. <div style="width: 80%;">
  7. <el-tree
  8. :data="treeData"
  9. :props="defaultProps"
  10. node-key="id"
  11. ref="tree"
  12. highlight-current
  13. :default-expanded-keys="[-1]"
  14. :expand-on-click-node="false"
  15. :render-content="renderContent"
  16. />
  17. </div>
  18. <!-- 新增权限 -->
  19. <el-dialog title="新增权限" :visible.sync="addingDialog.show">
  20. <el-form
  21. :model="addingDialog.privilege"
  22. ref="addingForm"
  23. label-width="100px"
  24. :rules="rules"
  25. >
  26. <el-form-item label="父权限名称" prop="parentName">
  27. <el-col>
  28. <el-input
  29. v-model="addingDialog.parentName"
  30. :readonly="true"
  31. ></el-input>
  32. </el-col>
  33. </el-form-item>
  34. <el-form-item label="权限名称" prop="name">
  35. <el-col>
  36. <el-input v-model="addingDialog.privilege.name"></el-input>
  37. </el-col>
  38. </el-form-item>
  39. <el-form-item label="权限编码" prop="code">
  40. <el-col>
  41. <el-input v-model="addingDialog.privilege.code"></el-input>
  42. </el-col>
  43. </el-form-item>
  44. <el-form-item label="描述" prop="description">
  45. <el-col>
  46. <el-input
  47. v-model="addingDialog.privilege.description"
  48. ></el-input>
  49. </el-col>
  50. </el-form-item>
  51. <el-form-item label="权重" prop="weight">
  52. <el-col>
  53. <el-input v-model="addingDialog.privilege.weight"></el-input>
  54. </el-col>
  55. </el-form-item>
  56. <el-form-item label="属性1">
  57. <el-col>
  58. <el-input v-model="addingDialog.privilege.ext1"></el-input>
  59. </el-col>
  60. </el-form-item>
  61. <el-form-item label="属性2">
  62. <el-col>
  63. <el-input v-model="addingDialog.privilege.ext2"></el-input>
  64. </el-col>
  65. </el-form-item>
  66. <el-form-item label="属性3">
  67. <el-col>
  68. <el-input v-model="addingDialog.privilege.ext3"></el-input>
  69. </el-col>
  70. </el-form-item>
  71. <el-form-item label="属性4">
  72. <el-col>
  73. <el-input v-model="addingDialog.privilege.ext4"></el-input>
  74. </el-col>
  75. </el-form-item>
  76. <el-form-item label="属性5">
  77. <el-col>
  78. <el-input v-model="addingDialog.privilege.ext5"></el-input>
  79. </el-col>
  80. </el-form-item>
  81. <el-form-item>
  82. <el-button type="primary" @click="addPrivilege">确定</el-button>
  83. <el-button @click="addingDialog.show = false">取消</el-button>
  84. </el-form-item>
  85. </el-form>
  86. </el-dialog>
  87. <!-- 修改权限 -->
  88. <el-dialog title="修改权限" :visible.sync="updateDialog.show">
  89. <el-form
  90. :model="updateDialog.privilege"
  91. ref="updateForm"
  92. label-width="100px"
  93. :rules="rules"
  94. >
  95. <el-form-item label="权限名称" prop="name">
  96. <el-col>
  97. <el-input v-model="updateDialog.privilege.name"></el-input>
  98. </el-col>
  99. </el-form-item>
  100. <el-form-item label="权限编码" prop="code">
  101. <el-col>
  102. <el-input
  103. v-model="updateDialog.privilege.code"
  104. :readonly="true"
  105. ></el-input>
  106. </el-col>
  107. </el-form-item>
  108. <el-form-item label="描述" prop="description">
  109. <el-col>
  110. <el-input
  111. v-model="updateDialog.privilege.description"
  112. ></el-input>
  113. </el-col>
  114. </el-form-item>
  115. <el-form-item label="权重" prop="weight">
  116. <el-col>
  117. <el-input v-model="updateDialog.privilege.weight"></el-input>
  118. </el-col>
  119. </el-form-item>
  120. <el-form-item label="属性1">
  121. <el-col>
  122. <el-input v-model="updateDialog.privilege.ext1"></el-input>
  123. </el-col>
  124. </el-form-item>
  125. <el-form-item label="属性2">
  126. <el-col>
  127. <el-input v-model="updateDialog.privilege.ext2"></el-input>
  128. </el-col>
  129. </el-form-item>
  130. <el-form-item label="属性3">
  131. <el-col>
  132. <el-input v-model="updateDialog.privilege.ext3"></el-input>
  133. </el-col>
  134. </el-form-item>
  135. <el-form-item label="属性4">
  136. <el-col>
  137. <el-input v-model="updateDialog.privilege.ext4"></el-input>
  138. </el-col>
  139. </el-form-item>
  140. <el-form-item label="属性5">
  141. <el-col>
  142. <el-input v-model="updateDialog.privilege.ext5"></el-input>
  143. </el-col>
  144. </el-form-item>
  145. <el-form-item>
  146. <el-button type="primary" @click="updatePrivilege"
  147. >确定</el-button
  148. >
  149. <el-button @click="updateDialog.show = false">取消</el-button>
  150. </el-form-item>
  151. </el-form>
  152. </el-dialog>
  153. <!-- 查看权限 -->
  154. <el-dialog title="查看权限" :visible.sync="showDialog.show">
  155. <el-form :model="showDialog.privilege" label-width="100px">
  156. <el-form-item label="权限名称">
  157. <el-col>
  158. <el-input
  159. v-model="showDialog.privilege.name"
  160. :readonly="true"
  161. ></el-input>
  162. </el-col>
  163. </el-form-item>
  164. <el-form-item label="权限编码">
  165. <el-col>
  166. <el-input
  167. v-model="showDialog.privilege.code"
  168. :readonly="true"
  169. ></el-input>
  170. </el-col>
  171. </el-form-item>
  172. <el-form-item label="描述">
  173. <el-col>
  174. <el-input
  175. v-model="showDialog.privilege.description"
  176. :readonly="true"
  177. ></el-input>
  178. </el-col>
  179. </el-form-item>
  180. <el-form-item label="权重">
  181. <el-col>
  182. <el-input
  183. v-model="showDialog.privilege.weight"
  184. :readonly="true"
  185. ></el-input>
  186. </el-col>
  187. </el-form-item>
  188. <el-form-item label="属性1">
  189. <el-col>
  190. <el-input
  191. v-model="showDialog.privilege.ext1"
  192. :readonly="true"
  193. ></el-input>
  194. </el-col>
  195. </el-form-item>
  196. <el-form-item label="属性2">
  197. <el-col>
  198. <el-input
  199. v-model="showDialog.privilege.ext2"
  200. :readonly="true"
  201. ></el-input>
  202. </el-col>
  203. </el-form-item>
  204. <el-form-item label="属性3">
  205. <el-col>
  206. <el-input
  207. v-model="showDialog.privilege.ext3"
  208. :readonly="true"
  209. ></el-input>
  210. </el-col>
  211. </el-form-item>
  212. <el-form-item label="属性4">
  213. <el-col>
  214. <el-input
  215. v-model="showDialog.privilege.ext4"
  216. :readonly="true"
  217. ></el-input>
  218. </el-col>
  219. </el-form-item>
  220. <el-form-item label="属性5">
  221. <el-col>
  222. <el-input
  223. v-model="showDialog.privilege.ext5"
  224. :readonly="true"
  225. ></el-input>
  226. </el-col>
  227. </el-form-item>
  228. <el-form-item>
  229. <el-button @click="showDialog.show = false">关闭</el-button>
  230. </el-form-item>
  231. </el-form>
  232. </el-dialog>
  233. </div>
  234. </div>
  235. </section>
  236. </template>
  237. <script type="text/jsx">
  238. import { CORE_API } from "@/constants/constants.js";
  239. let checkWeight = (rule, value, callback) => {
  240. if (('0' != value) && (!value)) {
  241. return new Error('请输入权重');
  242. } else if (('0' != value) && (!value.match(/^[1-9][0-9]*$/))) {
  243. callback(new Error('请输入整数'));
  244. } else if (value < 0) {
  245. callback(new Error('不能小于0'));
  246. } else if (value > 10000) {
  247. callback(new Error('不能大于10000'));
  248. } else {
  249. callback();
  250. }
  251. };
  252. let checkCode = (rule, value, callback) => {
  253. if ((0 != value) && (!value)) {
  254. callback(new Error('请输入权限编码'));
  255. } else if (!value.match(/^[0-9a-zA-Z_]*$/)) {
  256. callback(new Error("只能由数字、字母和\"_\"组成"));
  257. } else {
  258. callback();
  259. }
  260. };
  261. export default {
  262. name: "PrivilegeTree",
  263. data() {
  264. return {
  265. privilegeGroupId: null,
  266. rootTreeNode: {
  267. id: null,
  268. label: null
  269. },
  270. treeData: [],
  271. defaultProps: {
  272. children: 'children',
  273. label: 'label'
  274. },
  275. store: null,
  276. data: null,
  277. addingDialog: {
  278. show: false,
  279. parentName: null,
  280. privilege: {
  281. groupId: null,
  282. parentId: null,
  283. name: null,
  284. code: null,
  285. description: null,
  286. weight: null,
  287. ext1: null,
  288. ext2: null,
  289. ext3: null,
  290. ext4: null,
  291. ext5: null
  292. }
  293. },
  294. updateDialog: {
  295. show: false,
  296. parentName: null,
  297. privilege: {
  298. id: null,
  299. groupId: null,
  300. parentId: null,
  301. name: null,
  302. code: null,
  303. description: null,
  304. weight: null,
  305. ext1: null,
  306. ext2: null,
  307. ext3: null,
  308. ext4: null,
  309. ext5: null
  310. }
  311. },
  312. showDialog: {
  313. show: false,
  314. parentName: null,
  315. privilege: {
  316. id: null,
  317. groupId: null,
  318. parentId: null,
  319. name: null,
  320. code: null,
  321. description: null,
  322. weight: null,
  323. ext1: null,
  324. ext2: null,
  325. ext3: null,
  326. ext4: null,
  327. ext5: null
  328. }
  329. },
  330. rules: {
  331. name: [{
  332. required: true,
  333. message: '请输入权限名称',
  334. trigger: 'blur'
  335. }],
  336. code: [{
  337. required: true,
  338. message: '请输入权限编码',
  339. trigger: 'blur'
  340. }, {
  341. validator: checkCode, trigger: 'blur'
  342. }],
  343. weight: [{
  344. required: true,
  345. message: '请输入权重',
  346. trigger: 'blur'
  347. }, {
  348. validator: checkWeight, trigger: 'blur'
  349. }]
  350. }
  351. }
  352. },
  353. methods: {
  354. openAddingDialog(store, data) {
  355. console.log(data);
  356. this.store = store;
  357. this.data = data;
  358. this.addingDialog.parentName = data.label;
  359. this.addingDialog.privilege.groupId = this.privilegeGroupId;
  360. if (1 == data.$treeNodeId) {
  361. this.addingDialog.privilege.parentId = null;
  362. } else {
  363. this.addingDialog.privilege.parentId = data.id;
  364. }
  365. this.addingDialog.privilege.name = null;
  366. this.addingDialog.privilege.code = null;
  367. this.addingDialog.privilege.description = null;
  368. this.addingDialog.privilege.weight = "0";
  369. this.addingDialog.privilege.ext1 = null;
  370. this.addingDialog.privilege.ext2 = null;
  371. this.addingDialog.privilege.ext3 = null;
  372. this.addingDialog.privilege.ext4 = null;
  373. this.addingDialog.privilege.ext5 = null;
  374. this.addingDialog.show = true;
  375. },
  376. addPrivilege() {
  377. this.$refs.addingForm.validate((valid) => {
  378. if (!valid) {
  379. return;
  380. }
  381. var url = CORE_API + '/rolePrivilege/addPrivilege';
  382. this.$httpWithMsg.post(url, this.addingDialog.privilege).then((response) => {
  383. this.$notify({
  384. message: '添加成功',
  385. type: 'success'
  386. });
  387. var addedPrivilege = response.data;
  388. this.store.append({
  389. id: addedPrivilege.id,
  390. label: this.addingDialog.privilege.name,
  391. children: []
  392. }, this.data);
  393. })
  394. this.addingDialog.show = false;
  395. });
  396. },
  397. updatePrivilege() {
  398. this.$refs.updateForm.validate((valid) => {
  399. if (!valid) {
  400. return;
  401. }
  402. var url = CORE_API + '/rolePrivilege/updatePrivilege';
  403. this.$httpWithMsg.put(url, this.updateDialog.privilege).then(() => {
  404. this.$notify({
  405. message: '修改成功',
  406. type: 'success'
  407. });
  408. this.data.label = this.updateDialog.privilege.name;
  409. })
  410. this.updateDialog.show = false;
  411. });
  412. },
  413. openUpdateDialog(store, data) {
  414. console.log(data);
  415. this.store = store;
  416. this.data = data;
  417. this.getPrivilege(data.id, "for-update");
  418. },
  419. openShowDialog(store, data) {
  420. console.log(data);
  421. this.store = store;
  422. this.data = data;
  423. this.getPrivilege(data.id, "for-show");
  424. },
  425. getPrivilege(id, type) {
  426. var url = CORE_API + '/rolePrivilege/getPrivilege/' + id;
  427. this.$httpWithMsg.get(url).then((response) => {
  428. var resp = response.data;
  429. this.updateDialog.privilege.id = resp.id;
  430. this.updateDialog.privilege.groupId = resp.groupId;
  431. this.updateDialog.privilege.parentId = resp.parentId;
  432. this.updateDialog.privilege.name = resp.name;
  433. this.updateDialog.privilege.code = resp.code;
  434. this.updateDialog.privilege.description = resp.description;
  435. this.updateDialog.privilege.weight = resp.weight + "";
  436. this.updateDialog.privilege.ext1 = resp.ext1;
  437. this.updateDialog.privilege.ext2 = resp.ext2;
  438. this.updateDialog.privilege.ext3 = resp.ext3;
  439. this.updateDialog.privilege.ext4 = resp.ext4;
  440. this.updateDialog.privilege.ext5 = resp.ext5;
  441. this.showDialog.privilege.id = resp.id;
  442. this.showDialog.privilege.groupId = resp.groupId;
  443. this.showDialog.privilege.parentId = resp.parentId;
  444. this.showDialog.privilege.name = resp.name;
  445. this.showDialog.privilege.code = resp.code;
  446. this.showDialog.privilege.description = resp.description;
  447. this.showDialog.privilege.weight = resp.weight + "";
  448. this.showDialog.privilege.ext1 = resp.ext1;
  449. this.showDialog.privilege.ext2 = resp.ext2;
  450. this.showDialog.privilege.ext3 = resp.ext3;
  451. this.showDialog.privilege.ext4 = resp.ext4;
  452. this.showDialog.privilege.ext5 = resp.ext5;
  453. if ("for-update" == type) {
  454. this.updateDialog.show = true;
  455. }
  456. else if ("for-show" == type) {
  457. this.showDialog.show = true;
  458. }
  459. });
  460. },
  461. remove(store, data) {
  462. this.$confirm('此操作将永久删除权限 "' + data.label + '", 是否继续?', '提示', {
  463. confirmButtonText: '确定',
  464. cancelButtonText: '取消',
  465. type: 'warning'
  466. }).then(() => {
  467. var url = CORE_API + '/rolePrivilege/deletePrivilege/' + data.id;
  468. return this.$httpWithMsg.delete(url).then(() => {
  469. this.$notify({
  470. message: '删除成功',
  471. type: 'success'
  472. });
  473. store.remove(data);
  474. });
  475. }).catch(() => {
  476. this.$message({
  477. type: 'info',
  478. message: '已取消删除'
  479. });
  480. });
  481. },
  482. renderContent(h, {node, data, store}) {
  483. if (-1 == data.id) {
  484. return (
  485. <span>
  486. <span>
  487. <span>{node.label}</span>
  488. </span>
  489. <span style="float: right; margin-left: 20px; margin-right: 65px">
  490. <el-button type="primary" size="mini" on-click={() => this.openAddingDialog(store, data)}>追加</el-button>
  491. </span>
  492. </span>
  493. )
  494. }
  495. return (
  496. <span>
  497. <span>
  498. <span>{node.label}</span>
  499. </span>
  500. <span style="float: right; margin-left: 20px; margin-right: 20px">
  501. <el-button size="mini" type="text" on-click={() => this.openShowDialog(store, data)}>查看</el-button>
  502. <el-button size="mini" type="text" on-click={() => this.openUpdateDialog(store, data)}>修改</el-button>
  503. <el-button size="mini" type="text" on-click={() => this.openAddingDialog(store, data)}>追加</el-button>
  504. <el-button size="mini" type="text" on-click={() => this.remove(store, data)}>删除</el-button>
  505. </span>
  506. </span>
  507. );
  508. },
  509. async initTree() {
  510. var url = CORE_API + '/rolePrivilege/getPrivilegeTree/' + this.privilegeGroupId;
  511. const response = await this.$httpWithMsg.get(url);
  512. this.rootTreeNode.id = response.data.id;
  513. this.rootTreeNode.label = response.data.label;
  514. this.treeData = [];
  515. this.treeData.push(response.data);
  516. }
  517. },
  518. created() {
  519. this.privilegeGroupId = this.$route.params.privilegeGroupId;
  520. this.initTree();
  521. }
  522. };
  523. </script>
  524. <style scoped></style>