role-permission.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <el-dialog
  3. title="分配接口权限"
  4. width="800px"
  5. :visible="showDialog"
  6. :modal-append-to-body="false"
  7. style="text-align:left;"
  8. @close="closeDialog"
  9. >
  10. <div class="role-permission">
  11. <el-transfer
  12. v-model="relatedPerms"
  13. :data="permList"
  14. v-loading="loading"
  15. filterable
  16. :filter-method="filterMethod"
  17. filter-placeholder="请输入关键字"
  18. :props="{key: 'id',label: 'description'}"
  19. :titles="['未分配接口','已分配接口']"
  20. ></el-transfer>
  21. </div>
  22. <span slot="footer" class="dialog-footer">
  23. <el-button @click="handleCancel">取 消</el-button>
  24. <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
  25. </span>
  26. </el-dialog>
  27. </template>
  28. <script>
  29. import roleApi from "@/api/sys/role";
  30. import permissionApi from "@/api/sys/permission";
  31. export default {
  32. props: ["roleId"],
  33. data() {
  34. return {
  35. permList: [],
  36. relatedPerms: [],
  37. showDialog: true,
  38. loading: false,
  39. submitting: false
  40. };
  41. },
  42. methods: {
  43. closeDialog() {
  44. this.$emit("close",false);
  45. },
  46. handleCancel (){
  47. this.$emit("close",false);
  48. },
  49. handleSubmit() {
  50. var self = this;
  51. self.submitting = true;
  52. roleApi
  53. .saveRelatedPermission({
  54. roleId: this.roleId,
  55. relatedList: this.relatedPerms
  56. })
  57. .then(function(response) {
  58. var jsonData = response.data;
  59. self.submitting = false;
  60. if (jsonData.result) {
  61. self.$message({
  62. message: "保存成功!",
  63. type: "success"
  64. });
  65. self.$emit("close",true);
  66. } else {
  67. self.$message({
  68. message: jsonData.message + "",
  69. type: "warning"
  70. });
  71. self.$emit("close",false);
  72. }
  73. });
  74. },
  75. filterMethod(query, item) {
  76. return item.description.indexOf(query) > -1;
  77. },
  78. queryRelatedPerms() {
  79. var self = this;
  80. self.loading = true;
  81. this.permList = [];
  82. this.relatedPerms= [];
  83. permissionApi.selectAll().then(response => {
  84. var jsonData = eval(response.data);
  85. this.permList = jsonData.data.map(item => {
  86. return {
  87. id: item.id,
  88. description: item.method + " " + item.path + " " + item.summary
  89. };
  90. });
  91. return roleApi.queryRelatedPerms(this.roleId);
  92. })
  93. .then((response) => {
  94. var jsonData = response.data;
  95. this.relatedPerms = jsonData.data.map(item => {
  96. return item.permId;
  97. });
  98. self.loading = false;
  99. });
  100. }
  101. },
  102. mounted() {
  103. // 采用v-if控制组件是否显示,则会每次显示时执行mounted方法
  104. this.queryRelatedPerms();
  105. }
  106. };
  107. </script>
  108. <style lang="scss">
  109. .role-permission {
  110. .el-transfer-panel {
  111. border: 1px solid #ebeef5;
  112. border-radius: 4px;
  113. overflow: hidden;
  114. background: #fff;
  115. display: inline-block;
  116. vertical-align: middle;
  117. width: 320px;
  118. -webkit-box-sizing: border-box;
  119. box-sizing: border-box;
  120. position: relative;
  121. }
  122. }
  123. </style>