personRoleInfo-icon.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <template>
  2. <el-dialog
  3. :visible.sync="showDialog"
  4. :title="title"
  5. width="800px"
  6. :modal-append-to-body="false"
  7. style="text-align:left;"
  8. @close="closeDialog"
  9. :close-on-click-modal="false"
  10. >
  11. <div class="role-permission">
  12. <el-transfer
  13. v-model="relatedMenus"
  14. :data="menuList"
  15. v-loading="loading"
  16. filterable
  17. :filter-method="filterMethod"
  18. filter-placeholder="请输入关键字"
  19. :props="{key: 'id',label: 'description'}"
  20. :titles="['未分配菜单','已分配菜单']"
  21. ></el-transfer>
  22. </div>
  23. <span slot="footer" class="dialog-footer">
  24. <el-button @click="closeDialog">取 消</el-button>
  25. <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
  26. </span>
  27. </el-dialog>
  28. </template>
  29. <script>
  30. import personRoleApi from "@/api/base/personRoleInfo";
  31. export default {
  32. props: ["personRoleId","mode","title"],
  33. data() {
  34. return {
  35. menuList: [],
  36. relatedMenus: [],
  37. loading: false,
  38. showDialog: true,
  39. submitting: false
  40. };
  41. },
  42. methods: {
  43. closeDialog() {
  44. this.$emit("close",false);
  45. },
  46. handleSubmit() {
  47. var self = this;
  48. personRoleApi
  49. .saveRelatedIcon(this.personRoleId,this.mode,this.relatedMenus)
  50. .then(function(response) {
  51. var jsonData = response.data;
  52. self.submitting = false;
  53. if (jsonData.result) {
  54. self.$message({
  55. message: "保存成功!",
  56. type: "success"
  57. });
  58. self.$emit("close",true);
  59. } else {
  60. self.$message({
  61. message: jsonData.message + "",
  62. type: "warning"
  63. });
  64. self.$emit("close",false);
  65. }
  66. });
  67. },
  68. filterMethod(query, item) {
  69. return item.description.indexOf(query) > -1;
  70. },
  71. queryRelatedMenuList() {
  72. var self = this;
  73. self.loading = true;
  74. self.menuList = [];
  75. self.relatedMenus= [];
  76. personRoleApi.findAllIcon(this.personRoleId)
  77. .then(response => {
  78. var jsonData = response.data;
  79. self.menuList = jsonData.data.map(item => {
  80. return {
  81. id: item.id,
  82. description: "[" + item.iconTypeName + "]" + item.iconName
  83. };
  84. });
  85. return personRoleApi.findRelatedIcon(self.personRoleId,self.mode);
  86. })
  87. .then(response => {
  88. var jsonData = response.data;
  89. self.relatedMenus = jsonData.data.map(item => {
  90. return item.iconId;
  91. });
  92. //console.log(self.relatedMenus);
  93. self.loading = false;
  94. });
  95. }
  96. },
  97. mounted() {
  98. this.queryRelatedMenuList();
  99. }
  100. };
  101. </script>
  102. <style lang="scss">
  103. .role-permission {
  104. .el-transfer-panel {
  105. border: 1px solid #ebeef5;
  106. border-radius: 4px;
  107. overflow: hidden;
  108. background: #fff;
  109. display: inline-block;
  110. vertical-align: middle;
  111. width: 320px;
  112. -webkit-box-sizing: border-box;
  113. box-sizing: border-box;
  114. position: relative;
  115. }
  116. }
  117. </style>