Ver código fonte

菜单配置

@dongkboy 1 ano atrás
pai
commit
3e8134db8d

+ 1 - 1
.env.development

@@ -1,7 +1,7 @@
 # 应用配置面板
 VITE_APP_SETTING = true
 # 页面标题
-VITE_APP_TITLE = 掌柜运营平台
+VITE_APP_TITLE = 租户平台
 # 接口请求地址,会设置到 axios 的 baseURL 参数上
 # VITE_APP_API_BASEURL = https://test.baoxianzhanggui.com/web-api #默认地址
 VITE_APP_API_BASEURL = http://192.168.0.253:8001  #田智

+ 0 - 1
src/api/index.ts

@@ -118,6 +118,5 @@ const api = {
   lotteryApi: lotteryApi(axiosInstance),
   contentApi:contentApi(axiosInstance),
   advertisementApi:advertisementApi(axiosInstance),
-  lotteryApi: lotteryApi(axiosInstance),
 }
 export default api

+ 27 - 0
src/assets/styles/globals.css

@@ -282,3 +282,30 @@ textarea {
 }
 
 /* 消息提示弹窗 */
+
+/* dialog对话框样式 */
+.el-dialog {
+  padding: 0;
+}
+
+.el-dialog__header {
+  padding: 13px;
+  text-align: center;
+  border-bottom: 1px solid #eee;
+}
+
+.el-dialog__header .el-dialog__title {
+  font-weight: bold;
+  color: #333;
+}
+
+.el-dialog__body {
+  padding: 24px;
+}
+
+.el-dialog__footer {
+  padding: 13px 24px;
+  border-top: 1px solid #eee;
+}
+
+/* dialog对话框样式 */

+ 46 - 0
src/router/modules/externalAgreement.ts

@@ -0,0 +1,46 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw = {
+  path: '/externalAgreement/agreement',
+  component: Layout,
+  redirect: '/externalAgreement/agreement/agreementIndex',
+  name: 'QuoteConfig',
+  meta: {
+    title: '外部协议',
+  },
+  children: [
+    {
+      path: 'agreementIndex',
+      name: 'AgreementIndex',
+      component: () => import('@/views/externalAgreement/agreement/agreementIndex.vue'),
+      meta: {
+        title: '协议管理',
+      },
+      children:[
+        {
+          path: 'agreementAdd',
+          name: 'AgreementAdd',
+          component: () => import('@/views/externalAgreement/agreement/agreementAdd.vue'),
+          meta: {
+            title: '协议添加',
+            menu:false,
+            activeMenu: '/personnel/member',
+          },
+        },
+      ]
+    },
+    {
+      path: 'costManagement',
+      name: 'CostManagement',
+      component: () => import('@/views/externalAgreement/costManagement.vue'),
+      meta: {
+        title: '费用管理',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      },
+    },
+  ],
+}
+
+export default routes

+ 8 - 8
src/router/modules/personnel.ts

@@ -26,22 +26,22 @@ const routes: RouteRecordRaw = {
           component: () => import('@/views/personnel/modules/memberMessage.vue'),
           meta: {
             title: '成员详情',
-            menu:false
-          }, 
+            menu:false,
+            activeMenu: '/personnel/member',
+          },
         },
         {
           path: 'memberEdit',
           name: 'personnelMemberEdit',
           component: () => import('@/views/personnel/modules/addOperation.vue'),
           meta: {
-            title: '成员管理',
-            menu:false
-          }, 
+            title: '成员添加',
+            menu:false,
+            activeMenu: '/personnel/member',
+          },
         },
       ]
     },
-    
-    
     {
       path: 'institution',
       name: 'personnelInstitution',
@@ -57,7 +57,7 @@ const routes: RouteRecordRaw = {
           meta: {
             title: '机构管理',
             menu:false
-          }, 
+          },
         },
       ]
     },

+ 74 - 0
src/router/modules/quoteConfig.ts

