index.ts 6.6 KB
import { BasicColumn, BasicTableProps, FormSchema } from '/@/components/Table';
import moment from 'moment';
import { h } from 'vue';
import { useI18n } from '/@/hooks/web/useI18n';

const { t } = useI18n(); // 加载国际化
import { DeviceTypeEnum } from '../../../dataFlow/cpns/config';

//业务权限配置
export enum PermissionConvertScriptEnum {
  PERMISSION_POST = 'api:yt:js:post',
  PERMISSION_DELETE = 'api:yt:js:delete',
  PERMISSION_TEST = 'api:yt:js:test',
  PERMISSION_UPDATE = 'api:yt:js:update',
  PERMISSION_UPDATE_STATUS = 'api:yt:js:update:status',
}

//业务文字描述配置
export enum BusinessConvertScriptTextEnum {
  BUSINESS_ENABLE_SUCCESS = t('rule.script.index.enableSuccess') as any as number,
  BUSINESS_DISABLE_SUCCESS = t('rule.script.index.disableSuccess') as any as number,
  BUSINESS_ADD_TEXT = t('rule.script.index.add') as any as number,
  BUSINESS_DELETE_TEXT = t('rule.script.index.batchDelete') as any as number,
  BUSINESS_VIEW_TEXT = t('rule.script.index.view') as any as number,
  BUSINESS_TEST_TEXT = t('rule.script.index.test') as any as number,
  BUSINESS_EDIT_TEXT = t('rule.script.index.edit') as any as number,
  BUSINESS_SUBMIT_TEXT = t('rule.script.index.confirm') as any as number,
}

//业务脚本类型枚举
export enum ScriptTypeEnum {
  //上行脚本
  TRANSPORT_TCP_UP = 'TRANSPORT_TCP_UP',
  //设备鉴权
  TRANSPORT_TCP_AUTH = 'TRANSPORT_TCP_AUTH',
}

//Ace编辑器通用配置
export const aceEditorAttribtes = {
  maxLines: 16, // 最大行数,超过会自动出现滚动条
  minLines: 12, // 最小行数,还未到最大行数时,编辑器会自动伸缩大小
  fontSize: 14, // 编辑器内字体大小
  theme: 'ace/theme/chrome', // 默认设置的主题
  mode: 'ace/mode/javascript', // 默认设置的语言模式
  tabSize: 2, // 制表符设置为 4 个空格大小
};

export const aceEditorOptions = {
  enableBasicAutocompletion: true,
  enableLiveAutocompletion: true,
  enableSnippets: true,
  enableEmmet: true,
};

export const scriptTypeInfo = {
  TRANSPORT_TCP_UP: '上行数据解析',
  TRANSPORT_TCP_AUTH: '设备鉴权',
};

// 表格配置
export const columns: BasicColumn[] = [
  {
    title: t('rule.script.index.name'),
    dataIndex: 'name',
    width: 80,
  },
  {
    title: t('rule.script.index.status'),
    dataIndex: 'status',
    width: 120,
    slots: { customRender: 'status' },
  },
  {
    title: t('rule.script.index.convertJs'),
    dataIndex: 'convertJs',
    width: 120,
    slots: { customRender: 'convertJs' },
  },
  {
    title: t('rule.script.index.scriptType'),
    dataIndex: 'serviceType',
    width: 120,
    format: (values) => {
      return values === DeviceTypeEnum.GATEWAY
        ? t('common.deviceType.gateway')
        : values == DeviceTypeEnum.DIRECT_CONNECTION
        ? t('common.deviceType.direct')
        : values === DeviceTypeEnum.SENSOR
        ? t('common.deviceType.sensor')
        : '';
    },
  },
  {
    title: t('rule.script.index.description'),
    dataIndex: 'description',
    width: 120,
  },
  {
    title: t('rule.script.index.createTime'),
    dataIndex: 'createTime',
    width: 180,
  },
];

