Procházet zdrojové kódy

feat(@six/smart-pharmacy): 智慧药事系统第一版企业管理-企业列表接口对接

cmj před 1 měsícem
rodič
revize
ce38e79103

+ 35 - 0
apps/smart-pharmacy/src/api/method/system.ts

@@ -4,11 +4,13 @@ import type { TransformData, TransformList, TransformRecord } from '#/api';
 
 import { http } from '#/api';
 import {
+  fromEnterprise,
   fromOrganization,
   fromProject,
   fromRole,
   fromTisane,
   fromUser,
+  toEnterprise,
   toOrganization,
   toProject,
   toRole,
@@ -85,6 +87,17 @@ export namespace SystemModel {
     remark?: string;
   }
 
+  /** 企业 */
+  export interface Enterprise extends TransformRecord {
+    id: string;
+    name: string;
+    code?: string;
+    /** 类型展示文案 */
+    type?: string;
+    enterpriseType?: number;
+    remark?: string;
+  }
+
   /** 煎药中心 */
   export interface Tisane extends TransformRecord {
     id: string;
@@ -353,6 +366,28 @@ export function deleteOrganizationsMethod(
   });
 }
 
+/** 获取企业分页列表 */
+export function listEnterprisesMethod(
+  page = 1,
+  size = 20,
+  query?: Partial<SystemModel.Enterprise>,
+) {
+  return http.get<TransformList<SystemModel.Enterprise>, TransformList>(
+    `/manager/tcmp-pc/enterprise/list`,
+    {
+      params: { pageNum: page, pageSize: size, ...toEnterprise(query) },
+      cacheFor: 0,
+      transform({ items, ...data }) {
+        const rows = items ?? [];
+        return {
+          ...data,
+          items: rows.map((item) => fromEnterprise(item)),
+        };
+      },
+    },
+  );
+}
+
 /** 获取煎药中心分页列表 */
 export function listMedicineCentersMethod(
   page = 1,

+ 47 - 0
apps/smart-pharmacy/src/api/model/enterprise.ts

@@ -0,0 +1,47 @@
+import type { SystemModel, TransformData } from '#/api';
+
+import { fromRow } from '#/api/model';
+
+const ENTERPRISE_TYPE_LABEL: Record<number, string> = {
+  1: '煎药企业',
+  2: '饮片供应商',
+  3: '物流公司',
+};
+
+export function getEnterpriseInfoTypeLabel(type?: number | string): string {
+  if (type === undefined || type === null || type === '') return '-';
+  const key = Number(type);
+  return ENTERPRISE_TYPE_LABEL[key] ?? String(type);
+}
+
+export function fromEnterprise(data?: TransformData): SystemModel.Enterprise {
+  const id = data?.id === undefined || data?.id === null ? '' : String(data.id);
+  const enterpriseType = data?.enterpriseType;
+  return {
+    ...fromRow({
+      ...data,
+      id,
+      createUser: data?.createBy ?? data?.createUser,
+      createTime: data?.createTime,
+    }),
+    id,
+    name: data?.enterpriseName ?? data?.name,
+    code: data?.enterpriseCode ?? data?.code,
+    enterpriseType,
+    type: getEnterpriseInfoTypeLabel(enterpriseType),
+    remark: data?.remark,
+    createUser: data?.createBy ?? data?.createUser,
+  };
+}
+
+export function toEnterprise(
+  data?: Partial<SystemModel.Enterprise>,
+): TransformData {
+  return {
+    id: data?.id || void 0,
+    enterpriseName: data?.name,
+    enterpriseCode: data?.code,
+    enterpriseType: data?.enterpriseType,
+    remark: data?.remark,
+  };
+}

+ 1 - 0
apps/smart-pharmacy/src/api/model/index.ts

@@ -2,6 +2,7 @@ import type { TransformData, TransformRecord } from '#/api';
 
 export * from './department';
 export * from './doctor';
+export * from './enterprise';
 export * from './organization';
 export * from './project';
 export * from './role';

+ 15 - 43
apps/smart-pharmacy/src/views/system/enterprise/data.ts

@@ -1,13 +1,11 @@
 import type { VxeTableGridOptions } from '@vben/plugins/vxe-table';
 
 import type { VbenFormSchema } from '#/adapter/form';
-import type { OnActionClickFn } from '#/adapter/vxe-table';
 import type { SystemModel } from '#/api/method/system';
 
-import { listOrganizationsMethodAll } from '#/api/method/system';
 import { $t } from '#/locales';
 
-export function useUserSearchFormSchema(): VbenFormSchema[] {
+export function useEnterpriseSearchFormSchema(): VbenFormSchema[] {
   return [
     {
       component: 'Input',
@@ -16,37 +14,28 @@ export function useUserSearchFormSchema(): VbenFormSchema[] {
     },
     {
       component: 'Select',
-      fieldName: 'status',
-      label: $t('system.enterprise.type'),
       componentProps: {
+        allowClear: true,
         options: [
-          {
-            label: '煎药企业',
-            value: 1,
-          },
-          {
-            label: '饮片供应商',
-            value: 0,
-          },
-          {
-            label: '物流公司',
-            value: 2,
-          },
+          { label: $t('common.all'), value: null },
+          { label: '煎药企业', value: 1 },
+          { label: '饮片供应商', value: 2 },
+          { label: '物流公司', value: 3 },
         ],
       },
+      fieldName: 'enterpriseType',
+      label: $t('system.enterprise.type'),
     },
   ];
 }
 
-export function useUserTableColumns<T = SystemModel.Organization>(
-  onActionClick?: OnActionClickFn<T>,
-): VxeTableGridOptions<T>['columns'] {
+export function useEnterpriseTableColumns(): VxeTableGridOptions<SystemModel.Enterprise>['columns'] {
   return [
     { type: 'seq', title: $t('table.column.seq'), width: 50 },
     {
       field: 'name',
       title: $t('system.enterprise.name'),
-      minWidth: 100,
+      minWidth: 120,
     },
     {
       field: 'code',
@@ -56,7 +45,7 @@ export function useUserTableColumns<T = SystemModel.Organization>(
     {
       field: 'type',
       title: $t('system.enterprise.type'),
-      minWidth: 100,
+      minWidth: 120,
     },
     {
       field: 'remark',
@@ -65,34 +54,17 @@ export function useUserTableColumns<T = SystemModel.Organization>(
     },
     {
       field: 'createTime',
-      title: $t('system.organization.createTime'),
-      minWidth: 100,
+      title: $t('system.enterprise.createTime'),
+      minWidth: 160,
     },
     {
       field: 'createUser',
-      title: $t('system.organization.createUser'),
+      title: $t('system.enterprise.createUser'),
       minWidth: 100,
     },
-    {
-      align: 'center',
-      // cellRender: {
-      //   attrs: {
-      //     nameField: 'name',
-      //     nameTitle: $t('system.user._'),
-      //     onClick: onActionClick,
-      //   },
-      //   name: 'CellOperation',
-      // },
-      field: 'operation',
-      fixed: 'right',
-      title: $t('table.column.operation'),
-      width: 130,
-    },
   ];
 }
 
-export function useUserFormSchema(
-  current?: Pick<SystemModel.Organization, 'id' | 'name'>,
-): VbenFormSchema[] {
+export function useEnterpriseFormSchema(): VbenFormSchema[] {
   return [];
 }

+ 12 - 65
apps/smart-pharmacy/src/views/system/enterprise/list.vue

@@ -5,8 +5,9 @@ import type { SystemModel } from '#/api';
 import { Page, useVbenModal } from '@vben/common-ui';
 
 import { useVbenVxeGrid } from '#/adapter/vxe-table';
+import { listEnterprisesMethod } from '#/api';
 
-import { useUserSearchFormSchema, useUserTableColumns } from './data';
+import { useEnterpriseSearchFormSchema, useEnterpriseTableColumns } from './data';
 import Form from './modules/form.vue';
 
 const [FormModal, formModalApi] = useVbenModal({
@@ -16,84 +17,30 @@ const [FormModal, formModalApi] = useVbenModal({
 
 const [Grid, gridApi] = useVbenVxeGrid({
   formOptions: {
-    schema: useUserSearchFormSchema(),
+    schema: useEnterpriseSearchFormSchema(),
     submitOnChange: true,
   },
   gridOptions: {
-    columns: useUserTableColumns(),
+    columns: useEnterpriseTableColumns(),
     height: 'auto',
     keepSource: true,
-    // proxyConfig: {
-    //   ajax: {
-    //     query({ page }, formValues) {
-    //       return listOrganizationsMethod(
-    //         page.currentPage,
-    //         page.pageSize,
-    //         formValues,
-    //       );
-    //     },
-    //   },
-    // },
-    // rowConfig: {
-    //   keyField: 'id',
-    // },
-
     proxyConfig: {
       ajax: {
-        query() {
-          return Promise.resolve({
-            Data: {
-              TotalRecordCount: 3,
-
-              Items: [
-                {
-                  pid: '1',
-                  name: '重药控股有限公司',
-                  code: 'cyeast',
-                  createUser: 'createUser',
-                  createTime: '2025-10-26 11:23:21',
-                  type: '煎药企业',
-                  remark: '备注1',
-                },
-                {
-                  pid: '2',
-                  name: '浙江药业公司',
-                  code: 'zjeast',
-                  createUser: 'createUser',
-                  createTime: '2025-10-26 11:23:21',
-                  type: '饮片供应商',
-                  remark: '备注2',
-                },
-                {
-                  pid: '3',
-                  name: '中通快递',
-                  code: 'ztkuaidi',
-                  createUser: 'createUser',
-                  createTime: '2025-10-26 11:23:21',
-                  type: '物流公司',
-                  remark: '备注333',
-                },
-              ],
-            },
-
-            ResultCode: 0,
-          });
+        query({ page }, formValues) {
+          return listEnterprisesMethod(
+            page.currentPage,
+            page.pageSize,
+            formValues,
+          );
         },
       },
-
-      response: {
-        result: 'Data.Items',
-        total: 'Data.TotalRecordCount',
-      },
     },
-
     rowConfig: {
-      keyField: 'pid',
+      keyField: 'id',
     },
-  } as VxeTableGridOptions<SystemModel.User>,
+  } as VxeTableGridOptions<SystemModel.Enterprise>,
 });
 
-// 刷新
 function onRefresh() {
   gridApi.query();
 }

+ 16 - 7
apps/smart-pharmacy/src/views/system/enterprise/modules/form.vue

@@ -10,20 +10,19 @@ import { Button } from 'ant-design-vue';
 import { useVbenForm } from '#/adapter/form';
 import { $t } from '#/locales';
 
-import { useUserFormSchema } from '../data';
+import { useEnterpriseFormSchema } from '../data';
 
 const emit = defineEmits(['success']);
 
-const formData = ref<SystemModel.Organization>();
+const formData = ref<SystemModel.Enterprise>();
 const getTitle = computed(() => {
   return formData.value?.id
-    ? $t('ui.actionTitle.edit', [$t('system.organization._')])
-    : $t('ui.actionTitle.create', [$t('system.organization._')]);
+    ? $t('ui.actionTitle.edit', [$t('system.enterprise._')])
+    : $t('ui.actionTitle.create', [$t('system.enterprise._')]);
 });
 
 const [Form, formApi] = useVbenForm({
-  // layout: 'vertical',
-  schema: useUserFormSchema(),
+  schema: useEnterpriseFormSchema(),
   showDefaultActions: false,
 });
 
@@ -32,7 +31,17 @@ function resetForm() {
   formApi.setValues(formData.value || {});
 }
 
-const [Modal, modalApi] = useVbenModal({});
+const [Modal, modalApi] = useVbenModal({
+  onOpenChange(isOpen) {
+    if (isOpen) {
+      const data = modalApi.getData<SystemModel.Enterprise>();
+      if (data) {
+        formData.value = data;
+        formApi.setValues(formData.value);
+      }
+    }
+  },
+});
 </script>
 
 <template>