@@ -0,0 +1,74 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw = {
+  path: '/quoteConfig/agreement',
+  component: Layout,
+  redirect: '/quoteConfig/agreement/agreementIndex',
+  name: 'QuoteConfig',
+  meta: {
+    title: '报价配置',
+  },
+  children: [
+    {
+      path: 'agreementIndex',
+      name: 'AgreementIndex',
+      component: () => import('@/views/quoteConfig/agreement/agreementIndex.vue'),
+      meta: {
+        title: '协议管理',
+      },
+      children:[
+        {
+          path: 'agreementAdd',
+          name: 'AgreementAdd',
+          component: () => import('@/views/quoteConfig/agreement/agreementAdd.vue'),
+          meta: {
+            title: '协议添加',
+            menu:false,
+            activeMenu: '/personnel/member',
+          },
+        },
+        {
+          path: 'agreementCopy',
+          name: 'AgreementCopy',
+          component: () => import('@/views/quoteConfig/agreement/agreementCopy.vue'),
+          meta: {
+            title: '复制协议',
+            menu:false,
+            activeMenu: '/personnel/member',
+          },
+        },
+      ]
+    },
+    {
+      path: 'solutionManagement',
+      name: 'SolutionManagement',
+      component: () => import('@/views/quoteConfig/solutionManagement.vue'),
+      meta: {
+        title: '方案管理',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      },
+    },
+    {
+      path: 'costManagement',
+      name: 'CostManagement',
+      component: () => import('@/views/quoteConfig/costManagement.vue'),
+      meta: {
+        title: '费用管理',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      },
+    },
+    {
+      path: 'insuranceCompanyAccount',
+      name: 'InsuranceCompanyAccount',
+      component: () => import('@/views/quoteConfig/insuranceCompanyAccount/insuranceCompanyAccount.vue'),
+      meta: {
+        title: '保司账号',
+        // auth:['role.add','role.view','role.delete','role.edit']
+      },
+    },
+  ],
+}
+
+export default routes

+ 10 - 2
src/router/routes.ts

@@ -8,7 +8,9 @@ import representative from "./modules/representative";
 import operationManagement from "./modules/operation";
 import personnel from "./modules/personnel";
 import content from "./modules/content"
-import marketingManagement from "./modules/marketing.ts";
+import marketingManagement from "./modules/marketing";
+import quoteConfig from "./modules/quoteConfig";//报价配置
+import externalAgreement from "./modules/externalAgreement";//外部协议
 // import {  } from "@/store/modules/user";
 // 固定路由(默认路由
 // console.log(useUserStore)
@@ -110,7 +112,13 @@ const asyncRoutes: Route.recordMainRaw[] = [
     },
     children: [content],
   },
-
+  {
+    meta: {
+      title: "报价配置",
+      icon: "i-uim:box",
+    },
+    children: [quoteConfig,externalAgreement],
+  },
   // {
   //   meta: {
   //     title: "租户运营",

+ 0 - 0
src/views/externalAgreement/agreement/agreementAdd.vue


+ 17 - 0
src/views/externalAgreement/agreement/agreementIndex.vue

@@ -0,0 +1,17 @@
+<!-- 模板区域 -->
+<template>
+<div>
+<PageMain>
+</PageMain>
+</div>
+</template>
+
+<!-- 行为区域 -->
+<script lang='ts' setup>
+import { ref,reactive } from 'vue'
+import api from '@/api'
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+
+</style>

+ 0 - 0
src/views/externalAgreement/costManagement.vue


+ 54 - 43
src/views/personnel/modules/memberMessage.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="message-info">
     <div class="error"></div>
-    <div style="background-color: #fff; padding: 15px; box-sizing: border-box">
+    <div style=" box-sizing: border-box; padding: 15px;background-color: #fff;">
       <el-row :gutter="24">
         <el-col :span="20">
-          <div style="display: flex; align-items: center">
+          <div style="display: flex; align-items: center;">
             <div class="img-title">
               {{ pinyin.getFullChars(operationForm.name).substring(0, 1) }}
             </div>
@@ -13,7 +13,7 @@
         </el-col>
         <el-col :span="4">
           <el-button type="primary" @click="editMember">编辑</el-button>
-          <el-dropdown style="margin-left: 15px">
+          <el-dropdown style="margin-left: 15px;">
             <el-button type="primary"> 更多 </el-button>
             <template #dropdown>
               <el-dropdown-menu>
@@ -71,7 +71,7 @@
       :model="operationForm"
       ref="OperationFormRef"
       label-width="120"
-      style="background-color: #fff; padding: 20px; box-sizing: border-box"
+      style=" box-sizing: border-box; padding: 20px;background-color: #fff;"
     >
       <el-tabs v-model="activeName" class="demo-tabs">
         <el-tab-pane label="基本信息" name="first">
