diff --git a/src/api/erp/product/unit/index.ts b/src/api/erp/product/unit/index.ts index 1e1c8ac..58cc54e 100644 --- a/src/api/erp/product/unit/index.ts +++ b/src/api/erp/product/unit/index.ts @@ -4,6 +4,9 @@ import request from '@/config/axios' export interface ProductUnitVO { id: number // 单位编号 name: string // 单位名字 + primaryFlag: string // 是否主单位 + primaryId: number // 关联主单位id + changeRate: number // 换算比例 status: number // 单位状态 } @@ -42,5 +45,15 @@ export const ProductUnitApi = { // 导出产品单位 Excel exportProductUnit: async (params) => { return await request.download({ url: `/erp/product-unit/export-excel`, params }) - } + }, + + // 获得产品单位列表 + getProductUnitList: async () => { + return await request.get({ url: `/erp/product-unit/list`}) + }, + + // 获得产品主单位列表 + getProductUnitListByFlag: async () => { + return await request.get({ url: `/erp/product-unit/flag-list`}) + }, } diff --git a/src/api/iot/device/device/index.ts b/src/api/iot/device/device/index.ts deleted file mode 100644 index cf9f6d6..0000000 --- a/src/api/iot/device/device/index.ts +++ /dev/null @@ -1,184 +0,0 @@ -import request from '@/config/axios' - -// IoT 设备 VO -export interface DeviceVO { - id: number // 设备 ID,主键,自增 - deviceName: string // 设备名称 - productId: number // 产品编号 - productName?: string // 产品名称(只有部分接口返回,例如 getDeviceLocationList) - productKey: string // 产品标识 - deviceType: number // 设备类型 - nickname: string // 设备备注名称 - gatewayId: number // 网关设备 ID - state: number // 设备状态 - onlineTime: Date // 最后上线时间 - offlineTime: Date // 最后离线时间 - activeTime: Date // 设备激活时间 - createTime: Date // 创建时间 - ip: string // 设备的 IP 地址 - firmwareVersion: string // 设备的固件版本 - deviceSecret: string // 设备密钥,用于设备认证,需安全存储 - mqttClientId: string // MQTT 客户端 ID - mqttUsername: string // MQTT 用户名 - mqttPassword: string // MQTT 密码 - latitude?: number // 设备位置的纬度 - longitude?: number // 设备位置的经度 - areaId: number // 地区编码 - address: string // 设备详细地址 - serialNumber: string // 设备序列号 - config: string // 设备配置 - groupIds?: number[] // 添加分组 ID -} - -// IoT 设备属性详细 VO -export interface IotDevicePropertyDetailRespVO { - identifier: string // 属性标识符 - value: string // 最新值 - updateTime: Date // 更新时间 - name: string // 属性名称 - dataType: string // 数据类型 - dataSpecs: any // 数据定义 - dataSpecsList: any[] // 数据定义列表 -} - -// IoT 设备属性 VO -export interface IotDevicePropertyRespVO { - identifier: string // 属性标识符 - value: string // 最新值 - updateTime: Date // 更新时间 -} - -// 设备认证参数 VO -export interface IotDeviceAuthInfoVO { - clientId: string // 客户端 ID - username: string // 用户名 - password: string // 密码 -} - -// IoT 设备发送消息 Request VO -export interface IotDeviceMessageSendReqVO { - deviceId: number // 设备编号 - method: string // 请求方法 - params?: any // 请求参数 -} - -// 设备 API -export const DeviceApi = { - // 查询设备分页 - getDevicePage: async (params: any) => { - return await request.get({ url: `/iot/device/page`, params }) - }, - - // 查询设备详情 - getDevice: async (id: number) => { - return await request.get({ url: `/iot/device/get?id=` + id }) - }, - - // 新增设备 - createDevice: async (data: DeviceVO) => { - return await request.post({ url: `/iot/device/create`, data }) - }, - - // 修改设备 - updateDevice: async (data: DeviceVO) => { - return await request.put({ url: `/iot/device/update`, data }) - }, - - // 修改设备分组 - updateDeviceGroup: async (data: { ids: number[]; groupIds: number[] }) => { - return await request.put({ url: `/iot/device/update-group`, data }) - }, - - // 删除单个设备 - deleteDevice: async (id: number) => { - return await request.delete({ url: `/iot/device/delete?id=` + id }) - }, - - // 删除多个设备 - deleteDeviceList: async (ids: number[]) => { - return await request.delete({ url: `/iot/device/delete-list`, params: { ids: ids.join(',') } }) - }, - - // 导出设备 - exportDeviceExcel: async (params: any) => { - return await request.download({ url: `/iot/device/export-excel`, params }) - }, - - // 获取设备数量 - getDeviceCount: async (productId: number) => { - return await request.get({ url: `/iot/device/count?productId=` + productId }) - }, - - // 获取设备的精简信息列表 - getSimpleDeviceList: async (deviceType?: number, productId?: number) => { - return await request.get({ url: `/iot/device/simple-list?`, params: { deviceType, productId } }) - }, - - // 获取设备位置列表(用于地图展示) - getDeviceLocationList: async () => { - return await request.get({ url: `/iot/device/location-list` }) - }, - - // 根据产品编号,获取设备的精简信息列表 - getDeviceListByProductId: async (productId: number) => { - return await request.get({ url: `/iot/device/simple-list?`, params: { productId } }) - }, - - // 获取导入模板 - importDeviceTemplate: async () => { - return await request.download({ url: `/iot/device/get-import-template` }) - }, - - // 获取设备属性最新数据 - getLatestDeviceProperties: async (params: any) => { - return await request.get({ url: `/iot/device/property/get-latest`, params }) - }, - - // 获取设备属性历史数据 - getHistoryDevicePropertyList: async (params: any) => { - return await request.get({ url: `/iot/device/property/history-list`, params }) - }, - - // 获取设备认证信息 - getDeviceAuthInfo: async (id: number) => { - return await request.get({ url: `/iot/device/get-auth-info`, params: { id } }) - }, - - // 查询设备消息分页 - getDeviceMessagePage: async (params: any) => { - return await request.get({ url: `/iot/device/message/page`, params }) - }, - - // 查询设备消息配对分页 - getDeviceMessagePairPage: async (params: any) => { - return await request.get({ url: `/iot/device/message/pair-page`, params }) - }, - - // 发送设备消息 - sendDeviceMessage: async (params: IotDeviceMessageSendReqVO) => { - return await request.post({ url: `/iot/device/message/send`, data: params }) - }, - - // 绑定子设备到网关 - bindDeviceGateway: async (data: { subIds: number[]; gatewayId: number }) => { - return await request.put({ url: `/iot/device/bind-gateway`, data }) - }, - - // 解绑子设备与网关 - unbindDeviceGateway: async (data: { subIds: number[]; gatewayId: number }) => { - return await request.put({ url: `/iot/device/unbind-gateway`, data }) - }, - - // 获取网关的子设备列表 - getSubDeviceList: async (gatewayId: number) => { - return await request.get({ - url: `/iot/device/sub-device-list`, - params: { gatewayId } - }) - }, - - // 获取未绑定网关的子设备分页 - getUnboundSubDevicePage: async (params: any) => { - return await request.get({ url: `/iot/device/unbound-sub-device-page`, params }) - } -} diff --git a/src/api/iot/device/group/index.ts b/src/api/iot/device/group/index.ts deleted file mode 100644 index 4debe8b..0000000 --- a/src/api/iot/device/group/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import request from '@/config/axios' - -// IoT 设备分组 VO -export interface DeviceGroupVO { - id: number // 分组 ID - name: string // 分组名字 - status: number // 分组状态 - description: string // 分组描述 - deviceCount?: number // 设备数量 -} - -// IoT 设备分组 API -export const DeviceGroupApi = { - // 查询设备分组分页 - getDeviceGroupPage: async (params: any) => { - return await request.get({ url: `/iot/device-group/page`, params }) - }, - - // 查询设备分组详情 - getDeviceGroup: async (id: number) => { - return await request.get({ url: `/iot/device-group/get?id=` + id }) - }, - - // 新增设备分组 - createDeviceGroup: async (data: DeviceGroupVO) => { - return await request.post({ url: `/iot/device-group/create`, data }) - }, - - // 修改设备分组 - updateDeviceGroup: async (data: DeviceGroupVO) => { - return await request.put({ url: `/iot/device-group/update`, data }) - }, - - // 删除设备分组 - deleteDeviceGroup: async (id: number) => { - return await request.delete({ url: `/iot/device-group/delete?id=` + id }) - }, - - // 获取设备分组的精简信息列表 - getSimpleDeviceGroupList: async () => { - return await request.get({ url: `/iot/device-group/simple-list` }) - } -} diff --git a/src/api/iot/device/index.ts b/src/api/iot/device/index.ts new file mode 100644 index 0000000..3e85b97 --- /dev/null +++ b/src/api/iot/device/index.ts @@ -0,0 +1,202 @@ +import request from '@/config/axios' +import qs from 'qs' + +// 物联设备 VO +export interface DeviceVO { + id: number // ID + deviceCode: string // 设备编号 + deviceName: string // 设备名称 + deviceType: string // 设备类型 + status: string // 状态 + isConnect?: string | number + operatingStatus?: string | number + readTopic: string // 读主题 + writeTopic: string // 写主题 + gatewayId: number // 网关id + deviceBrandId: number // 设备品牌id + offLineDuration: number // 离线间隔 + lastOnlineTime: Date // 最后上线时间 + remark: string // 备注 + isEnable: boolean // 是否启用 + deviceModelId: number // 关联设备模型 + protocol: string // 通讯协议 + sampleCycle: number // 采集周期 + url: string // 端点url + username: string // 用户名 + password: string // 密码 + certificate?: string // 证书 + secretKey?: string // 秘钥 + collectionTime?: string | number +} + +export interface DeviceConnectParams { + id: string | number + isConnect: string | number +} + +export interface LineDeviceVO { + id?: string | number + lineNode?: string + lineName?: string + deviceCode?: string + deviceName?: string + status?: string | number + collectionTime?: string | number +} + +export interface LineDevicePageParams { + pageNo: number + pageSize: number + id?: string | number + lineNode?: string + lineName?: string + deviceCode?: string + deviceName?: string + status?: string | number + collectionTime?: string | number + collectionTimeStart?: string + collectionTimeEnd?: string +} + +export interface SingleDeviceParams { + deviceId: string | number +} + +export interface HistoryRecordParams { + deviceId: string | number + collectionStartTime?: string + collectionEndTime?: string + attributeCodes?: string[] +} + +export interface DeviceContactModelVO { + id: number + attributeCode?: string + attributeName?: string + attributeType?: string + dataType?: string + dataUnit?: string +} + + +// 物联设备 API +export const DeviceApi = { + // 查询物联设备分页 + getDevicePage: async (params: any) => { + return await request.get({ url: `/iot/device/page`, params }) + }, +// 查询物联设备 + getDeviceList: async () => { + return await request.get({ url: `/iot/device/deviceList` }) + }, + // 查询物联设备详情 + getDevice: async (id: number) => { + return await request.get({ url: `/iot/device/get?id=` + id }) + }, + getDeviceListByNoUsed: async () => { + return await request.get({ url: `/iot/device/noUsedlist` }) + }, + getDeviceList2ByNoUsed: async (id: number) => { + return await request.get({ url: `/iot/device/noUsedlist2?id=` + id }) + }, + // 新增物联设备 + createDevice: async (data: DeviceVO) => { + return await request.post({ url: `/iot/device/create`, data }) + }, + + // 批量获取设备属性列表 + getDeviceAttributeBatchList: async (params: { goviewId: number | string; orgId?: number | string }) => { + return await request.get({ url: `/iot/device/device-attribute/batchList`, params }) + }, + // 修改物联设备 + updateDevice: async (data: DeviceVO) => { + return await request.put({ url: `/iot/device/update`, data }) + }, + + // 删除物联设备 + deleteDevice: async (ids: string) => { + return await request.delete({ url: `/iot/device/delete?ids=` + ids }) + }, + + // 复制物联设备 + copyDevice: async (id: number) => { + return await request.post({ url: `/iot/device/copy`, params: { id } }) + }, + + connectDevice: async (params: DeviceConnectParams) => { + return await request.post({ url: `/iot/device/connect`, data: params }) + }, + + // 导出物联设备 Excel + exportDevice: async (params) => { + return await request.download({ url: `/iot/device/export-excel`, params }) + }, + + exportLineDevice: async (params) => { + return await request.download({ url: `/iot/device/export-line-device`, params }) + }, + + getLineDevicePage: async (params: LineDevicePageParams) => { + return await request.get({ url: `/iot/device/lineDevicePage`, params }) + }, + + getSingleDevice: async (params: SingleDeviceParams) => { + return await request.get({ url: `/iot/device/singleDevice`, params }) + }, + + getHistoryRecord: async (params: HistoryRecordParams) => { + return await request.get({ + url: `/iot/device/historyRecord`, + params, + paramsSerializer: (p) => qs.stringify(p, { allowDots: true, arrayFormat: 'repeat' }) + }) + }, + + devicePointList: async () => { + return await request.get({ url: `/iot/device/devicePointList` }) + }, + + updateDeviceEnabled: async (id: number | string, enabled: string) => { + const data = { id, enabled } + return await request.put({ url: `/iot/device/update-enabled`, data }) + }, + +// ==================== 子表(设备属性) ==================== + + // 获得设备属性分页 + getDeviceAttributePage: async (params) => { + return await request.get({ url: `/iot/device/device-attribute/page`, params }) + }, + // 获得设备属性列表 + getDeviceAttributeList: async (deviceId: number | string) => { + return await request.get({ url: `/iot/device/device-attribute/list?deviceId=` + deviceId }) + }, + + getDeviceContactModelPage: async () => { + return await request.get({ url: `/iot/device-contact-model/page` }) + }, + // 新增设备属性 + createDeviceAttribute: async (data) => { + return await request.post({ url: `/iot/device-contact-model/create`, data }) + }, + + // 修改设备属性 + updateDeviceAttribute: async (data) => { + return await request.put({ url: `/iot/device-contact-model/update`, data }) + }, + + // 删除设备属性 + deleteDeviceAttribute: async (ids: string) => { + return await request.delete({ url: `/iot/device-contact-model/delete?ids=` + ids }) + }, + + // 导出设备属性 Excel + exportDeviceContactModel: async (params) => { + return await request.download({ url: `/iot/device-contact-model/export-excel`, params }) + }, + + // 获得设备属性 + getDeviceAttribute: async (id: number) => { + return await request.get({ url: `/iot/device-contact-model/get?id=` + id }) + } +} diff --git a/src/api/iot/device/modbus/config/index.ts b/src/api/iot/device/modbus/config/index.ts deleted file mode 100644 index 7db9e69..0000000 --- a/src/api/iot/device/modbus/config/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import request from '@/config/axios' - -/** Modbus 连接配置 VO */ -export interface DeviceModbusConfigVO { - id?: number // 主键 - deviceId: number // 设备编号 - ip: string // Modbus 服务器 IP 地址 - port: number // Modbus 服务器端口 - slaveId: number // 从站地址 - timeout: number // 连接超时时间,单位:毫秒 - retryInterval: number // 重试间隔,单位:毫秒 - mode: number // 模式 - frameFormat: number // 帧格式 - status: number // 状态 -} - -/** Modbus 连接配置 API */ -export const DeviceModbusConfigApi = { - /** 获取设备的 Modbus 连接配置 */ - getModbusConfig: async (deviceId: number) => { - return await request.get({ - url: `/iot/device-modbus-config/get`, - params: { deviceId } - }) - }, - - /** 保存 Modbus 连接配置 */ - saveModbusConfig: async (data: DeviceModbusConfigVO) => { - return await request.post({ url: `/iot/device-modbus-config/save`, data }) - } -} diff --git a/src/api/iot/device/modbus/point/index.ts b/src/api/iot/device/modbus/point/index.ts deleted file mode 100644 index 0ae51bb..0000000 --- a/src/api/iot/device/modbus/point/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -import request from '@/config/axios' - -/** Modbus 点位配置 VO */ -export interface DeviceModbusPointVO { - id?: number // 主键 - deviceId: number // 设备编号 - thingModelId?: number // 物模型属性编号 - identifier: string // 属性标识符 - name: string // 属性名称 - functionCode?: number // Modbus 功能码 - registerAddress?: number // 寄存器起始地址 - registerCount?: number // 寄存器数量 - byteOrder?: string // 字节序 - rawDataType?: string // 原始数据类型 - scale: number // 缩放因子 - pollInterval: number // 轮询间隔,单位:毫秒 - status: number // 状态 -} - -/** Modbus 点位配置 API */ -export const DeviceModbusPointApi = { - /** 获取设备的 Modbus 点位分页 */ - getModbusPointPage: async (params: any) => { - return await request.get({ url: `/iot/device-modbus-point/page`, params }) - }, - - /** 获取 Modbus 点位详情 */ - getModbusPoint: async (id: number) => { - return await request.get({ - url: `/iot/device-modbus-point/get?id=${id}` - }) - }, - - /** 创建 Modbus 点位配置 */ - createModbusPoint: async (data: DeviceModbusPointVO) => { - return await request.post({ url: `/iot/device-modbus-point/create`, data }) - }, - - /** 更新 Modbus 点位配置 */ - updateModbusPoint: async (data: DeviceModbusPointVO) => { - return await request.put({ url: `/iot/device-modbus-point/update`, data }) - }, - - /** 删除 Modbus 点位配置 */ - deleteModbusPoint: async (id: number) => { - return await request.delete({ url: `/iot/device-modbus-point/delete?id=${id}` }) - } -} diff --git a/src/api/iot/deviceattributetype/index.ts b/src/api/iot/deviceattributetype/index.ts new file mode 100644 index 0000000..ec15489 --- /dev/null +++ b/src/api/iot/deviceattributetype/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +// 采集点分类 VO +export interface DeviceAttributeTypeVO { + id: number // ID + code: string // 分类编码 + name: string // 分类名称 + sort: number // 分类顺序 + remark: string // 备注 +} + +// 采集点分类 API +export const DeviceAttributeTypeApi = { + // 查询采集点分类分页 + getDeviceAttributeTypePage: async (params: any) => { + return await request.get({ url: `/iot/device-attribute-type/page`, params }) + }, + + // 查询采集点分类详情 + getDeviceAttributeType: async (id: number) => { + return await request.get({ url: `/iot/device-attribute-type/get?id=` + id }) + }, + + // 新增采集点分类 + createDeviceAttributeType: async (data: DeviceAttributeTypeVO) => { + return await request.post({ url: `/iot/device-attribute-type/create`, data }) + }, + + // 修改采集点分类 + updateDeviceAttributeType: async (data: DeviceAttributeTypeVO) => { + return await request.put({ url: `/iot/device-attribute-type/update`, data }) + }, + + // 删除采集点分类 + deleteDeviceAttributeType: async (ids: string) => { + return await request.delete({ url: `/iot/device-attribute-type/delete?ids=` + ids }) + }, + + // 导出采集点分类 Excel + exportDeviceAttributeType: async (params) => { + return await request.download({ url: `/iot/device-attribute-type/export-excel`, params }) + }, + + // 获得采集点分类列表 + getDeviceAttributeTypeList: async () => { + return await request.get({ url: `/iot/device-attribute-type/list` }) + }, +} diff --git a/src/api/iot/devicemodel/index.ts b/src/api/iot/devicemodel/index.ts new file mode 100644 index 0000000..566414a --- /dev/null +++ b/src/api/iot/devicemodel/index.ts @@ -0,0 +1,53 @@ +import request from '@/config/axios' + +// 采集设备模型 VO +export interface DeviceModelVO { + id: number // ID + code: string // 分类编码 + name: string // 分类名称 + protocol: string // 通讯协议 + remark: string // 备注 +} + +// 采集设备模型 API +export const DeviceModelApi = { + // 查询采集设备模型分页 + getDeviceModelPage: async (params: any) => { + return await request.get({ url: `/iot/device-model/page`, params }) + }, + + // 查询采集设备模型详情 + getDeviceModel: async (id: number) => { + return await request.get({ url: `/iot/device-model/get?id=` + id }) + }, + + // 新增采集设备模型 + createDeviceModel: async (data: DeviceModelVO) => { + return await request.post({ url: `/iot/device-model/create`, data }) + }, + + // 修改采集设备模型 + updateDeviceModel: async (data: DeviceModelVO) => { + return await request.put({ url: `/iot/device-model/update`, data }) + }, + + // 删除采集设备模型 + deleteDeviceModel: async (ids: string) => { + return await request.delete({ url: `/iot/device-model/delete?ids=` + ids }) + }, + + // 复制采集设备模型 + copyDeviceModel: async (id: number) => { + return await request.post({ url: `/iot/device-model/copy`, params: { id } }) + }, + + // 导出采集设备模型 Excel + exportDeviceModel: async (params) => { + return await request.download({ url: `/iot/device-model/export-excel`, params }) + }, + + // 获得采集设备模型列表 + getDeviceModelList: async () => { + return await request.get({ url: `/iot/device-model/list` }) + }, +} diff --git a/src/api/iot/devicemodelattribute/index.ts b/src/api/iot/devicemodelattribute/index.ts new file mode 100644 index 0000000..0cf314b --- /dev/null +++ b/src/api/iot/devicemodelattribute/index.ts @@ -0,0 +1,67 @@ +import request from '@/config/axios' + +// 采集设备模型-点位管理 VO +export interface DeviceModelAttributeVO { + id: number // ID + attributeCode: string // 点位编码 + attributeName: string // 点位名称 + attributeType: string // 点位类型 + dataType: string // 数据类型 + address: string // 寄存器地址 + dataUnit: string // 单位 + ratio: number // 倍率 + remark: string // 备注 + deviceModelId: number // 采集设备模型id +} + +// 采集设备模型-点位管理 API +export const DeviceModelAttributeApi = { + // 查询采集设备模型-点位管理分页 + getDeviceModelAttributePage: async (params: any) => { + return await request.get({ url: `/iot/device-model-attribute/page`, params }) + }, + + // 查询采集设备模型-点位管理列表(当前设备模型下的点位) + getDeviceModelAttributeList: async (id: number) => { + return await request.get({ url: `/iot/device-model-attribute/list`, params: { id } }) + }, + + // 查询采集设备模型-点位管理详情 + getDeviceModelAttribute: async (id: number) => { + return await request.get({ url: `/iot/device-model-attribute/get?id=` + id }) + }, + + // 新增采集设备模型-点位管理 + createDeviceModelAttribute: async (data) => { + return await request.post({ url: `/iot/device-model-attribute/create`, data }) + }, + + // 修改采集设备模型-点位管理 + updateDeviceModelAttribute: async (data) => { + return await request.put({ url: `/iot/device-model-attribute/update`, data }) + }, + + // 删除采集设备模型-点位管理 + deleteDeviceModelAttribute: async (ids: string) => { + return await request.delete({ url: `/iot/device-model-attribute/delete?ids=` + ids }) + }, + + // 导出采集设备模型-点位管理 Excel + exportDeviceModelAttribute: async (params) => { + return await request.download({ url: `/iot/device-model-attribute/export-excel`, params }) + }, + + // 下载采集设备模型-点位管理导入模板 + importDeviceModelAttributeTemplate: async () => { + return await request.download({ url: `/iot/device-model-attribute/get-import-template` }) + }, + + operationAnalysisDetails: async (params: { + deviceId: number + modelId?: number + collectionStartTime?: string + collectionEndTime?: string + }) => { + return await request.get({ url: `/iot/device-model-attribute/operationAnalysisDetails`, params }) + } +} diff --git a/src/locales/en.ts b/src/locales/en.ts index 2dbfbd0..8f4d41e 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -485,5 +485,835 @@ export default { btn_zoom_in: 'Zoom in', btn_zoom_out: 'Zoom out', preview: 'Preivew' + }, + DataCollection: { + DeviceAttributeType: { + moduleName: 'Acquisition Point Type', + index: 'Index', + code: 'Type Code', + name: 'Type Name', + sort: 'Display Order', + remark: 'Remark', + createTime: 'Create Time', + operate: 'Operate', + + search: 'Search', + reset: 'Reset', + create: 'Create', + batchDelete: 'Batch Delete', + export: 'Export', + + placeholderCode: 'Please enter type code', + placeholderName: 'Please enter type name', + placeholderSort: 'Please enter display order', + placeholderRemark: 'Please enter remark', + + dialogOk: 'Confirm', + dialogCancel: 'Cancel', + + validatorCodeRequired: 'Type code can not be empty', + validatorNameRequired: 'Type name can not be empty', + validatorSortRequired: 'Display order can not be empty', + + exportFilename: 'AcquisitionPointType.xls' + }, + DeviceModel: { + moduleName: 'Acquisition Device Model', + index: 'Index', + code: 'Model Code', + name: 'Model Name', + protocol: 'Protocol', + remark: 'Remark', + createTime: 'Create Time', + operate: 'Operate', + + search: 'Search', + reset: 'Reset', + create: 'Create', + batchDelete: 'Batch Delete', + export: 'Export', + + placeholderCode: 'Please enter model code', + placeholderName: 'Please enter model name', + placeholderProtocol: 'Please select protocol', + placeholderRemark: 'Please enter remark', + + dialogOk: 'Confirm', + dialogCancel: 'Cancel', + + validatorCodeRequired: 'Model code can not be empty', + validatorNameRequired: 'Model name can not be empty', + validatorProtocolRequired: 'Protocol can not be empty', + validatorDataTypeRequired: 'Data type can not be empty', + + exportFilename: 'AcquisitionDeviceModel.xls', + + attributeModuleName: 'Point Management', + attributeCode: 'Point Code', + attributeName: 'Point Name', + attributeType: 'Point Type', + dataType: 'Data Type', + address: 'Register Address', + dataUnit: 'Unit', + ratio: 'Ratio', + + placeholderAttributeCode: 'Please enter point code', + placeholderAttributeName: 'Please enter point name', + placeholderAttributeType: 'Please select point type', + placeholderDataType: 'Please select data type', + placeholderAddress: 'Please enter register address', + placeholderDataUnit: 'Please select unit', + placeholderRatio: 'Please enter ratio', + placeholderAttributeRemark: 'Please enter remark', + + validatorAttributeCodeRequired: 'Point code can not be empty', + validatorAttributeNameRequired: 'Point name can not be empty', + + attributeExportFilename: 'AcquisitionDeviceModelPoint.xls', + + ruleTabLabel: 'Point Rule', + ruleIdentifier: 'Identifier', + ruleFieldName: 'Name', + ruleFieldRule: 'Rule', + ruleDefaultValue: 'Default Value', + ruleCreateTime: 'Create Time', + ruleOperate: 'Operate', + + ruleSearchIdentifierPlaceholder: 'Please enter identifier', + ruleSearchFieldNamePlaceholder: 'Please enter name', + ruleSearchDefaultValuePlaceholder: 'Please enter default value', + + ruleSearch: 'Search', + ruleReset: 'Reset', + + ruleCreateButton: 'Add Alarm Rule', + ruleEditRuleButton: 'Edit', + ruleDeleteRuleButton: 'Delete', + + ruleDialogTitle: 'Edit Point Rule', + ruleDialogIdentifier: 'Identifier', + ruleDialogFieldName: 'Name', + ruleDialogDefaultValue: 'Default Value', + ruleDialogAlarmLevel: 'Alarm Level', + ruleDialogFieldRule: 'Point Rule', + ruleDialogRule: 'Rule', + ruleDialogRuleAttribute: 'Point', + ruleDialogRuleOperator: 'Condition', + ruleDialogRuleValue: 'Value', + + ruleDialogAlarmLevelPlaceholder: 'Please select alarm level', + ruleDialogFieldRulePlaceholder: 'Please select point rule', + ruleDialogRuleAttributePlaceholder: 'Please select point', + ruleDialogRuleOperatorPlaceholder: 'Please select condition', + ruleDialogRuleValuePlaceholder: 'Please enter value' + }, + Device: { + moduleName: 'Acquisition Device', + index: 'Index', + + deviceCode: 'Device Code', + deviceName: 'Device Name', + operatingStatus: 'Operating Status', + protocol: 'Protocol', + status: 'Connection Status', + sampleCycle: 'Sample Cycle(s)', + isEnable: 'Enabled', + collectionTime: 'Collection Time', + operate: 'Operation', + + search: 'Search', + reset: 'Reset', + create: 'Create', + batchDelete: 'Batch Delete', + export: 'Export', + + placeholderDeviceCode: 'Please enter device code', + placeholderDeviceName: 'Please enter device name', + placeholderModel: 'Please select device model', + placeholderSampleCycle: 'Please enter sample cycle', + placeholderUrl: 'Please enter endpoint URL', + placeholderUsername: 'Please enter username', + placeholderPassword: 'Please enter password', + placeholderTopic: 'Please enter subscription topic', + + model: 'Device Model', + url: 'Endpoint URL', + username: 'Username', + password: 'Password', + topic: 'Subscription Topic', + + settingDialogTitle: 'Device Settings', + + connect: 'Connect', + disconnect: 'Disconnect', + + attributeModuleName: 'Point', + attributeCode: 'Point Code', + attributeName: 'Point Name', + attributeType: 'Point Type', + dataType: 'Data Type', + address: 'Register Address', + dataUnit: 'Unit', + ratio: 'Ratio', + remark: 'Remark', + deviceAttributeTabLabel: 'Device Attributes', + deviceRuleTabLabel: 'Point Rules', + + currentDeviceLabel: 'Current Device: ', + + alarmHistoryTitle: 'Device Alarm History Data', + alarmRuleName: 'Rule Name', + alarmPointName: 'Point Name', + alarmPointValue: 'Point Value', + alarmLevel: 'Alarm Level', + alarmTime: 'Alarm Time', + + emptyDescription: 'Click "Point" in the device list to view points and rules', + + exportFilename: 'IoTDevice.xls', + attributeExportFilename: 'AcquisitionDevice-Point.xls', + + attributeLatestValue: 'Latest Value', + attributeLatestCollectionTime: 'Latest Collection Time', + attributeSort: 'Order', + attributePlaceholderSort: 'Please enter order', + + placeholderAttributeCode: 'Please enter point code', + placeholderAttributeName: 'Please enter point name', + placeholderAttributeType: 'Please select point type', + placeholderDataType: 'Please select data type', + placeholderAddress: 'Please enter register address', + placeholderDataUnit: 'Please enter unit', + placeholderRatio: 'Please enter ratio', + placeholderRemark: 'Please enter remark', + + validatorDeviceCodeRequired: 'Device code can not be empty', + validatorDeviceNameRequired: 'Device name can not be empty', + validatorSampleCycleRequired: 'Sample cycle can not be empty', + validatorIsEnableRequired: 'Enable status can not be empty', + validatorUrlRequired: 'Endpoint URL can not be empty', + + attributeValidatorCodeRequired: 'Point code can not be empty', + attributeValidatorNameRequired: 'Point name can not be empty', + attributeValidatorCodeNoChinese: 'Point code can not contain Chinese characters', + attributeValidatorSortNumber: 'Order must contain only numbers', + attributeValidatorRemarkTooLong: 'Remark can not exceed 100 characters', + + messageSelectDeviceRequired: 'Please select a device', + messageDeviceInfoMissingForRules: 'Device information is missing, unable to load point rules', + + gridView: 'gridView', + sudoku: 'sudoku' + }, + RunReport: { + moduleName: 'Device Operation Report', + + searchDeviceCodeLabel: 'Device Code', + searchDeviceCodePlaceholder: 'Please enter device code', + searchDeviceNameLabel: 'Device Name', + searchDeviceNamePlaceholder: 'Please enter device name', + searchTimeRangeLabel: 'Device Running Time', + searchTimeRangeStartPlaceholder: 'Start Time', + searchTimeRangeEndPlaceholder: 'End Time', + + searchButtonText: 'Search', + resetButtonText: 'Reset', + exportButtonText: 'Export', + + tableDeviceCodeColumn: 'Device Code', + tableDeviceNameColumn: 'Device Name', + tableRunningTimeColumn: 'Running Time (Hours)', + tableStandbyTimeColumn: 'Standby Time (Hours)', + tableFaultTimeColumn: 'Fault Time (Hours)', + tableWarningTimeColumn: 'Warning Time (Hours)', + tableUtilizationRateColumn: 'Utilization Rate', + tableUtilizationRateTooltip: + 'Power-on Rate = Online Time / Total Time\nOnline Time = Running Time + Standby Time + Fault Time\nUtilization Rate = Running Time / Online Time\nPower-on Rate = (Running Time + Standby Time + Fault Time) / Total Time', + tablePowerOnRateColumn: 'Power-on Rate', + tableStartTimeColumn: 'Device Run Start Time', + tableEndTimeColumn: 'Device Run End Time', + + exportFilename: 'DeviceOperationReport.xls' + }, + RealTimeMonitoring: { + moduleName: 'Real-time Data Monitoring', + + searchLineCodeLabel: 'Line Code', + searchLineCodePlaceholder: 'Please enter line code', + searchLineNameLabel: 'Line Name', + searchLineNamePlaceholder: 'Please enter line name', + searchDeviceCodeLabel: 'Device Code', + searchDeviceCodePlaceholder: 'Please enter device code', + searchDeviceNameLabel: 'Device Name', + searchDeviceNamePlaceholder: 'Please enter device name', + + searchButtonText: 'Search', + resetButtonText: 'Reset', + exportButtonText: 'Export', + + tableLineCodeColumn: 'Line Code', + tableLineNameColumn: 'Line Name', + tableDeviceCodeColumn: 'Device Code', + tableDeviceNameColumn: 'Device Name', + tableStatusColumn: 'Connection Status', + tableCollectionTimeColumn: 'Latest Collection Time', + tableOperateColumn: 'Operation', + tableActionSingleMonitorLabel: 'Single Device Monitoring', + + dialogTitle: 'Single Device Monitoring', + dialogDeviceNameLabel: 'Device Name: ', + dialogCollectionTimeLabel: 'Collection Time: ', + + emptyDescription: 'No data', + defaultGroupName: 'Default', + defaultFieldLabelPrefix: 'Field ', + + messageDeviceInfoIncomplete: 'Device information is incomplete', + + exportFilename: 'RealTimeMonitoringDevice.xls' + }, + HistoryData: { + moduleName: 'History Record Query', + + searchLineCodeLabel: 'Line Code', + searchLineCodePlaceholder: 'Please enter line code', + searchLineNameLabel: 'Line Name', + searchLineNamePlaceholder: 'Please enter line name', + searchDeviceCodeLabel: 'Device Code', + searchDeviceCodePlaceholder: 'Please enter device code', + searchDeviceNameLabel: 'Device Name', + searchDeviceNamePlaceholder: 'Please enter device name', + + searchButtonText: 'Search', + resetButtonText: 'Reset', + exportButtonText: 'Export', + + tableLineCodeColumn: 'Line Code', + tableLineNameColumn: 'Line Name', + tableDeviceCodeColumn: 'Device Code', + tableDeviceNameColumn: 'Device Name', + tableCollectionTimeColumn: 'Collection Time', + tableOperateColumn: 'Operation', + tableActionHistoryLabel: 'History', + + dialogTitlePrefix: 'History: ', + dialogCollectionTimeLabel: 'Collection Time', + dialogCollectionTimeStartPlaceholder: 'Start Time', + dialogCollectionTimeEndPlaceholder: 'End Time', + dialogSearchButtonText: 'Search', + dialogResetButtonText: 'Reset', + dialogRecordCollectionTimePrefix: 'Collection Time: ', + + emptyDescription: 'No data', + defaultFieldLabelPrefix: 'Field ', + + exportFilename: 'HistoryDataDevice.xls' + }, + DeviceParamAnalysis: { + moduleName: 'Device Operation Parameter Analysis', + + treeSearchPlaceholder: 'Search device or parameter', + + formTimeLabel: 'Time', + formTimeStartPlaceholder: 'Start Date', + formTimeEndPlaceholder: 'End Date', + + shortcutLast7Days: 'Last 7 Days', + shortcutLastWeek: 'Last Week', + shortcutLastMonth: 'Last Month', + shortcutLast3Months: 'Last 3 Months', + + searchButtonText: 'Search', + resetButtonText: 'Reset', + + emptyDescription: 'No data', + emptySelectNodeDescription: 'Please select a node on the left', + + selectedParamTitle: 'Node: {label}{unit}', + defaultSeriesName: 'Parameter', + + messageLoadTreeFailed: 'Failed to load tree data', + messageNodeNoParams: 'No parameters under this node', + messageDeviceNoParams: 'No parameters under this device', + messageFetchChartFailed: 'Failed to load chart data' + } + }, + FactoryModeling: { + FactoryStructure: { + moduleName: 'Factory Structure', + searchCodeLabel: 'Organization Code', + searchCodePlaceholder: 'Please enter organization code', + searchParentLabel: 'Parent Organization', + searchParentPlaceholder: 'Please select parent organization', + searchNameLabel: 'Organization Name', + searchNamePlaceholder: 'Please enter organization name', + searchOrgClassLabel: 'Organization Level', + searchOrgClassPlaceholder: 'Please select organization level', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + expandButtonText: 'Expand/Collapse', + tableCodeColumn: 'Organization Code', + tableNameColumn: 'Organization Name', + tableSortColumn: 'Display Order', + tableMachineColumn: 'Related Device', + tableOrgClassColumn: 'Organization Level', + tableOrgTypeColumn: 'Process', + tableCreateTimeColumn: 'Create Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + dialogCodeLabel: 'Code', + dialogCodeTooltip: 'Factory structure code', + dialogCodePlaceholder: 'Code is auto generated after saving', + dialogParentLabel: 'Parent Organization', + dialogParentPlaceholder: 'Please select parent organization', + dialogNameLabel: 'Organization Name', + dialogNamePlaceholder: 'Please enter organization name', + dialogOrgClassLabel: 'Organization Level', + dialogSortLabel: 'Display Order', + dialogSortTooltip: 'Same parent nodes are sorted in ascending order', + dialogSortPlaceholder: 'Please enter display order', + dialogOrgTypeLabel: 'Process', + dialogOrgTypeTooltip: 'Source: Data dictionary - Process', + dialogOrgTypePlaceholder: 'Please select type', + dialogMachineLabel: 'Related Device', + dialogMachinePlaceholder: 'Please select device', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + orgTreeRootName: 'Top Organization', + validatorNameRequired: 'Organization name can not be empty', + validatorParentRequired: 'Parent organization can not be empty', + validatorOrgClassRequired: 'Organization level can not be empty' + }, + FactoryWorker: { + moduleName: 'Workstation Worker', + searchNameLabel: 'Organization Name', + searchNamePlaceholder: 'Please enter organization name', + searchStatusLabel: 'Organization Status', + searchStatusPlaceholder: 'Please select organization status', + searchButtonText: 'Search', + resetButtonText: 'Reset', + exportButtonText: 'Export', + expandButtonText: 'Expand/Collapse', + tabsZhijiang: 'Pulping', + tabsChengxing: 'Forming', + tabsHonggan: 'Drying', + tabsZhuanyi: 'Transfer', + tabsJiashi: 'Humidifying', + tabsReya: 'Hot Press', + tabsQiebian: 'Trimming', + tabsPanjian: 'Inspection', + tabsDabao: 'Packing', + tabsTiebiao: 'Labeling', + tabsPinyin: 'Printing', + tabsSufeng: 'Sealing', + tabsAll: 'All', + tableNameColumn: 'Organization Name', + tableOrgClassColumn: 'Organization Level', + tableOrgTypeColumn: 'Type', + tableWorkerColumn: 'Today Worker', + tableOperateColumn: 'Operation', + tableDispatchAction: 'Dispatch', + exportFileName: 'Workstation.xls' + }, + ProductCategory: { + moduleName: 'Product Material Category', + searchNameLabel: 'Category Name', + searchNamePlaceholder: 'Please enter category name', + searchStatusLabel: 'Enable Status', + searchStatusPlaceholder: 'Please select enable status', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + expandButtonText: 'Expand/Collapse', + tableCodeColumn: 'Category Code', + tableNameColumn: 'Category Name', + tableSortColumn: 'Sort', + tableStatusColumn: 'Status', + tableCreateTimeColumn: 'Create Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + dialogParentLabel: 'Parent Category', + dialogParentPlaceholder: 'Please select parent category', + dialogCodeLabel: 'Code', + dialogCodePlaceholder: 'Please enter code', + dialogNameLabel: 'Name', + dialogNamePlaceholder: 'Please enter name', + dialogSortLabel: 'Sort', + dialogSortPlaceholder: 'Please enter sort', + dialogStatusLabel: 'Status', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + treeRootName: 'Top Product Category', + validatorParentRequired: 'Parent category can not be empty', + validatorNameRequired: 'Name can not be empty', + validatorCodeRequired: 'Code can not be empty', + validatorSortRequired: 'Sort can not be empty', + validatorStatusRequired: 'Status can not be empty' + }, + ProductInformation: { + moduleName: 'Product Material Information', + searchNameLabel: 'Name', + searchNamePlaceholder: 'Please enter name', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + tableBarCodeColumn: 'Code', + tableNameColumn: 'Name', + tableStandardColumn: 'Specification', + tableCategoryColumn: 'Category', + tableUnitColumn: 'Unit', + tableStatusColumn: 'Status', + tableCreateTimeColumn: 'Create Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + qrcode: 'QR Code/Barcode', + dialogBarCodeLabel: 'Code', + dialogBarCodePlaceholder: 'Please enter code', + dialogNameLabel: 'Name', + dialogNamePlaceholder: 'Please enter name', + dialogCategoryLabel: 'Category', + dialogCategoryPlaceholder: 'Please select category', + dialogUnitLabel: 'Unit', + dialogUnitPlaceholder: 'Please select unit', + dialogStandardLabel: 'Specification', + dialogStandardPlaceholder: 'Please enter specification', + dialogExpiryDayLabel: 'Shelf Life (Days)', + dialogExpiryDayPlaceholder: 'Please enter shelf life (days)', + dialogWeightLabel: 'Weight (g)', + dialogWeightPlaceholder: 'Please enter weight (g)', + dialogPurchasePriceLabel: 'Purchase Price', + dialogPurchasePricePlaceholder: 'Please enter purchase price (CNY)', + dialogSalePriceLabel: 'Sale Price', + dialogSalePricePlaceholder: 'Please enter sale price (CNY)', + dialogMinPriceLabel: 'Minimum Price', + dialogMinPricePlaceholder: 'Please enter minimum price (CNY)', + dialogStatusLabel: 'Status', + dialogRemarkLabel: 'Remark', + dialogRemarkPlaceholder: 'Please enter remark', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + qrcodeLoadError: 'Failed to load QR code', + qrcodeEmpty: 'No QR code', + validatorNameRequired: 'Product name can not be empty', + validatorBarCodeRequired: 'Product barcode can not be empty', + validatorCategoryRequired: 'Product category id can not be empty', + validatorUnitRequired: 'Unit id can not be empty', + validatorStatusRequired: 'Product status can not be empty' + }, + AutocodeRule: { + moduleName: 'Code Rules', + searchRuleCodeLabel: 'Rule Code', + searchRuleCodePlaceholder: 'Please enter rule code', + searchRuleNameLabel: 'Rule Name', + searchRuleNamePlaceholder: 'Please enter rule name', + searchRuleDescLabel: 'Description', + searchRuleDescPlaceholder: 'Please enter description', + searchRemarkLabel: 'Remark', + searchRemarkPlaceholder: 'Please enter remark', + searchIsEnableLabel: 'Enabled', + searchIsEnablePlaceholder: 'Please select enabled', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + tableRuleCodeColumn: 'Rule Code', + tableRuleNameColumn: 'Rule Name', + tableBarcodeTypeColumn: 'Code Type', + tableRuleDescColumn: 'Description', + tableMaxLengthColumn: 'Max Length', + tableIsPaddedColumn: 'Pad', + tablePaddedCharColumn: 'Pad Char', + tablePaddedMethodColumn: 'Pad Method', + tableIsEnableColumn: 'Enabled', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + tableTestCodeAction: 'Test Code', + listPartTabLabel: 'Code Parts', + dialogPartTabLabel: 'Code Rule Parts', + exportFilename: 'CodeRules.xls', + dialogRuleCodeLabel: 'Rule Code', + dialogRuleCodePlaceholder: 'Please enter rule code', + dialogRuleNameLabel: 'Rule Name', + dialogRuleNamePlaceholder: 'Please enter rule name', + dialogBarcodeTypeLabel: 'Code Type', + barcodeTypeBarcodeLabel: 'Barcode', + barcodeTypeQrcodeLabel: 'QR Code', + dialogRuleDescLabel: 'Description', + dialogRuleDescPlaceholder: 'Please enter description', + dialogMaxLengthLabel: 'Max Length', + dialogMaxLengthPlaceholder: 'Please enter max length', + dialogIsPaddedLabel: 'Pad', + dialogPaddedCharLabel: 'Pad Char', + dialogPaddedCharPlaceholder: 'Please enter pad char', + dialogPaddedMethodLabel: 'Pad Method', + dialogRemarkLabel: 'Remark', + dialogRemarkPlaceholder: 'Please enter remark', + dialogIsEnableLabel: 'Enabled', + validatorIsEnableRequired: 'Enabled can not be empty', + validatorRuleIdRequired: 'Rule id can not be empty', + validatorPartIndexRequired: 'Part index can not be empty', + validatorPartLengthRequired: 'Part length can not be empty', + partTableIndexColumn: 'Index', + partTableIdColumn: 'ID', + partTablePartIndexColumn: 'Part Index', + partTablePartTypeColumn: 'Part Type', + partTablePartCodeColumn: 'Part Code', + partTablePartNameColumn: 'Part Name', + partTablePartLengthColumn: 'Part Length', + partTableDatetimeFormatColumn: 'Datetime Format', + partTableInputCharacterColumn: 'Input Char', + partTableFixCharacterColumn: 'Fixed Char', + partTableSeriaStartNoColumn: 'Serial Start', + partTableSeriaStepColumn: 'Serial Step', + partTableSeriaNowNoColumn: 'Serial Current', + partTableCycleFlagColumn: 'Serial Cycle', + partTableCycleMethodColumn: 'Cycle Method', + partTableRemarkColumn: 'Remark', + partTableIsEnableColumn: 'Enabled', + partTableCreateTimeColumn: 'Create Time', + partTableOperateColumn: 'Operation', + partPlaceholderPartIndex: 'Please enter part index', + partPlaceholderPartCode: 'Please enter part code', + partPlaceholderPartName: 'Please enter part name', + partPlaceholderPartLength: 'Please enter part length', + partPlaceholderDatetimeFormat: 'Please enter datetime format', + partPlaceholderInputCharacter: 'Please enter input char', + partPlaceholderFixCharacter: 'Please enter fixed char', + partPlaceholderSeriaStartNo: 'Please enter serial start', + partPlaceholderSeriaStep: 'Please enter serial step', + partPlaceholderSeriaNowNo: 'Please enter current serial', + partPlaceholderRemark: 'Please enter remark', + addPartButtonText: 'Add Code Rule Part' + }, + ProductBOM: { + moduleName: 'Product BOM', + searchCodeLabel: 'BOM Code', + searchCodePlaceholder: 'Please enter BOM code', + searchProductLabel: 'Product', + searchProductPlaceholder: 'Please select product', + searchRemarkLabel: 'Remark', + searchRemarkPlaceholder: 'Please enter remark', + searchEnableLabel: 'Enable Status', + searchEnablePlaceholder: 'Please select enable status', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + tableCodeColumn: 'BOM Code', + tableVersionColumn: 'BOM Version', + tableProductColumn: 'Product', + tableUnitColumn: 'Unit', + tableYieldRateColumn: 'Yield Rate %', + tableRemarkColumn: 'Remark', + tableEnableColumn: 'Enabled', + tableCreateTimeColumn: 'Create Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + detailTabLabel: 'Product BOM Detail', + dialogCodeLabel: 'BOM Code', + dialogCodePlaceholder: 'Please enter BOM code', + dialogVersionLabel: 'BOM Version', + dialogVersionPlaceholder: 'Please enter BOM version', + dialogProductLabel: 'Product', + dialogProductPlaceholder: 'Please select product', + dialogUnitLabel: 'Unit', + dialogUnitPlaceholder: 'Please select unit', + dialogYieldRateLabel: 'Yield Rate %', + dialogYieldRatePlaceholder: 'Please enter yield rate', + dialogRemarkLabel: 'Remark', + dialogRemarkPlaceholder: 'Please enter remark', + dialogEnableLabel: 'Enabled', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + detailTableIndexColumn: 'No.', + detailTableMaterialColumn: 'Material', + detailTableUsageNumberColumn: 'Usage Quantity', + detailTableUnitColumn: 'Unit', + detailTableLossRateColumn: 'Loss Rate %', + detailTableRemarkColumn: 'Remark', + detailTableOperateColumn: 'Operation', + detailMaterialPlaceholder: 'Please select material', + detailUnitPlaceholder: 'Please select unit', + detailUsageNumberPlaceholder: 'Please enter usage quantity', + detailLossRatePlaceholder: 'Please enter loss rate', + detailRemarkPlaceholder: 'Please enter remark', + detailAddButtonText: 'Add Product BOM Detail', + validatorCodeRequired: 'BOM code can not be empty', + validatorVersionRequired: 'BOM version can not be empty', + validatorProductRequired: 'Product can not be empty', + validatorUnitRequired: 'Unit can not be empty', + validatorEnableRequired: 'Enable status can not be empty', + validatorDetailMaterialRequired: 'Material can not be empty', + validatorDetailBomRequired: 'BOM id can not be empty', + validatorDetailUsageNumberRequired: 'Usage quantity can not be empty' + }, + WorkTeam: { + moduleName: 'Work Team Management', + searchTeamNameLabel: 'Team Name', + searchTeamNamePlaceholder: 'Please enter team name', + searchProcessLabel: 'Process', + searchProcessPlaceholder: 'Please select process', + searchRemarkLabel: 'Remark', + searchRemarkPlaceholder: 'Please enter remark', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + tabsAll: 'All', + tabsDay: 'Day Shift', + tabsNight: 'Night Shift', + tabsLongDay: 'Long Day Shift', + tableTeamNameColumn: 'Team Name', + tableLeaderColumn: 'Leader', + tableGroupTypeColumn: 'Team Type', + tableWorkTimeColumn: 'Working Time', + tableProcessColumn: 'Process', + tableRemarkColumn: 'Remark', + tableEnableColumn: 'Enabled', + tableCreateTimeColumn: 'Create Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + detailTabLabel: 'Team Members', + dialogTeamNameLabel: 'Team Name', + dialogTeamNamePlaceholder: 'Please enter team name', + dialogProcessLabel: 'Process', + dialogProcessTooltip: 'Source: Data dictionary - Process', + dialogGroupTypeLabel: 'Team Type', + dialogGroupTypeTooltip: 'Source: Data dictionary - Team Type', + dialogWorkTimeLabel: 'Working Time', + dialogWorkTimeRangeSeparator: 'To', + dialogWorkTimeStartPlaceholder: 'Start Time', + dialogWorkTimeEndPlaceholder: 'End Time', + dialogRemarkLabel: 'Remark', + dialogRemarkPlaceholder: 'Please enter remark', + dialogEnableLabel: 'Enabled', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + detailAddButtonText: 'Add', + detailTableJobNoColumn: 'Job No.', + detailTableRoleColumn: 'Role', + detailTableRemarkColumn: 'Remark', + detailTableCreateTimeColumn: 'Create Time', + detailTableOperateColumn: 'Operation', + detailDialogJobNoLabel: 'Job No.', + detailDialogJobNoPlaceholder: 'Please select job no.', + detailDialogRoleLabel: 'Role', + detailDialogRoleTooltip: 'Source: Data dictionary - Team Member Role', + detailDialogRemarkLabel: 'Remark', + detailDialogRemarkPlaceholder: 'Please enter remark', + detailDialogMemberSuffix: 'Member', + validatorTeamNameRequired: 'Team name can not be empty', + validatorProcessRequired: 'Process type can not be empty', + validatorGroupTypeRequired: 'Team type can not be empty', + validatorEnableRequired: 'Enable status can not be empty', + validatorDetailUserRequired: 'User id can not be empty', + validatorDetailRoleRequired: 'Role can not be empty', + validatorSelectWorkTeamFirst: 'Please select a work team first' + }, + + ProductUnit: { + moduleName: 'Unit Management', + searchNameLabel: 'Unit Name', + searchNamePlaceholder: 'Please enter unit name', + searchStatusLabel: 'Unit Status', + searchStatusPlaceholder: 'Please select unit status', + searchButtonText: 'Search', + resetButtonText: 'Reset', + addButtonText: 'Add', + exportButtonText: 'Export', + tableNameColumn: 'Unit Name', + tablePrimaryFlagColumn: 'Is Primary Unit', + tableChangeRateColumn: 'Conversion Rate to Primary Unit', + tableStatusColumn: 'Status', + tableCreateTimeColumn: 'Create Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDeleteAction: 'Delete', + dialogNameLabel: 'Unit Name', + dialogNamePlaceholder: 'Please enter unit name', + dialogPrimaryFlagLabel: 'Is Primary Unit', + dialogPrimaryUnitLabel: 'Related Primary Unit', + dialogPrimaryUnitPlaceholder: 'Please select primary unit', + dialogChangeRateLabel: 'Conversion Rate', + dialogChangeRatePlaceholder: 'Please enter conversion rate', + dialogStatusLabel: 'Unit Status', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + validatorNameRequired: 'Unit name can not be empty', + validatorStatusRequired: 'Unit status can not be empty', + validatorPrimaryFlagRequired: 'Primary unit flag can not be empty' + }, + CalHoliday: { + setWorkingDays: 'set working days', + setHoliday: 'set holiday', + lastMonth: 'last month', + today: 'today', + nextMonth: 'next month', + work: 'work', + rest: 'rest', + searchDateStartPlaceholder: '开始日期', + searchDateEndPlaceholder: '结束日期', + searchTypeLabel: '类型', + searchTypePlaceholder: '请选择类型', + searchRemarkLabel: '备注', + searchRemarkPlaceholder: '请输入备注', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出' + }, + + EsopFile: { + moduleName: 'File Management', + searchCodeLabel: 'File Code', + searchCodePlaceholder: 'Please enter file code', + searchFileNameLabel: 'File_Name', + searchFileNamePlaceholder: 'Please enter file name', + searchClassificationLabel: 'File Classification', + searchClassificationPlaceholder: 'Please select file Classification', + searchStatusLabel: 'File Status', + searchStatusPlaceholder: 'Please select file status', + searchButtonText: 'Search', + resetButtonText: 'Reset', + uploadButtonText: 'Upload', + exportButtonText: 'Export', + tableCodeColumn: 'File Code', + tableNameColumn: 'File Name', + tableClassificationColumn: 'File Classification', + tableTypeColumn: 'File Type', + tableStatusColumn: 'File Status', + tableCreatorNameColumn: 'Uploader', + tableCreateTimeColumn: 'Upload Time', + tableOperateColumn: 'Operation', + tableEditAction: 'Edit', + tableDownloadAction: 'Download', + tableDeleteAction: 'Delete', + dialogFileNameLabel: 'File Name', + dialogFileNamePlaceholder: 'Please enter file name', + dialogClassificationLabel: 'File Classification', + dialogClassificationPlaceholder: 'Please select file classification', + dialogStatusLabel: 'File Status', + dialogCancelButton: 'Cancel', + dialogSubmitButton: 'Confirm', + messageOne: 'Tip: Only ', + messageTwo: ' format files are allowed to be imported!', + messageThree: ' Drag the file to this area, or ', + messageFour: ' click to upload', + validatorCodeRequired: 'File code can not be empty', + validatorNameRequired: 'File name can not be empty', + validatorClassificationRequired: 'File classification can not be empty', + validatorTypeRequired: 'File type can not be empty', + validatorStatusRequired: 'File status can not be empty' + } } } diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 080a7c1..0e8e334 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -301,6 +301,7 @@ export default { delete: '删除', edit: '编辑', update: '编辑', + copy: '复制', preview: '预览', more: '更多', sync: '同步', @@ -308,13 +309,17 @@ export default { detail: '详情', export: '导出', import: '导入', + approve: '审批', + unapprove: '反审批', generate: '生成', logout: '强制退出', test: '测试', typeCreate: '字典类型新增', typeUpdate: '字典类型编辑', dataCreate: '字典数据新增', - dataUpdate: '字典数据编辑' + dataUpdate: '字典数据编辑', + select: '选择', + batchDelete: '批量删除' }, cus: { management: { @@ -481,5 +486,831 @@ export default { btn_zoom_out: '缩小', preview: '预览' }, - 'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错 + 'OAuth 2.0': 'OAuth 2.0', // 避免菜单名是 OAuth 2.0 时,一直 warn 报错 + DataCollection: { + DeviceAttributeType: { + moduleName: '采集点类型', + index: '序号', + code: '类型编码', + name: '类型名称', + sort: '显示顺序', + remark: '备注', + createTime: '创建时间', + operate: '操作', + + search: '搜索', + reset: '重置', + create: '新增', + batchDelete: '批量删除', + export: '导出', + + placeholderCode: '请输入类型编码', + placeholderName: '请输入类型名称', + placeholderSort: '请输入显示顺序', + placeholderRemark: '请输入备注', + + dialogOk: '确 定', + dialogCancel: '取 消', + + validatorCodeRequired: '类型编码不能为空', + validatorNameRequired: '类型名称不能为空', + validatorSortRequired: '显示顺序不能为空', + + exportFilename: '采集点类型.xls' + }, + DeviceModel: { + moduleName: '采集设备模型', + index: '序号', + code: '模型编码', + name: '模型名称', + protocol: '通讯协议', + remark: '备注', + createTime: '创建时间', + operate: '操作', + + search: '搜索', + reset: '重置', + create: '新增', + batchDelete: '批量删除', + export: '导出', + + placeholderCode: '请输入模型编码', + placeholderName: '请输入模型名称', + placeholderProtocol: '请选择通讯协议', + placeholderRemark: '请输入备注', + + dialogOk: '确 定', + dialogCancel: '取 消', + + validatorCodeRequired: '模型编码不能为空', + validatorNameRequired: '模型名称不能为空', + validatorProtocolRequired: '通讯协议不能为空', + validatorDataTypeRequired: '数据类型不能为空', + + exportFilename: '采集设备模型.xls', + + attributeModuleName: '采集点管理', + attributeCode: '点位编码', + attributeName: '点位名称', + attributeType: '点位类型', + dataType: '数据类型', + address: '寄存器地址', + dataUnit: '单位', + ratio: '倍率', + + placeholderAttributeCode: '请输入点位编码', + placeholderAttributeName: '请输入点位名称', + placeholderAttributeType: '请选择点位类型', + placeholderDataType: '请选择数据类型', + placeholderAddress: '请输入寄存器地址', + placeholderDataUnit: '请选择单位', + placeholderRatio: '请输入倍率', + placeholderAttributeRemark: '请输入备注', + + validatorAttributeCodeRequired: '点位编码不能为空', + validatorAttributeNameRequired: '点位名称不能为空', + + attributeExportFilename: '采集设备模型-点位管理.xls', + + ruleTabLabel: '点位规则', + ruleIdentifier: '标识符', + ruleFieldName: '名称', + ruleFieldRule: '规则', + ruleDefaultValue: '默认值', + ruleCreateTime: '创建时间', + ruleOperate: '操作', + + ruleSearchIdentifierPlaceholder: '请输入标识符', + ruleSearchFieldNamePlaceholder: '请输入名称', + ruleSearchDefaultValuePlaceholder: '请输入默认值', + + ruleSearch: '搜索', + ruleReset: '重置', + + ruleCreateButton: '新增告警规则', + ruleEditRuleButton: '编辑', + ruleDeleteRuleButton: '删除', + + ruleDialogTitle: '编辑点位规则', + ruleDialogIdentifier: '标识符', + ruleDialogFieldName: '名称', + ruleDialogDefaultValue: '默认值', + ruleDialogAlarmLevel: '告警登记', + ruleDialogFieldRule: '点位规则', + ruleDialogRule: '规则', + ruleDialogRuleAttribute: '点位', + ruleDialogRuleOperator: '条件', + ruleDialogRuleValue: '数值', + + ruleDialogAlarmLevelPlaceholder: '请选择告警登记', + ruleDialogFieldRulePlaceholder: '请选择点位规则', + ruleDialogRuleAttributePlaceholder: '请选择点位', + ruleDialogRuleOperatorPlaceholder: '请选择条件', + ruleDialogRuleValuePlaceholder: '请输入数值' + }, + Device: { + moduleName: '采集设备', + index: '序号', + + deviceCode: '设备编号', + deviceName: '设备名称', + operatingStatus: '运行状态', + protocol: '采集协议', + status: '连接状态', + sampleCycle: '采集周期(s)', + isEnable: '启用', + collectionTime: '采集时间', + operate: '操作', + + search: '搜索', + reset: '重置', + create: '新增', + batchDelete: '批量删除', + export: '导出', + + placeholderDeviceCode: '请输入设备编号', + placeholderDeviceName: '请输入设备名称', + placeholderModel: '请选择设备模型', + placeholderSampleCycle: '请输入采集周期', + placeholderUrl: '请输入端点URL', + placeholderUsername: '请输入用户名', + placeholderPassword: '请输入密码', + placeholderTopic: '请输入订阅主题', + + model: '设备模型', + url: '端点URL', + username: '用户名', + password: '密码', + topic: '订阅主题', + + settingDialogTitle: '设备设置', + + connect: '连接', + disconnect: '断开连接', + + attributeModuleName: '点位', + attributeCode: '点位编码', + attributeName: '点位名称', + attributeType: '点位类型', + dataType: '数据类型', + address: '寄存器地址', + dataUnit: '单位', + ratio: '倍率', + remark: '备注', + deviceAttributeTabLabel: '设备属性', + deviceRuleTabLabel: '点位规则', + + currentDeviceLabel: '当前设备:', + + alarmHistoryTitle: '设备告警历史数据', + alarmRuleName: '规则名称', + alarmPointName: '点位名称', + alarmPointValue: '点位值', + alarmLevel: '告警等级', + alarmTime: '告警时间', + + emptyDescription: '请点击设备列表的“点位”查看采集点和点位规则', + + exportFilename: '物联设备.xls', + attributeExportFilename: '采集设备-点位管理.xls', + + attributeLatestValue: '最新值', + attributeLatestCollectionTime: '最新采集时间', + attributeSort: '顺序', + attributePlaceholderSort: '请输入顺序', + + placeholderAttributeCode: '请输入点位编码', + placeholderAttributeName: '请输入点位名称', + placeholderAttributeType: '请选择点位类型', + placeholderDataType: '请选择数据类型', + placeholderAddress: '请输入寄存器地址', + placeholderDataUnit: '请输入单位', + placeholderRatio: '请输入倍率', + placeholderRemark: '请输入备注', + + validatorDeviceCodeRequired: '设备编号不能为空', + validatorDeviceNameRequired: '设备名称不能为空', + validatorSampleCycleRequired: '采集周期不能为空', + validatorIsEnableRequired: '是否启用不能为空', + validatorUrlRequired: '端点URL不能为空', + + attributeValidatorCodeRequired: '点位编码不能为空', + attributeValidatorNameRequired: '点位名称不能为空', + attributeValidatorCodeNoChinese: '点位编码不允许输入中文', + attributeValidatorSortNumber: '顺序只能输入数字', + attributeValidatorRemarkTooLong: '备注不能超过100字', + + messageSelectDeviceRequired: '请选择一个物联设备', + messageDeviceInfoMissingForRules: '设备信息缺失,无法加载点位规则', + + gridView: '表格视图', + sudoku: '九宫格' + }, + RunReport: { + moduleName: '设备运行报表', + + searchDeviceCodeLabel: '设备编码', + searchDeviceCodePlaceholder: '请输入设备编码', + searchDeviceNameLabel: '设备名称', + searchDeviceNamePlaceholder: '请输入设备名称', + searchTimeRangeLabel: '设备运行时间', + searchTimeRangeStartPlaceholder: '开始时间', + searchTimeRangeEndPlaceholder: '结束时间', + + searchButtonText: '搜索', + resetButtonText: '重置', + exportButtonText: '导出', + + tableDeviceCodeColumn: '设备编码', + tableDeviceNameColumn: '设备名称', + tableRunningTimeColumn: '运行时间(小时)', + tableStandbyTimeColumn: '待机时间(小时)', + tableFaultTimeColumn: '故障时间(小时)', + tableWarningTimeColumn: '警告时间(小时)', + tableUtilizationRateColumn: '稼动率', + tableUtilizationRateTooltip: + '开机率 = 在线时间 / 总的时间\n在线时间 = 运行时间 + 空闲时间 + 故障时间\n稼动率 = 运行时间 / 在线时间\n开机率 =(运行时间 + 空闲时间 + 故障时间)/ 总的时间', + tablePowerOnRateColumn: '开机率', + tableStartTimeColumn: '设备运行开始时间', + tableEndTimeColumn: '设备运行结束时间', + + exportFilename: '设备运行报表.xls' + }, + RealTimeMonitoring: { + moduleName: '数据实时监控', + + searchLineCodeLabel: '产线编码', + searchLineCodePlaceholder: '请输入产线编码', + searchLineNameLabel: '产线名称', + searchLineNamePlaceholder: '请输入产线名称', + searchDeviceCodeLabel: '设备编码', + searchDeviceCodePlaceholder: '请输入设备编码', + searchDeviceNameLabel: '设备名称', + searchDeviceNamePlaceholder: '请输入设备名称', + + searchButtonText: '搜索', + resetButtonText: '重置', + exportButtonText: '导出', + + tableLineCodeColumn: '产线编码', + tableLineNameColumn: '产线名称', + tableDeviceCodeColumn: '设备编码', + tableDeviceNameColumn: '设备名称', + tableStatusColumn: '连接状态', + tableCollectionTimeColumn: '最新采集时间', + tableOperateColumn: '操作', + tableActionSingleMonitorLabel: '单设备监控', + + dialogTitle: '单设备监控', + dialogDeviceNameLabel: '设备名称:', + dialogCollectionTimeLabel: '采集时间:', + + emptyDescription: '暂无数据', + defaultGroupName: '默认', + defaultFieldLabelPrefix: '字段', + + messageDeviceInfoIncomplete: '设备信息不完整', + + exportFilename: '实时监控设备.xls' + }, + HistoryData: { + moduleName: '历史记录查询', + + searchLineCodeLabel: '产线编码', + searchLineCodePlaceholder: '请输入产线编码', + searchLineNameLabel: '产线名称', + searchLineNamePlaceholder: '请输入产线名称', + searchDeviceCodeLabel: '设备编码', + searchDeviceCodePlaceholder: '请输入设备编码', + searchDeviceNameLabel: '设备名称', + searchDeviceNamePlaceholder: '请输入设备名称', + + searchButtonText: '搜索', + resetButtonText: '重置', + exportButtonText: '导出', + + tableLineCodeColumn: '产线编码', + tableLineNameColumn: '产线名称', + tableDeviceCodeColumn: '设备编码', + tableDeviceNameColumn: '设备名称', + tableCollectionTimeColumn: '采集时间', + tableOperateColumn: '操作', + tableActionHistoryLabel: '历史记录', + + dialogTitlePrefix: '历史记录:', + dialogCollectionTimeLabel: '采集时间', + dialogCollectionTimeStartPlaceholder: '开始时间', + dialogCollectionTimeEndPlaceholder: '结束时间', + dialogSearchButtonText: '查询', + dialogResetButtonText: '重置', + dialogRecordCollectionTimePrefix: '采集时间:', + + emptyDescription: '暂无数据', + defaultFieldLabelPrefix: '字段', + + exportFilename: '历史数据设备.xls' + }, + DeviceParamAnalysis: { + moduleName: '设备运行参数分析', + + treeSearchPlaceholder: '搜索设备或参数', + + formTimeLabel: '时间', + formTimeStartPlaceholder: '开始日期', + formTimeEndPlaceholder: '结束日期', + + shortcutLast7Days: '最近 7 天', + shortcutLastWeek: '上周', + shortcutLastMonth: '上个月', + shortcutLast3Months: '三个月内', + + searchButtonText: '搜索', + resetButtonText: '重置', + + emptyDescription: '暂无数据', + emptySelectNodeDescription: '请选择左侧节点', + + selectedParamTitle: '节点:{label}{unit}', + defaultSeriesName: '参数', + + messageLoadTreeFailed: '获取树数据失败', + messageNodeNoParams: '该节点下暂无参数', + messageDeviceNoParams: '该设备下没有参数', + messageFetchChartFailed: '获取图表数据失败' + } + }, + FactoryModeling: { + FactoryStructure: { + moduleName: '厂区结构', + searchCodeLabel: '组织编码', + searchCodePlaceholder: '请输入组织编码', + searchParentLabel: '父组织', + searchParentPlaceholder: '请选择父组织', + searchNameLabel: '组织名称', + searchNamePlaceholder: '请输入组织名称', + searchOrgClassLabel: '组织等级', + searchOrgClassPlaceholder: '请选择组织等级', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + expandButtonText: '展开/折叠', + tableCodeColumn: '组织编码', + tableNameColumn: '组织名称', + tableSortColumn: '显示顺序', + tableMachineColumn: '关联设备', + tableOrgClassColumn: '组织等级', + tableOrgTypeColumn: '工序', + tableCreateTimeColumn: '创建时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + dialogCodeLabel: '编码', + dialogCodeTooltip: '厂区结构编码', + dialogCodePlaceholder: '编码保存后自动生成', + dialogParentLabel: '父组织', + dialogParentPlaceholder: '请选择父组织', + dialogNameLabel: '组织名称', + dialogNamePlaceholder: '请输入组织名称', + dialogOrgClassLabel: '组织等级', + dialogSortLabel: '显示顺序', + dialogSortTooltip: '同父级按照显示顺序从小到大排序', + dialogSortPlaceholder: '请输入显示顺序', + dialogOrgTypeLabel: '工序', + dialogOrgTypeTooltip: '来源:数据字典-工序', + dialogOrgTypePlaceholder: '请选择类型', + dialogMachineLabel: '关联设备', + dialogMachinePlaceholder: '请选择设备', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + orgTreeRootName: '顶级组织', + validatorNameRequired: '组织名称不能为空', + validatorParentRequired: '父组织不能为空', + validatorOrgClassRequired: '组织等级不能为空' + }, + FactoryWorker: { + moduleName: '工位人员', + searchNameLabel: '组织名称', + searchNamePlaceholder: '请输入组织名称', + searchStatusLabel: '组织状态', + searchStatusPlaceholder: '请选择组织状态', + searchButtonText: '搜索', + resetButtonText: '重置', + exportButtonText: '导出', + expandButtonText: '展开/折叠', + tabsZhijiang: '制浆', + tabsChengxing: '成型', + tabsHonggan: '烘干', + tabsZhuanyi: '转移', + tabsJiashi: '加湿', + tabsReya: '热压', + tabsQiebian: '切边', + tabsPanjian: '品检', + tabsDabao: '打包', + tabsTiebiao: '贴标', + tabsPinyin: '品印', + tabsSufeng: '塑封', + tabsAll: '所有', + tableNameColumn: '组织名称', + tableOrgClassColumn: '组织等级', + tableOrgTypeColumn: '类型', + tableWorkerColumn: '今日工人', + tableOperateColumn: '操作', + tableDispatchAction: '派工', + exportFileName: '产线工位.xls' + }, + ProductCategory: { + moduleName: '产品物料分类', + searchNameLabel: '分类名称', + searchNamePlaceholder: '请输入分类名称', + searchStatusLabel: '开启状态', + searchStatusPlaceholder: '请选择开启状态', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + expandButtonText: '展开/折叠', + tableCodeColumn: '分类编码', + tableNameColumn: '分类名称', + tableSortColumn: '排序', + tableStatusColumn: '状态', + tableCreateTimeColumn: '创建时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + dialogParentLabel: '上级编号', + dialogParentPlaceholder: '请选择上级编号', + dialogCodeLabel: '编码', + dialogCodePlaceholder: '请输入编码', + dialogNameLabel: '名称', + dialogNamePlaceholder: '请输入名称', + dialogSortLabel: '排序', + dialogSortPlaceholder: '请输入排序', + dialogStatusLabel: '状态', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + treeRootName: '顶级产品分类', + validatorParentRequired: '上级编号不能为空', + validatorNameRequired: '名称不能为空', + validatorCodeRequired: '编码不能为空', + validatorSortRequired: '排序不能为空', + validatorStatusRequired: '状态不能为空' + }, + ProductInformation: { + moduleName: '产品物料信息', + searchNameLabel: '名称', + searchNamePlaceholder: '请输入名称', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + tableBarCodeColumn: '编码', + tableNameColumn: '名称', + tableStandardColumn: '规格', + tableCategoryColumn: '分类', + tableUnitColumn: '单位', + tableStatusColumn: '状态', + tableCreateTimeColumn: '创建时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + qrcode: '二维码/条形码', + dialogBarCodeLabel: '编码', + dialogBarCodePlaceholder: '请输入编码', + dialogNameLabel: '名称', + dialogNamePlaceholder: '请输入名称', + dialogCategoryLabel: '分类', + dialogCategoryPlaceholder: '请选择分类', + dialogUnitLabel: '单位', + dialogUnitPlaceholder: '请选择单位', + dialogStandardLabel: '规格', + dialogStandardPlaceholder: '请输入规格', + dialogExpiryDayLabel: '保质期天数', + dialogExpiryDayPlaceholder: '请输入保质期天数', + dialogWeightLabel: '重量(g)', + dialogWeightPlaceholder: '请输入重量(g)', + dialogPurchasePriceLabel: '采购价格', + dialogPurchasePricePlaceholder: '请输入采购价格,单位:元', + dialogSalePriceLabel: '销售价格', + dialogSalePricePlaceholder: '请输入销售价格,单位:元', + dialogMinPriceLabel: '最低价格', + dialogMinPricePlaceholder: '请输入最低价格,单位:元', + dialogStatusLabel: '状态', + dialogRemarkLabel: '备注', + dialogRemarkPlaceholder: '请输入备注', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + qrcodeLoadError: '二维码加载失败', + qrcodeEmpty: '暂无二维码', + validatorNameRequired: '产品名称不能为空', + validatorBarCodeRequired: '产品条码不能为空', + validatorCategoryRequired: '产品分类编号不能为空', + validatorUnitRequired: '单位编号不能为空', + validatorStatusRequired: '产品状态不能为空' + }, + AutocodeRule: { + moduleName: '编码规则', + searchRuleCodeLabel: '规则编码', + searchRuleCodePlaceholder: '请输入规则编码', + searchRuleNameLabel: '规则名称', + searchRuleNamePlaceholder: '请输入规则名称', + searchRuleDescLabel: '描述', + searchRuleDescPlaceholder: '请输入描述', + searchRemarkLabel: '备注', + searchRemarkPlaceholder: '请输入备注', + searchIsEnableLabel: '是否启用', + searchIsEnablePlaceholder: '请选择是否启用', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + tableRuleCodeColumn: '规则编码', + tableRuleNameColumn: '规则名称', + tableBarcodeTypeColumn: '码类型', + tableRuleDescColumn: '描述', + tableMaxLengthColumn: '最大长度', + tableIsPaddedColumn: '是否补齐', + tablePaddedCharColumn: '补齐字符', + tablePaddedMethodColumn: '补齐方式', + tableIsEnableColumn: '是否启用', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + tableTestCodeAction: '测试编码', + listPartTabLabel: '编码组成', + dialogPartTabLabel: '编码规则组成', + exportFilename: '编码规则.xls', + dialogRuleCodeLabel: '规则编码', + dialogRuleCodePlaceholder: '请输入规则编码', + dialogRuleNameLabel: '规则名称', + dialogRuleNamePlaceholder: '请输入规则名称', + dialogBarcodeTypeLabel: '码类型', + barcodeTypeBarcodeLabel: '条形码', + barcodeTypeQrcodeLabel: '二维码', + dialogRuleDescLabel: '描述', + dialogRuleDescPlaceholder: '请输入描述', + dialogMaxLengthLabel: '最大长度', + dialogMaxLengthPlaceholder: '请输入最大长度', + dialogIsPaddedLabel: '是否补齐', + dialogPaddedCharLabel: '补齐字符', + dialogPaddedCharPlaceholder: '请输入补齐字符', + dialogPaddedMethodLabel: '补齐方式', + dialogRemarkLabel: '备注', + dialogRemarkPlaceholder: '请输入备注', + dialogIsEnableLabel: '是否启用', + validatorIsEnableRequired: '是否启用不能为空', + validatorRuleIdRequired: '规则ID不能为空', + validatorPartIndexRequired: '分段序号不能为空', + validatorPartLengthRequired: '分段长度不能为空', + partTableIndexColumn: '序号', + partTableIdColumn: 'ID', + partTablePartIndexColumn: '分段序号', + partTablePartTypeColumn: '分段类型', + partTablePartCodeColumn: '分段编号', + partTablePartNameColumn: '分段名称', + partTablePartLengthColumn: '分段长度', + partTableDatetimeFormatColumn: '日期时间格式', + partTableInputCharacterColumn: '输入字符', + partTableFixCharacterColumn: '固定字符', + partTableSeriaStartNoColumn: '流水号起始值', + partTableSeriaStepColumn: '流水号步长', + partTableSeriaNowNoColumn: '流水号当前值', + partTableCycleFlagColumn: '流水号是否循环', + partTableCycleMethodColumn: '循环方式', + partTableRemarkColumn: '备注', + partTableIsEnableColumn: '是否启用', + partTableCreateTimeColumn: '创建时间', + partTableOperateColumn: '操作', + partPlaceholderPartIndex: '请输入分段序号', + partPlaceholderPartCode: '请输入分段编号', + partPlaceholderPartName: '请输入分段名称', + partPlaceholderPartLength: '请输入分段长度', + partPlaceholderDatetimeFormat: '请输入日期时间格式', + partPlaceholderInputCharacter: '请输入输入字符', + partPlaceholderFixCharacter: '请输入固定字符', + partPlaceholderSeriaStartNo: '请输入流水号起始值', + partPlaceholderSeriaStep: '请输入流水号步长', + partPlaceholderSeriaNowNo: '请输入流水号当前值', + partPlaceholderRemark: '请输入备注', + addPartButtonText: '添加编码规则组成' + }, + ProductBOM: { + moduleName: '产品BOM', + searchCodeLabel: 'BOM编码', + searchCodePlaceholder: '请输入BOM编码', + searchProductLabel: '产品', + searchProductPlaceholder: '请选择产品', + searchRemarkLabel: '备注', + searchRemarkPlaceholder: '请输入备注', + searchEnableLabel: '开启状态', + searchEnablePlaceholder: '请选择是否启用', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + tableCodeColumn: 'BOM编码', + tableVersionColumn: 'BOM版本', + tableProductColumn: '产品', + tableUnitColumn: '单位', + tableYieldRateColumn: '成品率%', + tableRemarkColumn: '备注', + tableEnableColumn: '是否启用', + tableCreateTimeColumn: '创建时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + detailTabLabel: '产品BOM明细', + dialogCodeLabel: 'BOM编码', + dialogCodePlaceholder: '请输入BOM编码', + dialogVersionLabel: 'BOM版本', + dialogVersionPlaceholder: '请输入BOM版本', + dialogProductLabel: '产品', + dialogProductPlaceholder: '请选择产品', + dialogUnitLabel: '单位', + dialogUnitPlaceholder: '请选择单位', + dialogYieldRateLabel: '成品率%', + dialogYieldRatePlaceholder: '请输入成品率', + dialogRemarkLabel: '备注', + dialogRemarkPlaceholder: '请输入备注', + dialogEnableLabel: '是否启用', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + detailTableIndexColumn: '序号', + detailTableMaterialColumn: '原料', + detailTableUsageNumberColumn: '用量', + detailTableUnitColumn: '单位', + detailTableLossRateColumn: '损耗率%', + detailTableRemarkColumn: '备注', + detailTableOperateColumn: '操作', + detailMaterialPlaceholder: '请选择原料', + detailUnitPlaceholder: '请选择单位', + detailUsageNumberPlaceholder: '请输入用量', + detailLossRatePlaceholder: '请输入损耗率', + detailRemarkPlaceholder: '请输入备注', + detailAddButtonText: '添加产品BOM明细', + validatorCodeRequired: 'BOM编码不能为空', + validatorVersionRequired: 'BOM版本不能为空', + validatorProductRequired: '产品不能为空', + validatorUnitRequired: '单位不能为空', + validatorEnableRequired: '是否启用不能为空', + validatorDetailMaterialRequired: '原料不能为空', + validatorDetailBomRequired: 'BOM 不能为空', + validatorDetailUsageNumberRequired: '用量不能为空' + }, + WorkTeam: { + moduleName: '班组管理', + searchTeamNameLabel: '班组名称', + searchTeamNamePlaceholder: '请输入班组名称', + searchProcessLabel: '工序', + searchProcessPlaceholder: '请选择工序', + searchRemarkLabel: '备注', + searchRemarkPlaceholder: '请输入备注', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + tabsAll: '所有', + tabsDay: '白班', + tabsNight: '夜班', + tabsLongDay: '长白班', + tableTeamNameColumn: '班组名称', + tableLeaderColumn: '组长', + tableGroupTypeColumn: '班组类型', + tableWorkTimeColumn: '工作时间', + tableProcessColumn: '工序', + tableRemarkColumn: '备注', + tableEnableColumn: '是否启用', + tableCreateTimeColumn: '创建时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + detailTabLabel: '班组成员', + dialogTeamNameLabel: '班组名称', + dialogTeamNamePlaceholder: '请输入班组名称', + dialogProcessLabel: '工序', + dialogProcessTooltip: '来源:数据字典-工序', + dialogGroupTypeLabel: '班组类型', + dialogGroupTypeTooltip: '来源:数据字典-班组类型', + dialogWorkTimeLabel: '工作时间', + dialogWorkTimeRangeSeparator: '至', + dialogWorkTimeStartPlaceholder: '开始时间', + dialogWorkTimeEndPlaceholder: '结束时间', + dialogRemarkLabel: '备注', + dialogRemarkPlaceholder: '请输入备注', + dialogEnableLabel: '是否启用', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + detailAddButtonText: '新增', + detailTableJobNoColumn: '工号', + detailTableRoleColumn: '角色', + detailTableRemarkColumn: '备注', + detailTableCreateTimeColumn: '创建时间', + detailTableOperateColumn: '操作', + detailDialogJobNoLabel: '工号', + detailDialogJobNoPlaceholder: '请选择工号', + detailDialogRoleLabel: '角色', + detailDialogRoleTooltip: '来源:数据字典-班组成员角色', + detailDialogRemarkLabel: '备注', + detailDialogRemarkPlaceholder: '请输入备注', + detailDialogMemberSuffix: '成员', + validatorTeamNameRequired: '班组名称不能为空', + validatorProcessRequired: '工序类型不能为空', + validatorGroupTypeRequired: '班组类型不能为空', + validatorEnableRequired: '是否启用不能为空', + validatorDetailUserRequired: '用户ID不能为空', + validatorDetailRoleRequired: '角色不能为空', + validatorSelectWorkTeamFirst: '请选择一个生产班组' + }, + + ProductUnit: { + moduleName: '单位管理', + searchNameLabel: '单位名称', + searchNamePlaceholder: '请输入单位名称', + searchStatusLabel: '单位状态', + searchStatusPlaceholder: '请选择单位状态', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出', + tableNameColumn: '单位名称', + tablePrimaryFlagColumn: '是否主单位', + tableChangeRateColumn: '与主单位换算比例', + tableStatusColumn: '状态', + tableCreateTimeColumn: '创建时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDeleteAction: '删除', + dialogNameLabel: '单位名称', + dialogNamePlaceholder: '请输入单位名称', + dialogPrimaryFlagLabel: '是否主单位', + dialogPrimaryUnitLabel: '关联主单位', + dialogPrimaryUnitPlaceholder: '请选择主单位', + dialogChangeRateLabel: '换算比例', + dialogChangeRatePlaceholder: '请输入换算比例', + dialogStatusLabel: '单位状态', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + validatorNameRequired: '单位名称不能为空', + validatorStatusRequired: '单位状态不能为空', + validatorPrimaryFlagRequired: '是否主单位不能为空' + }, + //假日管理 + CalHoliday: { + setWorkingDays: '设置工作日', + setHoliday: '设置休息日', + lastMonth: '上个月', + today: '今天', + nextMonth: '下个月', + work: '班', + rest: '休', + searchDateStartPlaceholder: '开始日期', + searchDateEndPlaceholder: '结束日期', + searchTypeLabel: '类型', + searchTypePlaceholder: '请选择类型', + searchRemarkLabel: '备注', + searchRemarkPlaceholder: '请输入备注', + searchButtonText: '搜索', + resetButtonText: '重置', + addButtonText: '新增', + exportButtonText: '导出' + }, + //esop文件管理 + EsopFile: { + searchFileNameLabel: '文件名称', + searchFileNamePlaceholder: '请输入文件名', + searchClassificationLabel: '文件分类', + searchClassificationPlaceholder: '请选择文件分类', + searchStatusLabel: '文件状态', + searchStatusPlaceholder: '请选择文件状态', + searchButtonText: '搜索', + resetButtonText: '重置', + uploadButtonText: '文件上传', + addButtonText: '新增', + exportButtonText: '导出', + tableCodeColumn: '文件编码', + tableNameColumn: '文件名称', + tableClassificationColumn: '文件分类', + tableTypeColumn: '文件类型', + tableStatusColumn: '文件状态', + tableCreatorNameColumn: '上传人', + tableCreateTimeColumn: '上传时间', + tableOperateColumn: '操作', + tableEditAction: '编辑', + tableDownloadAction: '下载', + tableDeleteAction: '删除', + dialogFileNameLabel: '文件名', + dialogFileNamePlaceholder: '请输入文件名', + dialogClassificationLabel: '文件分类', + dialogClassificationPlaceholder: '请选择文件分类', + dialogStatusLabel: '文件状态', + dialogCancelButton: '取 消', + dialogSubmitButton: '确 定', + messageOne: '提示:仅允许导入 ', + messageTwo: ' 格式文件!', + messageThree: ' 将文件拖到此处,或', + messageFour: '点击上传', + validatorNameRequired: '文件名不能为空', + validatorStatusRequired: '文件状态不能为空' + } + } } diff --git a/src/router/modules/remaining.ts b/src/router/modules/remaining.ts index 794778c..a3e17f1 100644 --- a/src/router/modules/remaining.ts +++ b/src/router/modules/remaining.ts @@ -732,7 +732,7 @@ const remainingRouter: AppRouteRecordRaw[] = [ hidden: true, activeMenu: '/iot/device/device' }, - component: () => import('@/views/iot/device/device/detail/index.vue') + component: () => import('@/views/iot/device/index.vue') }, { path: 'ota/operation/firmware/detail/:id', diff --git a/src/utils/dict.ts b/src/utils/dict.ts index ec54b40..eb1eebf 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -250,5 +250,8 @@ export enum DICT_TYPE { IOT_OTA_TASK_STATUS = 'iot_ota_task_status', // IoT OTA 任务状态 IOT_OTA_TASK_RECORD_STATUS = 'iot_ota_task_record_status', // IoT OTA 记录状态 IOT_MODBUS_MODE = 'iot_modbus_mode', // IoT Modbus 工作模式 - IOT_MODBUS_FRAME_FORMAT = 'iot_modbus_frame_format' // IoT Modbus 帧格式 + IOT_MODBUS_FRAME_FORMAT = 'iot_modbus_frame_format', // IoT Modbus 帧格式 + IOT_PROTOCOL = 'iot_protocol', + IOT_DEVICE_DATA_TYPE = 'iot_device_data_type', + PRIMARY_FLAG = 'primary_flag' } diff --git a/src/views/cus/management/ManagementForm.vue b/src/views/cus/management/ManagementForm.vue index 62fa932..511a442 100644 --- a/src/views/cus/management/ManagementForm.vue +++ b/src/views/cus/management/ManagementForm.vue @@ -4,7 +4,7 @@ ref="formRef" :model="formData" :rules="formRules" - min-label-width="100px" + label-width="100px" v-loading="formLoading || geoInitLoading" :element-loading-text="t('cus.management.loading.countries')" > diff --git a/src/views/erp/product/unit/ProductUnitForm.vue b/src/views/erp/product/unit/ProductUnitForm.vue index bced5db..9965e5d 100644 --- a/src/views/erp/product/unit/ProductUnitForm.vue +++ b/src/views/erp/product/unit/ProductUnitForm.vue @@ -4,18 +4,65 @@ ref="formRef" :model="formData" :rules="formRules" - label-width="100px" + label-width="120px" v-loading="formLoading" > - - + + - + + + + {{ dict.label }} + + + + + + + + + + + + {{ dict.label }} @@ -23,14 +70,18 @@ diff --git a/src/views/erp/product/unit/index.vue b/src/views/erp/product/unit/index.vue index 04259ac..d4080f5 100644 --- a/src/views/erp/product/unit/index.vue +++ b/src/views/erp/product/unit/index.vue @@ -1,6 +1,4 @@