Przeglądaj źródła

代理操作逻辑修改

喻文俊 3 lat temu
rodzic
commit
e91b400455

BIN
public/favicon.ico


+ 444 - 30
public/logo.svg

@@ -1,30 +1,444 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="218" height="218" viewBox="0 0 218 218">
-  <g id="组_35" data-name="组 35" transform="translate(-16 -13.284)">
-    <circle id="椭圆_1" data-name="椭圆 1" cx="109" cy="109" r="109" transform="translate(16 13.284)" fill="#fff"/>
-    <g id="组_33" data-name="组 33" transform="translate(53.144 36.55)">
-      <g id="组_21" data-name="组 21" transform="translate(29.566)">
-        <path id="路径_84" data-name="路径 84" d="M114.566,116.495l-.757-.757C80.487,102.863,76.7,86.2,76.7,74.842V30.917h3.029c22.72.757,32.565-9.845,32.565-9.845l2.272-2.272,2.272,2.272s9.088,9.845,30.293,9.845h5.3V74.842c0,11.36-3.787,28.021-37.109,40.9Z" transform="translate(-76.7 -18.8)" fill="#bc1724"/>
-        <path id="路径_85" data-name="路径 85" d="M108.119,20s1.515,17.418-7.573,26.506S73.282,63.167,80.1,88.159c0,0-3.029-21.205,12.117-32.565S111.906,37.418,108.119,20Z" transform="translate(-64.194 -10.912)" fill="#fff"/>
-        <path id="路径_86" data-name="路径 86" d="M104.917,20s5.3,21.962-4.544,29.536c-9.845,6.816-26.506,20.448-19.69,35.594,6.816,15.9,19.69,17.418,19.69,17.418S68.565,81.343,98.1,67.711c0,0,10.6-3.787,16.661-2.272,5.3,1.515,1.515-16.661,3.029-18.176s2.272-3.787.757-4.544-6.816-.757-6.816-8.331C111.733,26.059,104.917,20,104.917,20Z" transform="translate(-60.992 -10.912)" fill="#fff"/>
-      </g>
-      <g id="组_24" data-name="组 24" transform="translate(0 104.645)">
-        <path id="路径_88" data-name="路径 88" d="M307.91,146.549v-3.416h29.168v3.416H325.517v7.474h11.471V158.1H325.517v9.523H337.01v3.6H307.9v-3.6h2.566V154.055h4.17v13.569h6.182V146.549Zm56.509,10.936h7.36l1.694,1.694v12.636l-14.289-.008-1.695-1.733v-9.155h-9.252v7.5h6.229v3.389l-9.618,0V159.224l1.694-1.694h12.64l1.694,1.694v9.155h9.206v-7.506h-5.665v-3.389Zm27.711-1.709,7.932,0v-6.991h-5.781V145.96h2.15a16.043,16.043,0,0,1-1.07-3.885h3.762a11.069,11.069,0,0,0,1.208,3.885h3.492A13.136,13.136,0,0,0,404.9,142.2H408.8a17.089,17.089,0,0,1-1.073,3.762h2.552v2.821h-6.182v6.991h7.123v2.821h-6.985q.533,6.719,6.985,11.154v2.827q-6.719-3.226-9.136-8.339a19.093,19.093,0,0,1-9.009,8.339v-2.689q6.323-4.706,6.859-11.292c-2.648,0-5.121.046-7.8.018v13.964H388.77V158.609h-3.492v6.3h2.828v3.622l-6.31.014-.011-22.315h-1.48v-2.821H393.61v2.821h-1.48v9.547Zm-40.292-4.041h12.5c1.434.092,2.111-.671,2.019-2.283V145.96H351.839v5.775Zm-4.169,2.959V143.138h22.986v11.556Zm37.608-8.465v4.3h3.492v-4.3Zm0,6.991.02,2.58h3.493l-.02-2.58ZM417.1,171.5v-2.552h2.69v-8.6h25.268v8.6h2.822V171.5Zm19.178-12.065-3.935,0-.051-16.561h13.976v16.382l-5.092.014v-2.282l1.06,0V154.43h-5.975l.017,5Zm-17.566-1.24V143.138h11.16l0,15.058-11.158,0Zm22.446,4.972h-3.355v5.781h3.355v-5.781Zm-17.336,0v5.781h3.36v-5.781Zm6.99,0v5.781h3.361v-5.781Zm-8.47-7.392h2.42q1.618,0,1.48-1.749v-2.288h-3.9v4.037Zm0-10.082v3.762h3.9V145.69Zm13.982,5.78v.941h5.913v-2.552h-5.913v1.611Zm0-6.182v2.42h5.913v-2.42Z" transform="translate(-307.76 -142.075)" fill="#bc1724" fill-rule="evenodd"/>
-        <g id="组_23" data-name="组 23" transform="translate(0 37.805)">
-          <path id="路径_89" data-name="路径 89" d="M314.686,256.79a1.8,1.8,0,0,1-.35,1.113,1.846,1.846,0,0,1-1.03.653,2.526,2.526,0,0,1,.71.3,2.5,2.5,0,0,1,.554.467,2.035,2.035,0,0,1,.36.574,1.642,1.642,0,0,1,.126.624v.732a2.056,2.056,0,0,1-.232.984,2.327,2.327,0,0,1-.642.753,2.891,2.891,0,0,1-.981.481,4.528,4.528,0,0,1-1.254.165H307.5v-9.761h4.081a3.724,3.724,0,0,1,2.3.617,1.959,1.959,0,0,1,.806,1.637v.66Zm-1.652,3.66a1,1,0,0,0-.5-.89,2.291,2.291,0,0,0-1.254-.316h-1v-1.22h.9q1.458,0,1.457-1.091v-.661a.893.893,0,0,0-.389-.811,2.082,2.082,0,0,0-1.127-.251h-1.613V262.3H311.5a1.985,1.985,0,0,0,1.156-.273.9.9,0,0,0,.379-.775Z" transform="translate(-307.496 -253.795)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_90" data-name="路径 90" d="M347.619,257.278a1.7,1.7,0,0,1-.6,1.378c-1.242,1.036-3.541.906-5.13.9v4.077h-2.021v-9.761h4.314a4.665,4.665,0,0,1,2.545.581,2.025,2.025,0,0,1,.894,1.83v.99Zm-1.885,2.712a7.072,7.072,0,0,1-1.894.282l2.069,3.365h2.079l-2.254-3.647Zm-3.847-1.779h2.293a2.054,2.054,0,0,0,1.039-.223.774.774,0,0,0,.379-.725v-.991q0-1.062-1.438-1.062h-2.274Z" transform="translate(-328.896 -253.795)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_91" data-name="路径 91" d="M375.354,253.792l3.6,9.819h-2.06l-2.759-8.2-1.419,4.392h2.006l.44,1.235h-2.873l-.952,2.57h-2.079l3.692-9.819Z" transform="translate(-348.325 -253.739)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_92" data-name="路径 92" d="M448.465,253.855c2.035,0,1.959-.094,1.959,1.35v5.482a2.7,2.7,0,0,1-.311,1.342,2.538,2.538,0,0,1-.884.912,4.147,4.147,0,0,1-1.39.524,9.229,9.229,0,0,1-1.827.165h-3.536v-9.775Zm0,1.335h-4.023V262.3h1.555a3.473,3.473,0,0,0,1.807-.4,1.321,1.321,0,0,0,.66-1.206Z" transform="translate(-396.735 -253.78)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_93" data-name="路径 93" d="M535.057,253.876V262.3h2.994v1.335h-4.956v-9.761Z" transform="translate(-456.645 -253.795)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_94" data-name="路径 94" d="M560.378,253.876V262.3h2.994v1.335h-4.956v-9.761Z" transform="translate(-473.386 -253.795)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_95" data-name="路径 95" d="M501.294,253.792l3.595,9.819h-2.06l-2.759-8.2-1.418,4.392h2.005l.44,1.235h-2.873l-.953,2.57h-2.079l3.692-9.819Z" transform="translate(-431.587 -253.739)" fill="#bc1724" fill-rule="evenodd"/>
-          <rect id="矩形_6" data-name="矩形 6" width="2.498" height="9.761" transform="translate(93.365 0.081)" fill="#bc1724"/>
-          <path id="路径_96" data-name="路径 96" d="M603.141,253.792l3.6,9.819h-2.06l-2.76-8.2-1.418,4.392H602.5l.44,1.235h-2.873l-.953,2.57h-2.079l3.692-9.819Z" transform="translate(-498.921 -253.739)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_97" data-name="路径 97" d="M634.054,263.634h-1.807v-9.761h3.129l4.178,8.024v-8.024h1.807v9.761c-.6,0-.7,0-1.244,0-1.226,0-1.58.029-2.25-1.081l-3.813-7.074Z" transform="translate(-522.198 -253.793)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_98" data-name="路径 98" d="M406.812,263.634H405v-9.761h3.129l4.178,8.024v-8.024h1.807v9.761c-.6,0-.7,0-1.243,0-1.226,0-1.581.029-2.249-1.081l-3.814-7.074Z" transform="translate(-371.962 -253.793)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_99" data-name="路径 99" d="M668.868,260.733q0-2.735,0-5.472h4.484v.513h1.375v-2.126l-7.869-.011c0,2.765-.006,4.865-.006,7.626,0,1.481.411,2.3,2.347,2.3l5.524-.008v-2.115h-1.375c0,.44.011.5-.582.5h-2.854C668.8,261.939,668.868,261.681,668.868,260.733Z" transform="translate(-545.078 -253.637)" fill="#bc1724" fill-rule="evenodd"/>
-          <path id="路径_100" data-name="路径 100" d="M700.316,259.889V262.3h5.846v1.335h-7.808v-9.761h6.322v1.335h-4.36v2.828h4.816v1.85Z" transform="translate(-565.902 -253.795)" fill="#bc1724" fill-rule="evenodd"/>
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="400px" height="400px" viewBox="0 0 400 400" enable-background="new 0 0 400 400" xml:space="preserve">  <image id="image0" width="400" height="400" x="0" y="0"
+    href="data:image/png;base64,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" />
+</svg>