@@ -344,7 +344,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 1)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -381,7 +381,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 2)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -418,7 +418,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 3)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -455,7 +455,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 4)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -492,7 +492,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 5)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -529,7 +529,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 6)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -566,7 +566,7 @@
                         :show-file-list="false"
                         accept=".png, .jpg, .jpeg"
                         @change="uploadImage($event, 7)"
-                        style="display: flex; align-items: center"
+                        style="display: flex; align-items: center;"
                       >
                         <el-icon class="btn-icon"><Upload /></el-icon>
                       </el-upload>
@@ -603,7 +603,7 @@
     >
       <el-row :gutter="24">
         <el-col :span="20">
-          <div style="display: flex; align-items: center">
+          <div style="display: flex; align-items: center;">
             <div class="img-title">
               {{ pinyin.getFullChars(operationForm.name).substring(0, 1) }}
             </div>
@@ -611,12 +611,12 @@
           </div>
         </el-col>
       </el-row>
-      <p style="margin-left: 50px">工号:{{ transferInfo.userId }}</p>
-      <p style="margin-left: 50px">所在机构:{{ transferInfo.deptName }}</p>
+      <p style="margin-left: 50px;">工号:{{ transferInfo.userId }}</p>
+      <p style="margin-left: 50px;">所在机构:{{ transferInfo.deptName }}</p>
       <el-divider v-show="leave"/>
       <!-- 资源转移--->
-      <p style="margin-left: 50px" v-show="!leave">需要转移的资源</p>
-      <el-table :data="[{}]" style="width: 100%" v-show="!leave">
+      <p style="margin-left: 50px;" v-show="!leave">需要转移的资源</p>
+      <el-table :data="[{}]" style="width: 100%;" v-show="!leave">
         <el-table-column prop="date" label="资源" width="120">
           <template #default> 业务员 </template>
         </el-table-column>
@@ -642,7 +642,7 @@
         <el-radio value="1" size="large">转移给其他成员</el-radio>
         <el-radio value="0" size="large">不转移</el-radio>
       </el-radio-group> -->
-    
+
       <template #footer>
         <div class="dialog-footer">
           <el-button @click="dialogVisible = false">取消</el-button>
@@ -670,13 +670,13 @@
       <div>
         <el-input
           v-model="filterText"
-          style="width: 240px"
+          style="width: 240px;"
           placeholder="请输入机构名称查找"
           :prefix-icon="Search"
         />
         <el-tree
           ref="treeRef"
-          style="max-width: 600px"
+          style="max-width: 600px;"
           class="filter-tree"
           :data="tableData"
           :props="tableProps"
@@ -689,7 +689,7 @@
             <span class="custom-tree-node">
               <span>{{ node.label }}</span>
               <span>
-                <a style="color: #00a0f4">
+                <a style="color: #00a0f4;">
                   {{ node.label == deptItem.name ? "已选" : "" }}
                 </a>
               </span>
