datasource.config.ts 2.93 KB
import { getCameraList } from '/@/api/camera/cameraManager';
import { CameraModel } from '/@/api/camera/model/cameraModel';
import { FormSchema } from '/@/components/Form';

export enum FormFieldEnum {
  VIDEO_TYPE = 'type',
  VIDEO_PLAY_URL = 'url',
  VIDEO_CONFIG = 'videoConfig',
  ACCESS_MODE = 'accessMode',
  VIDEO_ID = 'id',
  ORGANIZATION_ID = 'organizationId',
}

export interface DataSourceValueType {
  [FormFieldEnum.VIDEO_TYPE]?: string;
  [FormFieldEnum.VIDEO_PLAY_URL]?: string;
  [FormFieldEnum.ACCESS_MODE]?: number;
  [FormFieldEnum.VIDEO_ID]?: string;
  [FormFieldEnum.ORGANIZATION_ID]?: string;
}

export enum VideoOriginalEnum {
  CUSTOM = 'CUSTOM',
  VIDEO_MANAGE = 'VIDEO_MANAGE',
}

export enum VideoOriginalNameEnum {
  CUSTOM = '自定义',
  VIDEO_MANAGE = '流媒体获取',
}

export const formSchemas: FormSchema[] = [
  {
    field: FormFieldEnum.VIDEO_TYPE,
    component: 'Select',
    label: '视频来源',
    colProps: { span: 8 },
    defaultValue: VideoOriginalEnum.CUSTOM,
    componentProps: {
      placeholder: '请选择视频来源',
      options: [
        { label: VideoOriginalNameEnum[VideoOriginalEnum.CUSTOM], value: VideoOriginalEnum.CUSTOM },
        {
          label: VideoOriginalNameEnum[VideoOriginalEnum.VIDEO_MANAGE],
          value: VideoOriginalEnum.VIDEO_MANAGE,
        },
      ],
    },
  },
  {
    field: FormFieldEnum.ACCESS_MODE,
    component: 'InputNumber',
    label: '视频流获取方式',
    show: false,
  },
  {
    field: FormFieldEnum.VIDEO_PLAY_URL,
    component: 'Input',
    label: '地址',
    colProps: { span: 16 },
    ifShow: ({ model }) => model[FormFieldEnum.VIDEO_TYPE] === VideoOriginalEnum.CUSTOM,
    componentProps: {
      placeholder: '请输入自定义地址',
    },
  },
  {
    field: FormFieldEnum.ORGANIZATION_ID,
    component: 'OrgTreeSelect',
    label: '组织',
    colProps: { span: 8 },
    ifShow: ({ model }) => model[FormFieldEnum.VIDEO_TYPE] === VideoOriginalEnum.VIDEO_MANAGE,
    componentProps: {
      showCreate: false,
      allowClean: true,
    },
  },
  {
    field: FormFieldEnum.VIDEO_ID,
    component: 'ApiSelect',
    label: '地址',
    colProps: { span: 8 },
    ifShow: ({ model }) => model[FormFieldEnum.VIDEO_TYPE] === VideoOriginalEnum.VIDEO_MANAGE,
    componentProps: ({ formActionType, formModel }) => {
      const { setFieldsValue } = formActionType;
      const organizationId = formModel[FormFieldEnum.ORGANIZATION_ID];
      return {
        placeholder: '请选择视频',
        params: { organizationId },
        api: getCameraList,
        labelField: 'name',
        valueField: 'id',
        resultField: 'data',
        onChange(value: string, options: CameraModel) {
          console.log(options);
          setFieldsValue({
            [FormFieldEnum.ACCESS_MODE]: value ? (options || {}).accessMode : null,
            [FormFieldEnum.VIDEO_PLAY_URL]: value ? (options || {}).videoUrl : null,
          });
        },
      };
    },
  },
];