app-func-form.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <!--
  2. 应用功能独有表单
  3. @Author: linqian
  4. @Date: 2021-07-11 15:03
  5. -->
  6. <template>
  7. <div>
  8. <transfer-tree
  9. ref="transferTree"
  10. filterable
  11. :titles="['可选资源', '已选资源']"
  12. v-model="selectedValue"
  13. :data="data"
  14. children-name="child"
  15. pid-name="p"
  16. :open-all="false"
  17. :transfer-open-node="true"
  18. :filter-node-from="handleSearch"
  19. value-name="id"
  20. >
  21. </transfer-tree>
  22. <div v-footer>
  23. <dg-button @click="handleCancel">取消</dg-button>
  24. <dg-button type="primary" @click="handleSubmit">确定</dg-button>
  25. </div>
  26. </div>
  27. </template>
  28. <script>
  29. import transferTree from '@/pages/common/transfer-tree';
  30. import { allAppFuncTree, userHasAuthFunIds } from '@/api/permission-selfhelp-manage';
  31. function findIndexArray(data, id, indexArray) {
  32. let arr = Array.from(indexArray);
  33. for (let i = 0, len = data.length; i < len; i++) {
  34. arr.push(data[i].label);
  35. if (data[i].id === id) {
  36. return arr;
  37. }
  38. let children = data[i].child;
  39. if (children && children.length) {
  40. let result = findIndexArray(children, id, arr);
  41. if (result) return result;
  42. }
  43. arr.pop();
  44. }
  45. return false;
  46. }
  47. export default {
  48. props: {
  49. selectKeys: [Array]
  50. },
  51. components: { transferTree },
  52. data() {
  53. return {
  54. approveContent: this.value,
  55. selectedValue: this.selectKeys,
  56. data: []
  57. };
  58. },
  59. computed: {},
  60. methods: {
  61. nodeTransferLabel() {
  62. const funcAttr = this.selectedValue.map((item) => {
  63. return findIndexArray(this.$refs.transferTree.targetData, item, []);
  64. });
  65. let attr = [];
  66. for (let i = 0; i < funcAttr.length; i++) {
  67. const element = funcAttr[i].join('/');
  68. attr.push(element);
  69. }
  70. return attr.join(',');
  71. },
  72. handleCancel() {
  73. this.$emit('close');
  74. },
  75. handleSubmit() {
  76. if (this.selectedValue.length == 0) {
  77. this.$message.warning('请至少选择一条功能资源!');
  78. } else {
  79. const approveContent = this.nodeTransferLabel();
  80. const resourceInfos = this.selectedValue
  81. .map((item) => this.$refs.transferTree.$refs['to-tree'].getNode(item).data)
  82. .map((item) => {
  83. return {
  84. appId: item.pid,
  85. funId: item.id
  86. };
  87. });
  88. this.$emit('success', approveContent, this.selectedValue, resourceInfos);
  89. }
  90. },
  91. handleSearch(value, data) {
  92. console.log(value, data.label);
  93. if (!value) return true;
  94. return data.label.indexOf(value) !== -1;
  95. }
  96. },
  97. created() {
  98. allAppFuncTree().then((res) => {
  99. this.data = res.data.content;
  100. });
  101. },
  102. mounted() {}
  103. };
  104. </script>
  105. <style lang='scss' scoped>
  106. @import url('../index.scss');
  107. </style>