@@ -765,13 +765,13 @@ onMounted(async () => {
       if (res.code === 200) {
         operationForm.value = res.data;
         let formData = res.data
-        
+
         if(formData.fileList) {
-          
-          
+
+
           let sfz1 = formData.fileList.find(item => item.fileType == 'sfz1')
           let sfz2 = formData.fileList.find(item => item.fileType == 'sfz2')
-          
+
           let qualification = formData.fileList.find(item => item.fileType == 'bankCard')
           let contractImg = formData.fileList.find(item => item.fileType == 'contract')
           let applicantImg = formData.fileList.find(item => item.fileType == 'applicant')
@@ -993,11 +993,11 @@ const uploadImage = (file: any, type: number) => {
   let url = window.URL.createObjectURL(files); //转临时路径
   const params = new FormData(); // 声明formData数据类型
   params.append("file", files);
- 
+
   // params.append("multipartFile", files);
   // params.append("type", "image");
   api.areaApi.fileUpload(params).then((res: any) => {
-    
+
     if (res.code === 200) {
       switch (type) {
         case 1:
@@ -1191,7 +1191,7 @@ function confirmDialogInfo(item: any) {
 
 //资源转移确认
 function confirmTransfer() {
- 
+
     api.userApi
     .transfer({
       originalUserId: transferInfo.value.userId,
@@ -1217,8 +1217,8 @@ function confirmTransfer() {
     //     dialogVisible.value = false;
     //   }
     // });
-  
-  
+
+
 }
 
 //变更机构弹框
@@ -1299,7 +1299,7 @@ function delUser() {
             api.userApi
               .userDelete({
                 id: [operationForm.value.id],
-                
+
               })
               .then((res: any) => {
                 if(res.code==200){
@@ -1319,76 +1319,87 @@ function delUser() {
 
 <style scoped lang="scss">
 .message-info {
+  box-sizing: border-box;
   // background: #fff;
   padding: 15px;
-  box-sizing: border-box;
+
   h4 {
     margin: 0;
   }
 }
+
 .img-title {
-  border-radius: 50%;
-  width: 30px;
-  height: 30px;
-  color: #fff;
-  background: #00a0f4;
   display: flex;
   align-items: center;
   justify-content: center;
+  width: 30px;
+  height: 30px;
   margin-right: 20px;
+  color: #fff;
+  background: #00a0f4;
+  border-radius: 50%;
 }
+
 .fileInfo {
   display: flex;
   align-items: center;
   justify-content: flex-start;
   padding: 2px 20px;
-  border-radius: 5px;
   margin: 0 10px;
+  border-radius: 5px;
+
   &:hover {
     background: #ccc;
   }
+
   .fileName {
     width: 200px;
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
   }
+
   .fileBtn {
     display: flex;
     align-items: center;
+
     .btn-icon {
       margin: 0 10px;
       font-size: 16px;
       cursor: pointer;
+
       &:hover {
         color: #00a0f4;
       }
     }
   }
 }
+
 .image-view {
   position: absolute;
   top: 0;
   left: 0;
-  width: 100%;
-  height: 100%;
-  background: rgba(0, 0, 0, 0.6);
+  z-index: 9999;
   display: flex;
   align-items: center;
   justify-content: center;
-  z-index: 9999;
+  width: 100%;
+  height: 100%;
+  background: rgb(0 0 0 / 60%);
+
   img {
     width: 800px;
     height: 800px;
     border-radius: 5px;
   }
 }
+
 .custom-tree-node {
-  flex: 1;
   display: flex;
+  flex: 1;
   align-items: center;
   justify-content: space-between;
-  font-size: 14px;
   padding-right: 8px;
+  font-size: 14px;
 }
 </style>

+ 22 - 17
src/views/personnel/roleManagement.vue

@@ -16,7 +16,7 @@
                 </template>
               </ElInput>
             </ElCol>
-            <ElCol :md="20" style="margin-top: 20px">
+            <ElCol :md="20" style="margin-top: 20px;">
               <ElButton type="primary" @click="addRole">
                 <el-icon><Plus /></el-icon>
                 添加</ElButton
@@ -58,7 +58,7 @@
             :rules="roleRules"
             label-width="auto"
             size=""
-            style="max-width: 500px"
+            style="max-width: 500px;"
           >
             <ElFormItem prop="name" label="角色名称">
               <ElInput
@@ -72,7 +72,7 @@
             <ElFormItem prop="deptId" label="所属机构">
               <el-cascader
                 clearable
-                style="width: 100%"
+                style="width: 100%;"
                 v-model="roleInfo.deptId"
                 :options="tableData"
                 :props="tableProps"
@@ -90,21 +90,21 @@
             </ElFormItem>
           </ElForm>
           <ElDivider></ElDivider>
-          <div style="min-height: 500px">
+          <div style="min-height: 500px;">
             <h5>
               角色权限<span
-                style="color: #ccc; font-size: 12px; font-weight: 400"
+                style=" font-size: 12px; font-weight: 400;color: #ccc;"
                 >(该角色享有的后台模块功能权限剩余数据权限)</span
               >
             </h5>
             <el-tabs
               :tab-position="'left'"
-              style="height: 500px"
+              style="height: 500px;"
               class="demo-tabs"
             >
               <el-tab-pane label="菜单/操作权限">
                 <ElTree
-                  style="max-height: 440px; overflow-y: auto"
+                  style="max-height: 440px; overflow-y: auto;"
                   :data="treeData"
                   :props="defaultProps"
                   show-checkbox
@@ -126,7 +126,7 @@
                   <el-radio value="3" size="large">指定机构</el-radio>
                 </el-radio-group>
                 <ElTree
-                  style="max-height: 440px; overflow-y: auto"
+                  style="max-height: 440px; overflow-y: auto;"
                   :data="deptTreeData"
                   :props="deptProps"
                   show-checkbox
@@ -304,7 +304,7 @@ function chooseRole(item: any) {
         deptTree.value!.setCheckedKeys([], false);
         roleInfo.dataMark = '1';
       }
-      
+
       roleInfo.deptIds = res.data.dataScope?.deptIds;
     });
   operationType.value = "edit";
@@ -499,12 +499,12 @@ onBeforeMount(() => {
   const processedRoutes = preprocessRoutes(asyncRoutes);
 
   treeData.value = convertToTreeData(0, processedRoutes);
-  
+
   api.roleApi.updateConfig({
     sysConfig:JSON.stringify(processedRoutes),
     sysPerms:JSON.stringify(treeData.value)
   }).then(res=>{
-    
+
   })
 
 });
@@ -531,19 +531,21 @@ onMounted(() => {
 .active {
   background: #b4b2b2;
 }
+
 p {
   margin: 0;
 }
+
 .role-item {
-  padding: 0 10px;
   box-sizing: border-box;
-  cursor: pointer;
+  padding: 0 10px;
   margin-top: 10px;
+  cursor: pointer;
 
   > p {
     span {
-      color: #b4b2b2;
       font-size: 10px;
+      color: #b4b2b2;
     }
   }
   // >p:last-child{
@@ -551,19 +553,22 @@ p {
 
   // }
 }
+
 .on {
-  background: rgb(242, 242, 242);
-  padding: 0 10px;
   box-sizing: border-box;
+  padding: 0 10px;
   margin-top: 10px;
   cursor: pointer;
+  background: rgb(242 242 242);
+
   > p {
     span {
-      color: #b4b2b2;
       font-size: 10px;
+      color: #b4b2b2;
     }
   }
 }
+
 :deep(.p-5) {
   padding: 0.2rem !important;
 }

+ 0 - 0
src/views/quoteConfig/agreement/agreementAdd.vue


+ 0 - 0
src/views/quoteConfig/agreement/agreementCopy.vue


+ 17 - 0
src/views/quoteConfig/agreement/agreementIndex.vue

@@ -0,0 +1,17 @@
+<!-- 模板区域 -->
+<template>
+<div>
+<PageMain>
+</PageMain>
+</div>
+</template>
+
+<!-- 行为区域 -->
+<script lang='ts' setup>
+import { ref,reactive } from 'vue'
+import api from '@/api'
+</script>
+<!-- 样式区域 -->
+<style lang='scss' scoped>
+
+</style>

+ 0 - 0
src/views/quoteConfig/costManagement.vue


+ 0 - 0
src/views/quoteConfig/insuranceCompanyAccount/insuranceCompanyAccount.vue


+ 0 - 0
src/views/quoteConfig/solutionManagement.vue


+ 14 - 7
src/views/representative/salesman.vue

@@ -495,21 +495,24 @@ onMounted(() => {
   display: flex;
   align-items: center;
   justify-content: space-between;
+
   > div {
     display: flex;
   }
 }
+
 .institution {
-  background: #fff;
-  width: 100%;
   // height: 100%;
   // padding: 20px;
   box-sizing: border-box;
   display: flex;
+  width: 100%;
+  background: #fff;
+
   :deep(.demo-tabs) {
+    box-sizing: border-box;
     width: 100%;
     padding: 20px;
-    box-sizing: border-box;
   }
   // .institution-main {
   //   flex: 1;
@@ -518,23 +521,27 @@ onMounted(() => {
   //   box-sizing: border-box;
   // }
 }
+
 :deep(.el-dropdown-link) {
-  cursor: pointer;
-  color: var(--el-color-primary);
   display: flex;
   align-items: center;
   margin-left: 15px;
+  color: var(--el-color-primary);
+  cursor: pointer;
 }
+
 .custom-tree-node {
-  flex: 1;
   display: flex;
+  flex: 1;
   align-items: center;
   justify-content: space-between;
-  font-size: 14px;
   padding-right: 8px;
+  font-size: 14px;
 }
+
 :deep(.el-message-box__container) {
   width: 100% !important;
+
   .el-message-box__message {
     width: 100% !important;
   }