Quellcode durchsuchen

修改平台及公司,添加消息内容

yangg vor 11 Monaten
Ursprung
Commit
797f75fc2a

+ 2 - 1
src/api/basicSetting.js

@@ -351,7 +351,8 @@ export function warehouse(params) {
   return request({
     url: 'admin/erp/warehouse',
     method: 'get',
-    loading: false
+    loading: false,
+    params
   })
 }
 

+ 8 - 0
src/api/company.js

@@ -104,3 +104,11 @@ export function updateSelectMsg(parmas) {
     data: parmas
   })
 }
+
+/* 获取自己的所有消息 */
+export function getSysMsgByOwn(type) {
+  return request({
+    url: `/admin/erp/SmsMailTemplate/getSysMsgByOwn/${type}`,
+    method: 'get'
+  })
+}

+ 6 - 6
src/api/goods.js

@@ -1,31 +1,31 @@
 import request from '@/utils/request'
 
 /*新增套餐*/
-export function addProduct(parmas) {
+export function addProduct(params) {
     return request({
       url: `/admin/erp/product/addProduct`,
       method: 'post',
       headers: { 'Content-Type': 'application/json' },
-      data: parmas
+      data: params
     })
   }
 
   /*修改套餐 */
-export function editProduct(id,parmas) {
+export function editProduct(id,params) {
     return request({
       url: `/admin/erp/product/updateProduct/${id}`,
       method: 'post',
       headers: { 'Content-Type': 'application/json' },
-      data: parmas
+      data: params
     })
   }
 
   /*商品列表 */
-  export function productList(parmas) {
+  export function productList(params) {
     return request({
       url: '/admin/erp/product',
       method: 'get',
-     parmas
+      params
     })
   }
 

+ 4 - 3
src/api/goodsLend.js

@@ -188,10 +188,11 @@ export function warehouseEntry(ids) {
 }
 
 // 获取库位列表
-export function query(ids) {
+export function query(params) {
   return request({
-    url: `/admin/erp/warehouse/area/query `,
-    method: 'get'
+    url: `/admin/erp/warehouse/area/query`,
+    method: 'get',
+    params
   })
 }
 

+ 3 - 2
src/api/setting.js

@@ -94,10 +94,11 @@ export function deletesStation(ids) {
  * 获取部门列表
  * @param params
  */
-export function getDeptList() {
+export function getDeptList(params) {
   return request({
     url: 'admin/systems/dept/list',
-    method: 'get'
+    method: 'get',
+    params
   })
 }
 

+ 4 - 0
src/app-setting.ts

@@ -16,6 +16,10 @@ export default {
         val = val || $themeConfig.superMenu;
         store.dispatch('toggleSuperMenu', val);
 
+        val = localStorage.getItem('companId'); // vertical, collapsible-vertical, horizontal
+        val = val || $themeConfig.companId;
+        store.dispatch('toggleCompanId', val);
+
         val = localStorage.getItem('layout'); // full, boxed-layout
         val = val || $themeConfig.layout;
         store.dispatch('toggleLayout', val);

+ 1 - 1
src/components/TableSearch/index.vue

@@ -38,7 +38,7 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, defineProps, getCurrentInstance } from 'vue';
+import { ref, getCurrentInstance } from 'vue';
 
 const props = defineProps<{
   inputSearch?: boolean;

+ 1 - 1
src/components/layout/Footer.vue

@@ -1,5 +1,5 @@
 <template>
     <div class="dark:text-white-dark text-center ltr:sm:text-left rtl:sm:text-right p-6 pt-0 mt-auto">
-        © {{ new Date().getFullYear() }}. V3studio All rights reserved.
+        © {{ new Date().getFullYear() }}. Raycos All rights reserved.
     </div>
 </template>

+ 78 - 9
src/components/layout/Header.vue

@@ -66,7 +66,7 @@
               <icon-search class="w-4.5 h-4.5 mx-auto dark:text-[#d0d2d6]" />
             </button>
           </div>
-          <a href="javascript:;" v-if="superMenu=='super'" @click="getBranch('super')"> 返回</a>
+          <a href="javascript:;" v-if="superMenu == 'compan' && founder == '1'" @click="getBranch('super')"> 返回</a>
           <div>
             <a
               href="javascript:;"
@@ -93,9 +93,68 @@
               <!-- <icon-laptop /> -->
               <icon-sun />
             </a>
-           
           </div>
+          <div class="dropdown shrink-0">
+            <Popper :placement="store.state.rtlClass === 'rtl' ? 'bottom-start' : 'bottom-end'" offsetDistance="0">
+              <button
+                type="button"
+                class="mt-2 block p-2 rounded-full bg-white-light/40 dark:bg-dark/40 hover:text-primary hover:bg-white-light/90 dark:hover:bg-dark/60"
+                @click="goNotify"
+              >
+                <icon-mail-dot />
+              </button>
+              <!-- <template #content="{ close }">
+                <ul class="top-11 !py-0 text-dark dark:text-white-dark w-[300px] sm:w-[375px] text-xs">
+                  <li class="mb-5">
+                    <div class="overflow-hidden relative rounded-t-md !p-5 text-white">
+                      <div class="absolute h-full w-full bg-[url('/assets/images/menu-heade.jpg')] bg-no-repeat bg-center bg-cover inset-0"></div>
+                      <h4 class="font-semibold relative z-10 text-lg">Messages</h4>
+                    </div>
+                  </li>
+                  <template v-for="msg in messages" :key="msg.id">
+                    <li>
+                      <div class="flex items-center py-3 px-5">
+                        <div v-html="msg.image"></div>
+                        <span class="px-3 dark:text-gray-500">
+                          <div class="font-semibold text-sm dark:text-white-light/90" v-text="msg.title"></div>
+                          <div v-text="msg.message"></div>
+                        </span>
+                        <span
+                          class="font-semibold bg-white-dark/20 rounded text-dark/60 px-1 ltr:ml-auto rtl:mr-auto whitespace-pre dark:text-white-dark ltr:mr-2 rtl:ml-2"
+                          v-text="msg.time"
+                        ></span>
+                        <button type="button" class="text-neutral-300 hover:text-danger" @click="removeMessage(msg.id)">
+                          <icon-x-circle />
+                        </button>
+                      </div>
+                    </li>
+                  </template>
+                  <template v-if="messages.length">
+                    <li class="border-t border-white-light text-center dark:border-white/10 mt-5">
+                      <div
+                        class="flex items-center py-4 px-5 text-primary font-semibold group dark:text-gray-400 justify-center cursor-pointer"
+                        @click="close()"
+                      >
+                        <span class="group-hover:underline ltr:mr-1 rtl:ml-1">VIEW ALL ACTIVITIES</span>
 
+                        <icon-arrow-left class="group-hover:translate-x-1 transition duration-300 ltr:ml-1 rtl:mr-1" />
+                      </div>
+                    </li>
+                  </template>
+                  <template v-if="!messages.length">
+                    <li class="mb-5">
+                      <div class="!grid place-content-center hover:!bg-transparent text-lg min-h-[200px]">
+                        <div class="mx-auto ring-4 ring-primary/30 rounded-full mb-4 text-primary">
+                          <icon-info-circle :fill="true" class="w-10 h-10" />
+                        </div>
+                        No data available.
+                      </div>
+                    </li>
+                  </template>
+                </ul>
+              </template> -->
+            </Popper>
+          </div>
           <!-- <div class="dropdown shrink-0">
                         <Popper :placement="store.state.rtlClass === 'rtl' ? 'bottom-end' : 'bottom-start'"
                             offsetDistance="8">
@@ -261,6 +320,7 @@ const changeLanguage = (item: any) => {
   appSetting.toggleLanguage(item);
 };
 const superMenu = computed(() => store.state.superMenu);
+const founder = computed(() => store.state.user.user.founder);
 const currentFlag = computed(() => {
   return `/assets/images/flags/${i18n.locale.toUpperCase()}.svg`;
 });
@@ -349,12 +409,18 @@ const setActiveDropdown = () => {
     }
   }
 };
-/* 前往个人信息页面 */
-const goInfo=()=>{
+/* 前往息页面 */
+const goNotify=()=>{
   router.push({
-    name:""
-  })
+    name: 'Notify',
+  });
 }
+/* 前往个人信息页面 */
+const goInfo = () => {
+  router.push({
+    name: 'companyInfo',
+  });
+};
 const removeNotification = (value: number) => {
   notifications.value = notifications.value.filter((d) => d.id !== value);
 };
@@ -388,7 +454,10 @@ const handleLogoutClick = () => {
       /* Handle cancel action if needed */
     });
 };
-const getBranch=(value)=>{
-  store.dispatch('toggleSuperMenu',value);
-}
+const getBranch = (value) => {
+  store.dispatch('toggleSuperMenu', value);
+  router.push({
+    name: 'dashboard',
+  });
+};
 </script>

+ 34 - 34
src/components/layout/Sidebar.vue

@@ -153,18 +153,15 @@
                   <li>
                     <router-link to="/setting/companyList" @click="toggleMobileMenu">{{ $t('companyList') }}</router-link>
                   </li>
-                  <li>
+                  <!-- <li>
                     <router-link to="/setting/roleManage" @click="toggleMobileMenu">{{ $t('roleManage') }}</router-link>
-                  </li>
+                  </li> -->
                   <li>
                     <router-link to="/setting/dicData" @click="toggleMobileMenu">{{ $t('dicData') }}</router-link>
                   </li>
                   <li>
                     <router-link to="/setting/menuManage" @click="toggleMobileMenu">{{ $t('menuManage') }}</router-link>
                   </li>
-                  <li>
-                    <router-link to="/setting/systemLog" @click="toggleMobileMenu">{{ $t('systemLog') }}</router-link>
-                  </li>
                   <!-- systemLog -->
                 </ul>
               </vue-collapsible>
@@ -237,39 +234,35 @@
               <button
                 type="button"
                 class="nav-link group w-full"
-                :class="{ active: activeDropdown === 'companyMent' }"
-                @click="activeDropdown === 'companyMent' ? (activeDropdown = null) : (activeDropdown = 'companyMent')"
+                :class="{ active: activeDropdown === 'goods' }"
+                @click="activeDropdown === 'goods' ? (activeDropdown = null) : (activeDropdown = 'goods')"
               >
                 <div class="flex items-center">
                   <icon-menu-users class="group-hover:!text-primary shrink-0" />
 
-                  <span class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-white-dark">{{ $t('companyMent') }}</span>
+                  <span class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-white-dark">{{ $t('goods') }}</span>
                 </div>
-                <div :class="{ 'rtl:rotate-90 -rotate-90': activeDropdown == 'companyMent' }">
+                <div :class="{ 'rtl:rotate-90 -rotate-90': activeDropdown == 'goods' }">
                   <icon-caret-down />
                 </div>
               </button>
-              <vue-collapsible :isOpen="activeDropdown === 'companyMent'">
+              <vue-collapsible :isOpen="activeDropdown === 'goods'">
                 <ul class="sub-menu text-gray-500">
                   <li>
-                    <router-link to="/companyMent/administratorManage" @click="toggleMobileMenu">{{ $t('administratorManage') }}</router-link>
-                  </li>
-                  <li>
-                    <router-link to="/setting/roleManage" @click="toggleMobileMenu">{{ $t('roleManage') }}</router-link>
+                    <router-link to="/goods/SKUlist" @click="toggleMobileMenu">{{ $t('SKUList') }}</router-link>
                   </li>
-                  <li>
-                    <router-link to="/companyMent/branch" @click="toggleMobileMenu">{{ $t('branch') }}</router-link>
+                  <!--   <li>
+                    <router-link to="/goods/emailtemplate" @click="toggleMobileMenu">{{ $t('emailtemplate') }}</router-link>
                   </li>
                   <li>
-                    <router-link to="/companyMent/companyInfo" @click="toggleMobileMenu">{{ $t('companyInfo') }}</router-link>
+                    <router-link to="/goods/accountTemplate" @click="toggleMobileMenu">{{ $t('accountTemplate') }}</router-link>
                   </li>
                   <li>
-                    <router-link to="/companyMent/configMsg" @click="toggleMobileMenu">{{ $t('configMsg') }}</router-link>
-                  </li>
+                    <router-link to="/goods/systemMessage" @click="toggleMobileMenu">{{ $t('systemMessage') }}</router-link>
+                  </li> -->
                 </ul>
-                <!-- configMsg -->
               </vue-collapsible>
-              <vue-collapsible :isOpen="activeDropdown === 'companyMent'">
+              <vue-collapsible :isOpen="activeDropdown === 'goods'">
                 <ul class="sub-menu text-gray-500"></ul>
               </vue-collapsible>
             </li>
@@ -277,39 +270,46 @@
               <button
                 type="button"
                 class="nav-link group w-full"
-                :class="{ active: activeDropdown === 'goods' }"
-                @click="activeDropdown === 'goods' ? (activeDropdown = null) : (activeDropdown = 'goods')"
+                :class="{ active: activeDropdown === 'companyMent' }"
+                @click="activeDropdown === 'companyMent' ? (activeDropdown = null) : (activeDropdown = 'companyMent')"
               >
                 <div class="flex items-center">
                   <icon-menu-users class="group-hover:!text-primary shrink-0" />
 
-                  <span class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-white-dark">{{ $t('goods') }}</span>
+                  <span class="ltr:pl-3 rtl:pr-3 text-black dark:text-[#506690] dark:group-hover:text-white-dark">{{ $t('companyMent') }}</span>
                 </div>
-                <div :class="{ 'rtl:rotate-90 -rotate-90': activeDropdown == 'goods' }">
+                <div :class="{ 'rtl:rotate-90 -rotate-90': activeDropdown == 'companyMent' }">
                   <icon-caret-down />
                 </div>
               </button>
-              <vue-collapsible :isOpen="activeDropdown === 'goods'">
+              <vue-collapsible :isOpen="activeDropdown === 'companyMent'">
                 <ul class="sub-menu text-gray-500">
                   <li>
-                    <router-link to="/goods/SKUlist" @click="toggleMobileMenu">{{ $t('SKUList') }}</router-link>
-                  </li>
-                  <!--   <li>
-                    <router-link to="/goods/emailtemplate" @click="toggleMobileMenu">{{ $t('emailtemplate') }}</router-link>
+                    <router-link to="/companyMent/administratorManage" @click="toggleMobileMenu">{{ $t('administratorManage') }}</router-link>
                   </li>
                   <li>
-                    <router-link to="/goods/accountTemplate" @click="toggleMobileMenu">{{ $t('accountTemplate') }}</router-link>
+                    <router-link to="/setting/roleManage" @click="toggleMobileMenu">{{ $t('roleManage') }}</router-link>
                   </li>
                   <li>
-                    <router-link to="/goods/systemMessage" @click="toggleMobileMenu">{{ $t('systemMessage') }}</router-link>
+                    <router-link to="/companyMent/branch" @click="toggleMobileMenu">{{ $t('branch') }}</router-link>
+                  </li>
+                  <!-- <li>
+                    <router-link to="/companyMent/companyInfo" @click="toggleMobileMenu">{{ $t('companyInfo') }}</router-link>
                   </li> -->
+                  <li>
+                    <router-link to="/companyMent/configMsg" @click="toggleMobileMenu">{{ $t('configMsg') }}</router-link>
+                  </li>
+                  <li>
+                    <router-link to="/setting/systemLog" @click="toggleMobileMenu">{{ $t('systemLog') }}</router-link>
+                  </li>
                 </ul>
+                <!-- configMsg -->
               </vue-collapsible>
-              <vue-collapsible :isOpen="activeDropdown === 'goods'">
+              <vue-collapsible :isOpen="activeDropdown === 'companyMent'">
                 <ul class="sub-menu text-gray-500"></ul>
               </vue-collapsible>
             </li>
-            <!--   <li class="menu nav-item">
+            <!-- <li class="menu nav-item">
               <button
                 type="button"
                 class="nav-link group w-full"

+ 1 - 1
src/components/layout/SidebarItem.vue

@@ -52,7 +52,7 @@
   
   <script lang="ts" setup>
 import { ref } from 'vue';
-import { defineProps } from 'vue';
+/* import { defineProps } from 'vue'; */
 import path from 'path-browserify';
 import { useI18n } from 'vue-i18n';
 

+ 2 - 1
src/locales/zh.json

@@ -8,7 +8,8 @@
     "goodsInventory":"库存盘点",
     "goodsInventoryLoss":"库存报损",
     "goodsUnderstock":"调拨列表",
-       
+    "configMsg":"消息配置",   
+
     "setting":"系统管理",
     "companyList":"公司列表",
     "roleManage":"权限管理",

+ 2 - 0
src/router/index.ts

@@ -94,6 +94,8 @@ const asyncRouterMap: RouteRecordRaw[] = [
             { path: 'branch', component: () => import('@/views/companyMent/branch.vue'), name: 'branch', meta: { title: 'branch', layout: 'app' } },
            { path: 'companyInfo', component: () => import('@/views/companyMent/companyInfo.vue'), name: 'companyInfo', meta: { title: 'companyInfo', layout: 'app' } },
            { path: 'configMsg', component: () => import('@/views/companyMent/configMsg.vue'), name: 'configMsg', meta: { title: 'configMsg', layout: 'app' } },
+           /* Notify */
+           { path: 'Notify', component: () => import('@/views/companyMent/Notify.vue'), name: 'Notify', meta: { title: 'Notify', layout: 'app' } },
         ]
     },
     {

+ 13 - 3
src/stores/index.ts

@@ -147,7 +147,8 @@ export interface State {
     languageList: Array<{ code: string; name: string }>;
     isShowMainLoader: boolean;
     semidark: boolean;
-    superMenu:string
+    superMenu:string;
+    companId:string
 }
 
 // 创建 store
@@ -175,7 +176,8 @@ const store = createStore<State>({
         ],
         isShowMainLoader: true,
         semidark: false,
-        superMenu:'super'
+        superMenu:'super',
+        companId:""
 
     },
     mutations: {
@@ -228,7 +230,12 @@ const store = createStore<State>({
             localStorage.setItem('superMenu', payload);
             state.superMenu = payload;
         },
-
+        /* 公司ID */
+        toggleCompanId(state,payload) {
+            payload = payload || state.companId;
+            localStorage.setItem('companId', payload);
+            state.companId = payload;
+        },
 
         toggleLocale(state, payload) {
             payload = payload || state.locale;
@@ -280,6 +287,9 @@ const store = createStore<State>({
         toggleSuperMenu({ commit }, payload) {
             commit('toggleSuperMenu', payload);
         },
+        toggleCompanId({ commit }, payload) {
+            commit('toggleCompanId', payload);
+        },
         toggleLocale({ commit }, payload) {
             commit('toggleLocale', payload);
         },

+ 50 - 0
src/views/companyMent/Notify.vue

@@ -0,0 +1,50 @@
+<template>
+  <div class="bg-white p-2">
+    <el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
+      <el-tab-pane label="短息消息" name="SMS"
+        ><p v-for="(item, index) in notifyList.records" :key="index" class="mt-1 mb-1" style="font-size: 16px">{{ item.content }}</p>
+      </el-tab-pane>
+      <el-tab-pane label="邮件消息" name="MAIL"
+        ><p v-for="(item, index) in notifyList.records" :key="index" class="mt-1 mb-1" style="font-size: 16px">{{ item.content }}</p></el-tab-pane
+      >
+      <el-tab-pane label="公众号消息" name="OFFICIAL"
+        ><p v-for="(item, index) in notifyList.records" :key="index" class="mt-1 mb-1" style="font-size: 16px">{{ item.content }}</p></el-tab-pane
+      >
+      <el-tab-pane label="系统消息" name="SYSTEM">
+        <p v-for="(item, index) in notifyList.records" :key="index" class="mt-1 mb-1" style="font-size: 16px">{{ item.content }}</p>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+  
+  <script lang="ts" setup>
+import { ref, onMounted } from 'vue';
+import * as API_Company from '@/api/company';
+import type { TabsPaneContext } from 'element-plus';
+
+let activeName = ref<any>('SMS');
+const notifyList = ref({});
+
+const handleClick = (tab: TabsPaneContext, event: Event) => {
+  activeName.value = tab.props.name;
+  GET_Notify();
+};
+const GET_Notify = () => {
+  API_Company.getSysMsgByOwn(activeName.value).then((res) => {
+    notifyList.value = res;
+  });
+};
+onMounted(() => {
+  GET_Notify();
+});
+</script>
+  
+  <style>
+.demo-tabs > .el-tabs__content {
+  padding: 32px;
+  color: #6b778c;
+  font-size: 32px;
+  font-weight: 600;
+}
+</style>
+  

+ 6 - 3
src/views/companyMent/administratorManage.vue

@@ -151,6 +151,8 @@ import * as API_Setting from '@/api/setting';
 import md5 from 'js-md5';
 import { RegExp } from '../../composables/ui-utils/RegExp';
 //, Foundation
+import { useStore } from 'vuex';
+const store = useStore();
 const deptList = ref([]);
 const postList = ref([]);
 const loading = ref(false);
@@ -159,6 +161,7 @@ const params = reactive({
   page_size: 10,
   user_state: 0,
   keyword: '',
+  company_id: store.state.companId,
 });
 const tableData = ref<any>({});
 const adminForm = reactive({
@@ -235,7 +238,7 @@ watch(dialogVisible, (newVal) => {
 
 onMounted(() => {
   GET_AdministratorList();
-  API_Auth.getRoleList({ page_size: 10000 }).then((response) => {
+  API_Auth.getRoleList({ page_size: 10000 ,company_id: store.state.companId,}).then((response) => {
     rolesOptions.value = response.data;
   });
   GET_DeptList();
@@ -256,7 +259,7 @@ const advancedSearchEvent = () => {
 };
 
 const GET_DeptList = () => {
-  API_Setting.getDeptList().then((response) => {
+  API_Setting.getDeptList({company_id: store.state.companId,}).then((response) => {
     deptList.value = Foundation.buildTree(response, '0');
   });
 };
@@ -386,7 +389,7 @@ const GET_AdministratorList = () => {
   margin: 0 auto;
 }
 
-::v-deep .el-dialog__body {
+:v-deep(.el-dialog__body) {
   padding: 10px 20px;
 }
 </style>

+ 3 - 2
src/views/companyMent/branch.vue

@@ -109,7 +109,8 @@
 import { ref, onMounted } from 'vue';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import * as API_Setting from '@/api/setting';
-
+import { useStore } from 'vuex';
+const store = useStore();
 const defaultRegions = ref<any>(null);
 const deptList = ref([]);
 const deptType = ref([]);
@@ -158,7 +159,7 @@ let buildTree = function buildTree(list, parent_id) {
   return tree;
 };
 const GET_DeptList = () => {
-  API_Setting.getDeptList().then((response) => {
+  API_Setting.getDeptList({company_id: store.state.companId}).then((response) => {
     deptList.value = buildTree(response, '0');
     console.log(deptList.value);
   });

+ 182 - 88
src/views/companyMent/companyInfo.vue

@@ -1,91 +1,145 @@
 <template>
-  <div class="container">
-    <el-form :model="companyForm" :rules="stockRules" ref="companyFormRef" label-width="140px">
-      <el-row>
-        <el-col :span="6">
-          <el-form-item label="当前套餐:" prop="company_package_id">
-            <el-select v-model="companyForm.company_package_id" clearable placeholder="请选择套餐">
-              <el-option v-for="item in packageList" :key="item.id" :label="item.name" :value="item.id" />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <!-- user_num -->
-        <el-col :span="5">
-          <el-form-item label="套餐到期时间:" prop="name">
-           {{companyForm.end_use_time}}
-          </el-form-item>
-        </el-col>
-        <el-col :span="5">
-          <el-form-item label="可绑定账户数:" prop="name">
-           {{companyForm.user_num}}
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="公司名称:" prop="name">
-            <el-input v-model="companyForm.name" :minlength="2" :maxlength="20" clearable placeholder="请输入公司名称"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="统一社会信用代码:" prop="credit_code">
-            <el-input v-model="companyForm.credit_code" :minlength="2" :maxlength="20" clearable placeholder="请输入统一社会信用代码"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="行业:" prop="industry">
-            <el-input v-model="companyForm.industry" :minlength="2" :maxlength="20" clearable placeholder="请输入行业"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="联系人:" prop="user_name">
-            <el-input v-model="companyForm.user_name" :minlength="2" :maxlength="20" clearable placeholder="请输入联系人"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="联系人电话:" prop="phone">
-            <el-input v-model="companyForm.phone" :minlength="2" :maxlength="20" clearable placeholder="请输入联系人电话"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="邮箱:" prop="email">
-            <el-input v-model="companyForm.email" :minlength="2" :maxlength="20" clearable placeholder="请输入邮箱"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="邮编:" prop="postal_code">
-            <el-input v-model="companyForm.postal_code" :minlength="2" :maxlength="20" clearable placeholder="请输入邮箱"></el-input>
-          </el-form-item>
-        </el-col>
+  <div class="bg-white">
+    <el-tabs type="border-card">
+      <el-tab-pane label="公司信息">
+        <el-form :model="companyForm" :rules="stockRules" ref="companyFormRef" label-width="140px">
+          <el-row>
+            <el-col :span="6">
+              <el-form-item label="当前套餐:" prop="company_package_id">
+                <el-select v-model="companyForm.company_package_id" clearable placeholder="请选择套餐">
+                  <el-option v-for="item in packageList" :key="item.id" :label="item.name" :value="item.id" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <!-- user_num -->
+            <el-col :span="5">
+              <el-form-item label="套餐到期时间:" prop="name">
+                {{ companyForm.end_use_time }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="5">
+              <el-form-item label="可绑定账户数:" prop="name">
+                {{ companyForm.user_num }}
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="公司名称:" prop="name">
+                <el-input v-model="companyForm.name" :minlength="2" :maxlength="20" clearable placeholder="请输入公司名称"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="统一社会信用代码:" prop="credit_code">
+                <el-input v-model="companyForm.credit_code" :minlength="2" :maxlength="20" clearable placeholder="请输入统一社会信用代码"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="行业:" prop="industry">
+                <el-input v-model="companyForm.industry" :minlength="2" :maxlength="20" clearable placeholder="请输入行业"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="联系人:" prop="user_name">
+                <el-input v-model="companyForm.user_name" :minlength="2" :maxlength="20" clearable placeholder="请输入联系人"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="联系人电话:" prop="phone">
+                <el-input v-model="companyForm.phone" :minlength="2" :maxlength="20" clearable placeholder="请输入联系人电话"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="邮箱:" prop="email">
+                <el-input v-model="companyForm.email" :minlength="2" :maxlength="20" clearable placeholder="请输入邮箱"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="邮编:" prop="postal_code">
+                <el-input v-model="companyForm.postal_code" :minlength="2" :maxlength="20" clearable placeholder="请输入邮箱"></el-input>
+              </el-form-item>
+            </el-col>
 
-        <el-col :span="10">
-          <el-form-item label="官网:" prop="website">
-            <el-input v-model="companyForm.website" :minlength="2" :maxlength="20" clearable placeholder="请输入官网地址"></el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="地址:" prop="">
-            <el-cascader class="w-full" size="default" :options="options" clearable v-model="selectedOptions"> </el-cascader>
-            <span>
-              <el-input class="!w-full mt-3" v-model="companyForm.address" placeholder="请输入"></el-input>
-            </span>
-          </el-form-item>
-        </el-col>
-        <el-col :span="10">
-          <el-form-item label="营业执照:" prop="license">
-            <el-upload
-              class="avatar-uploader"
-              action="http://192.168.8.101:9998/uploaders"
-              :show-file-list="false"
-              :on-success="handleAvatarSuccess"
-              :before-upload="beforeAvatarUpload"
-            >
-              <img v-if="companyForm.license" :src="companyForm.license" class="avatar w-28 h-28" />
-              <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
-            </el-upload>
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <el-button type="primary" @click="submitWarehouseForm">保 存</el-button>
+            <el-col :span="10">
+              <el-form-item label="官网:" prop="website">
+                <el-input v-model="companyForm.website" :minlength="2" :maxlength="20" clearable placeholder="请输入官网地址"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="地址:" prop="">
+                <el-cascader class="w-full" size="default" :options="options" clearable v-model="selectedOptions"> </el-cascader>
+                <span>
+                  <el-input class="!w-full mt-3" v-model="companyForm.address" placeholder="请输入"></el-input>
+                </span>
+              </el-form-item>
+            </el-col>
+            <el-col :span="10">
+              <el-form-item label="营业执照:" prop="license">
+                <el-upload
+                  class="avatar-uploader"
+                  action="http://192.168.8.101:9998/uploaders"
+                  :show-file-list="false"
+                  :on-success="handleAvatarSuccess"
+                  :before-upload="beforeAvatarUpload"
+                >
+                  <img v-if="companyForm.license" :src="companyForm.license" class="avatar w-28 h-28" />
+                  <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div class="flex justify-center"><el-button type="primary" @click="submitWarehouseForm">保 存</el-button></div>
+      </el-tab-pane>
+      <el-tab-pane label="个人信息">
+        <el-form :model="infoForm" :rules="stockRules" ref="infoFormRef" label-width="140px">
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="名称:" prop="nickname">
+                {{ infoForm.nickname }}
+                <!-- <el-input v-model="infoForm.nickname" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入公司名称"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="16">
+              <el-form-item label="登录昵称:" prop="username">
+                {{ infoForm.username }}
+                <!--  <el-input v-model="infoForm.username" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入统一社会信用代码"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="16">
+              <el-form-item label="手机号:" prop="phone">
+                {{ infoForm.phone }}
+                <!--  <el-input v-model="infoForm.phone" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入联系人电话"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <el-col :span="16">
+              <el-form-item label="邮箱:" prop="email">
+                {{ infoForm.email }}
+                <!--  <el-input v-model="infoForm.email" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入邮箱"></el-input> -->
+              </el-form-item>
+            </el-col>
+            <!--  <el-col :span="16">
+              <el-form-item label="部门:" prop="dept_id">
+                {{ infoForm.dept_id }}
+              </el-form-item>
+            </el-col> -->
+            <el-col :span="16">
+              <el-form-item label="头像:" prop="face">
+                <el-upload
+                  class="avatar-uploader"
+                  action="http://192.168.8.104:9998/uploaders"
+                  :show-file-list="false"
+                  :on-success="handleInfoSuccess"
+                  :before-upload="beforeInfoUpload"
+                >
+                  <img v-if="infoForm.face" :src="infoForm.face" class="avatar w-28 h-28" />
+                  <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
+                </el-upload>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div class="flex justify-center"><el-button type="primary" @click="submitInfo">保 存</el-button></div>
+      </el-tab-pane>
+    </el-tabs>
   </div>
 </template>
   
@@ -93,9 +147,13 @@
 import { ref, onMounted } from 'vue';
 import * as API_Company from '@/api/company';
 import * as API_Package from '@/api/package';
+import * as API_Auth from '@/api/auth';
 import { provinceAndCityData, pcTextArr, regionData, pcaTextArr, codeToText } from 'element-china-area-data';
 import { ElMessageBox, FormInstance, ElMessage } from 'element-plus';
 import type { UploadProps } from 'element-plus';
+import { useStore } from 'vuex';
+import { submit } from '@/api/goodsInventoryLoss';
+const store = useStore();
 const tableData = ref<any>({});
 const companyForm = ref<any>({
   role_id: '',
@@ -108,6 +166,7 @@ const companyForm = ref<any>({
   license: '',
   company_package_id: '',
 });
+const stockRules = ref();
 const options = ref<any[]>(regionData);
 const selectedOptions = ref<any[]>([]);
 const loading = ref(false);
@@ -124,6 +183,18 @@ const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
   }
   return true;
 };
+/* 个人信息详情 */
+const handleInfoSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
+  infoForm.value.face = response.url; //URL.createObjectURL(uploadFile.raw!);
+};
+
+const beforeInfoUpload: UploadProps['beforeUpload'] = (rawFile) => {
+  if (rawFile.size / 1024 / 1024 > 10) {
+    ElMessage.error('Avatar picture size can not exceed 10MB!');
+    return false;
+  }
+  return true;
+};
 const adminName = (val: string[]) => {
   let text = '';
   console.log(val);
@@ -172,16 +243,39 @@ const GET_CompanyList = () => {
       loading.value = false;
     });
 };
-const packageList = ref([]);
+const packageList = ref<any>([]);
 const GET_PackageList = () => {
   API_Package.packageList({ page_no: 1, page_size: 1000, use_able: true }).then((res) => {
     packageList.value = res.records;
   });
 };
+/* 获取当前登录人详情 */
+const infoForm = ref<any>({
+  face: '',
+});
+let imgUrl = ref<any>('');
+const GET_Info = () => {
+  API_Auth.getAdministratorDetail(store.state.user.user.uid).then((res) => {
+    infoForm.value = res;
+    imgUrl.value = res.face;
+  });
+};
+const submitInfo = () => {
+  if (infoForm.value.face == undefined) {
+    return ElMessage.error('请上传头像!');
+  }else if(infoForm.value.face==imgUrl.value){
+    return ElMessage.error('请上传新的头像!');
+  }
+  API_Auth.editAdministrator(store.state.user.user.uid, { face: infoForm.value.face }).then((res) => {
+    ElMessage.success('修改成功!');
+    GET_Info();
+  });
+};
 
 onMounted(() => {
   GET_CompanyList();
   GET_PackageList();
+  GET_Info();
 });
 </script>
   
@@ -200,7 +294,7 @@ onMounted(() => {
   width: 100px;
 }
 
-::v-deep .site-logo .el-upload {
+:deep(.site-logo .el-upload) {
   border: 1px dashed #d9d9d9;
   border-radius: 6px;
   cursor: pointer;

+ 15 - 13
src/views/companyMent/configMsg.vue

@@ -88,6 +88,8 @@ import * as API_Auth from '@/api/auth';
 import * as API_Menus from '@/api/menus';
 import * as API_Setting from '@/api/setting';
 import * as API_Company from '@/api/company';
+import { useStore } from 'vuex';
+const store = useStore();
 /*   import { Foundation } from '../../composables/ui-utils'; */
 
 const route = useRoute();
@@ -327,7 +329,7 @@ const saveRolePermission = () => {
       } */
       API_Company.updateSelectMsg(params).then((res) => {
         ElMessage.success('保存成功!');
-        GET_RolePermission()
+        GET_RolePermission();
       });
       /* const saveSuccess = () => {
         ElMessage.success('保存成功!');
@@ -343,7 +345,7 @@ const saveRolePermission = () => {
 
 /** 获取消息树 */
 const GET_RolePermission = () => {
-  API_Company.getSendNumByCompany().then((res) => {
+  API_Company.getSendNumByCompany({company_id: store.state.companId}).then((res) => {
     permissions.value = res;
   });
   /*  API_Menus.getMenusChildren().then((res) => {
@@ -428,31 +430,31 @@ onMounted(() => {
   border-bottom: none;
 }
 
-::v-deep .el-form-item__label {
+:deep(.el-form-item__label) {
   padding-top: 15px;
 }
 
-::v-deep .el-form-item__content {
+:deep(.el-form-item__content) {
   display: block;
   border-left: 1px solid #e7e7e7;
   padding-left: 20px;
   padding-top: 15px;
 }
 
-::v-deep .el-form-item__content .el-form-item__error {
+:deep(.el-form-item__content .el-form-item__error) {
   padding-left: 20px;
 }
 
-::v-deep .el-form-item:last-child .el-form-item__content {
+:deep(.el-form-item:last-child .el-form-item__content) {
   padding-top: 0;
 }
 
-::v-deep .el-form-item:not(:first-child) {
+:deep(.el-form-item:not(:first-child)) {
   border-top: 1px solid #e7e7e7;
   position: relative;
 }
 
-::v-deep .el-form-item:not(:first-child)::after {
+:deep(.el-form-item:not(:first-child)::after) {
   content: ' ';
   width: 1px;
   height: 22px;
@@ -462,18 +464,18 @@ onMounted(() => {
   left: 200px;
 }
 
-::v-deep .el-button-group {
+:deep(.el-button-group) {
   display: inline-block;
 }
 
-::v-deep .el-button-group .el-button {
+:deep(.el-button-group .el-button) {
   display: inline-block;
   padding: 0;
   border: none;
 }
 
-::v-deep .el-button-group .el-button:focus,
-::v-deep .el-button-group .el-button:hover {
+:deep(.el-button-group .el-button:focus),
+:deep(.el-button-group .el-button:hover) {
   color: #606266;
   border-color: #fff;
   background-color: #fff;
@@ -507,7 +509,7 @@ onMounted(() => {
   width: 100%;
 }
 
-::v-deep .role-dropdown__label .el-checkbox__label {
+:deep(.role-dropdown__label .el-checkbox__label) {
   color: inherit;
 }
 

+ 2 - 1
src/views/goods/SKUList.vue

@@ -197,6 +197,7 @@ const params = ref({
   page_no: 1,
   page_size: 10,
   keyword: '',
+  company_id: store.state.companId,
 });
 const roleArray = ref<any[]>([]);
 const disabled = ref(false);
@@ -298,11 +299,11 @@ const submitWarehouseForm = () => {
 
 const GET_GoodsList = () => {
   loading.value = true;
+  console.log(params);
   API_Goods.productList(params.value)
     .then((response) => {
       loading.value = false;
       tableData.value = response;
-      console.log(tableData.value);
     })
     .catch(() => {
       loading.value = false;

+ 44 - 35
src/views/package/packageAdd.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="permission-container">
-    <el-form :model="permissionForm" :rules="permissionRules" ref="permissionForm" label-width="200px" class="demo-ruleForm">
+    <el-form :model="permissionForm" :rules="permissionRules" ref="permissionFormRef" label-width="200px" class="demo-ruleForm">
       <el-form-item label="角色名称" prop="role_name">
         <el-input v-model="permissionForm.role_name"></el-input>
       </el-form-item>
-      <el-form-item label="数据范围" prop="dept_ids">
+      <!-- <el-form-item label="数据范围" prop="dept_ids">
         <el-cascader
           @visible-change="visibleChange"
           ref="cascader"
@@ -14,7 +14,7 @@
           @change="selectHandle"
           :props="props"
         ></el-cascader>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="角色描述" prop="role_describe">
         <el-input v-model="permissionForm.role_describe"></el-input>
       </el-form-item>
@@ -96,8 +96,8 @@
     </el-form>
   </div>
 </template>
-  
-  <script lang="ts" setup>
+    
+    <script lang="ts" setup>
 import { ref, reactive, onMounted, watch, nextTick } from 'vue';
 import { useRoute, useRouter } from 'vue-router';
 import { ElMessage } from 'element-plus';
@@ -118,13 +118,14 @@ const props = {
 };
 
 const checked = ref(true);
-const deptList = ref([]);
+const deptList = ref<any>([]);
 const oneDimensionalList = ref([]); // 源数据平铺成一级节点
 
 /** 权限 表单 */
 const permissionForm = reactive({
   data_scope: 'ALL',
   role_name: '',
+  dept_ids: '',
   role_describe: '',
 });
 
@@ -220,7 +221,7 @@ let buildTree = function buildTree(list, parent_id) {
         sort: list[i].sort,
         type: list[i].type,
         region_ids: list[i].region_ids,
-        children: this.buildTree(list, list[i].id),
+        children: buildTree(list, list[i].id),
       };
       tree.push(node);
     }
@@ -266,8 +267,8 @@ const handleCheckboxChanged = (item, parent) => {
   if (item.children && item.children.length) {
     item.children = setPermissionsCheck(item.children, item.checked);
   }
-  countAllPermissions();
-  countParentChecked();
+  countAllPermissions(permissions.value);
+  countParentChecked(permissions.value);
 };
 
 /** 设置权限状态 */
@@ -291,24 +292,28 @@ const checkIndeterminate = (permissions) => {
 };
 
 /** 获取所有权限展开后的长度、被选中的长度 */
-const countAllPermissions = (permissions) => {
-  permissions = permissions || permissions.value;
+const countAllPermissions = (perms?: any[]) => {
+  const currentPermissions = perms || permissions.value;
+  if (!Array.isArray(currentPermissions)) {
+    console.warn('permissions is not an array:', currentPermissions);
+    return [];
+  }
   const _list = [];
-  permissions.forEach((item) => {
+  currentPermissions.forEach((item) => {
     _list.push(item);
     if (item.children) _list.push(...countAllPermissions(item.children));
   });
   const length = _list.length;
   const length_checked = _list.filter((_item) => _item.checked).length;
-  allCheck.value = length === _list.filter((_item) => _item.checked).length;
+  allCheck.value = length === length_checked;
   allIndeterminate.value = length_checked !== 0 && length !== length_checked;
   return _list;
 };
 
 /** 计算所有父辈的选中状态 */
-const countParentChecked = (permissions) => {
-  permissions = permissions || permissions.value;
-  permissions.forEach((item) => {
+const countParentChecked = (perms?: any[]) => {
+  const currentPermissions = perms || permissions.value;
+  currentPermissions.forEach((item) => {
     if (item.children && item.children.length) {
       countParentChecked(item.children);
       const length = item.children.length;
@@ -319,14 +324,15 @@ const countParentChecked = (permissions) => {
 };
 
 /** 保存角色权限 */
+const permissionFormRef = ref();
 const saveRolePermission = () => {
-  permissionForm.validate((valid) => {
+  permissionFormRef.value.validate((valid) => {
     if (valid) {
       let params = {
         ...permissionForm,
         menus: permissions.value,
       };
-      if (!params.dept_ids) {
+     /*  if (!params.dept_ids) {
         ElMessage.error('请选择数据范围!');
         return;
       }
@@ -339,12 +345,12 @@ const saveRolePermission = () => {
           params.data_scope = 'DEPT_CUSTOM';
           params.dept_ids = params.dept_ids.join(',');
         }
-      }
+      } */
       const saveSuccess = () => {
         ElMessage.success('保存成功!');
-        router.push({ name: 'RoleList' });
+        router.push({ name: 'packageList' });
       };
-      role_id.value === 0 ? API_Auth.addRole(params).then(() => saveSuccess()) : API_Auth.editRole(role_id.value, params).then(() => saveSuccess());
+      role_id.value === '0' ? API_Auth.addRole(params).then(() => saveSuccess()) : API_Auth.editRole(role_id.value, params).then(() => saveSuccess());
     } else {
       ElMessage.error('表单填写有误,请检查!');
       return false;
@@ -356,22 +362,25 @@ const saveRolePermission = () => {
 const GET_RolePermission = () => {
   API_Menus.getMenusChildren().then((res) => {
     if (role_id.value !== '0') {
-      console.log(role_id.value !== 0);
       API_Auth.getRolePermission(role_id.value).then((response) => {
-        role_id.value = response.role_id;
-        permissionForm.data_scope = response.data_scope;
-        permissionForm.role_name = response.role_name;
-        permissionForm.role_describe = response.role_describe;
-        permissionForm.dept_ids = response.dept_ids.split(',');
+        // ... existing code ...
         const checkedIds = expandRouters(response.menus);
         permissions.value = filterRoleRouter(res, checkedIds);
-        countAllPermissions();
-        GET_DeptList();
+        if (Array.isArray(permissions.value)) {
+          countAllPermissions();
+        } else {
+          console.warn('Invalid permissions data:', permissions.value);
+        }
+       /*  GET_DeptList(); */
       });
     } else {
       permissions.value = res;
-      countAllPermissions();
-      GET_DeptList();
+      if (Array.isArray(permissions.value)) {
+        countAllPermissions();
+      } else {
+        console.warn('Invalid permissions data:', permissions.value);
+      }
+     /*  GET_DeptList(); */
     }
   });
 };
@@ -409,16 +418,16 @@ onMounted(() => {
   GET_RolePermission();
 });
 
-watch(
+/* watch(
   () => route.query.id,
   () => {
     role_id.value = route.query.id;
     GET_RolePermission();
   }
-);
+); */
 </script>
-  
-<style scoped>
+    
+  <style scoped>
 .permission-container {
   padding: 10px;
   background-color: #fff;

+ 1 - 1
src/views/package/packageList.vue

@@ -239,7 +239,7 @@ const GET_PackageList = () => {
 /* 获取权限列表 */
 const GET_RoleList = () => {
   API_Auth.getPackageRoleList({ page_no: 1, page_size: 10000 }).then((res) => {
-    roleArray.value = res.data;
+    roleArray.value = res.records;
   });
 };
 

+ 4 - 4
src/views/package/packagePermissions.vue

@@ -1,5 +1,5 @@
 <template>
-    <en-table-layout :tableData="tableData.data" :loading="loading">
+    <en-table-layout :tableData="tableData.records" :loading="loading">
       <template #toolbar>
         <div class="inner-toolbar w-11/12 flex justify-between">
           <div class="toolbar-btns">
@@ -29,11 +29,11 @@
           v-if="tableData"
           @size-change="handlePageSizeChange"
           @current-change="handlePageCurrentChange"
-          :current-page="tableData.page_no"
+          :current-page="tableData.page"
           :page-sizes="[10, 20, 50, 100]"
-          :page-size="tableData.page_size"
+          :page-size="tableData.size"
           layout="total, sizes, prev, pager, next, jumper"
-          :total="tableData.data_total"
+          :total="tableData.total"
         >
         </el-pagination>
       </template>

+ 12 - 5
src/views/setting/companyList.vue

@@ -26,7 +26,7 @@
 
         <el-table-column label="操作">
           <template #default="scope">
-            <!-- <el-button size="mini" v-if="checkPermission(['warehouse:update'])" @click="getBranch('compan')">查看</el-button> -->
+            <el-button size="mini" v-if="checkPermission(['warehouse:update'])" @click="getBranch('compan',scope.row)">查看</el-button>
             <el-button size="mini" v-if="checkPermission(['warehouse:update'])" @click="handleEditWarehouse(scope.$index, scope.row)">编辑</el-button>
             <el-button size="mini" v-if="checkPermission(['warehouse:update'])" @click="handleRenew(scope.$index, scope.row)">续费</el-button>
             <el-button size="mini" class="mt-1" v-if="checkPermission(['warehouse:update'])" @click="handleBranch(scope.$index, scope.row)">部门管理</el-button>
@@ -84,7 +84,7 @@
                 <img v-if="companyForm.id_card_front" :src="companyForm.id_card_front" class="avatar w-28 h-28" />
                 <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
               </el-upload>
-             <!--  <p>姓名:{{ companyForm.value.id_card_front.name }}</p>
+              <!--  <p>姓名:{{ companyForm.value.id_card_front.name }}</p>
               <p>身份证号码:{{ companyForm.value.id_card_front.id_card_number }}</p> -->
             </el-form-item>
           </el-col>
@@ -194,10 +194,13 @@ import * as API_Setting from '@/api/setting';
 import * as API_Company from '@/api/company';
 import * as API_Package from '@/api/package';
 import Storage from '@/utils/storage';
-import router from '@/router';
+import { useRouter, useRoute } from 'vue-router';
 import { provinceAndCityData, pcTextArr, regionData, pcaTextArr, codeToText } from 'element-china-area-data';
 import { Plus } from '@element-plus/icons-vue';
 import type { UploadProps } from 'element-plus';
+
+const route = useRoute();
+const router = useRouter();
 /* 营业执照 */
 const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
   API_Company.checkLicense({ image_url: response.url }).then((res) => {
@@ -411,7 +414,7 @@ const submitWarehouseForm = () => {
             .catch(() => {
               /* Handle cancel action if needed */
             });
-        /* ElMessage.success('添加成功!'); */
+          /* ElMessage.success('添加成功!'); */
         });
       }
     } else {
@@ -467,8 +470,12 @@ const adminName = (val: string[]) => {
 
 /* 切换菜单 */
 
-const getBranch = (value) => {
+const getBranch = (value,row) => {
   store.dispatch('toggleSuperMenu', value);
+  store.dispatch('toggleCompanId', row.id);
+  router.push({
+    name: 'dashboard',
+  });
 };
 
 onMounted(() => {

+ 3 - 1
src/views/setting/roleManage.vue

@@ -46,13 +46,15 @@ import { useRouter } from 'vue-router';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import { Delete, Edit, Search, Share, Upload, CirclePlus } from '@element-plus/icons-vue';
 import * as API_Auth from '@/api/auth';
-
+import { useStore } from 'vuex';
+const store = useStore();
 const router = useRouter();
 const loading = ref(false);
 const params = ref({
   page_no: 1,
   page_size: 10,
   keyword: '',
+  company_id: store.state.companId,
 });
 const tableData = ref<any>({});
 

+ 4 - 1
src/views/stock/goodsInventory.vue

@@ -164,7 +164,8 @@ import * as API_Setting from '@/api/setting';
 import * as API_BasicSetting from '@/api/basicSetting';
 /*  import { Foundation } from '~/ui-utils'; */
 import { ElMessage, ElMessageBox } from 'element-plus';
-
+import { useStore } from 'vuex';
+const store = useStore();
 const router = useRouter();
 const route = useRoute();
 
@@ -174,6 +175,7 @@ const loading = ref(false);
 const params = ref({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = ref({});
 const tableData = ref<any>({});
@@ -202,6 +204,7 @@ const GET_WarehouseList = () => {
     page_no: 1,
     page_size: 9999,
     user_state: 0,
+    company_id: store.state.companId,
   }).then((response) => {
     adminList.value = response.data;
   });

+ 3 - 1
src/views/stock/goodsInventoryLoss.vue

@@ -96,7 +96,8 @@ import * as API_GoodsInventoryLoss from '@/api/goodsInventoryLoss';
 import * as API_Setting from '@/api/setting';
 import * as API_BasicSetting from '@/api/basicSetting';
 /* import { Foundation } from '~/ui-utils'; */
-
+import { useStore } from 'vuex';
+const store = useStore();
 const router = useRouter();
 const route = useRoute();
 
@@ -106,6 +107,7 @@ const loading = ref(false);
 const params = ref<any>({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = ref<any>({
   goodsInventory_time_range: [],

+ 6 - 1
src/views/stock/goodsLend.vue

@@ -156,6 +156,8 @@ import QRCode from 'qrcode';
 /* import EnTableLayout from '@/components/TableLayout/index.vue';
 import EnTableSearch from '@/components/TableSearch/index.vue'; */
 import { ElMessageBox, ElMessage } from 'element-plus';
+import { useStore } from 'vuex';
+const store = useStore();
 
 const router = useRouter();
 const route = useRoute();
@@ -166,6 +168,7 @@ const loading = ref(false);
 const params = reactive({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = reactive({});
 const tableData = ref('');
@@ -350,7 +353,9 @@ const GET_DeptList = () => {
   }).then((res) => {
     typeList.value = res.data;
   });
-  API_GoodsLend.getListAreaType()
+  API_GoodsLend.getListAreaType({ page_no: 1,
+  page_size: 100,
+  company_id: store.state.companId,})
     .then((response) => {
       loading.value = false;
       AreaTableData.value = response;

+ 1 - 0
src/views/stock/goodsTransfer.vue

@@ -120,6 +120,7 @@ const loading = ref(false);
 const params = reactive({
   page_no: 1,
   page_size: 50,
+  company_id: store.state.companId,
 });
 const advancedForm = reactive({});
 const tableData = ref('');

+ 1 - 0
src/views/stock/goodsUnderstock.vue

@@ -142,6 +142,7 @@ const loading = ref(false);
 const params = ref({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = ref<any>({});
 const tableData = ref<any>({});

+ 3 - 1
src/views/stock/outbound.vue

@@ -147,7 +147,8 @@ import { useRouter, useRoute } from 'vue-router';
 import * as API_GoodsExchange from '@/api/goodsExchange';
 import * as API_Setting from '@/api/setting';
 import * as API_BasicSetting from '@/api/basicSetting';
-
+import { useStore } from 'vuex';
+const store = useStore();
 const router = useRouter();
 const route = useRoute();
 
@@ -157,6 +158,7 @@ const loading = ref(false);
 const params = reactive({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = reactive({});
 const tableData = ref('');

+ 3 - 1
src/views/stock/warehouseList.vue

@@ -109,6 +109,7 @@ const stockForm = ref<any>({
   description: '',
   ware_pro_city_area: []
 });
+/* console.log(store.state.companId); */
 const stockRules = ref<any>({
   sn: [{ required: true, message: '请输入仓库编号', trigger: 'blur' }],
   name: [{ required: true, message: '请选择输入仓库名称', trigger: 'blur' }],
@@ -121,7 +122,7 @@ const selectedOptions = ref<any[]>([]);
 const options = ref<any[]>(regionData);
 const marketingList = ref<any[]>([]);
 
-const params = ref({
+const params = ref<any>({
   data: [],
   page_no: 1,
   page_size: 10,
@@ -208,6 +209,7 @@ const submitWarehouseForm = () => {
 
 const GET_WarehouseList = () => {
   loading.value = true;
+  params.value.company_id=store.state.companId
   API_BasicSetting.warehouse(params.value)
     .then((response) => {
       loading.value = false;

+ 11 - 8
src/views/stock/warehouseLocation.vue

@@ -48,10 +48,12 @@ import { ref, reactive, onMounted, watch, nextTick, getCurrentInstance } from 'v
 import { ElMessageBox, FormInstance, ElMessage } from 'element-plus';
 import * as API_GoodsLend from '@/api/goodsLend';
 import * as API_Setting from '@/api/setting';
+import { useStore } from 'vuex';
 /* import Print from 'print-js';
 import QRCode from 'qrcodejs2'; */
 
 const { proxy } = getCurrentInstance();
+const store = useStore();
 
 const checkPermission = (value: string[]): boolean => {
   return proxy.checkPermission(value);
@@ -63,6 +65,7 @@ const loading = ref(false);
 const params = reactive({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = reactive({});
 const tableData = ref([]);
@@ -89,7 +92,7 @@ const lendCommit = () => {
   addLendFormRef.value.validate((valid) => {
     if (valid) {
       if (title.value === '新增库位区域') {
-       // addLendForm.value.code = warehouseSn.value + '-' + addLendForm.value.code;
+        // addLendForm.value.code = warehouseSn.value + '-' + addLendForm.value.code;
         API_GoodsLend.addCreateAreaType(addLendForm.value).then(() => {
           ElMessage.success('添加成功!');
           dialogVisibleForm.value = false;
@@ -165,7 +168,7 @@ const handleReturnGoodsLend = (row) => {
 };
 
 const statusFilter = (val) => {
-  const obj = typeList.value.filter((el) => el.value === val);
+  const obj = typeList.value.filter((el:any) => el.value === val);
   return obj.length !== 0 ? obj[0].label : '';
 };
 
@@ -199,7 +202,7 @@ const handleDeleteGoodsLend = () => {
   if (!multipleSelection.value.length) return ElMessage.error('请先选择!');
   ElMessageBox.confirm('确定要删除这些借出单吗?', '提示', { type: 'warning' })
     .then(() => {
-      const ids = multipleSelection.value.map((item) => item.id);
+      const ids = multipleSelection.value.map((item:any) => item.id);
       API_GoodsLend.deleteGoodsLend(ids).then(() => {
         ElMessage.success('删除成功!');
         GET_GoodsLendList();
@@ -247,14 +250,14 @@ const GET_GoodsLendDetail = (id) => {
   });
 };
 
-const searchEvent = (data) => {
+/* const searchEvent = (data) => {
   params.sn = data;
   Object.keys(advancedForm).forEach((key) => delete params[key]);
   params.page_no = 1;
   GET_GoodsLendList();
-};
+}; */
 
-const advancedSearchEvent = () => {
+/* const advancedSearchEvent = () => {
   Object.assign(params, advancedForm);
   delete params.start_time;
   delete params.end_time;
@@ -265,11 +268,11 @@ const advancedSearchEvent = () => {
   delete params.goodsLend_time_range;
   params.page_no = 1;
   GET_GoodsLendList();
-};
+}; */
 
 const GET_GoodsLendList = () => {
   loading.value = true;
-  API_GoodsLend.getListAreaType()
+  API_GoodsLend.getListAreaType(params)
     .then((response) => {
       loading.value = false;
       tableData.value = response;

+ 3 - 1
src/views/stock/warehousing.vue

@@ -145,7 +145,8 @@ import { useRouter, useRoute } from 'vue-router';
 import * as API_GoodsExchange from '@/api/goodsExchange';
 import * as API_Setting from '@/api/setting';
 import * as API_BasicSetting from '@/api/basicSetting';
-
+import { useStore } from 'vuex';
+const store = useStore();
 const router = useRouter();
 const route = useRoute();
 
@@ -155,6 +156,7 @@ const loading = ref(false);
 const params = reactive({
   page_no: 1,
   page_size: 10,
+  company_id: store.state.companId,
 });
 const advancedForm = reactive({});
 const tableData = ref('');

+ 2 - 1
theme.config.ts

@@ -8,5 +8,6 @@ export const $themeConfig = {
     animation: '', // animate__fadeIn, animate__fadeInDown, animate__fadeInUp, animate__fadeInLeft, animate__fadeInRight, animate__slideInDown, animate__slideInLeft, animate__slideInRight, animate__zoomIn
     navbar: 'navbar-sticky', // navbar-sticky, navbar-floating, navbar-static
     semidark: false,
-    superMenu:'super'
+    superMenu:'super',
+    companId:'',
 };