Kaynağa Gözat

店铺代码提交

yjwang 3 hafta önce
ebeveyn
işleme
d50db8f270

+ 11 - 0
src/api/hisStore/store.js

@@ -25,3 +25,14 @@ export function businessLicenseCheck(imageUrl) {
     params: imageUrl
   })
 }
+
+/**
+ * 校验
+ * @returns {*}
+ */
+export function checkStorePerm() {
+  return request({
+    url: '/store/store/checkStorePerm',
+    method: 'post'
+  })
+}

+ 51 - 16
src/router/index.js

@@ -45,19 +45,6 @@ export const constantRoutes = [
     component: (resolve) => require(['@/views/error/401'], resolve),
     hidden: true
   },
-  {
-    path: '/',
-    component: Layout,
-    redirect: 'index',
-    children: [
-      {
-        path: 'index',
-        component: (resolve) => require(['@/views/index'], resolve),
-        name: 'Index',
-        meta: { title: '店铺看板', icon: 'dashboard', affix: false }
-      }
-    ]
-  },
   {
     path: '/store',
     component: Layout,
@@ -74,12 +61,12 @@ export const constantRoutes = [
     ]
   },
   {
-    path: '/store',
+    path: '/',
     component: Layout,
-    redirect: 'noredirect',
+    redirect: 'index',
     children: [
       {
-        path: 'Config',
+        path: 'index',
         component: (resolve) => require(['@/views/store/storeConfig/index'], resolve),
         name: '店铺配置',
         meta: { title: '店铺配置', icon: 'textarea', noCache: true, affix: false }
@@ -205,6 +192,54 @@ export const constantRoutes = [
 
 ]
 
+export const storeRouter=[
+
+  {
+    path: '/login',
+    component: (resolve) => require(['@/views/login'], resolve),
+    hidden: true
+  },
+
+  {
+    path: '/404',
+    component: (resolve) => require(['@/views/error/404'], resolve),
+    hidden: true
+  },
+  {
+    path: '/401',
+    component: (resolve) => require(['@/views/error/401'], resolve),
+    hidden: true
+  },
+  {
+    path: '/store',
+    component: Layout,
+    hidden: true,
+    redirect: '/store/profile',
+    children: [
+      {
+        path: 'profile',
+        component: (resolve) => require(['@/views/store/profile/index'], resolve),
+        name: 'Profile',
+        meta: { title: '店铺中心', icon: 'user' }
+      },
+
+    ]
+  },
+  {
+    path: '/',
+    component: Layout,
+    redirect: 'index',
+    children: [
+      {
+        path: 'index',
+        component: (resolve) => require(['@/views/store/storeConfig/index'], resolve),
+        name: '店铺配置',
+        meta: { title: '店铺配置', icon: 'textarea', noCache: true, affix: false }
+      },
+    ]
+  }
+]
+
 export default new Router({
   mode: 'history', // 去掉url中的#
   scrollBehavior: () => ({ y: 0 }),

+ 27 - 1
src/store/modules/permission.js

@@ -1,4 +1,4 @@
-import { constantRoutes } from '@/router'
+import { constantRoutes , storeRouter} from '@/router'
 import Layout from '@/layout/index'
 import ParentView from '@/components/ParentView';
 import InnerLink from '@/layout/components/InnerLink'
@@ -13,10 +13,36 @@ const permission = {
   },
   mutations: {
     SET_ROUTES: (state, routes) => {
+      const cachedStoreRouter = localStorage.getItem('store_router')
+      const defaultArray = storeRouter || [];
+      let constantRoutes = defaultArray;
+      console.log("打印数据-----------》", cachedStoreRouter);
+      if (cachedStoreRouter) {
+        try {
+          const temp = JSON.parse(cachedStoreRouter);
+          constantRoutes = Array.isArray(temp) ? temp : defaultArray;
+          console.log("打印数据-----------》", constantRoutes);
+        } catch (error) {
+          console.error('localStorage 数据解析失败,使用默认数组:', error);
+          localStorage.removeItem('store_router');
+        }
+      }
       state.addRoutes = routes
       state.routes = constantRoutes.concat(routes)
     },
     SET_DEFAULT_ROUTES: (state, routes) => {
+      const cachedStoreRouter = localStorage.getItem('store_router')
+      const defaultArray = storeRouter || [];
+      let constantRoutes = defaultArray;
+      if (cachedStoreRouter) {
+        try {
+          const temp = JSON.parse(cachedStoreRouter);
+          constantRoutes = Array.isArray(temp) ? temp : defaultArray;
+        } catch (error) {
+          console.error('localStorage 数据解析失败,使用默认数组:', error);
+          localStorage.removeItem('store_router');
+        }
+      }
       state.defaultRoutes = constantRoutes.concat(routes)
     },
     SET_TOPBAR_ROUTES: (state, routes) => {

+ 29 - 3
src/views/login.vue

@@ -59,9 +59,14 @@
 </template>
 
 <script>
+import Vue from 'vue'
 import { getCodeImg } from "@/api/login";
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from '@/utils/jsencrypt'
+import  { checkStorePerm } from '@/api/hisStore/store'
+import {constantRoutes,storeRouter} from '@/router'
+import Router from 'vue-router'
+Vue.use(Router)
 
 export default {
   name: "Login",
@@ -98,14 +103,14 @@ export default {
     }
   },
   mounted () {
-    
+
   },
   created() {
     this.getCode();
     this.getCookie();
   },
   methods: {
-       
+
     getCode() {
       getCodeImg().then(res => {
         this.codeUrl = "data:image/gif;base64," + res.img;
@@ -138,7 +143,19 @@ export default {
           this.$store
             .dispatch("Login", this.loginForm)
             .then(() => {
-              this.$router.push({ path: this.redirect || "/" });
+
+              //请求查看权限校验接口
+              let selectedRoutes = [];
+              checkStorePerm().then(res => {
+                if(res.data){
+                  selectedRoutes = constantRoutes;
+                }else {
+                  selectedRoutes = storeRouter;
+                }
+                localStorage.setItem("store_router", JSON.stringify(selectedRoutes));
+                this.updateRouter(selectedRoutes);
+                this.$router.push({ path: this.redirect || "/" });
+              })
             })
             .catch(() => {
               this.loading = false;
@@ -147,6 +164,15 @@ export default {
         }
 
       });
+    },
+    updateRouter(newRoutes) {
+      this.$router.matcher = new Router({
+        mode: 'history',
+        scrollBehavior: () => ({ y: 0 }),
+        routes: newRoutes
+      })
+      this.$router.options.routes = newRoutes;
+      this.$store.commit('SET_ROUTES', newRoutes);
     }
   }
 };

+ 64 - 1
src/views/store/storeConfig/userInfo.vue

@@ -425,6 +425,40 @@
           </el-row>
       </div>
       <el-divider content-position="left">店铺配置信息</el-divider>
+      <el-col :span="12">
+        <el-form-item label="网销报告" prop="reportUrl">
+          <el-upload
+            class="upload-demo"
+            :action="uploadUrl"
+            :on-preview="handlePreview"
+            :on-remove="handleRemove"
+            :before-remove="beforeRemove"
+            multiple
+            :limit="1"
+            :on-exceed="handleExceed"
+            :on-success="(response, file) => handleFileSuccess(response, file, 'reportUrl')"
+            :file-list="reportFileList">
+            <el-button size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="备案" prop="filingUrl">
+          <el-upload
+            class="upload-demo"
+            :action="uploadUrl"
+            :on-preview="handlePreview"
+            :on-remove="handleRemove"
+            :before-remove="beforeRemove"
+            :on-success="(response, file) => handleFileSuccess(response, file, 'filingUrl')"
+             multiple
+            :limit="1"
+            :on-exceed="handleExceed"
+            :file-list="fileList">
+            <el-button size="small" type="primary">点击上传</el-button>
+          </el-upload>
+        </el-form-item>
+      </el-col>
       <el-form-item label="退货地址" prop="refundAddress">
         <el-input v-model="form.refundAddress" placeholder="请输入退货地址"/>
       </el-form-item>
@@ -517,6 +551,8 @@ import { getStoreInfo, businessLicenseCheck} from '@/api/hisStore/store'
 export default {
   data() {
     return {
+      reportFileList:[],
+      fileList:[],
       previewImageUrl: '', // 添加预览图片URL
       imagePreviewVisible: false,// 添加图片预览对话框可见性控制
       switchMedicalValue: false,
@@ -983,6 +1019,8 @@ export default {
             this.form.otherSpecialQualificationEnd
           ]);
         }
+        this.reportFileList = this.urlToFileList(this.form.reportUrl);
+        this.fileList = this.urlToFileList(this.form.filingUrl);
       })
     },
     //长期有效营业执照选择
@@ -1026,7 +1064,32 @@ export default {
         this.isDeleting = false; // 无论操作结果,恢复上传组件可用
         this.$forceUpdate(); // 强制刷新确保状态同步
       });
-    }
+    },
+    handleRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    handlePreview(file) {
+      console.log(file);
+    },
+    handleExceed(files, fileList) {
+      this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+    },
+    beforeRemove(file, fileList) {
+      return this.$confirm(`确定移除 ${ file.name }?`);
+    },
+    // 将逗号分隔的URL字符串转换为文件对象数组
+    urlToFileList(urlStr) {
+      if (!urlStr) return [];
+      return urlStr.split(',').map(url => {
+        const fileName = url.substring(url.lastIndexOf('/') + 1);
+        return {
+          name: fileName,
+          url: url,
+          uid: Date.now() + Math.random().toString(36).substr(2, 9) // 生成唯一ID
+        };
+      });
+    },
+
   }
 }
 </script>