data.ts 6.13 KB
import {FormSchema as BFormSchema, useComponentRegister} from "../../../../components/Form";
import {useI18n} from "/@/hooks/web/useI18n";
const { t } = useI18n();
import { CategoryTreeSelect } from '../../../common/CategoryTreeSelect';
import { OrgTreeSelect } from '../../../common/OrgTreeSelect';
import {supplierListPull} from "/@/api/equipment/supplier";
import {uploadThumbnail} from "/@/api/configuration/center/configurationCenter";
import {createImgPreview} from "/@/components/Preview";
useComponentRegister('OrgTreeSelect', OrgTreeSelect);
useComponentRegister('CategoryTreeSelect', CategoryTreeSelect);
const statusOptions = [
  { label: t('equipment.ledger.NORMAL'), value: 'NORMAL' },
  { label: t('equipment.ledger.FAULT'), value: 'FAULT' },
  { label: t('equipment.ledger.SCRAP'), value: 'SCRAP' },
];
export function getFormSchema(isTargetTenant: boolean): BFormSchema[] {
  const codeLabel = isTargetTenant ? '设备位号' : t('equipment.ledger.nameCode');

  const schema: BFormSchema[] = [
    {
      field: 'image',
      label: t('deviceManagement.product.imageText'),
      component: 'ApiUpload',
      changeEvent: 'update:fileList',
      valueField: 'fileList',
      componentProps: ({ formModel }) => {
        return {
          listType: 'picture-card',
          maxFileLimit: 1,
          accept: '.png,.jpg,.jpeg,.gif',
          api: async (file: File) => {
            try {
              const formData = new FormData();
              formData.set('file', file);
              const { fileStaticUri, fileName } = await uploadThumbnail(formData);
              return {
                uid: fileStaticUri,
                name: fileName,
                url: fileStaticUri,
              };
            } catch (error) {
              return {};
            }
          },
          onPreview: (fileList) => {
            createImgPreview({ imageList: [fileList.url!] });
          },
          onDelete(url: string) {
            formModel.deleteUrl = url!;
          },
        };
      },
    },
    {
      field: 'code',
      label: codeLabel,
      component: 'Input',
      colProps: { span: 24 },
      required: true,
      componentProps: {
        maxLength: 20,
      },
    },
    {
      field: 'name',
      label: t('equipment.ledger.deviceName'),
      component: 'Input',
      colProps: { span: 24 },
      required: true,
      componentProps: {
        maxLength: 20,
      },
    },
    {
      field: 'categoryId',
      label: t('equipment.category.categoryText'),
      colProps: { span: 24 },
      component: 'CategoryTreeSelect',
      required: true,
    },
    {
      field: 'status',
      component: 'Select',
      label: t('equipment.ledger.status'),
      required: true,
      colProps: { span: 24 },
      defaultValue: 'NORMAL',
      componentProps: {
        options: statusOptions,
      },
    },
    {
      field: 'isOnline',
      component: 'Select',
      label: '是否联网',
      required: true,
      colProps: { span: 24 },
      componentProps: {
        options: [
          {
            label: '是',
            value: true,
          },
          {
            label: '否',
            value: false,
          },
        ],
      },
    },
    {
      field: 'brand',
      label: t('equipment.ledger.brandText'),
      component: 'Input',
      colProps: { span: 24 },
      componentProps: {
        maxLength: 20,
      },
    },
    {
      field: 'modelNum',
      label: t('equipment.ledger.modelNumText'),
      component: 'Input',
      colProps: { span: 24 },
      componentProps: {
        maxLength: 20,
      },
    },
    {
      field: 'specifications',
      label: t('equipment.ledger.specificationsText'),
      component: 'Input',
      colProps: { span: 24 },
      componentProps: {
        maxLength: 20,
      },
    },
    {
      field: 'specifications',
      label: t('equipment.ledger.manufacturerText'),
      component: 'Input',
      colProps: { span: 24 },
      componentProps: {
        maxLength: 20,
      },
    },
    {
      field: 'buyDate',
      label: t('equipment.ledger.buyDate'),
      component: 'DatePicker',
      colProps: { span: 24 },
      componentProps: {
        format: 'YYYY-MM-DD hh:mm:ss', // 设置日期格式
        showTime: true, // 显示时间选择器
      },
    },
    {
      field: 'price',
      label: t('equipment.ledger.priceText'),
      component: 'InputNumber',
      colProps: { span: 24 },
      componentProps: {},
    },
    {
      field: 'productDate',
      label: t('equipment.ledger.productDate'),
      component: 'DatePicker',
      colProps: { span: 24 },
      componentProps: {
        format: 'YYYY-MM-DD hh:mm:ss', // 设置日期格式
        showTime: true, // 显示时间选择器
      },
    },
    {
      field: 'receiveDate',
      label: t('equipment.ledger.receiveDate'),
      component: 'DatePicker',
      colProps: { span: 24 },
      componentProps: {
        format: 'YYYY-MM-DD hh:mm:ss', // 设置日期格式
        showTime: true, // 显示时间选择器
      },
    },
    {
      field: 'registeDate',
      label: t('equipment.ledger.registeDate'),
      component: 'DatePicker',
      colProps: { span: 24 },
      componentProps: {
        format: 'YYYY-MM-DD hh:mm:ss', // 设置日期格式
        showTime: true, // 显示时间选择器
      },
    },
    {
      field: 'supplierId',
      component: 'ApiSelect',
      label: '供应商',
      colProps: { span: 24 },
      required: true,
      componentProps: ({}) => {
        return {
          api: supplierListPull,
          params: {},
          labelField: 'name',
          valueField: 'id',
          getPopupContainer: () => document.body,
        };
      },
    },
    {
      field: 'description',
      label: t('equipment.ledger.description'),
      component: 'InputTextArea',
      colProps: { span: 24 },
      componentProps: {
        maxLength: 200,
      },
    },
  ];

  if (isTargetTenant) {
    schema.splice(schema.length - 1, 0, {
      field: 'techFeature',
      label: '主要技术特征',
      component: 'InputTextArea',
      colProps: { span: 24 },
      componentProps: {
        rows: 4,
        maxLength: 2000,
      },
    });
  }

  return schema;
}