+ 7 - 4
src/layout/components/Navbar.vue

@@ -83,10 +83,13 @@ export default {
       }, 500)
     },
     proxyLogout() {
-      // 切换到真实登录用户的数据
-      this.$store.dispatch('user/proxyLogout')
-      this.$store.commit('proxy/CLOSE_PROXY')
-      this.$router.replace('/proxy')
+      this.$message.success('已退出代理操作')
+      setTimeout(() => {
+        // 切换到真实登录用户的数据
+        this.$store.dispatch('user/proxyLogout')
+        this.$store.commit('proxy/CLOSE_PROXY')
+        this.$router.replace('/proxy')
+      }, 500)
     }
   }
 }

+ 21 - 4
src/permission.js

@@ -1,8 +1,9 @@
 import router from '@/router'
-
 import store from '@/store'
-
 import { getToken, getUserInfo, initGoPage } from '@/utils/auth'
+import getPageTitle from './utils/get-page-title'
+import { setStorage } from './utils/storage'
+
 // 获取用户信息
 const userInfo = getUserInfo()
 if (userInfo) {
@@ -16,22 +17,34 @@ const whiteList = ['/login']
 router.beforeEach(async(to, from, next) => {
   // 获取token
   const hasToken = getToken()
+
+  // 设置页面标题
+  document.title = getPageTitle(to.meta.title)
   if (hasToken) {
     // 如果是访问登录页面,强制跳转到首页
     if (to.path === '/login') {
       next({ path: initGoPage() })
     } else {
-      // 加载国家列表
+      // 加载国家列表并保存到store
       store.dispatch('app/setCountry')
-      // 角色判断
+      // 判断当前用户是否拥有角色
       const hasRoles = store.getters.roles && store.getters.roles.length > 0
       if (hasRoles) {
+        // 放行
         next()
       } else {
         try {
+          // 代理状态更换时清空全部页面标签
+          if (store.getters.isChangeProxy) {
+            store.commit('tagsView/CLEAR_ALL_VIEW')
+          }
+          // 获取当前用户所分配的角色
           const roles = await store.dispatch('user/getRoles')
+          // 根据用户角色获取路由配置
           const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
+          // 添加路由配置
           router.addRoutes(accessRoutes)
+          // 放行
           next({ ...to, replace: true })
         } catch (err) {
           store.dispatch('user/logout')
@@ -40,8 +53,12 @@ router.beforeEach(async(to, from, next) => {
     }
   } else {
     if (whiteList.indexOf(to.path) !== -1) {
+      // 放行
       next()
     } else {
+      if (Object.keys(to.query).length > 0) {
+        setStorage('redirect-route-query', JSON.stringify(to.query))
+      }
       next(`/login?redirect=${to.path}`)
     }
   }

+ 5 - 5
src/router/index.js

@@ -36,6 +36,11 @@ export const constantRoutes = [
     component: () => import(/* webpackChunkName: "login" */ '@/views/login/index'),
     hidden: true
   },
+  {
+    path: '/proxy',
+    component: () => import(/* webpackChunkName: "proxy" */ '@/views/proxy'),
+    hidden: true
+  },
   {
     path: '/404',
     component: () => import(/* webpackChunkName: "error-page" */ '@/views/error-page/404'),
@@ -45,11 +50,6 @@ export const constantRoutes = [
     path: '/401',
     component: () => import(/* webpackChunkName: "error-page" */ '@/views/error-page/401'),
     hidden: true
-  },
-  {
-    path: '/proxy',
-    component: () => import(/* webpackChunkName: "proxy" */ '@/views/proxy'),
-    hidden: true
   }
 ]
 

+ 1 - 3
src/store/getters.js

@@ -11,11 +11,9 @@ const getters = {
   roles: state => state.user.roles,
   authUserId: state => state.user.authUserId,
   userIdentity: state => state.user.userIdentity,
-  copyUserInfo: state => state.user.copyUserInfo,
   permission_routes: state => state.permission.routes,
-  errorLogs: state => state.errorLog.logs,
-  initRouter: state => state.permission.initRouter,
   routes: state => state.permission.routes,
+  errorLogs: state => state.errorLog.logs,
   proxyInfo: state => state.proxy.proxyInfo,
   proxyState: state => state.proxy.proxyState,
   isChangeProxy: state => state.proxy.isChangeProxy,

+ 1 - 2
src/store/modules/proxy.js

@@ -11,13 +11,12 @@ const mutations = {
       authUserId: proxy.authUserId,
       brandId: proxy.brandId,
       name: proxy.name,
-      password: proxy.password,
       shopStatus: proxy.shopStatus ? 1 : 0,
       shopType: proxy.shopType,
       userIdentity: 2 // 开启代理
     }
     state.proxyState = true // 用于判断是否需要更新路由 ture:需要更新, false:不需要更新
-    state.isChangeProxy = true
+    state.isChangeProxy = true // 大理状态是否改变 根据改状态开重置路由和路由列表
   },
   // 关闭供应商代理
   CLOSE_PROXY: state => {

+ 21 - 12
src/store/modules/user.js

@@ -1,6 +1,6 @@
 import { login } from '@/api/user'
 import { resetRouter } from '@/router'
-import { getToken, removeToken, removeUserInfo, setToken, setUserInfo } from '@/utils/auth'
+import { getToken, getUserInfo, removeToken, removeUserInfo, setToken, setUserInfo } from '@/utils/auth'
 
 // 处理角色权限
 const formatRoles = userIdentity => {
@@ -13,7 +13,7 @@ const formatRoles = userIdentity => {
   return []
 }
 
-// 角色状态
+// 用户信息
 const state = {
   token: getToken(),
   name: '',
@@ -23,8 +23,7 @@ const state = {
   userIdentity: '',
   shopType: '',
   brandId: '',
-  userInfo: null,
-  proxyInfo: null
+  userInfo: null
 }
 
 const mutations = {
@@ -49,29 +48,28 @@ const mutations = {
 }
 
 const actions = {
+  // 获取用户角色
+  getRoles({ commit, state }) {
+    const roles = formatRoles(state.userIdentity)
+    commit('SET_ROLES', roles)
+    return roles
+  },
   // 登录操作
   login({ commit }, userInfo) {
     const { username, password } = userInfo
     return login({ mobileOrName: username.trim(), password: password })
       .then(res => {
-        console.log(res)
+        // 保存token及用户信息
         setToken(res.data.token)
         setUserInfo(res.data)
         commit('SAVE_USER_INOF', res.data)
         commit('SET_TOKEN', res.data.token)
-        // 处理路由
       }).catch(() => {
         commit('SAVE_USER_INOF', {})
         commit('SET_TOKEN', '')
         commit('SET_ROLES', [])
       })
   },
-  // 获取用户角色
-  getRoles({ commit, state }) {
-    const roles = formatRoles(state.userIdentity)
-    commit('SET_ROLES', roles)
-    return roles
-  },
   // 退出登录
   logout({ commit }) {
     removeToken()
@@ -80,6 +78,17 @@ const actions = {
     commit('SAVE_USER_INOF', {})
     commit('SET_TOKEN', '')
     commit('SET_ROLES', [])
+  },
+
+  // 代理登录
+  proxyLogin({ commit, rootGetters }) {
+    commit('SET_ROLES', [])
+    commit('SAVE_USER_INOF', rootGetters.proxyInfo)
+  },
+  // 代理登出
+  proxyLogout({ commit }) {
+    commit('SET_ROLES', [])
+    commit('SAVE_USER_INOF', getUserInfo())
   }
 }
 

+ 10 - 0
src/utils/tools.js

@@ -110,3 +110,13 @@ export function downLoadWithATag(href) {
   downLink.setAttribute('download', true)
   downLink.click()
 }
+
+// 通知
+export function notify(self, title, duration = 3000) {
+  const h = self.$createElement
+  self.$notify.success({
+    title: '移除授权机构',
+    message: h('i', { style: 'color: #333' }, title),
+    duration
+  })
+}

+ 2 - 2
src/views/admin/supplier/index.vue

@@ -214,9 +214,9 @@ export default {
       })
       if (text !== 'confirm') return
       // 要执行的操作
-      console.log(item)
       this.$store.commit('proxy/OPEN_PROXY', item)
-      this.$router.push(`/proxy`)
+      this.$store.dispatch('user/proxyLogin')
+      this.$router.push('/proxy')
     },
     // 过滤列表
     handleFilter() {

+ 2 - 3
src/views/common/helper/document/index.vue

@@ -221,7 +221,6 @@ export default {
           // 上传文件
           this.$refs.fileUpload.submit()
         }
-        console.log(this.uploadFileList)
       })
     },
     // 监听上传文件的状态变化
@@ -246,7 +245,7 @@ export default {
         fileModule: this.dialogFormData.fileModule.join('-')
       }
       saveCourse(params).then(res => {
-        this.$message.success(res.data)
+        this.$message.success('保存成功')
         this.dialogVisible = false
         this.getList()
       }).catch(err => {
@@ -329,7 +328,7 @@ export default {
       removeCourse({ fileId: row.fileId })
         .then(res => {
           if (res.code !== 0) return
-          this.$message.success(res.data)
+          this.$message.success('删除成功')
           this.getList(this.listQuery)
         })
     },

+ 2 - 2
src/views/common/helper/video/index.vue

@@ -243,7 +243,7 @@ export default {
         fileModule: this.dialogFormData.fileModule.join('-')
       }
       saveCourse(params).then(res => {
-        this.$message.success(res.data)
+        this.$message.success('保存成功')
         this.dialogVisible = false
         this.getList()
       }).catch(err => {
@@ -326,7 +326,7 @@ export default {
       removeCourse({ fileId: row.fileId })
         .then(res => {
           if (res.code !== 0) return
-          this.$message.success(res.data)
+          this.$message.success('删除成功')
           this.getList(this.listQuery)
         })
     },

+ 0 - 108
src/views/components/uploadFile.vue

@@ -1,108 +0,0 @@
-<template>
-  <div>
-    <el-upload
-      ref="upload"
-      class="upload-demo"
-      :limit="1"
-      :data="params"
-      :action="action"
-      :file-list="fileList"
-      :auto-upload="false"
-      :headers="headers"
-      :on-success="success"
-      :accept="accept"
-      :before-upload="beforeUpload"
-      :on-remove="remove"
-      :on-change="change"
-    >
-      <el-button slot="trigger" size="mini" type="primary">选取文件</el-button>
-      <!-- <el-button style="margin-left: 10px;" size="mini" type="success" @click="uploadFile">上传</el-button> -->
-      <div slot="tip" class="el-upload__tip">{{ tipTitle }}</div>
-    </el-upload>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from 'vuex'
-export default {
-  props: {
-    fileList: {
-      type: Array,
-      default: () => []
-    },
-    authUserId: {
-      type: Number,
-      default: -1
-    },
-    brandId: {
-      type: [Number, String],
-      default: 0
-    },
-    tipTitle: {
-      type: String,
-      default: '只能上传.doc/.ppt/.pdf文件,建议大小在10M内'
-    }
-  },
-
-  data() {
-    return {
-      // 文件上传接口
-      action: process.env.VUE_APP_UPLOAD_API + '/shop/upload/file',
-      accept: '.doc,.ppt,.pdf',
-      // 请求参数
-      // params: {
-      //   authUserId: null,
-      //   brandId: this.brandId || 0
-      // },
-      headers: {
-        'X-Token': ''
-      },
-      showUpload: true
-    }
-  },
-  computed: {
-    ...mapGetters(['token']),
-    params() {
-      return {
-        authUserId: null,
-        brandId: this.brandId || 0
-      }
-    }
-  },
-  created() {
-    this.headers['X-Token'] = this.token
-  },
-  methods: {
-    success(response) {
-      this.$emit('success', response)
-    },
-    error(err, file, fileList) {
-      this.$emit('error', err, file, fileList)
-    },
-    uploadFile() {
-      this.params.authUserId = this.authUserId || -1
-      this.$refs.upload.submit()
-    },
-    // 文件上传之前的钩子
-    beforeUpload(file) {
-      this.params.authUserId = this.authUserId || -1
-      const size = file.size
-      if (size > 1024 * 5000) {
-        const h = this.$createElement
-        this.$notify.info({
-          title: '上传文件过大',
-          message: h('p', { style: 'color: #333' }, '文件上传保存需要一定的时间,请您耐心等待,在此期间请勿执执行其他操作,以免影响文件上传失败!'),
-          duration: 5000
-        })
-      }
-    },
-    remove() {
-      this.$emit('remove')
-    },
-    change() {
-      this.$emit('change')
-    }
-  }
-}
-</script>
-

+ 0 - 101
src/views/components/uploadImage.vue

@@ -1,101 +0,0 @@
-<template>
-  <div class="img-upload-box">
-    <el-upload
-      ref="upload"
-      :action="action"
-      :headers="headers"
-      list-type="picture-card"
-      :on-preview="handlePictureCardPreview"
-      :before-upload="beforeUpload"
-      :limit="1"
-      :accept="accept"
-      :auto-upload="true"
-      :on-success="success"
-      :on-remove="remove"
-      :file-list="fileList"
-    >
-      <!-- :class="{hidden:(hasUpload && fileList===[]) || !hasUpload}" -->
-      <div slot="tip" class="el-upload__tip">建议尺寸:{{ tipTitle }}</div>
-      <i class="el-icon-picture-outline" />
-    </el-upload>
-    <el-dialog :visible.sync="dialogVisible">
-      <img width="100%" :src="dialogImageUrl" alt="">
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-// import { uploadImage } from '@/api/upload'
-import { mapGetters } from 'vuex'
-export default {
-  props: {
-    fileList: {
-      type: Array,
-      default: () => []
-    },
-    tipTitle: {
-      type: String,
-      default: '128px*88px'
-    }
-  },
-  data() {
-    return {
-      dialogImageUrl: '',
-      dialogVisible: false,
-      // 文件上传请求接口
-      action: process.env.VUE_APP_UPLOAD_API + '/upload/image',
-      headers: {
-        'X-Token': ''
-      },
-      accept: '.jpg,.png,.gif'
-    }
-  },
-  computed: {
-    ...mapGetters(['token'])
-  },
-  created() {
-    this.headers['X-Token'] = this.token
-  },
-  methods: {
-    // 预览图片
-    handlePictureCardPreview(file) {
-      this.dialogImageUrl = file.url
-      this.dialogVisible = true
-    },
-    // 图片上传成功
-    success(response, file, fileList) {
-      this.$emit('success', response)
-    },
-    // 图片上传失败
-    error(err, file, fileList) {
-      this.$emit('error', err, file, fileList)
-    },
-    // 图片上传之前的钩子
-    beforeUpload(file) {
-      const size = file.size
-      if (size > 1024 * 1000) {
-        this.$message.warning('文件上传大小超出限制(≤1MB)')
-        return false
-      }
-    },
-    remove() {
-      this.$emit('remove')
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.img-upload-box{
-  width:150px;
-  height:180px;
-  overflow: hidden
-}
-.img-upload-box>div{
-  white-space: nowrap;
-}
-.img-upload-box .el-upload-list{
-  height: 150px;
-  display: inline-block;
-}
-</style>

+ 20 - 3
src/views/login/index.vue

@@ -63,6 +63,7 @@
 
 <script>
 import { initGoPage } from '@/utils/auth'
+import { getStorage, removeStorage } from '@/utils/storage'
 export default {
   name: 'Login',
 
@@ -89,7 +90,10 @@ export default {
         const query = route.query
         if (query) {
           this.redirect = query.redirect
-          this.otherQuery = this.getOtherQuery(query)
+          this.otherQuery = {
+            ...this.otherQuery,
+            ...this.getOtherQuery(query)
+          }
         }
       },
       immediate: true
@@ -101,9 +105,17 @@ export default {
     } else if (this.loginForm.password === '') {
       this.$refs.password.focus()
     }
+    const routeQuery = getStorage('redirect-route-query')
+    if (routeQuery) {
+      this.otherQuery = {
+        ...this.otherQuery,
+        ...JSON.parse(routeQuery)
+      }
+    }
   },
-  destroyed() {
+  beforeDestroy() {
     // window.removeEventListener('storage', this.afterQRScan)
+    removeStorage('redirect-route-query')
   },
   methods: {
     checkCapslock(e) {
@@ -126,7 +138,12 @@ export default {
         this.loading = true
         this.$store.dispatch('user/login', this.loginForm).then(res => {
           this.$store.commit('tagsView/CLEAR_ALL_VIEW')
-          this.$router.replace(initGoPage())
+          // this.$router.replace(initGoPage())
+          this.$router.push({
+            // path: this.redirect || '/',
+            path: this.redirect || initGoPage(),
+            query: this.otherQuery
+          })
         })
       })
     },

+ 11 - 16
src/views/normal/club/device/index.vue

@@ -34,7 +34,7 @@
         <el-option label="未上线" :value="0" />
       </el-select>
       <el-button type="primary" icon="el-icon-search" @click="handleFilter">查询</el-button>
-      <el-button v-if="isProxy" icon="el-icon-edit" type="primary" @click="$_navigationTo(`device-add?type=add`)">添加</el-button>
+      <el-button icon="el-icon-edit" type="primary" @click="$_navigationTo(`device-add?type=add`)">添加</el-button>
     </div>
     <!-- 表格区域 -->
     <el-table
@@ -81,11 +81,11 @@
           <template v-if="row.auditStatus === 1">
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
-              <el-button v-if="isProxy" type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
+              <el-button type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
             </template>
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
-              <el-button v-if="isProxy" type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
+              <el-button type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
             </template>
           </template>
           <template v-else>
@@ -102,14 +102,12 @@
       <!-- <el-table-column v-if="false" label="创建人" width="180px" align="center" prop="createBy" /> -->
       <el-table-column label="操作" align="center" width="240px" class-name="small-padding fixed-width">
         <template slot-scope="{row}">
-          <template v-if="userIdentity === 2|| proxyInfo !== null">
-            <el-button type="default" size="mini" @click="$_navigationTo(`device-edit?type=edit&id=${row.productId}`)">
-              编辑
-            </el-button>
-            <el-button type="danger" size="mini" @click="handleRemoveProduct(row)">
-              删除
-            </el-button>
-          </template>
+          <el-button type="default" size="mini" @click="$_navigationTo(`device-edit?type=edit&id=${row.productId}`)">
+            编辑
+          </el-button>
+          <el-button type="danger" size="mini" @click="handleRemoveProduct(row)">
+            删除
+          </el-button>
           <el-button v-if="row.auditStatus === 1" type="primary" size="mini" @click="handleShowQRcode(row)">
             二维码
           </el-button>
@@ -173,10 +171,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['userIdentity', 'proxyInfo']),
-    isProxy() {
-      return this.proxyInfo || this.userIdentity !== 1
-    }
+    ...mapGetters(['userIdentity'])
   },
   created() {
     this.listQuery.authId = this.$route.query.id
@@ -254,7 +249,7 @@ export default {
     // Audit failed 审核未通过
     checkAuditFailedList(data) {
       this.auditFailedList = data.filter(item => item.auditStatus === 0)
-      if (this.auditFailedList.length > 0 && this.auditNoticeFlag && (this.userIdentity !== 1 || this.proxyInfo !== null)) {
+      if (this.auditFailedList.length > 0 && this.auditNoticeFlag) {
         this.$notify.info({
           title: '消息通知',
           dangerouslyUseHTMLString: true,

+ 14 - 28
src/views/normal/club/index.vue

@@ -33,8 +33,7 @@
       </el-select>
 
       <el-button icon="el-icon-search" type="primary" @click="getList">查询</el-button>
-      <!-- <el-button v-if="isProxy" icon="el-icon-edit" type="primary" @click="handleShowEditDialog('添加品牌授权')">添加品牌授权</el-button> -->
-      <el-button v-if="isProxy" icon="el-icon-edit" type="primary" @click="$_navigationTo('club-add?type=edit')">添加</el-button>
+      <el-button icon="el-icon-edit" type="primary" @click="$_navigationTo('club-add?type=edit')">添加</el-button>
       <el-button icon="el-icon-upload" type="primary" @click="improtDialogVisible = true">导入</el-button>
       <el-button icon="el-icon-document" type="primary" @click="handleExportExcel">导出</el-button>
       <el-button icon="el-icon-document-copy" type="primary" @click="downLoadExportExcel">获取导入模板</el-button>
@@ -86,11 +85,11 @@
           <template v-if="row.auditStatus === 1">
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
-              <el-button v-if="isProxy" type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
+              <el-button type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
             </template>
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
-              <el-button v-if="isProxy" type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
+              <el-button type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
             </template>
           </template>
           <template v-else>
@@ -109,21 +108,18 @@
       <!-- <el-table-column label="创建人" class-name="status-col" width="160px" prop="createBy" /> -->
       <el-table-column label="操作" align="center" width="400px" class-name="small-padding fixed-width">
         <template slot-scope="{row}">
-          <template v-if="isProxy">
-            <el-button type="primary" size="mini" @click="$_navigationTo(`club-edit?type=edit&id=${row.authId}`)">
-              编辑
-            </el-button>
-            <el-button type="primary" size="mini" @click="$_navigationTo(`user-list?id=${row.authId}`)">
-              登录用户
-            </el-button>
-          </template>
+          <el-button type="primary" size="mini" @click="$_navigationTo(`club-edit?type=edit&id=${row.authId}`)">
+            编辑
+          </el-button>
+          <el-button type="primary" size="mini" @click="$_navigationTo(`user-list?id=${row.authId}`)">
+            登录用户
+          </el-button>
           <el-button type="primary" size="mini" @click="$_navigationTo(`device-list?id=${row.authId}`)">
             查看设备认证
           </el-button>
-          <el-button v-if="isProxy" type="danger" size="mini" @click="handleRemoveAuth(row)">
+          <el-button type="danger" size="mini" @click="handleRemoveAuth(row)">
             删除
           </el-button>
-
         </template>
       </el-table-column>
     </el-table>
@@ -249,16 +245,13 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'userIdentity', 'proxyInfo', 'copyUserInfo']),
+    ...mapGetters(['authUserId', 'userIdentity', 'copyUserInfo']),
     saveBtnClickable() {
       return this.uploadFileList.length > 0
-    },
-    isProxy() {
-      return this.proxyInfo || this.userIdentity !== 1
     }
   },
   created() {
-    this.listQuery.authUserId = this.$route.query.id || this.proxyInfo?.authUserId || this.authUserId
+    this.listQuery.authUserId = this.authUserId
     const type = this.$route.query.type
     // 如果是通过路由参数传递的type,则需要同步到store
     if (type) {
@@ -326,8 +319,6 @@ export default {
     // 导入Excel 并提交
     handleSave: debounce(function() {
       console.log('保存')
-      console.log(this.improtDialogFormData)
-      console.log(this.proxyInfo, this.authUserId)
       // 上传文件使用 multipart/form-data
       const formData = new FormData()
 
@@ -399,7 +390,7 @@ export default {
     // Audit failed 审核未通过
     checkAuditFailedList(data) {
       this.auditFailedList = data.filter(item => item.auditStatus === 0)
-      if (this.auditFailedList.length > 0 && this.auditNoticeFlag && (this.userIdentity !== 1 || this.proxyInfo !== null)) {
+      if (this.auditFailedList.length > 0 && this.auditNoticeFlag) {
         this.$notify.info({
           title: '消息通知',
           dangerouslyUseHTMLString: true,
@@ -430,7 +421,7 @@ export default {
           this.disabled = true
           this.listLoading = true
           // authUserId先判断是否为代理操作,是就从代理数据中获取,否则直接获取当前登录用户的信息
-          this.addAuthFormData.authUserId = this.$route.query.id || this.proxyInfo?.authUserId || this.authUserId
+          this.addAuthFormData.authUserId = this.authUserId
           this.addAuthFormData.createBy = this.addAuthFormData.authUserId
           saveBrandAuth(this.addAuthFormData).then(res => {
             if (res.code !== 0) {
@@ -490,12 +481,7 @@ export default {
     },
     // 供应商状态改变
     handleChangeStatus(item) {
-      if (this.userIdentity !== 2 && this.proxyInfo === null) return
       this.listLoading = true
-      // const params = {
-      //   authId: item.authId,
-      //   status: item.status ? 1 : 0
-      // }
       const params = {
         authId: item.authId,
         status: item.status === 1 ? 0 : 1

+ 2 - 2
src/views/normal/doctor/edit.vue

@@ -101,7 +101,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['token', 'authUserId', 'proxyInfo']),
+    ...mapGetters(['token', 'authUserId']),
     // 图片上传
     action() {
       return process.env.VUE_APP_UPLOAD_API + '/upload/image'
@@ -160,7 +160,7 @@ export default {
 
     // 保存
     save() {
-      const authUserId = this.proxyInfo?.authUserId || this.authUserId
+      const authUserId = this.authUserId
       const data = {
         authUserId,
         createBy: authUserId,

+ 4 - 7
src/views/normal/doctor/index.vue

@@ -79,11 +79,11 @@
           <template v-if="row.auditStatus === 1">
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
-              <el-button v-if="isProxy" type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
+              <el-button type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
             </template>
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
-              <el-button v-if="isProxy" type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
+              <el-button type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
             </template>
           </template>
           <template v-else-if="row.auditStatus === 2">
@@ -152,10 +152,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'proxyInfo']),
-    isProxy() {
-      return this.proxyInfo || this.userIdentity !== 1
-    }
+    ...mapGetters(['authUserId'])
   },
   created() {
     this.getList()
@@ -163,7 +160,7 @@ export default {
   methods: {
     // 获取列表
     getList() {
-      this.listQuery.authUserId = this.proxyInfo?.authUserId || this.authUserId
+      this.listQuery.authUserId = this.authUserId
       fetchDoctorList(this.listQuery).then(res => {
         console.log(res)
         this.list = res.data.list

+ 1 - 1
src/views/normal/feedback/index.vue

@@ -140,7 +140,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'userIdentity', 'proxyInfo'])
+    ...mapGetters(['authUserId', 'userIdentity'])
   },
   created() {
     this.getList()

+ 1 - 4
src/views/normal/material/article/index.vue

@@ -40,7 +40,6 @@
       </el-select>
       <el-button type="primary" icon="el-icon-search" @click="getList">查询</el-button>
       <el-button
-        v-if="userIdentity === 2 || proxyInfo !== null"
         icon="el-icon-edit"
         type="primary"
         @click="$_navigationTo(`article-edit`)"
@@ -96,7 +95,6 @@
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
               <el-button
-                v-if="userIdentity === 2 || proxyInfo !== null"
                 type="primary"
                 size="mini"
                 @click="handleChangeStatus(row)"
@@ -105,7 +103,6 @@
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
               <el-button
-                v-if="userIdentity === 2 || proxyInfo !== null"
                 type="info"
                 size="mini"
                 plain
@@ -180,7 +177,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'userIdentity', 'proxyInfo'])
+    ...mapGetters(['authUserId', 'userIdentity'])
   },
   created() {
     this.getList()

+ 1 - 4
src/views/normal/material/file/index.vue

@@ -40,7 +40,6 @@
       </el-select>
       <el-button type="primary" icon="el-icon-search" @click="getList">查询</el-button>
       <el-button
-        v-if="userIdentity === 2 || proxyInfo !== null"
         icon="el-icon-edit"
         type="primary"
         @click="handleShowDialog('add')"
@@ -83,7 +82,6 @@
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
               <el-button
-                v-if="userIdentity === 2 || proxyInfo !== null"
                 type="primary"
                 size="mini"
                 @click="handleChangeStatus(row)"
@@ -92,7 +90,6 @@
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
               <el-button
-                v-if="userIdentity === 2 || proxyInfo !== null"
                 type="info"
                 size="mini"
                 plain
@@ -233,7 +230,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'userIdentity', 'proxyInfo'])
+    ...mapGetters(['authUserId', 'userIdentity'])
   },
   created() {
     this.getList()

+ 3 - 4
src/views/normal/material/image/index.vue

@@ -40,7 +40,6 @@
       </el-select>
       <el-button type="primary" icon="el-icon-search" @click="getList">查询</el-button>
       <el-button
-        v-if="userIdentity === 2 || proxyInfo!==null"
         icon="el-icon-edit"
         type="primary"
         @click="$_navigationTo(`image-edit?type=add`)"
@@ -88,11 +87,11 @@
           <template v-if="row.auditStatus === 1">
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
-              <el-button v-if="userIdentity===2 || proxyInfo!==null" type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
+              <el-button type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
             </template>
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
-              <el-button v-if="userIdentity===2 || proxyInfo!==null" type="info" size="mini" plain @click="handleChangeStatus(row)">下线</el-button>
+              <el-button type="info" size="mini" plain @click="handleChangeStatus(row)">下线</el-button>
             </template>
           </template>
           <template v-else>
@@ -150,7 +149,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'userIdentity', 'proxyInfo'])
+    ...mapGetters(['authUserId', 'userIdentity'])
   },
   created() {
     this.getList()

+ 4 - 4
src/views/normal/material/video/index.vue

@@ -39,7 +39,7 @@
         <el-option label="未上线" :value="0" />
       </el-select>
       <el-button type="primary" icon="el-icon-search" @click="getList">查询</el-button>
-      <el-button v-if="userIdentity === 2 || proxyInfo!==null" icon="el-icon-edit" type="primary" @click="handleShowDialog('add')">添加视频</el-button>
+      <el-button icon="el-icon-edit" type="primary" @click="handleShowDialog('add')">添加视频</el-button>
     </div>
     <!-- 搜索区域END -->
     <!-- 表格区域 -->
@@ -83,11 +83,11 @@
           <template v-if="row.auditStatus === 1">
             <template v-if="row.status === 0">
               <span style="margin-right:10px;" class="status danger">已下线</span>
-              <el-button v-if="userIdentity===2 || proxyInfo!==null" type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
+              <el-button type="primary" size="mini" @click="handleChangeStatus(row)">上线</el-button>
             </template>
             <template v-else>
               <span style="margin-right:10px;" class="status success ">已上线</span>
-              <el-button v-if="userIdentity===2 || proxyInfo!==null" type="info" size="mini" plain @click="handleChangeStatus(row)">下线</el-button>
+              <el-button type="info" size="mini" plain @click="handleChangeStatus(row)">下线</el-button>
             </template>
           </template>
           <template v-else>
@@ -233,7 +233,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters(['authUserId', 'userIdentity', 'proxyInfo']),
+    ...mapGetters(['authUserId', 'userIdentity']),
     headers() {
       return {
         'X-Token': getToken()

+ 2 - 1
src/views/proxy/index.vue

@@ -8,7 +8,8 @@ export default {
     ...mapGetters(['proxyState'])
   },
   created() {
-    const path = this.proxyState ? '/auth' : '/supplier'
+    const path = this.proxyState ? '/club' : '/supplier'
+    console.log(this.$store.getters)
     this.$router.push(path)
   }
 }