You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
5.8 KiB

  1. <template>
  2. <el-dialog
  3. top="5vh"
  4. class="moduleset"
  5. :visible.sync="visible"
  6. width="60%"
  7. append-to-body>
  8. <div slot="title" class="dialog-title">
  9. <p>全部应用</p>
  10. <el-divider style="margin: 0 !important;"></el-divider>
  11. </div>
  12. <div class="toolBox">
  13. <el-input v-model="keyWords" @change="searchMenu" placeholder="模糊搜索, enter回车键搜索">
  14. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  15. </el-input>
  16. <div class="selectItem">
  17. <div class="item" :class="{active: active == 'xmgl' }" @click="active = 'xmgl'">
  18. <span>项目管理系统</span>
  19. </div>
  20. <div class="item" :class="{active: active == 'oa' }" @click="active = 'oa'">
  21. <span>智慧协同办公系统</span>
  22. </div>
  23. <div class="item" :class="{active: active == 'mall' }" @click="active = 'mall'">
  24. <span>电商定制系统</span>
  25. </div>
  26. </div>
  27. </div>
  28. <div class="nav" v-loading="menuLoading">
  29. <div class="nav_item" v-for="(item, index) in (selectMenus.length > 0 ? selectMenus : menus[active])" :key="index" @click="selectItem(item, index)">
  30. <img :src="item.logoUrl" alt="">
  31. <span>{{item.name}}</span>
  32. <el-divider></el-divider>
  33. <div class="desc">
  34. <el-button @click="goBuy(item)" v-if="!item.isBuy" style="width:70px;" type="primary" round>购买</el-button>
  35. <span class="buyAfter" v-else>已购买</span>
  36. </div>
  37. </div>
  38. </div>
  39. </el-dialog>
  40. </template>
  41. <script>
  42. import { mapGetters } from 'vuex';
  43. import {getAllMenuModule, getBuyMenuModule} from '@/api/mdp/sys/modules'
  44. import {modulesOfIcon} from "./modulesOfIcon.js";
  45. import {modulesOfRouter} from "./modulesOfRouter.js";
  46. export default {
  47. props: ['value'],
  48. computed: {
  49. ...mapGetters([
  50. 'userInfo'
  51. ]),
  52. visible: {
  53. get() {
  54. return this.value
  55. },
  56. set(val) {
  57. this.$emit('input', val)
  58. }
  59. }
  60. },
  61. watch: {
  62. 'value': {
  63. handler(nval, oval) {
  64. if(nval) {
  65. this.getAllModules();
  66. }
  67. }
  68. },
  69. 'keyWords': 'filterModule'
  70. },
  71. data() {
  72. return {
  73. menuLoading: false,
  74. selectMenus: [],
  75. active: "xmgl",
  76. menus: {},
  77. keyWords: null,
  78. filterVal: '',
  79. }
  80. },
  81. methods: {
  82. searchMenu(val) {
  83. this.keyWords = val;
  84. },
  85. filterModule() {
  86. if(this.keyWords == null || this.keyWords == "" || this.keyWords == undefined) {
  87. this.selectMenus = [];
  88. return;
  89. }
  90. let val = this.keyWords;
  91. let tempArr = [];
  92. this.menus.mall.forEach(element => {
  93. if(element.name.indexOf(val) != -1) {
  94. tempArr.push(element);
  95. }
  96. });
  97. this.menus.oa.forEach(element => {
  98. if(element.name.indexOf(val) != -1) {
  99. tempArr.push(element);
  100. }
  101. });
  102. this.menus.xmgl.forEach(element => {
  103. if(element.name.indexOf(val) != -1) {
  104. tempArr.push(element);
  105. }
  106. });
  107. this.selectMenus = tempArr;
  108. },
  109. selectItem(item) {
  110. if(item.isBuy) {
  111. //路由跳转
  112. console.log(modulesOfRouter, "modulesOfRouter");
  113. let name = "";
  114. modulesOfRouter.forEach(e => {
  115. if(e.id == item.id) {
  116. name = e.path;
  117. }
  118. })
  119. if(name != "") {
  120. this.$router.push({path: name})
  121. }
  122. this.visible = false;
  123. }
  124. },
  125. goBuy(item) {
  126. this.visible = false;
  127. //前往购买页面
  128. this.$router.push('/my/order/index')
  129. },
  130. //获取所有模块
  131. getAllModules() {
  132. this.menuLoading = true
  133. getAllMenuModule({}).then(res => {
  134. let tempData = res.data.data;
  135. getBuyMenuModule({}).then(res2 => {
  136. let branchModules = res2.data.data;
  137. tempData.forEach(k => {
  138. branchModules.forEach(element => {
  139. if(k.id == element.moduleId) {
  140. k.isBuy = true;
  141. }
  142. });
  143. modulesOfIcon.forEach(element => {
  144. if(k.id == element.id) {
  145. k.logoUrl = element.logoUrl;
  146. }
  147. });
  148. })
  149. let xmMenus = tempData.filter(res => {return res.mcate == '2'})
  150. let oaMunus = tempData.filter(res => {return res.mcate == '1'})
  151. let mallMenus = tempData.filter(res => {return res.mcate == '3'})
  152. this.menus = {
  153. "xmgl": xmMenus,
  154. "oa" : oaMunus,
  155. "mall": mallMenus
  156. }
  157. })
  158. }).finally(() => this.menuLoading = false)
  159. },
  160. },
  161. created() {
  162. }
  163. }
  164. </script>
  165. <style lang="scss">
  166. .moduleset .el-dialog__header {
  167. padding: 0;
  168. }
  169. .moduleset .el-divider--horizontal {
  170. margin: 0 !important;
  171. }
  172. </style>
  173. <style lang="scss" scoped>
  174. @import './index.scss';
  175. </style>