瀏覽代碼

增加组织hooks,globalHeader增加组织切换

tongshangming 2 年之前
父節點
當前提交
d67943bd6c

+ 3 - 2
.env.development

@@ -1,4 +1,5 @@
 NODE_ENV = 'development'
 
-VITE_BASE_API = /mbwb/api
-VITE_BASE_PATH = http://10.0.0.198:30701
+VITE_BASE_API = /api
+# VITE_BASE_PATH = http://10.0.0.198:30701
+VITE_BASE_PATH = https://yunji-web.sxidc.com

+ 4 - 0
src/assets/main.css

@@ -41,4 +41,8 @@ a {
 	display: -webkit-box;
 	-webkit-line-clamp: 2;
 	-webkit-box-orient: vertical;
+}
+
+#nprogress .bar {
+  background: var(--el-color-primary) !important;
 }

+ 24 - 4
src/components/core/GlobalHeader.vue

@@ -2,10 +2,12 @@
 import { useMenuStore } from '@/stores/menu'
 import { useUserStore } from '@/stores/user'
 import { useThemeStore } from '@/stores/theme'
+import { useOrg } from '@/hooks/useOrg'
 import avatar from '@/assets/images/avatar.png'
 import { ElMessageBox } from 'element-plus'
 import { isAbsolutePath } from '@/utils/utils'
 import router from '@/router'
+import config from '@/config/defaultSetting'
 import type { RouteRecordRaw } from 'vue-router'
 
 const themeStore = useThemeStore()
@@ -93,6 +95,9 @@ const buildMenu = (list: RouteRecordRaw[]) => {
 }
 buildMenu(menuStore.leftMenuList)
 
+// 多组织
+const { orgList, changeOrg } = config.multiTenant ? useOrg() : { orgList: [], changeOrg: () => {} }
+
 // 搜索框
 const searchVisible = ref(false)
 const searchValue = ref('')
@@ -149,6 +154,21 @@ const handleSelect = (menu: any) => {
             <Search />
           </el-icon>
         </el-button>
+        <el-dropdown class="ml-4 mr-4" :max-height="200" v-if="config.multiTenant">
+          <span class="el-dropdown-link">
+            {{ user.orgName }}
+            <el-icon class="el-icon--right" :color="headerStyle.color">
+              <arrow-down />
+            </el-icon>
+          </span>
+          <template #dropdown>
+            <el-dropdown-menu>
+              <el-dropdown-item v-for="item in orgList" :key="item.id" @click="changeOrg(item.id)">
+                <div>{{ item?.companyName }}</div>
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </template>
+        </el-dropdown>
         <el-button link @click="toggleScreen">
           <!-- <icon-off-screen :size="iconSize" :fill="headerStyle.color" v-if="isFullscreen" />
           <icon-full-screen :size="iconSize" :fill="headerStyle.color" v-else /> -->
@@ -177,12 +197,12 @@ const handleSelect = (menu: any) => {
           <template #dropdown>
             <el-dropdown-menu>
               <el-dropdown-item @click="goInfo">
-                <el-icon><icon-setting-two></icon-setting-two></el-icon>
-                <div>个人设置</div>
+                <el-icon :size="iconSize"><icon-setting-two></icon-setting-two></el-icon>
+                <div class="ml-2 mb-1 font-size-16px">个人设置</div>
               </el-dropdown-item>
               <el-dropdown-item @click="logout">
-                <el-icon><icon-logout></icon-logout></el-icon>
-                <div>退出登录</div>
+                <el-icon :size="iconSize"><icon-logout></icon-logout></el-icon>
+                <div class="ml-2 mb-1 font-size-16px">退出登录</div>
               </el-dropdown-item>
             </el-dropdown-menu>
           </template>

+ 2 - 1
src/components/core/ProTable.vue

@@ -253,7 +253,8 @@ defineExpose({
   handleReset,
   refresh,
   formData,
-  query
+  query,
+  table: xTable
 })
 </script>
 

+ 3 - 0
src/components/form/ElImageUpload.vue

@@ -147,6 +147,9 @@ if (props.item) {
     border-color: var(--el-color-primary);
   }
 }
+:deep(.el-upload--picture-card) {
+  background-color: #fff;
+}
 :deep(.el-upload-list--picture-card .el-upload-list__item) {
   width: v-bind(size);
   height: v-bind(size);

+ 2 - 1
src/config/defaultSetting.ts

@@ -10,5 +10,6 @@ export default {
   keepAliveTabs: true, // 标签页持久化
   oss: true,
   ossHost: 'https://fskj-res.oss-cn-zhangjiakou.aliyuncs.com/',
-  uploadSuccessCb: (res: any) => import.meta.env.VITE_BASE_PATH + res.data
+  uploadSuccessCb: (res: any) => import.meta.env.VITE_BASE_PATH + res.data,
+  multiTenant: true
 }

+ 32 - 0
src/hooks/useOrg.ts

@@ -0,0 +1,32 @@
+import { ElMessage } from 'element-plus'
+import request from '@/utils/request'
+
+export const useOrg = () => {
+  const orgList = ref<any>([])
+
+  request.get('/v1/user/joined/tangent').then((res: any) => {
+    if (res.success) {
+      orgList.value = res.infos
+      console.log(orgList.value)
+    }
+  })
+
+  // 切换组织
+  const changeOrg = (newTangentId: number | string) => {
+    request.post('/v1/user/tangent/change', { newTangentId }).then((res: any) => {
+      if (res.success) {
+        ElMessage({
+          type: 'success',
+          message: res.msg
+        })
+        setTimeout(() => {
+          location.reload()
+        }, 0)
+      }
+    })
+  }
+  return {
+    orgList,
+    changeOrg
+  }
+}

+ 4 - 2
src/stores/user.ts

@@ -4,11 +4,13 @@ import { login } from '@/api/user'
 export const useUserStore = defineStore({
   id: 'user',
   state: () => ({
-    user: {},
+    user: {
+      orgName: '山西方是科技股份有限公司 '
+    },
     flag: false,
     token:
       localStorage.getItem('token') ||
-      'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiI1NjQ0MzBmMDNhYWU0NmExODE2YmU1YmI4NDExY2RmNiIsImV4cCI6MTcwMDYxNzM5MywiaWF0IjoxNzAwNTMwOTkzfQ.aTrrVZj9G-WOw4841YSbISrBoz19SkTlpqfYgpVv6vI'
+      'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiI5MWFjNzViNDRlNjc0Y2E4YWY2OWFmMTQ3OGM5NGRiZSIsImV4cCI6MTcwMTI0ODExMSwiaWF0IjoxNzAxMTYxNzExfQ.zj7-o1bTCs5uieDxFUJdyFBqMdCNdgJ7WpnaZSlIhuw'
   }),
   actions: {
     async getUserInfo() {