//表格通用属性配置
export const defaultTableAttribtes: BasicTableProps = {
  columns,
  title: t('rule.script.index.title'),
  showIndexColumn: false,
  clickToRowSelect: false,
  // useSearchForm: true,
  showTableSetting: true,
  bordered: true,
  rowKey: 'id',
  actionColumn: {
    width: 200,
    title: t('rule.script.index.action'),
    dataIndex: 'action',
    slots: { customRender: 'action' },
    fixed: 'right',
  },
};

// 表格查询配置
export const searchFormSchema: FormSchema[] = [
  {
    field: 'name',
    label: t('rule.script.index.name'),
    component: 'Input',
    colProps: { span: 6 },
    componentProps: {
      maxLength: 36,
      placeholder: t('rule.script.index.pleaseInputConfigurationName'),
    },
  },
  {
    field: 'sendTime',
    label: t('rule.script.index.createTime'),
    component: 'RangePicker',
    componentProps: {
      showTime: {
        defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')],
      },
    },
    colProps: { span: 6 },
  },
];

//示例配置
export const defaultAuthTitle = h('div', { style: 'background:#404040' }, [
  h('h3', { style: 'color:white' }, '设备鉴权示例'),
  h('h3', { style: 'color:white' }, '输入参数:为16进制字符串'),
  h('h3', { style: 'color:white' }, '输出参数:{"password":"","success":""}'),
  h('h3', { style: 'color:white' }, 'password为设备鉴权信息,success为鉴权成功后响应给设备的内容'),
]);

export const defaultUpTitle = h('div', { style: 'background:#404040' }, [
  h('h3', { style: 'color:white' }, '上行数据解析示例'),
  h('h3', { style: 'color:white' }, '输入参数:为字符串'),
  h(
    'h3',
    { style: 'color:white' },
    `输出参数:{"datas":{"source":""},"telemetry":true,"ackMsg":"","deviceName":"","ts":1681701034289}`
  ),
  h(
    'h3',
    { style: 'color:white' },
    `datas:json对象,属性名为遥测指标或子设备名称
  telemetry:  datas内容是否为遥测数据
  ackMsg:  响应给设备的确认消息
  deviceName:  设备名称
  ts:  数据采集时间`
  ),
]);

//用例配置
export const defaultScriptTypeContent = {
  TRANSPORT_TCP_UP: `/*网关上行脚本*/
var teleData = {};
/*物模型数据(可选):原始数据*/
teleData.source = params;
/*网关设备:slaveDevice是网关子设备的“设备标识”*/
slaveDevice = params.substr(0, 2);
teleData[slaveDevice] = params;
out.datas = teleData;
out.telemetry = true;
/*必填:true表示设备上报的遥测数据,false表示命令下发的响应数据*/
  `,
  TRANSPORT_TCP_AUTH: `/*必填:设备的访问令牌*/
out.password = params;
/*选填:设备鉴权成功后响应给设备的信息*/
out.success = params;
  `,
};

export const defaultTestUpExample = defaultScriptTypeContent['TRANSPORT_TCP_UP'];

export const defaultTestAuthExample = defaultScriptTypeContent['TRANSPORT_TCP_AUTH'];

export const defaultTestSubGatewayUpExample = `/*params为TCP上报的标准ModBus数据,实际使用或测试时请删除*/
var params = "010304026C00883BF0"
var teleData = {};
/*物模型数据(可选):原始数据*/
teleData.source = params;
/*直连设备:tempVal是产品物模型中所定义属性的标识符*/
tempVal = params;
/*物模型温度标识符*/
teleData.temperature = (parseInt('0x'+tempVal.substr(10, 4))*0.1).toFixed(2);
/*物模型湿度标识符*/
teleData.humidity = (parseInt('0x'+tempVal.substr(6, 4))*0.1).toFixed(2);
out.datas = teleData;
/*必填:true表示设备上报的遥测数据,false表示命令下发的响应数据*/
out.telemetry = true;`;