Przeglądaj źródła

fix: 修复公司缓存问题

husenlin 1 miesiąc temu
rodzic
commit
a4e1244fe9

+ 12 - 0
backend/app/plugin/module_payment/enterprise/controller.py

@@ -28,6 +28,18 @@ EnterpriseRouter = APIRouter(
     tags=["企业管理"],
 )
 
+@EnterpriseRouter.get(
+    "/all",
+    summary="查询企业类别",
+    description="分页查询企业列表",
+    response_model=ResponseSchema[EnterpriseListOutSchema],
+)
+async def all_enterprise_controller(
+    auth: Annotated[AuthSchema, Depends(AuthPermission(["module_payment:enterprise:list"]))],
+) -> JSONResponse:
+    result = await EnterpriseService.all_service(auth=auth)
+    return SuccessResponse(data=result)
+
 
 @EnterpriseRouter.get(
     "",

+ 0 - 1
backend/app/plugin/module_payment/enterprise/schema.py

@@ -116,7 +116,6 @@ class EnterpriseListOutSchema(BaseModel):
 
     model_config = ConfigDict(from_attributes=True)
 
-    # id: int = Field(description="主键ID")
     account_id: Optional[str] = Field(default=None, description="支付宝账号ID")
     enterprise_id: Optional[str] = Field(default=None, description="企业ID")
     name: Optional[str] = Field(default=None, description="企业名称")

+ 16 - 1
backend/app/plugin/module_payment/enterprise/service.py

@@ -1,5 +1,5 @@
 from datetime import datetime
-from typing import Optional, cast
+from typing import Optional, cast, List
 
 from redis.asyncio import Redis
 
@@ -129,6 +129,21 @@ class EnterpriseService:
 
         return result.enterprise_info # type: ignore
 
+    @classmethod
+    async def all_service(
+        cls,
+        auth: AuthSchema,
+    ) -> list[EnterpriseListOutSchema]:
+        if not auth.tenant_id or auth.tenant_id == 1:
+            return []
+
+        crud = EnterpriseCRUD(auth)
+        models = await crud.list()
+
+        if not models or len(models) == 0:
+            return []
+        return [EnterpriseListOutSchema.model_validate(model) for model in models]
+
     @classmethod
     async def list_service(
         cls,

+ 13 - 1
frontend/src/api/module_payment/enterprise.ts

@@ -39,7 +39,7 @@ export const STATUS_TAG_TYPE = {
 // 状态标签文本
 export const STATUS_LABEL = {
   ENTERPRISE_APPLICATION: "企业申请",
-  ENTERPRISE_CREATE: "已创建",
+  ENTERPRISE_CREATE: "已入驻",
   ENTERPRISE_ACTIVATED: "已签约",
   ENTERPRISE_UNSIGN: "已解约",
   ENTERPRISE_WITHDRAW: "已注销",
@@ -48,6 +48,18 @@ export const STATUS_LABEL = {
 };
 
 const enterpriseApi = {
+
+  /**
+   * 获取当前登录用户下的所有企业
+   */
+  all: () => {
+    return request({
+      url: "/payment/enterprise/all",
+      method: "get",
+    });
+  },
+
+
   /**
    * 查询企业列表
    * @param pageNo 页码

+ 44 - 26
frontend/src/store/modules/enterprise.store.ts

@@ -10,6 +10,8 @@ export interface EnterpriseItem {
   account_id: string;
   name: string;
   short_name?: string;
+  status?: string;
+  [key: string]: any;
 }
 
 export const useEnterpriseStore = defineStore("enterprise", {
@@ -20,38 +22,48 @@ export const useEnterpriseStore = defineStore("enterprise", {
 
   getters: {
     getEnterpriseList(state) {
-      if (state.enterpriseList.length > 0) {
-        return state.enterpriseList;
-      }
-      return JSON.parse(sessionStorage.getItem(ENTERPRISE_LIST_KEY) || "[]");
+      // if (state.enterpriseList.length > 0) {
+      //   return state.enterpriseList;
+      // }
+      // return JSON.parse(sessionStorage.getItem(ENTERPRISE_LIST_KEY) || "[]");
+      return state.enterpriseList || [];
     },
     getCurrentEnterprise(state) {
+      // if (state.currentEnterprise) {
+      //   return state.currentEnterprise;
+      // }
+      // const currentEnterpriseJson = sessionStorage.getItem(CURRENT_ENTERPRISE_KEY);
+      // if (currentEnterpriseJson) {
+      //   return JSON.parse(currentEnterpriseJson);
+      // }
+      // return null;
+      // 如果当前有选中的企业,直接返回
       if (state.currentEnterprise) {
         return state.currentEnterprise;
       }
-      const currentEnterpriseJson = sessionStorage.getItem(CURRENT_ENTERPRISE_KEY);
-      if (currentEnterpriseJson) {
-        return JSON.parse(currentEnterpriseJson);
+      // 如果没有选中的企业,返回列表中的第一个企业
+      if (state.enterpriseList && state.enterpriseList.length > 0) {
+        return state.enterpriseList[0];
       }
       return null;
     },
-    hasEnterprise() {
-      return this.getEnterpriseList.length > 0;
+    hasEnterprise(state) {
+      return state.enterpriseList && state.enterpriseList.length > 0;
     },
   },
 
   actions: {
     async fetchEnterpriseList() {
       try {
-        const res = await EnterpriseAPI.list(1, 100);
-        const list = res.data.data?.items || [];
-
+        const res = await EnterpriseAPI.all();
+        const list = res.data.data || [];
         return list.map((item: any) => ({
           enterprise_id: item.enterprise_id,
           account_id: item.account_id,
           name: item.name,
           short_name: item.short_name,
-          ...item,
+          status: item.status,
+          // ...item,
         }));
       } catch (error) {
         console.error("获取企业列表失败:", error);
@@ -60,24 +72,30 @@ export const useEnterpriseStore = defineStore("enterprise", {
 
     async loadEnterpriseList() {
       // 先从sessionStorage获取企业列表,避免重复请求
-      const enterpriseListJson = sessionStorage.getItem(ENTERPRISE_LIST_KEY);
-      if (enterpriseListJson) {
-        this.enterpriseList = JSON.parse(enterpriseListJson);
-      } else {
+      // const enterpriseListJson = sessionStorage.getItem(ENTERPRISE_LIST_KEY);
+      // if (enterpriseListJson) {
+      //   this.enterpriseList = JSON.parse(enterpriseListJson);
+      // } else {
+      //   this.enterpriseList = (await this.fetchEnterpriseList()) || [];
+      //   if (this.enterpriseList.length > 0) {
+      //     sessionStorage.setItem(ENTERPRISE_LIST_KEY, JSON.stringify(this.enterpriseList));
+      //   }
+      // }
+      if (!this.enterpriseList || this.enterpriseList.length == 0) {
         this.enterpriseList = (await this.fetchEnterpriseList()) || [];
-        if (this.enterpriseList.length > 0) {
-          sessionStorage.setItem(ENTERPRISE_LIST_KEY, JSON.stringify(this.enterpriseList));
-        }
+        console.log("this.enterpriseList:", this.enterpriseList);
       }
     },
 
     setCurrentEnterprise(enterpriseId: string) {
-      this.currentEnterprise =
-        this.getEnterpriseList.find((e: EnterpriseItem) => e.enterprise_id === enterpriseId) ||
-        null;
-      if (this.currentEnterprise) {
-        sessionStorage.setItem(CURRENT_ENTERPRISE_KEY, JSON.stringify(this.currentEnterprise));
-      }
+      // this.currentEnterprise =
+      //   this.getEnterpriseList.find((e: EnterpriseItem) => e.enterprise_id === enterpriseId) ||
+      //   null;
+      // if (this.currentEnterprise) {
+      //   sessionStorage.setItem(CURRENT_ENTERPRISE_KEY, JSON.stringify(this.currentEnterprise));
+      // }
+       this.currentEnterprise =
+            this.enterpriseList.find((e: EnterpriseItem) => e.enterprise_id === enterpriseId) || null;
     },
 
     clearEnterprise() {

+ 10 - 7
frontend/src/views/module_payment/enterprise/index.vue

@@ -44,9 +44,9 @@
               <el-table-column v-if="contentCols.find((col) => col.prop === 'created_time')?.show" key="created_time"
                 label="创建时间" prop="created_time" min-width="160" sortable />
               <el-table-column v-if="contentCols.find((col) => col.prop === 'operation')?.show" fixed="right" label="操作"
-                align="center" min-width="320">
+                align="center" min-width="220">
                 <template #default="scope">
-                  <el-button v-hasPerm="['module_payment:enterprise:detail']" type="info" size="small" link icon="View"
+                  <!-- <el-button v-hasPerm="['module_payment:enterprise:detail']" type="info" size="small" link icon="View"
                     @click="handleOpenDialog('detail')">
                     详情
                   </el-button>
@@ -64,7 +64,11 @@
                     icon="delete" :disabled="scope.row.status !== 'ENTERPRISE_UNSIGN'"
                     @click="handleDelete(scope.row.enterprise_id)">
                     注销
-                  </el-button>
+                  </el-button> -->
+                  <!-- <el-button v-hasPerm="['module_payment:enterprise:invite']" type="info" size="small" link icon="Link"
+                    @click="">
+                    继续签约
+                  </el-button> -->
                 </template>
               </el-table-column>
             </el-table>
@@ -81,9 +85,9 @@
               <OfficeBuilding />
             </el-icon>
           </div>
-          <h3 class="empty-title">企业入驻</h3>
+          <h3 class="empty-title">企业入驻 & 签约</h3>
           <p class="empty-desc">
-            还没有企业入驻,点击下方按钮开始申请
+            还没有企业入驻企业,点击下方按钮开始申请
           </p>
           <el-button type="primary" size="large" @click="handleOpenDialog('apply')">
             <el-icon>
@@ -170,8 +174,7 @@ const enterpriseStore = useEnterpriseStore();
 
 const hasEnterprise = computed(() => enterpriseStore.hasEnterprise);
 
-onMounted(async () => {
-});
+onMounted(async () => {});
 
 const searchConfig = reactive<ISearchConfig>({
   permPrefix: "module_payment:enterprise",