浏览代码

feat: 常用功能完善

cuiyalong 3 年之前
父节点
当前提交
cf14c6b8e4

+ 43 - 0
src/api/modules/workspace.js

@@ -1,6 +1,40 @@
 import request from '@/api'
 import request from '@/api'
 import qs from 'qs'
 import qs from 'qs'
 
 
+/**
+ * @param {*} actionMode
+ * 常用功能更新(保存):commonlyRenew
+ * 常用功能列表:commonlyList
+ * 菜单模式更新:menuMode
+ * @returns
+ */
+const actionModeMap = {
+  save: 'commonlyRenew',
+  list: 'commonlyList',
+  mode: 'menuMode'
+}
+export function workspaceCommonUse (type, data) {
+  const actionMode = actionModeMap[type]
+  if (!actionMode) {
+    return console.warn('未知类型type')
+  }
+  return request({
+    baseURL: '/userCenter',
+    url: `/workDesktop/renew/${actionMode}`,
+    method: 'POST',
+    data
+  })
+}
+
+// 获取工作桌面菜单
+export function getWorkspaceMenu () {
+  return request({
+    baseURL: '/userCenter',
+    url: '/workDesktop/menuInfo',
+    method: 'POST'
+  })
+}
+
 // 商机管理 - 我的客户
 // 商机管理 - 我的客户
 export function customerQuery (data) {
 export function customerQuery (data) {
   return request({
   return request({
@@ -31,6 +65,15 @@ export function getEmployeeDataOverview (data) {
   })
   })
 }
 }
 
 
+// 商机管理 - 查询用户关键词列表
+export function getEntNicheSubKeyList () {
+  return request({
+    baseURL: '/entnicheNew',
+    url: '/subscribe/key/get',
+    method: 'POST'
+  })
+}
+
 // 消息中心 - 消息列表查询
 // 消息中心 - 消息列表查询
 export function getMessageCenterList (data) {
 export function getMessageCenterList (data) {
   data = qs.stringify(data)
   data = qs.stringify(data)

+ 7 - 1
src/components/work-desktop/Transfer.vue

@@ -16,6 +16,10 @@ export default {
   name: 'work-transfer',
   name: 'work-transfer',
   computed: {},
   computed: {},
   props: {
   props: {
+    submitKey: {
+      type: String,
+      default: 'label'
+    },
     left: {
     left: {
       type: Array,
       type: Array,
       default () {
       default () {
@@ -59,12 +63,14 @@ export default {
       allData.forEach((v, i) => {
       allData.forEach((v, i) => {
         if (rightData.length >= 8) {
         if (rightData.length >= 8) {
           data.push({
           data.push({
+            ...v,
             key: i,
             key: i,
             label: v.name,
             label: v.name,
             disabled: rightData.indexOf(allData[i].name) === -1
             disabled: rightData.indexOf(allData[i].name) === -1
           })
           })
         } else {
         } else {
           data.push({
           data.push({
+            ...v,
             key: i,
             key: i,
             label: v.name
             label: v.name
           })
           })
@@ -114,7 +120,7 @@ export default {
       }
       }
       const arr = []
       const arr = []
       for (let i = 0; i < val.length; i++) {
       for (let i = 0; i < val.length; i++) {
-        arr.push(this.transferData[val[i]].label)
+        arr.push(this.transferData[val[i]][this.submitKey])
       }
       }
       this.needData = arr
       this.needData = arr
       // console.log(this.needData, '要提交的数据')
       // console.log(this.needData, '要提交的数据')

+ 52 - 18
src/store/workspace/common-use.js

@@ -1,8 +1,25 @@
-import { getAllFunctions, getCanUseFunctions, saveCommonFunctions } from '@/api/modules'
+import { tryCallHooks } from '@jianyu/easy-inject-qiankun'
+import { getWorkspaceMenu, workspaceCommonUse } from '@/api/modules'
+
+// 把菜单接口数据转化成一维数组
+function flatMenuList (list = [], index) {
+  let children = []
+  if (Array.isArray(list) && list.length !== 0) {
+    const level = index + 1
+    children = children.concat(list)
+    list.forEach(menu => {
+      menu.level = level
+      const r = flatMenuList(menu.child, level)
+      children = children.concat(r)
+    })
+  }
+  return children
+}
 
 
 export default {
 export default {
   namespaced: true,
   namespaced: true,
   state: () => ({
   state: () => ({
+    platform: 'PC',
     maxCount: 8,
     maxCount: 8,
     dialogShow: false,
     dialogShow: false,
     allFunctions: [], // 所有功能
     allFunctions: [], // 所有功能
@@ -28,13 +45,33 @@ export default {
     }
     }
   },
   },
   actions: {
   actions: {
-    // 获取所有功能
-    async getAllFunctions ({ commit }) {
+    // 获取所有可用功能
+    async getAllFunctions ({ commit, dispatch }, payload) {
+      const { vm } = payload
+      tryCallHooks(vm.$BraceHooks, 'getStore', {}, async () => {
+        dispatch('getWorkspaceMenu')
+      })
+    },
+    // 获取工作桌面菜单
+    async getWorkspaceMenu ({ state, commit }) {
       try {
       try {
         // 平台参数 platform 平台:默认PC,微信:WX,app:APP, 可不传
         // 平台参数 platform 平台:默认PC,微信:WX,app:APP, 可不传
-        const { data = [], error_code: code } = await getAllFunctions()
+        const { data = [], error_code: code } = await getWorkspaceMenu()
         if (code === 0 && data) {
         if (code === 0 && data) {
-          commit('setAllFunctions', data)
+          const menuList = flatMenuList(data.menuList, 0)
+          // 排除无权限的
+          const usableMenu = menuList.filter(menu => menu.level === 3 && menu.usable)
+          // 按照name去重
+          const list = []
+          const nameList = []
+          usableMenu.forEach(menu => {
+            const { name } = menu
+            if (!nameList.includes(name)) {
+              list.push(menu)
+              nameList.push(name)
+            }
+          })
+          commit('setAllFunctions', list)
         } else {
         } else {
           commit('setAllFunctions', [])
           commit('setAllFunctions', [])
         }
         }
@@ -43,16 +80,13 @@ export default {
         return []
         return []
       }
       }
     },
     },
-    // 获取常用功能
-    async getCanUseFunctions ({ commit }) {
+    // 获取自己已经选择的常用功能
+    async getCanUseFunctions ({ state, commit }) {
       try {
       try {
-        const { data, error_code: code } = await getCanUseFunctions()
-        if (code === 0 && data && Array.isArray(data)) {
-          data.forEach(v => {
-            if (v.name.indexOf('/') > -1) {
-              v.name = v.name.replace('/', '/<br>')
-            }
-          })
+        const { data = [], error_code: code } = await workspaceCommonUse('list', {
+          platform: state.platform
+        })
+        if (code === 0 && data) {
           commit('setCommonList', data)
           commit('setCommonList', data)
         } else {
         } else {
           commit('setCommonList', [])
           commit('setCommonList', [])
@@ -68,11 +102,11 @@ export default {
         return commit('changeDialogState', false)
         return commit('changeDialogState', false)
       }
       }
       try {
       try {
-        const { data, error_code: code, error_msg: msg } = await saveCommonFunctions({
-          platform: 'PC',
-          names: state.saveData.toString()
+        const { error_code: code, error_msg: msg } = await workspaceCommonUse('save', {
+          platform: state.platform,
+          menuIds: state.saveData.toString()
         })
         })
-        if (code === 0 && data) {
+        if (code === 0) {
           dispatch('getCanUseFunctions')
           dispatch('getCanUseFunctions')
         } else {
         } else {
           throw new Error(msg)
           throw new Error(msg)

+ 10 - 7
src/views/workspace/components/CommonUse.vue

@@ -2,8 +2,8 @@
   <WorkspaceCard class="work-common" title="常用功能">
   <WorkspaceCard class="work-common" title="常用功能">
     <span slot="header-right" class="header-right-set" @click="changeDialogState(true)"><i class="icon-set"></i> 设置</span>
     <span slot="header-right" class="header-right-set" @click="changeDialogState(true)"><i class="icon-set"></i> 设置</span>
     <div class="common-lists">
     <div class="common-lists">
-      <div class="list-item" v-for="(item, index) in commonList" :key="item.name" @click="openLink(item.url)">
-        <div class="icon-box" v-if="item.img.indexOf('icon-') === 0">
+      <div class="list-item" v-for="item in commonList" :key="item.id" @click="openLink(item.url)">
+        <div class="icon-box" v-if="item.img && item.img.indexOf('icon-') === 0">
           <JyIcon :name="item.icon" classPrefix=""></JyIcon>
           <JyIcon :name="item.icon" classPrefix=""></JyIcon>
         </div>
         </div>
         <div v-else class="icon-box">
         <div v-else class="icon-box">
@@ -30,7 +30,7 @@
       <SelectorCard @onCancel="changeDialogState(false)" @onConfirm="confirmSaveFn" confirmText="确定">
       <SelectorCard @onCancel="changeDialogState(false)" @onConfirm="confirmSaveFn" confirmText="确定">
         <div slot="header">常用功能设置</div>
         <div slot="header">常用功能设置</div>
         <div class="transfer-content">
         <div class="transfer-content">
-          <Transfer :left="allFunctions" :right="commonList" @onSave="onTransferSave"></Transfer>
+          <Transfer submitKey="id" :left="allFunctions" :right="commonList" @onSave="onTransferSave"></Transfer>
         </div>
         </div>
         <p class="more-tips">最多可选择 <em style="color:#2CB7CA;">{{ maxCount }}</em> 个常用功能</p>
         <p class="more-tips">最多可选择 <em style="color:#2CB7CA;">{{ maxCount }}</em> 个常用功能</p>
       </SelectorCard>
       </SelectorCard>
@@ -39,6 +39,7 @@
 </template>
 </template>
 
 
 <script>
 <script>
+import { tryCallHooks } from '@jianyu/easy-inject-qiankun'
 import { JyIcon } from '@jianyu/icon'
 import { JyIcon } from '@jianyu/icon'
 import { mapState, mapMutations, mapActions } from 'vuex'
 import { mapState, mapMutations, mapActions } from 'vuex'
 import { Dialog, Image } from 'element-ui'
 import { Dialog, Image } from 'element-ui'
@@ -64,9 +65,9 @@ export default {
       commonList: state => state.workspace.commonUse.commonList // 常用功能
       commonList: state => state.workspace.commonUse.commonList // 常用功能
     })
     })
   },
   },
-  created () {
-    this.getCanUseFunctions()
-    this.getAllFunctions()
+  async created () {
+    await this.getCanUseFunctions()
+    await this.getAllFunctions({ vm: this })
   },
   },
   methods: {
   methods: {
     ...mapMutations('workspace/commonUse', [
     ...mapMutations('workspace/commonUse', [
@@ -83,7 +84,9 @@ export default {
       this.transferSave(data)
       this.transferSave(data)
     },
     },
     openLink (url) {
     openLink (url) {
-      window.open(url)
+      tryCallHooks(this.$BraceHooks, 'openLink', { url }, () => {
+        window.open(url)
+      })
     },
     },
     confirmSaveFn () {
     confirmSaveFn () {
       try {
       try {

+ 1 - 0
src/views/workspace/components/DataReport.vue

@@ -122,6 +122,7 @@ export default {
 }
 }
 .data-report {
 .data-report {
   display: flex;
   display: flex;
+  justify-content: space-between;
   width: 100%;
   width: 100%;
 }
 }
 .report-item {
 .report-item {

+ 2 - 1
src/views/workspace/dashboard.vue

@@ -29,7 +29,7 @@
 <script>
 <script>
 import { mapGetters } from 'vuex'
 import { mapGetters } from 'vuex'
 import { Container, Aside, Main } from 'element-ui'
 import { Container, Aside, Main } from 'element-ui'
-import MessageTips from './components//MessageTips.vue'
+import MessageTips from './components/MessageTips.vue'
 import CommonUse from './components/CommonUse.vue'
 import CommonUse from './components/CommonUse.vue'
 import BusinessProfile from './components/BusinessProfile.vue'
 import BusinessProfile from './components/BusinessProfile.vue'
 import MyCustomer from './components/MyCustomer.vue'
 import MyCustomer from './components/MyCustomer.vue'
@@ -84,6 +84,7 @@ export default {
 }
 }
 .card-list-module {
 .card-list-module {
   display: flex;
   display: flex;
+  justify-content: space-between;
   ::v-deep {
   ::v-deep {
     .list-card {
     .list-card {
       flex: 1;
       flex: 1;

+ 15 - 1
src/views/workspace/ui/AdSwipe.vue

@@ -9,8 +9,9 @@
     <el-carousel-item v-for="(item, index) in list" :key="index">
     <el-carousel-item v-for="(item, index) in list" :key="index">
       <a
       <a
         class="link-wrapper"
         class="link-wrapper"
-        :href="item.link || 'javascript:;'"
+        :class="{ unlink: !item.link }"
         target="_blank"
         target="_blank"
+        @click="openNewTab(item)"
         :id="[code, index].join('-')">
         :id="[code, index].join('-')">
         <img :src="item.pic" :alt="item.name">
         <img :src="item.pic" :alt="item.name">
       </a>
       </a>
@@ -76,6 +77,16 @@ export default {
     }
     }
   },
   },
   methods: {
   methods: {
+    resolveLink (link) {
+      const { href } = this.$router.resolve(link)
+      return href
+    },
+    openNewTab (item) {
+      const { link } = item
+      if (link) {
+        window.open(link)
+      }
+    },
     calcStyle (extend) {
     calcStyle (extend) {
       if (!extend) return ''
       if (!extend) return ''
       return {
       return {
@@ -110,6 +121,9 @@ export default {
   display: inline-block;
   display: inline-block;
   width: 100%;
   width: 100%;
   height: 100%;
   height: 100%;
+  &.unlink {
+    cursor: default;
+  }
   img {
   img {
     display: block;
     display: block;
     width: 100%;
     width: 100%;

+ 18 - 6
vue.config.js

@@ -49,37 +49,49 @@ module.exports = {
         logLevel: 'debug'
         logLevel: 'debug'
       },
       },
       '^/subscribepay': {
       '^/subscribepay': {
-        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
         // target: 'http://127.0.0.1:86',
         // target: 'http://127.0.0.1:86',
         changeOrigin: true,
         changeOrigin: true,
         logLevel: 'debug'
         logLevel: 'debug'
       },
       },
       '^/salesLeads': {
       '^/salesLeads': {
-        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
         // target: 'http://127.0.0.1:8881',
         // target: 'http://127.0.0.1:8881',
         changeOrigin: true,
         changeOrigin: true,
         logLevel: 'debug'
         logLevel: 'debug'
       },
       },
       '^/privatedata': {
       '^/privatedata': {
-        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
+        // target: 'http://127.0.0.1:829',
+        changeOrigin: true,
+        logLevel: 'debug'
+      },
+      '^/jyCoupon': {
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
         // target: 'http://127.0.0.1:829',
         // target: 'http://127.0.0.1:829',
         changeOrigin: true,
         changeOrigin: true,
         logLevel: 'debug'
         logLevel: 'debug'
       },
       },
       '^/jymessageCenter': {
       '^/jymessageCenter': {
-        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
         // target: 'http://127.0.0.1:829',
         // target: 'http://127.0.0.1:829',
         changeOrigin: true,
         changeOrigin: true,
         logLevel: 'debug'
         logLevel: 'debug'
       },
       },
       '^/entbase': {
       '^/entbase': {
-        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
+        // target: 'http://127.0.0.1:829',
+        changeOrigin: true,
+        logLevel: 'debug'
+      },
+      '^/userCenter': {
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
         // target: 'http://127.0.0.1:829',
         // target: 'http://127.0.0.1:829',
         changeOrigin: true,
         changeOrigin: true,
         logLevel: 'debug'
         logLevel: 'debug'
       },
       },
       '^/entnicheNew': {
       '^/entnicheNew': {
-        target: 'https://jybx2-webtest.jydev.jianyu360.com',
+        target: 'https://jybx3-webtest.jydev.jianyu360.com',
         // target: 'http://127.0.0.1:829',
         // target: 'http://127.0.0.1:829',
         changeOrigin: true,
         changeOrigin: true,
         logLevel: 'debug'
         logLevel: 'debug'