liuguofeng преди 6 месеца
родител
ревизия
a7f5eecb3a

+ 67 - 0
package-lock.json

@@ -10,10 +10,12 @@
       "dependencies": {
         "axios": "^1.7.8",
         "element-plus": "^2.9.0",
+        "file-saver": "^2.0.5",
         "qs": "^6.13.1",
         "sass": "^1.81.1",
         "sass-loader": "^13.2.0",
         "vue": "^3.5.13",
+        "vue-i18n": "^10.0.5",
         "vue-router": "^4.2.5"
       },
       "devDependencies": {
@@ -496,6 +498,47 @@
       "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.8.tgz",
       "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
     },
+    "node_modules/@intlify/core-base": {
+      "version": "10.0.5",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-10.0.5.tgz",
+      "integrity": "sha512-F3snDTQs0MdvnnyzTDTVkOYVAZOE/MHwRvF7mn7Jw1yuih4NrFYLNYIymGlLmq4HU2iIdzYsZ7f47bOcwY73XQ==",
+      "dependencies": {
+        "@intlify/message-compiler": "10.0.5",
+        "@intlify/shared": "10.0.5"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
+    "node_modules/@intlify/message-compiler": {
+      "version": "10.0.5",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-10.0.5.tgz",
+      "integrity": "sha512-6GT1BJ852gZ0gItNZN2krX5QAmea+cmdjMvsWohArAZ3GmHdnNANEcF9JjPXAMRtQ6Ux5E269ymamg/+WU6tQA==",
+      "dependencies": {
+        "@intlify/shared": "10.0.5",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
+    "node_modules/@intlify/shared": {
+      "version": "10.0.5",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-10.0.5.tgz",
+      "integrity": "sha512-bmsP4L2HqBF6i6uaMqJMcFBONVjKt+siGluRq4Ca4C0q7W2eMaVZr8iCgF9dKbcVXutftkC7D6z2SaSMmLiDyA==",
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
     "node_modules/@jridgewell/gen-mapping": {
       "version": "0.3.5",
       "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
@@ -2088,6 +2131,11 @@
         "reusify": "^1.0.4"
       }
     },
+    "node_modules/file-saver": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+    },
     "node_modules/fill-range": {
       "version": "7.1.1",
       "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
@@ -3363,6 +3411,25 @@
         }
       }
     },
+    "node_modules/vue-i18n": {
+      "version": "10.0.5",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-10.0.5.tgz",
+      "integrity": "sha512-9/gmDlCblz3i8ypu/afiIc/SUIfTTE1mr0mZhb9pk70xo2csHAM9mp2gdQ3KD2O0AM3Hz/5ypb+FycTj/lHlPQ==",
+      "dependencies": {
+        "@intlify/core-base": "10.0.5",
+        "@intlify/shared": "10.0.5",
+        "@vue/devtools-api": "^6.5.0"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.0"
+      }
+    },
     "node_modules/vue-router": {
       "version": "4.2.5",
       "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.2.5.tgz",

+ 2 - 0
package.json

@@ -11,10 +11,12 @@
   "dependencies": {
     "axios": "^1.7.8",
     "element-plus": "^2.9.0",
+    "file-saver": "^2.0.5",
     "qs": "^6.13.1",
     "sass": "^1.81.1",
     "sass-loader": "^13.2.0",
     "vue": "^3.5.13",
+    "vue-i18n": "^10.0.5",
     "vue-router": "^4.2.5"
   },
   "devDependencies": {

+ 1 - 0
src/http/public.js

@@ -3,6 +3,7 @@
 // import qs from 'qs';
 
 /** 公用接口 */
+//模拟发送请求
 const allApi = {
     getCaptcha() {
         // return service({

+ 1 - 0
src/http/user.js

@@ -3,6 +3,7 @@
 // import qs from 'qs';
 
 /** 公用接口 */
+//模拟发送请求
 const allApi = {
     login() {
         // return service({

+ 14 - 1
src/main.js

@@ -1,10 +1,23 @@
 import { createApp } from 'vue'
 import App from './App.vue'
 import router from './router/index'
+import ElementPlus from 'element-plus';
 /** 添加公共样式 */
 import './style/index.scss';
-
+import zhCn from 'element-plus/es/locale/lang/zh-cn';
+import {createI18n} from 'vue-i18n';
 const app = createApp(App);
+
+const i18n = new createI18n({
+    locale: 'zh-cn',
+    messages: {
+      'zh-cn': zhCn
+    }
+})
+app.use(ElementPlus, {
+    locale: zhCn
+  });
+app.use(i18n);
 app.use(router);
 
 app.mount('#app');

+ 134 - 0
src/pages/exapeViews/userList/client/Edit.vue

@@ -0,0 +1,134 @@
+<template>
+   <el-scrollbar height="100%">
+        <div class="page-container main-view">
+            <div class="container">
+                <el-form
+                    :model="dataContainer.form"
+                    ref="FormElRef"
+                    :inline="true"
+                    :rules="dataContainer.rules"
+                    label-width="120px"
+                >
+                    <el-row :gutter="0">
+                        <el-col :span="8" :xs="6">
+                            <el-form-item label="客户名称" prop="username">
+                                <el-input
+                                    v-model="dataContainer.form.username"
+                                    placeholder="请输入"
+                                    clearable
+                                />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="8" :xs="6">
+                            <el-form-item label="contact" prop="contact">
+                                <el-input
+                                    v-model="dataContainer.form.contact"
+                                    placeholder="请输入"
+                                    clearable
+                                />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="8" :xs="6">
+                            <el-form-item label="微伴ID" prop="weibanId">
+                                <el-input
+                                    v-model="dataContainer.form.weibanId"
+                                    placeholder="请输入"
+                                    clearable
+                                />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="8" :xs="6">
+                            <el-form-item label="输入城市" prop="city">
+                                <el-input
+                                    v-model="dataContainer.form.city"
+                                    placeholder="请输入"
+                                    clearable
+                                />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+                <el-button type="primary" @click="handleSubmit"> 提交 </el-button>
+            </div>
+        </div>
+    </el-scrollbar>
+</template>
+
+<script setup>
+import {
+    defineComponent,
+    onBeforeUnmount,
+    ref,
+    reactive,
+    getCurrentInstance,
+    onActivated,
+    onMounted,
+} from 'vue';
+import { useRouter, useRoute } from 'vue-router';
+import { messageError,messageSuccess } from '@/action/messagePrompt.js';
+const FormElRef = ref(null); //组件实例
+    const router = useRouter();
+    const route = useRoute();
+    const dataContainer = reactive({
+        loading: false,
+        form: {},
+        rules: {
+            username: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],
+            contact: [{ required: true, message: '请输入联系方式', trigger: 'blur' }],
+            weibanId: [{ required: true, message: '请输入微伴ID', trigger: 'blur' }],
+            city: [{ required: true, message: '请输入城市', trigger: 'blur' }],
+        },
+    });
+            /**
+         * 数据初始化
+         */
+         function initData() {
+            let params = route.query;
+            if (!params) return;
+            dataContainer.form = params;
+        }
+        initData();
+
+        /** 提交数据 */
+        function handleSubmit() {
+            /** 使用组件自带方法验证数据 */
+             if (!FormElRef.value) return;
+            FormElRef.value.validate((valid, e) => {
+                if (e) {
+                    /** 打印报错信息 */
+                    let msg = e[Object.keys(e)[0]][0].message;
+                    messageError(msg);
+                }
+                if (!valid) return;
+                /** 像后端提交 */
+                messageSuccess("提交成功")
+            });
+        }
+        
+
+</script>
+
+<style scoped lang='scss'>
+
+.main-view {
+    display: flex;
+    flex-direction: column;
+    width: 100%;
+    .container {
+        background-color: white;
+        width: 100%;
+        // min-height: 800px;
+        height: fit-content;
+        border-radius: 5px;
+        padding: 15px;
+        box-sizing: border-box;
+        > * {
+            margin: 0 0 30px 0;
+            &:last-child {
+                margin: 0;
+            }
+        }
+    }
+}
+
+</style>

+ 436 - 3
src/pages/exapeViews/userList/client/index.vue

@@ -1,7 +1,241 @@
 <template>
-  <div>
-    客户列表
-  </div>
+  <div class="page-container main-view">
+    <el-row :gutter="0" class="page-query-box">
+            <DifinCollapse
+                :show="dataContainer.showSearch"
+                :showBt="true"
+                @onClick="dataContainer.showSearch = !dataContainer.showSearch"
+            >
+                <el-col :span="24" :xs="24">
+                    <el-form
+                        :model="dataContainer.form"
+                        :inline="true"
+                        label-width="110px"
+                    >
+                        <el-row :gutter="0">
+                            <el-col class="anchor-point-target" :span="6" :xs="6">
+                                <el-form-item label="客户编码" prop="id">
+                                    <el-input
+                                        v-model="dataContainer.form.id"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                                <el-form-item label="联系方式" prop="contact">
+                                    <el-input
+                                        v-model="dataContainer.form.contact"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                                <el-form-item label="weibanID" prop="weibanID">
+                                    <el-input
+                                        v-model="dataContainer.form.weibanID"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                              <el-form-item label="客户状态" prop="status">
+                                    <el-select
+                                        style="width: 100%"
+                                        v-model="dataContainer.form.status"
+                                        placeholder="请选择"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @change="handleQuery"
+                                    >
+                                        <el-option
+                                            v-for="item in dataContainer.optionList"
+                                            :key="item.id"
+                                            :label="item.label"
+                                            :value="item.value"
+                                        ></el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                              <el-form-item label="输入城市" prop="city">
+                                    <el-input
+                                        v-model="dataContainer.form.city"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                                <el-form-item label="选择日期" prop="date">
+                                  <el-date-picker
+                                      v-model="dataContainer.form.date"
+                                      type="date"
+                                      placeholder="yyyy/mm/dd"
+                                      :size="size"
+                                />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="12" :xs="12">
+                                <el-form-item label=" ">
+                                    <el-button type="primary" @click="handleQuery">
+                                        <SvgIcon
+                                            :style="'width:15px;height:15px;margin-right:5px;'"
+                                            name="svg:search-bt.svg"
+                                        ></SvgIcon>
+                                        查询
+                                    </el-button>
+                                    <el-button @click="resetQuery">
+                                        <SvgIcon
+                                            :style="'width:15px;height:15px;margin-right:5px;'"
+                                            name="svg:redo.svg"
+                                        ></SvgIcon>
+                                        重置
+                                    </el-button>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-col>
+            </DifinCollapse>
+        </el-row>
+   
+      <div class="table-box content-container page-content-box">
+        <div class="top-container">
+          <el-upload
+            ref="uploadRef"
+            class="upload-demo"
+            action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
+            :auto-upload="false"
+          >
+            <template #trigger>
+                <el-button type="primary">
+                  <SvgIcon :style="'width:20px;height:20px;'" name="svg:upload.svg"></SvgIcon>
+                    导入客户信息
+                </el-button>
+            </template>
+          </el-upload>
+          
+          <el-button plain type="primary" @click="downloadBackendTemplate">
+            <SvgIcon :style="'width:23px;height:23px;'" name="svg:download.svg"></SvgIcon>
+            客户模板
+          </el-button>
+      
+          <el-upload
+            ref="uploadRef"
+            class="upload-demo"
+            action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
+            :auto-upload="false"
+          >
+              <template #trigger>
+                  <el-button type="primary">
+                    <SvgIcon :style="'width:20px;height:20px;'" name="svg:upload.svg"></SvgIcon>
+                      积分批量导入
+                  </el-button>
+              </template>
+          </el-upload>
+          
+          <el-button plain type="primary" @click="downloadBackendTemplate">
+            <SvgIcon :style="'width:23px;height:23px;'" name="svg:download.svg"></SvgIcon>
+            积分模板
+          </el-button>
+        </div>
+        <div class="table-container">
+          <el-table :data="tableData" stripe style="width: 100%" border fit v-loading="loading">
+            <el-table-column prop="id" width="130" label="客户编码"  />
+            <el-table-column prop="username" width="180" label="客户昵称"  />
+            <el-table-column prop="contact" width="120" label="联系方式" />
+            <el-table-column prop="score" width="100" label="客户积分" />
+            <el-table-column prop="weibanId" width="350"  label="微伴ID" />
+            <el-table-column prop="city" width="180" label="客户城市" />
+            <el-table-column prop="status" width="100" label="客户状态" />
+            <el-table-column prop="createTime" width="180" label="创建时间" />
+            <el-table-column prop="updateTime" width="180" label="更新时间" />
+            <el-table-column label="操作" width = "230">
+                  <template #default="scope">
+                      <el-button
+                          :text="true"
+                          type="primary"
+                          @click="
+                              handleEdit(scope.row, {
+                                  isShow: false,
+                                  afterTitle: ' - 编辑',
+                              })
+                          "
+                      >
+                          编辑
+                      </el-button>
+                      <el-button
+                          :text="true"
+                          type="success"
+                          @click="
+                              handleEdit(scope.row, {
+                                  isShow: false,
+                                  afterTitle: ' - 编辑',
+                              })
+                          "
+                      >
+                          增加积分
+                      </el-button>
+                      <el-button
+                          :text="true"
+                          type="danger"
+                          @click="
+                              handleEdit(scope.row, {
+                                  isShow: false,
+                                  afterTitle: ' - 编辑',
+                              })
+                          "
+                      >
+                          扣减积分
+                      </el-button>
+                      <el-button
+                          :text="true"
+                          type="danger"
+                          @click="handleDetails([scope.row])"
+                      >
+                          禁用
+                      </el-button>
+                  </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="pagination-container">
+                <el-pagination
+                    v-show="true"
+                    :total="config.total"
+                    :background="true"
+                    :current-page="params.pageNum"
+                    :page-size="params.pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :page-sizes="[10, 20, 30, 50]"
+                    :pager-count="7"
+                    @size-change="
+                        (size) => {
+                            params.pageSize = size;
+                            getDataList();
+                        }
+                    "
+                    @current-change="
+                        (page) => {
+                            params.pageNum = page;
+                            getDataList();
+                        }
+                    "
+                />
+        </div>
+      </div>
+ </div>
 </template>
 
 <script setup>
@@ -13,7 +247,206 @@
       getCurrentInstance,
       onActivated,
   } from 'vue';
+  // import axios from 'axios';
+  import { useRouter } from 'vue-router';
+import { debounceFn } from '@/common/debounceAndThrottle';
+import { messageSuccess } from '@/action/messagePrompt.js';
+import { saveAs } from 'file-saver';
+
+const size = ref('default')
+const router = useRouter()
+
+function  downloadBackendTemplate() {
+      // axios({
+      //   method: 'post',
+      //   url: 'https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15',
+      //   responseType: 'blob'
+      // }).then((response) => {
+        let str = "保存字符串的例子!!"
+        //const blob = new Blob([response.data], { type: response.headers['content-type'] });
+        let strData = new Blob([str], { type: 'text/plain;charset=utf-8' });
+        saveAs(strData, '测试文件下载.txt');
+        messageSuccess('导出成功!');
+      // }).catch((error) => {
+      //   console.error('下载出错:', error);
+      // });
+    }
+
+    const dataContainer = reactive({
+            loading: false,
+            showSearch: true,
+            form: {
+              id:"",
+              contact:"",
+              weibanID:"",
+              status:"",
+              city:"",
+              date:""
+            },
+            params: {
+                //基础参数
+                pageNum: 1,
+                pageSize: 10,
+            },
+            config: {
+                total: 0,
+            },
+            list: [], //当前展示的数据列表
+            currentRows: [], //当前多选的数据列表
+            optionList: [
+                { value: true, label: '正常', elTagType: 'danger' },
+                { value: false, label: '禁用', elTagType: 'primary' },
+            ],
+        });
+
+let tableData = reactive([
+    {
+      id: 'klkh000007511',
+      username: '无敌是多么寂寞',
+      contact: '13409765432',
+      score:0,
+      weibanId:"wmgizUDQAAHw1v1iudFfi7JMYgQHDYEQ",
+      city:"广州市",
+      status:"正常",
+      createTime:"2024/12/06 08:44:04",
+      updateTime:"2024/12/06 10:42:03"
+    },
+    {
+      id: 'klkh000007511',
+      username: '无敌是多么寂寞',
+      contact: '13409765432',
+      score:0,
+      weibanId:"",
+      city:"广州市",
+      status:"正常",
+      createTime:"2024/12/06 08:44:04",
+      updateTime:"2024/12/06 10:42:03"
+    },
+    {
+      id: 'klkh000007511',
+      username: '无敌是多么寂寞',
+      contact: '13409765432',
+      score:0,
+      weibanId:"",
+      city:"广州市",
+      status:"正常",
+      createTime:"2024/12/06 08:44:04",
+      updateTime:"2024/12/06 10:42:03"
+    }
+  ]) 
+  let loading = ref(false);
+
+  const params= reactive({
+                  //基础参数
+                  pageNum: 1,
+                  pageSize: 10,
+              }) 
+  const config= reactive({
+                  total: 38,
+              }) 
+
+    /** 获取数据列表 */
+    const getDataList = debounceFn(function () {
+          if (loading.value) return;
+          loading.value = true;
+        setTimeout(() => {
+            Promise.resolve(tableData.value)
+                .then((res) => {
+                    tableData.value = res.rows || [];
+                    config.value.total = res.total;
+                })
+                .catch(() => {
+                    return;
+                })
+                .finally(() => {
+                      loading.value = false;
+                });
+        }, 800);
+    }, 70);
+     getDataList();
+
+    const handleEdit = (rows,list)=>{
+      let {username,contact,weibanId, city} = rows
+      let row = {username,contact,weibanId, city}
+      router.push({
+        name:"client-edit",
+        query:row
+      })
+    }
+    
+    /** 搜索按钮操作 */
+    function handleQuery() {
+      dataContainer.params.pageNum = 1;
+      getDataList();
+    }
+    
+      /** 重置按钮操作 */
+      function resetQuery() {
+      dataContainer.form = {};
+      handleQuery();
+  }
 </script>
 
 <style scoped lang='scss'>
+      .main-view {
+      display: flex;
+      flex-direction: column;
+      > .page-query-box {
+          margin: 0 0 10px 0 !important;
+          padding: 10px 10px 0px 10px;
+          :deep(.el-form-item) {
+              margin-bottom: 10px !important;
+          }
+          :deep(.el-form-item--default) {
+              width: 100%;
+              margin-right: 0;
+          }
+      }
+      > .content-container {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          padding: 10px 10px;
+          box-sizing: border-box;
+          background: #fff;
+          > .top-container {
+              width: 530px;
+              display: flex;
+              justify-content: space-between;
+              // align-items: center;
+              margin: 0px 0 10px 0;
+          }
+          > .qurey-list{
+              width: 100%;
+              .el-col {
+                border-radius: 4px;
+              }
+
+              .grid-content {
+                border-radius: 4px;
+                min-height: 36px;
+              }
+          }
+          > .table-container {
+              flex: 1 1 auto;
+              height: 0;
+              overflow: auto;
+          }
+          > .pagination-container {
+              display: flex;
+              justify-content: flex-end;
+              padding: 0;
+              margin: var(--view-gap) 0 0 0;
+          }
+      }
+      .pagination-container {
+          display: flex;
+          justify-content: flex-end;
+          padding: 0;
+          margin: 10px 0 0 0;
+      }
+  }
+
+  
+
 </style>

+ 226 - 0
src/pages/exapeViews/userList/qrcode/components/editDataDialog.vue

@@ -0,0 +1,226 @@
+<template>
+    <el-dialog
+        :title="configData.title + configData.afterTitle"
+        v-model="configData.open"
+        width="800px"
+        :close-on-click-modal="false"
+        append-to-body
+        destroy-on-close
+        @close="handleClose"
+        class="edit-data-dialog"
+    >
+        <div class="dialog-container">
+            <el-form
+                :model="dataContainer.form"
+                ref="FormElRef"
+                :inline="true"
+                :rules="dataContainer.rules"
+                label-width="100px"
+            >
+                <el-row :gutter="0">
+                    <el-col :span="12" :xs="6">
+                        <el-form-item label="用户组" prop="User_groups">
+                            <el-input
+                                v-model="dataContainer.form.User_groups"
+                                placeholder="请输入"
+                                :disabled="configData.isShow"
+                                clearable
+                            />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12" :xs="6">
+                        <el-form-item label="描述" prop="description">
+                            <el-input
+                                v-model="dataContainer.form.description"
+                                placeholder="请输入"
+                                :disabled="configData.isShow"
+                                clearable
+                            />
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="12" :xs="6">
+                        <el-form-item label="分组上级" prop="sign">
+                            <el-select
+                                style="width: 100%"
+                                placeholder="请选择"
+                                v-model="dataContainer.form.sign"
+                                :disabled="configData.isShow"
+                                clearable
+                            >
+                                <el-option
+                                    v-for="item in [
+                                        { label: '分部', value: '1' },
+                                        { label: '总部', value: '2' },
+                                    ]"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value"
+                                />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </div>
+        <template #footer>
+            <div class="dialog-footer">
+                <el-button
+                    @click="
+                        () => {
+                            dataContainer.closeType = 'cancel';
+                            configData.open = false;
+                        }
+                    "
+                >
+                    取消
+                </el-button>
+                <el-button v-if="!configData.isShow" type="primary" @click="handleSubmit">
+                    提交
+                </el-button>
+            </div>
+        </template>
+    </el-dialog>
+</template>
+
+<script>
+/**
+ * 数据编辑对话框
+ * 使用外部调用的方式向内部传递数据
+ * 使用promise的形式向外部通知状态
+ */
+import { defineComponent, ref, getCurrentInstance, reactive, nextTick } from 'vue';
+import { mergeObjProperty } from '@/common/otherTools';
+import { getDictItem, initDataByConfig } from '@/common/otherTools';
+import { verifiedData } from '@/common/verifiedTools';
+import { messageError,messageSuccess } from '@/action/messagePrompt.js';
+//配置信息,初始化时使用
+const configMap = {
+    open: {
+        default: false,
+    },
+    title: {
+        default: '权限管理',
+    },
+    afterTitle: {
+        default: '',
+    },
+    isShow: {
+        //是否只是展示
+        default: false,
+    },
+};
+
+export default defineComponent({
+    name: 'EditDataDialog',
+    components: {},
+    setup() {
+        const configData = reactive({});
+        const FormElRef = ref(null); //组件实例
+        const dataContainer = reactive({
+            loading: false,
+            closeType: 'close', //关闭时的类型,是由确认取消按钮关闭的还是其他地方关闭的 confirm cancel
+            resolve: undefined, //返给外部promise的回调
+            reject: undefined,
+            form: {},
+            rules: {
+                User_groups: [{ required: true, message: '请输入用户组名称', trigger: 'blur' }],
+            },
+        });
+        const otherDataContainer = {
+            castParams: {}, //向外部传递的参数
+        };
+        initDataByConfig(configData, {}, configMap);
+        /**
+         * 对话框关闭时的回调
+         * 根据行为类型来判断调用那个回调函数
+         *  */
+        function handleClose() {
+            if (dataContainer.closeType == 'confirm') {
+                dataContainer.resolve(otherDataContainer.castParams);
+            } else {
+                dataContainer.reject(dataContainer.closeType, otherDataContainer.castParams);
+            }
+        }
+        /**
+         * 初始化数据(外部调用)
+         * 返回一个promise,以提供直接的回调
+         *  */
+        function initData(show = true, data = {}, option = {}) {
+            initDataByConfig(configData, option, configMap);
+            dataContainer.closeType = 'close';
+            dataContainer.loading = false;
+            dataContainer.form = {};
+            otherDataContainer.castParams = {};
+            configData.open = show;
+            nextTick(() => {
+                dataContainer.form = data;
+                // getDataInfo();
+            });
+            return new Promise((r, j) => {
+                dataContainer.resolve = r;
+                dataContainer.reject = j;
+            });
+        }
+        /** 获取数据详细 */
+        function getDataInfo() {
+            dataContainer.form = {};
+        }
+        /** 提交数据 */
+        function handleSubmit() {
+            /** 使用组件自带方法验证数据 */
+            if (!FormElRef.value) return;
+            FormElRef.value.validate((valid, e) => {
+                if (e) {
+                    /** 打印报错信息 */
+                    let msg = e[Object.keys(e)[0]][0].message;
+                    messageError(msg);
+                }
+                if (!valid) return;
+                setTimeout(() => {
+                    otherDataContainer.castParams = {
+                        name: '数据保存成功了,向外部通知',
+                    };
+                    dataContainer.closeType = 'confirm';
+                    configData.open = false;
+                    messageSuccess("提交成功")
+                }, 1000);
+            });
+        }
+        /**
+         * 数据验证
+         * 外部可调用
+         *  */
+        function validData(data) {
+            const failData = verifiedData(data, {
+                name: {
+                    msg: '名称 不能为空',
+                    validate(value, option) {
+                        if (!value && value !== 0) return false;
+                        return true;
+                    },
+                },
+            });
+            return failData;
+        }
+        return {
+            configData,
+            initData,
+            dataContainer,
+            handleClose,
+            getDataInfo,
+            handleSubmit,
+            FormElRef,
+            validData,
+        };
+    },
+});
+</script>
+
+<style lang="scss" scoped>
+.edit-data-dialog {
+    .dialog-container {
+        padding: 15px 15px 0 15px;
+        box-sizing: border-box;
+    }
+}
+</style>

+ 287 - 0
src/pages/exapeViews/userList/qrcode/index.vue

@@ -0,0 +1,287 @@
+<template>
+
+    <div class="page-container main-view">
+        <el-row :gutter="0" class="page-query-box">
+            <DifinCollapse
+                :show="dataContainer.showSearch"
+                :showBt="true"
+                @onClick="dataContainer.showSearch = !dataContainer.showSearch"
+            >
+                <el-col :span="24" :xs="24">
+                    <el-form
+                        :model="dataContainer.form"
+                        :inline="true"
+                        label-width="110px"
+                    >
+                        <el-row :gutter="0">
+                            <el-col class="anchor-point-target" :span="6" :xs="6">
+                                <el-form-item label="名称" prop="name">
+                                    <el-input
+                                        v-model="dataContainer.form.name"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="18" :xs="18">
+                                <el-form-item label=" ">
+                                    <el-button type="primary" @click="handleQuery">
+                                        <SvgIcon
+                                            :style="'width:15px;height:15px;margin-right:5px;'"
+                                            name="svg:search-bt.svg"
+                                        ></SvgIcon>
+                                        查询
+                                    </el-button>
+                                    <el-button @click="resetQuery">
+                                        <SvgIcon
+                                            :style="'width:15px;height:15px;margin-right:5px;'"
+                                            name="svg:redo.svg"
+                                        ></SvgIcon>
+                                        重置
+                                    </el-button>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-col>
+            </DifinCollapse>
+        </el-row>
+   
+      <div class="table-box content-container page-content-box">
+        <div class="top-container">
+          <el-button type="primary" @click="handleAdd()">新增用户组</el-button>
+        </div> 
+        <div class="table-container">
+          <el-table :data="tableData" stripe style="width: 100%" border>
+            <el-table-column prop="id" label="ID"  />
+            <el-table-column prop="name" label="名称"  />
+            <el-table-column label="二维码" >
+              <template #default = "scope">
+                  <img :src="scope.row.qrcode" alt="" style="width: 50px; height: 50px;">
+              </template>
+            </el-table-column>
+            <el-table-column prop="productStatus" label="产品状态"  />
+            <el-table-column prop="updataTime" label="修改时间"  />
+            <el-table-column label="操作">
+                  <template #default="scope">
+                      <el-button
+                          :text="true"
+                          @click="handleDetails([scope.row])"
+                      >
+                          禁用
+                      </el-button>
+                      <el-button
+                          :text="true"
+                          @click="
+                              handleEdit(scope.row, {
+                                  isShow: false,
+                                  afterTitle: ' - 编辑',
+                              })
+                          "
+                      >
+                          编辑
+                      </el-button>
+                  </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <EditDataDialog ref="EditDataDialogRef"></EditDataDialog>
+    </div>
+   
+  </template>
+  
+  <script setup>
+  import {
+      defineComponent,
+      onBeforeUnmount,
+      ref,
+      reactive,
+      getCurrentInstance,
+      onActivated,
+  } from 'vue';
+  import { useRouter } from 'vue-router';
+  import { messageSuccess, confirm } from '@/action/messagePrompt.js';
+  import EditDataDialog from './components/editDataDialog.vue';
+
+  
+  
+   const EditDataDialogRef = ref(null); //组件实例
+
+
+   const dataContainer = reactive({
+            loading: false,
+            showSearch: true,
+            form: {
+                name:"",
+            },
+            params: {
+                //基础参数
+                pageNum: 1,
+                pageSize: 10,
+            },
+            config: {
+                total: 38,
+            },
+            list: [], //当前展示的数据列表
+            currentRows: [], //当前多选的数据列表
+            optionList: [
+                { value: true, label: '正常', elTagType: 'danger' },
+                { value: false, label: '禁用', elTagType: 'primary' },
+            ],
+        });
+  
+  let tableData = reactive([
+    {
+      id: '管理',
+      name: 'Tom',
+      qrcode:"https://s11.ax1x.com/2023/12/15/pihx4js.jpg",
+      productStatus:"正常",
+      updataTime:"	2024/11/14 14:54:33"
+    },
+    {
+      id: '管理',
+      name: 'Tom',
+      qrcode:"https://s11.ax1x.com/2023/12/15/pihx4js.jpg",
+      productStatus:"正常",
+      updataTime:"	2024/11/14 14:54:33"
+    },
+    {
+      id: '管理',
+      name: 'Tom',
+      qrcode:"https://s11.ax1x.com/2023/12/15/pihx4js.jpg",
+      productStatus:"正常",
+      updataTime:"	2024/11/14 14:54:33"
+    },
+    {
+      id: '管理',
+      name: 'Tom',
+      qrcode:"https://s11.ax1x.com/2023/12/15/pihx4js.jpg",
+      productStatus:"正常",
+      updataTime:"	2024/11/14 14:54:33"
+    },
+  ])
+  
+          //新增用户组按钮
+          function handleAdd  (){
+          if (!EditDataDialogRef.value) return;
+              EditDataDialogRef.value
+              .initData(
+                  true,
+                  {},
+                  {
+                      afterTitle: ' - 添加',
+                  },
+              )
+              .then(() => {})
+              .catch(() => {});
+          }
+  
+          /** 禁用操作 */
+          function handleDetails(row, querys) {
+              confirm('确定要禁用吗?',
+                  {
+                  confirmButtonText: '确定',
+                  cancelButtonText: '取消',
+                  type: 'warning',
+                  })
+              .then(()=>{
+                  messageSuccess('禁用成功');
+              })
+              .catch(()=>{})
+             
+          }
+          /** 编辑按钮操作 */
+          function handleEdit(row, querys) {
+              if (!EditDataDialogRef.value) return;
+              EditDataDialogRef.value
+                  .initData(
+                      true,
+                      {
+                          ...row,
+                      },
+                      {
+                          ...querys,
+                      },
+                  )
+                  .then(() => {})
+                  .catch(() => {});
+          }
+          /** 删除 */
+          function handleDelete(rows) {
+              confirm('确认删除该数据?',
+                  {
+                  confirmButtonText: '确定',
+                  cancelButtonText: '取消',
+                  type: 'warning',
+                  })
+                  .then(() => {
+                      // dataContainer.loading = true;
+                      // deleteSalesLeadApi(rows.map(item=>item.id).join(',')).then(() => {
+                      //     getDataList();
+                      // }).catch(()=>{
+                      //     return;
+                      // }).finally(()=>{
+                      //     dataContainer.loading = false;
+                      // });
+                      messageSuccess('删除成功');
+                  })
+                  .catch(() => {});
+          }
+          function handleQuery() {
+      dataContainer.params.pageNum = 1;
+    }
+    
+      /** 重置按钮操作 */
+      function resetQuery() {
+      dataContainer.form = {};
+      handleQuery();
+  }
+  
+  
+  </script>
+  
+  <style scoped lang='scss'>
+  .main-view {
+      display: flex;
+      flex-direction: column;
+      > .page-query-box {
+          margin: 0 0 10px 0 !important;
+          padding: 10px 10px 0px 10px;
+          :deep(.el-form-item) {
+              margin-bottom: 10px !important;
+          }
+          :deep(.el-form-item--default) {
+              width: 100%;
+              margin-right: 0;
+          }
+      }
+      > .content-container {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          padding: 10px 10px;
+          box-sizing: border-box;
+          background: #fff;
+          > .top-container {
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+              margin: 0px 0 10px 0;
+          }
+          > .table-container {
+              flex: 1 1 auto;
+              height: 0;
+              overflow: auto;
+          }
+      }
+      .pagination-container {
+          display: flex;
+          justify-content: flex-end;
+          padding: 0;
+          margin: 10px 0 0 0;
+      }
+  }
+  </style>

+ 361 - 0
src/pages/exapeViews/userList/weiban/index.vue

@@ -0,0 +1,361 @@
+<template>
+  <div class="page-container main-view">
+    <el-row :gutter="0" class="page-query-box">
+            <DifinCollapse
+                :show="dataContainer.showSearch"
+                :showBt="true"
+                @onClick="dataContainer.showSearch = !dataContainer.showSearch"
+            >
+                <el-col :span="24" :xs="24">
+                    <el-form
+                        :model="dataContainer.form"
+                        :inline="true"
+                        label-width="110px"
+                    >
+                        <el-row :gutter="0">
+                            <el-col class="anchor-point-target" :span="6" :xs="6">
+                                <el-form-item label="微伴ID" prop="weibanId">
+                                    <el-input
+                                        v-model="dataContainer.form.id"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                                <el-form-item label="联系方式" prop="contact">
+                                    <el-input
+                                        v-model="dataContainer.form.contact"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                                <el-form-item label="weibanID" prop="weibanID">
+                                    <el-input
+                                        v-model="dataContainer.form.weibanID"
+                                        placeholder="请输入"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @keyup.enter="handleQuery"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="6" :xs="6">
+                              <el-form-item label="客户状态" prop="status">
+                                    <el-select
+                                        style="width: 100%"
+                                        v-model="dataContainer.form.status"
+                                        placeholder="请选择"
+                                        clearable
+                                        @clear="handleQuery"
+                                        @change="handleQuery"
+                                    >
+                                        <el-option
+                                            v-for="item in dataContainer.optionList"
+                                            :key="item.id"
+                                            :label="item.label"
+                                            :value="item.value"
+                                        ></el-option>
+                                    </el-select>
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="12" :xs="12">
+                                <el-form-item label="选择日期" prop="date">
+                                  <el-date-picker
+                                      v-model="dataContainer.form.date"
+                                      type="date"
+                                      placeholder="yyyy/mm/dd"
+                                      :size="size"
+                                />
+                                </el-form-item>
+                            </el-col>
+                            <el-col :span="12" :xs="12">
+                                <el-form-item label=" ">
+                                    <el-button type="primary" @click="handleQuery">
+                                        <SvgIcon
+                                            :style="'width:15px;height:15px;margin-right:5px;'"
+                                            name="svg:search-bt.svg"
+                                        ></SvgIcon>
+                                        查询
+                                    </el-button>
+                                    <el-button @click="resetQuery">
+                                        <SvgIcon
+                                            :style="'width:15px;height:15px;margin-right:5px;'"
+                                            name="svg:redo.svg"
+                                        ></SvgIcon>
+                                        重置
+                                    </el-button>
+                                </el-form-item>
+                            </el-col>
+                        </el-row>
+                    </el-form>
+                </el-col>
+            </DifinCollapse>
+        </el-row>
+   
+      <div class="table-box content-container page-content-box">
+        <div class="table-container">
+          <el-table :data="tableData"  style="width: 100%" border fit v-loading="loading">
+            <el-table-column prop="weibanId" width="130" label="微伴ID"  />
+            <el-table-column prop="avatar" width="70" label="微伴头像">
+              <template #default="scope">
+                  <img :src="scope.row.avatar" style="width: 50px; height: 50px;">
+              </template>
+            </el-table-column>
+
+            <el-table-column prop="nickname" width="400" label="昵称备注">
+                <template #default="scope">
+                      {{scope.row.nickname.name}}
+                      <el-button>{{scope.row.nickname.label }}</el-button>
+                </template>
+
+            </el-table-column>
+            <el-table-column prop="phone" width="120" label="备注手机" />
+            <el-table-column prop="Customer" width="100"  label="跟进客服">
+                <template #default="scope">
+                    <el-button>{{scope.row.Customer}}</el-button>
+                </template>
+            </el-table-column>
+            <el-table-column prop="label" width="400" label="客服标签">
+              <template #default="scope">
+                <div>
+                  <el-button size="small"  v-for="item in scope.row.label" style=" margin: 10px 5px;" >{{item}}</el-button>
+                </div>
+              </template>
+            </el-table-column>
+            <el-table-column prop="systemUser" width="100" label="系统用户" />
+            <el-table-column prop="createTime" width="180" label="创建时间" />
+            <el-table-column prop="updateTime" width="180" label="更新时间" />
+            <el-table-column label="操作" width = "230">
+                  
+            </el-table-column>
+          </el-table>
+        </div>
+        <div class="pagination-container">
+                <el-pagination
+                    v-show="true"
+                    :total="config.total"
+                    :background="true"
+                    :current-page="params.pageNum"
+                    :page-size="params.pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :page-sizes="[10, 20, 30, 50]"
+                    :pager-count="7"
+                    @size-change="
+                        (size) => {
+                            params.pageSize = size;
+                            getDataList();
+                        }
+                    "
+                    @current-change="
+                        (page) => {
+                            params.pageNum = page;
+                            getDataList();
+                        }
+                    "
+                />
+        </div>
+      </div>
+ </div>
+</template>
+
+<script setup>
+  import {
+      defineComponent,
+      onBeforeUnmount,
+      ref,
+      reactive,
+      getCurrentInstance,
+      onActivated,
+  } from 'vue';
+  // import axios from 'axios';
+  import { useRouter } from 'vue-router';
+import { debounceFn } from '@/common/debounceAndThrottle';
+import { messageSuccess } from '@/action/messagePrompt.js';
+import { saveAs } from 'file-saver';
+
+const size = ref('default')
+const router = useRouter()
+
+
+    const dataContainer = reactive({
+            loading: false,
+            showSearch: true,
+            form: {
+              id:"",
+              contact:"",
+              weibanID:"",
+              status:"",
+              city:"",
+              date:""
+            },
+            params: {
+                //基础参数
+                pageNum: 1,
+                pageSize: 10,
+            },
+            config: {
+                total: 38,
+            },
+            list: [], //当前展示的数据列表
+            currentRows: [], //当前多选的数据列表
+            optionList: [
+                { value: true, label: '正常', elTagType: 'danger' },
+                { value: false, label: '禁用', elTagType: 'primary' },
+            ],
+        });
+
+let tableData = reactive([
+    {
+      weibanId: 'wmgizUDQAAHw1v1iudFfi7JMYgQHDYEQ',
+      avatar: 'https://s11.ax1x.com/2023/12/15/pihx4js.jpg',
+      nickname:{name:"zhang",label:"张小凡【海安凤林药店】"},
+      phone:13409576943,
+      Customer:"运营小华",
+      label:["已填写未提交","单店","老板/采购","药店","江苏","南京"],
+      systemUser:"",
+      createTime:"2024/12/06 08:44:04",
+      updateTime:"2024/12/06 10:42:03"
+    },
+    {
+      weibanId: 'wmgizUDQAAHw1v1iudFfi7JMYgQHDYEQ',
+      avatar: 'https://s11.ax1x.com/2023/12/15/pihx4js.jpg',
+      nickname:{name:"zhang",label:"张小凡【海安凤林药店】"},
+      phone:13409576943,
+      Customer:"运营小华",
+      label:["已填写未提交","单店","老板/采购","药店","江苏","南京"],
+      systemUser:"",
+      createTime:"2024/12/06 08:44:04",
+      updateTime:"2024/12/06 10:42:03"
+    },
+    {
+      weibanId: 'wmgizUDQAAHw1v1iudFfi7JMYgQHDYEQ',
+      avatar: 'https://s11.ax1x.com/2023/12/15/pihx4js.jpg',
+      nickname:{name:"zhang",label:"张小凡【海安凤林药店】"},
+      phone:13409576943,
+      Customer:"运营小华",
+      label:["已填写未提交","单店","老板/采购","药店","江苏","南京"],
+      systemUser:"",
+      createTime:"2024/12/06 08:44:04",
+      updateTime:"2024/12/06 10:42:03"
+    }
+  ]) 
+  let loading = ref(false);
+
+  const params= reactive({
+                  //基础参数
+                  pageNum: 1,
+                  pageSize: 10,
+              }) 
+  const config= reactive({
+                  total: 38,
+              }) 
+
+    /** 获取数据列表 */
+    const getDataList = debounceFn(function () {
+          if (loading.value) return;
+          loading.value = true;
+        setTimeout(() => {
+            Promise.resolve(tableData.value)
+                .then((res) => {
+                    tableData.value = res.rows || [];
+                    config.value.total = res.total;
+                })
+                .catch(() => {
+                    return;
+                })
+                .finally(() => {
+                      loading.value = false;
+                });
+        }, 800);
+    }, 70);
+    //  getDataList();
+
+    // const handleEdit = (rows,list)=>{
+    //   let {username,contact,weibanId, city} = rows
+    //   let row = {username,contact,weibanId, city}
+    //   router.push({
+    //     name:"client-edit",
+    //     query:row
+    //   })
+    // }
+    
+    /** 搜索按钮操作 */
+    function handleQuery() {
+      dataContainer.params.pageNum = 1;
+      getDataList();
+    }
+    
+      /** 重置按钮操作 */
+      function resetQuery() {
+      dataContainer.form = {};
+      handleQuery();
+  }
+</script>
+
+<style scoped lang='scss'>
+      .main-view {
+      display: flex;
+      flex-direction: column;
+      > .page-query-box {
+          margin: 0 0 10px 0 !important;
+          padding: 10px 10px 0px 10px;
+          :deep(.el-form-item) {
+              margin-bottom: 10px !important;
+          }
+          :deep(.el-form-item--default) {
+              width: 100%;
+              margin-right: 0;
+          }
+      }
+      > .content-container {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          padding: 10px 10px;
+          box-sizing: border-box;
+          background: #fff;
+          > .top-container {
+              width: 530px;
+              display: flex;
+              justify-content: space-between;
+              // align-items: center;
+              margin: 0px 0 10px 0;
+          }
+          > .qurey-list{
+              width: 100%;
+              .el-col {
+                border-radius: 4px;
+              }
+
+              .grid-content {
+                border-radius: 4px;
+                min-height: 36px;
+              }
+          }
+          > .table-container {
+              flex: 1 1 auto;
+              height: 0;
+              overflow: auto;
+          }
+          > .pagination-container {
+              display: flex;
+              justify-content: flex-end;
+              padding: 0;
+              margin: var(--view-gap) 0 0 0;
+          }
+      }
+      .pagination-container {
+          display: flex;
+          justify-content: flex-end;
+          padding: 0;
+          margin: 10px 0 0 0;
+      }
+  }
+</style>

+ 9 - 3
src/pages/index/index.vue

@@ -44,10 +44,10 @@
                   <el-menu-item index="3-2" @click="gopagesClient()">
                       客户管理
                   </el-menu-item>
-                  <el-menu-item index="3-3">
+                  <el-menu-item index="3-3" @click="gopagesWeiban()">
                       微伴管理
                   </el-menu-item>
-                  <el-menu-item index="3-4">
+                  <el-menu-item index="3-4" @click="gopagesQrcode()">
                       二维码管理
                   </el-menu-item>
                 </el-sub-menu>
@@ -168,7 +168,7 @@ const router = useRouter();
 const isCollapse = ref(false)
 const dataContainer = reactive({
   userInfo:{
-    avatar:'',
+    avatar:'https://s11.ax1x.com/2023/12/15/pihx4js.jpg',
     nickName:'管理员',
     userName:'admin'
   },
@@ -205,6 +205,12 @@ const gopagesBackend = () => {
 const gopagesClient = ()=>{
   router.push ('/index/client')
 }
+const gopagesWeiban = ()=> {
+  router.push ('/index/weiban')
+}
+const gopagesQrcode = ()=> {
+  router.push ('/index/qrcode')
+}
 
 const toPath = (path)=>{
   router.push(`${path}`)

+ 13 - 0
src/router/index.js

@@ -39,6 +39,19 @@ export const constantRoutes  = [
             {
                 path:"client",
                 component: ()=> import ("../pages/exapeViews/userList/client/index.vue")
+            },
+            {
+                path:"client/edit",
+                name:"client-edit",
+                component: ()=> import ("../pages/exapeViews/userList/client/Edit.vue")
+            },
+            {
+                path:"weiban",
+                component: ()=> import ("../pages/exapeViews/userList/weiban/index.vue")
+            },
+            {
+                path:"qrcode",
+                component: ()=> import ("../pages/exapeViews/userList/qrcode/index.vue")
             }
         ]
     }

+ 3 - 3
src/style/elementUi.scss

@@ -35,9 +35,9 @@
 .el-button {
     // border: none !important;
 }
-.el-button + .el-button {
-    margin-left: 10px !important;
-}
+// .el-button + .el-button {
+//     margin: 10px!important;
+// }
 .el-popup-parent--hidden {
     //防止对话框向左边的边距
     padding-right: 0px !important;