diff --git a/apps/web-antdv-next/package.json b/apps/web-antdv-next/package.json index cb6a4aa60..b9539e99d 100644 --- a/apps/web-antdv-next/package.json +++ b/apps/web-antdv-next/package.json @@ -54,12 +54,14 @@ "camunda-bpmn-moddle": "catalog:", "cropperjs": "catalog:", "dayjs": "catalog:", + "dhtmlx-gantt": "catalog:", "diagram-js": "catalog:", "fast-xml-parser": "catalog:", "highlight.js": "catalog:", "pinia": "catalog:", "steady-xml": "catalog:", "tinymce": "catalog:", + "tyme4ts": "catalog:", "video.js": "catalog:", "vue": "catalog:", "vue-dompurify-html": "catalog:", diff --git a/apps/web-antdv-next/src/adapter/component/index.ts b/apps/web-antdv-next/src/adapter/component/index.ts index 068b04b87..b0ab8b53a 100644 --- a/apps/web-antdv-next/src/adapter/component/index.ts +++ b/apps/web-antdv-next/src/adapter/component/index.ts @@ -366,7 +366,7 @@ function cropImage(file: File, aspectRatio: string | undefined) { closable: false, cancelText: $t('common.cancel'), okText: $t('ui.crop.confirm'), - destroyOnHidden: true, + destroyOnClose: true, onOk: async () => { const cropper = cropperRef.value; if (!cropper) { @@ -625,7 +625,6 @@ export type ComponentType = | 'Space' | 'Switch' | 'TextArea' - | 'TextArea' | 'TimePicker' | 'TimeRangePicker' | 'TreeSelect' @@ -744,8 +743,8 @@ async function initComponentAdapter() { copyPreferencesSuccess: (title, content) => { notification.success({ description: content, - title, placement: 'bottomRight', + title, }); }, }); diff --git a/apps/web-antdv-next/src/adapter/form.ts b/apps/web-antdv-next/src/adapter/form.ts index b386c3860..0d5bb167b 100644 --- a/apps/web-antdv-next/src/adapter/form.ts +++ b/apps/web-antdv-next/src/adapter/form.ts @@ -65,5 +65,6 @@ const useVbenForm = useForm; export { initSetupVbenForm, useVbenForm, z }; +export type VbenFormApi = ReturnType[1]; // add by 芋艿:用于 data.ts 表单 schema 内调用 setFieldValue export type VbenFormSchema = FormSchema; export type VbenFormProps = FormProps; diff --git a/apps/web-antdv-next/src/api/iot/alert/config/index.ts b/apps/web-antdv-next/src/api/iot/alert/config/index.ts index 26e114c0c..a1d3bdfcc 100644 --- a/apps/web-antdv-next/src/api/iot/alert/config/index.ts +++ b/apps/web-antdv-next/src/api/iot/alert/config/index.ts @@ -3,37 +3,24 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace AlertConfigApi { - /** IoT 告警配置 VO */ + /** IoT 告警配置 */ export interface AlertConfig { id?: number; - name: string; + name?: string; description?: string; level?: number; status?: number; sceneRuleIds?: number[]; receiveUserIds?: number[]; - receiveUserNames?: string; + receiveUserNames?: string[]; receiveTypes?: number[]; + smsTemplateCode?: string; + mailTemplateCode?: string; + notifyTemplateCode?: string; createTime?: Date; - updateTime?: Date; } } -/** IoT 告警配置 */ -export interface AlertConfig { - id?: number; - name?: string; - description?: string; - level?: number; - status?: number; - sceneRuleIds?: number[]; - receiveUserIds?: number[]; - receiveUserNames?: string; - receiveTypes?: number[]; - createTime?: Date; - updateTime?: Date; -} - /** 查询告警配置分页 */ export function getAlertConfigPage(params: PageParam) { return requestClient.get>( @@ -49,20 +36,20 @@ export function getAlertConfig(id: number) { ); } -/** 查询所有告警配置列表 */ -export function getAlertConfigList() { +/** 获取告警配置简单列表 */ +export function getSimpleAlertConfigList() { return requestClient.get( - '/iot/alert-config/list', + '/iot/alert-config/simple-list', ); } /** 新增告警配置 */ -export function createAlertConfig(data: AlertConfig) { +export function createAlertConfig(data: AlertConfigApi.AlertConfig) { return requestClient.post('/iot/alert-config/create', data); } /** 修改告警配置 */ -export function updateAlertConfig(data: AlertConfig) { +export function updateAlertConfig(data: AlertConfigApi.AlertConfig) { return requestClient.put('/iot/alert-config/update', data); } @@ -70,25 +57,3 @@ export function updateAlertConfig(data: AlertConfig) { export function deleteAlertConfig(id: number) { return requestClient.delete(`/iot/alert-config/delete?id=${id}`); } - -/** 批量删除告警配置 */ -export function deleteAlertConfigList(ids: number[]) { - return requestClient.delete('/iot/alert-config/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 启用/禁用告警配置 */ -export function toggleAlertConfig(id: number, enabled: boolean) { - return requestClient.put(`/iot/alert-config/toggle`, { - id, - enabled, - }); -} - -/** 获取告警配置简单列表 */ -export function getSimpleAlertConfigList() { - return requestClient.get( - '/iot/alert-config/simple-list', - ); -} diff --git a/apps/web-antdv-next/src/api/iot/alert/record/index.ts b/apps/web-antdv-next/src/api/iot/alert/record/index.ts index 6d2afcfcf..fea6e17a4 100644 --- a/apps/web-antdv-next/src/api/iot/alert/record/index.ts +++ b/apps/web-antdv-next/src/api/iot/alert/record/index.ts @@ -3,41 +3,21 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace AlertRecordApi { - /** IoT 告警记录 VO */ + /** IoT 告警记录 */ export interface AlertRecord { id?: number; configId?: number; configName?: string; configLevel?: number; deviceId?: number; - deviceName?: string; productId?: number; - productName?: string; - deviceMessage?: string; + deviceMessage?: any; processStatus?: boolean; processRemark?: string; - processTime?: Date; createTime?: Date; } } -/** IoT 告警记录 */ -export interface AlertRecord { - id?: number; - configId?: number; - configName?: string; - configLevel?: number; - deviceId?: number; - deviceName?: string; - productId?: number; - productName?: string; - deviceMessage?: string; - processStatus?: boolean; - processRemark?: string; - processTime?: Date; - createTime?: Date; -} - /** 查询告警记录分页 */ export function getAlertRecordPage(params: PageParam) { return requestClient.get>( @@ -54,29 +34,9 @@ export function getAlertRecord(id: number) { } /** 处理告警记录 */ -export function processAlertRecord(id: number, remark?: string) { +export function processAlertRecord(id: number, processRemark?: string) { return requestClient.put('/iot/alert-record/process', { id, - remark, - }); -} - -/** 批量处理告警记录 */ -export function batchProcessAlertRecord(ids: number[], remark?: string) { - return requestClient.put('/iot/alert-record/batch-process', { - ids, - remark, - }); -} - -/** 删除告警记录 */ -export function deleteAlertRecord(id: number) { - return requestClient.delete(`/iot/alert-record/delete?id=${id}`); -} - -/** 批量删除告警记录 */ -export function deleteAlertRecordList(ids: number[]) { - return requestClient.delete('/iot/alert-record/delete-list', { - params: { ids: ids.join(',') }, + processRemark, }); } diff --git a/apps/web-antdv-next/src/api/iot/device/device/index.ts b/apps/web-antdv-next/src/api/iot/device/device/index.ts index ca2a17ada..a55b017d5 100644 --- a/apps/web-antdv-next/src/api/iot/device/device/index.ts +++ b/apps/web-antdv-next/src/api/iot/device/device/index.ts @@ -150,11 +150,8 @@ export function importDeviceTemplate() { /** 导入设备 */ export function importDevice(file: File, updateSupport: boolean) { return requestClient.upload( - '/iot/device/import', - { - file, - updateSupport, - }, + `/iot/device/import?updateSupport=${updateSupport}`, + { file }, ); } @@ -168,7 +165,7 @@ export function getLatestDeviceProperties(params: any) { /** 获取设备属性历史数据 */ export function getHistoryDevicePropertyList(params: any) { - return requestClient.get>( + return requestClient.get( '/iot/device/property/history-list', { params }, ); diff --git a/apps/web-antdv-next/src/api/iot/ota/firmware/index.ts b/apps/web-antdv-next/src/api/iot/ota/firmware/index.ts index 1b8ae5b69..7fd7469ca 100644 --- a/apps/web-antdv-next/src/api/iot/ota/firmware/index.ts +++ b/apps/web-antdv-next/src/api/iot/ota/firmware/index.ts @@ -3,39 +3,22 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace IoTOtaFirmwareApi { - /** IoT OTA 固件 VO */ + /** IoT OTA 固件信息 */ export interface Firmware { id?: number; - name: string; - version: string; - productId: number; - productName?: string; + name?: string; description?: string; + version?: string; + productId?: number; + productName?: string; fileUrl?: string; - fileMd5?: string; fileSize?: number; - status?: number; + fileDigestAlgorithm?: string; + fileDigestValue?: string; createTime?: Date; - updateTime?: Date; } } -/** IoT OTA 固件 */ -export interface IoTOtaFirmware { - id?: number; - name?: string; - version?: string; - productId?: number; - productName?: string; - description?: string; - fileUrl?: string; - fileMd5?: string; - fileSize?: number; - status?: number; - createTime?: Date; - updateTime?: Date; -} - /** 查询 OTA 固件分页 */ export function getOtaFirmwarePage(params: PageParam) { return requestClient.get>( @@ -52,12 +35,12 @@ export function getOtaFirmware(id: number) { } /** 新增 OTA 固件 */ -export function createOtaFirmware(data: IoTOtaFirmware) { +export function createOtaFirmware(data: IoTOtaFirmwareApi.Firmware) { return requestClient.post('/iot/ota/firmware/create', data); } /** 修改 OTA 固件 */ -export function updateOtaFirmware(data: IoTOtaFirmware) { +export function updateOtaFirmware(data: IoTOtaFirmwareApi.Firmware) { return requestClient.put('/iot/ota/firmware/update', data); } @@ -65,26 +48,3 @@ export function updateOtaFirmware(data: IoTOtaFirmware) { export function deleteOtaFirmware(id: number) { return requestClient.delete(`/iot/ota/firmware/delete?id=${id}`); } - -/** 批量删除 OTA 固件 */ -export function deleteOtaFirmwareList(ids: number[]) { - return requestClient.delete('/iot/ota/firmware/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 更新 OTA 固件状态 */ -export function updateOtaFirmwareStatus(id: number, status: number) { - return requestClient.put(`/iot/ota/firmware/update-status`, { - id, - status, - }); -} - -/** 根据产品 ID 查询固件列表 */ -export function getOtaFirmwareListByProductId(productId: number) { - return requestClient.get( - '/iot/ota/firmware/list-by-product-id', - { params: { productId } }, - ); -} diff --git a/apps/web-antdv-next/src/api/iot/ota/task/index.ts b/apps/web-antdv-next/src/api/iot/ota/task/index.ts index 25ef2429f..7f4f5d6fb 100644 --- a/apps/web-antdv-next/src/api/iot/ota/task/index.ts +++ b/apps/web-antdv-next/src/api/iot/ota/task/index.ts @@ -3,45 +3,21 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace IoTOtaTaskApi { - /** IoT OTA 升级任务 VO */ + /** IoT OTA 升级任务 */ export interface Task { id?: number; - name: string; + name?: string; description?: string; - firmwareId: number; - firmwareName?: string; - productId?: number; - productName?: string; + firmwareId?: number; + status?: number; deviceScope?: number; deviceIds?: number[]; - status?: number; - successCount?: number; - failureCount?: number; - pendingCount?: number; + deviceTotalCount?: number; + deviceSuccessCount?: number; createTime?: Date; - updateTime?: Date; } } -/** IoT OTA 升级任务 */ -export interface OtaTask { - id?: number; - name?: string; - description?: string; - firmwareId?: number; - firmwareName?: string; - productId?: number; - productName?: string; - deviceScope?: number; - deviceIds?: number[]; - status?: number; - successCount?: number; - failureCount?: number; - pendingCount?: number; - createTime?: Date; - updateTime?: Date; -} - /** 查询 OTA 升级任务分页 */ export function getOtaTaskPage(params: PageParam) { return requestClient.get>( @@ -56,43 +32,11 @@ export function getOtaTask(id: number) { } /** 新增 OTA 升级任务 */ -export function createOtaTask(data: OtaTask) { +export function createOtaTask(data: IoTOtaTaskApi.Task) { return requestClient.post('/iot/ota/task/create', data); } -/** 修改 OTA 升级任务 */ -export function updateOtaTask(data: OtaTask) { - return requestClient.put('/iot/ota/task/update', data); -} - -/** 删除 OTA 升级任务 */ -export function deleteOtaTask(id: number) { - return requestClient.delete(`/iot/ota/task/delete?id=${id}`); -} - -/** 批量删除 OTA 升级任务 */ -export function deleteOtaTaskList(ids: number[]) { - return requestClient.delete('/iot/ota/task/delete-list', { - params: { ids: ids.join(',') }, - }); -} - /** 取消 OTA 升级任务 */ export function cancelOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/cancel?id=${id}`); -} - -/** 启动 OTA 升级任务 */ -export function startOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/start?id=${id}`); -} - -/** 暂停 OTA 升级任务 */ -export function pauseOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/pause?id=${id}`); -} - -/** 恢复 OTA 升级任务 */ -export function resumeOtaTask(id: number) { - return requestClient.put(`/iot/ota/task/resume?id=${id}`); + return requestClient.post(`/iot/ota/task/cancel?id=${id}`); } diff --git a/apps/web-antdv-next/src/api/iot/ota/task/record/index.ts b/apps/web-antdv-next/src/api/iot/ota/task/record/index.ts index 2d66a422f..29eada8b6 100644 --- a/apps/web-antdv-next/src/api/iot/ota/task/record/index.ts +++ b/apps/web-antdv-next/src/api/iot/ota/task/record/index.ts @@ -3,44 +3,24 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace IoTOtaTaskRecordApi { - /** IoT OTA 升级任务记录 VO */ + /** IoT OTA 升级任务记录 */ export interface TaskRecord { id?: number; - taskId: number; - taskName?: string; - deviceId: number; - deviceName?: string; firmwareId?: number; - firmwareName?: string; firmwareVersion?: string; + taskId?: number; + deviceId?: string; + deviceName?: string; + currentVersion?: string; + fromFirmwareId?: number; + fromFirmwareVersion?: string; status?: number; progress?: number; - errorMessage?: string; - startTime?: Date; - endTime?: Date; - createTime?: Date; + description?: string; + updateTime?: Date; } } -// TODO @AI:这里应该拿到 IoTOtaTaskRecordApi 里 -/** IoT OTA 升级任务记录 */ -export interface OtaTaskRecord { - id?: number; - taskId?: number; - taskName?: string; - deviceId?: number; - deviceName?: string; - firmwareId?: number; - firmwareName?: string; - firmwareVersion?: string; - status?: number; - progress?: number; - errorMessage?: string; - startTime?: Date; - endTime?: Date; - createTime?: Date; -} - /** 查询 OTA 升级任务记录分页 */ export function getOtaTaskRecordPage(params: PageParam) { return requestClient.get>( @@ -49,48 +29,12 @@ export function getOtaTaskRecordPage(params: PageParam) { ); } -/** 查询 OTA 升级任务记录详情 */ -export function getOtaTaskRecord(id: number) { - return requestClient.get( - `/iot/ota/task/record/get?id=${id}`, - ); -} - -/** 根据任务 ID 查询记录列表 */ -export function getOtaTaskRecordListByTaskId(taskId: number) { - return requestClient.get( - '/iot/ota/task/record/list-by-task-id', - { params: { taskId } }, - ); -} - -/** 根据设备 ID 查询记录列表 */ -export function getOtaTaskRecordListByDeviceId(deviceId: number) { - return requestClient.get( - '/iot/ota/task/record/list-by-device-id', - { params: { deviceId } }, - ); -} - -/** 根据固件 ID 查询记录列表 */ -export function getOtaTaskRecordListByFirmwareId(firmwareId: number) { - return requestClient.get( - '/iot/ota/task/record/list-by-firmware-id', - { params: { firmwareId } }, - ); -} - -/** 重试升级任务记录 */ -export function retryOtaTaskRecord(id: number) { - return requestClient.put(`/iot/ota/task/record/retry?id=${id}`); -} - -/** 取消升级任务记录 */ +/** 取消 OTA 升级任务记录 */ export function cancelOtaTaskRecord(id: number) { return requestClient.put(`/iot/ota/task/record/cancel?id=${id}`); } -/** 获取升级任务记录状态统计 */ +/** 获取 OTA 升级任务记录状态统计 */ export function getOtaTaskRecordStatusStatistics( firmwareId?: number, taskId?: number, diff --git a/apps/web-antdv-next/src/api/iot/product/category/index.ts b/apps/web-antdv-next/src/api/iot/product/category/index.ts index 24d02ed3b..45ce4ccdb 100644 --- a/apps/web-antdv-next/src/api/iot/product/category/index.ts +++ b/apps/web-antdv-next/src/api/iot/product/category/index.ts @@ -7,11 +7,10 @@ export namespace IotProductCategoryApi { export interface ProductCategory { id?: number; // 分类 ID name: string; // 分类名称 - parentId?: number; // 父级分类 ID sort?: number; // 分类排序 status?: number; // 分类状态 description?: string; // 分类描述 - createTime?: string; // 创建时间 + createTime?: Date; // 创建时间 } } diff --git a/apps/web-antdv-next/src/api/iot/product/product/index.ts b/apps/web-antdv-next/src/api/iot/product/product/index.ts index f77255f4d..9b4a88ed6 100644 --- a/apps/web-antdv-next/src/api/iot/product/product/index.ts +++ b/apps/web-antdv-next/src/api/iot/product/product/index.ts @@ -20,8 +20,6 @@ export namespace IotProductApi { deviceType?: number; // 设备类型 netType?: number; // 联网方式 serializeType?: string; // 序列化类型 - dataFormat?: number; // 数据格式 - validateType?: number; // 认证方式 registerEnabled?: boolean; // 是否开启动态注册 deviceCount?: number; // 设备数量 createTime?: Date; // 创建时间 @@ -103,3 +101,10 @@ export function getProductByKey(productKey: string) { params: { productKey }, }); } + +/** 同步产品物模型 TDengine 超级表结构 */ +export function syncProductPropertyTable(productId: number) { + return requestClient.post( + `/iot/product/sync-property-table?productId=${productId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/iot/rule/data/rule/index.ts b/apps/web-antdv-next/src/api/iot/rule/data/rule/index.ts index 55e50184a..e9ba120b2 100644 --- a/apps/web-antdv-next/src/api/iot/rule/data/rule/index.ts +++ b/apps/web-antdv-next/src/api/iot/rule/data/rule/index.ts @@ -3,45 +3,21 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; export namespace DataRuleApi { - /** IoT 数据流转规则 VO */ - export interface Rule { + /** IoT 数据流转规则 */ + export interface DataRule { id?: number; - name: string; + name?: string; description?: string; status?: number; - productId?: number; - productKey?: string; - sourceConfigs?: SourceConfig[]; + sourceConfigs?: any[]; sinkIds?: number[]; createTime?: Date; } - - /** IoT 数据源配置 */ - export interface SourceConfig { - productId?: number; - productKey?: string; - deviceId?: number; - type?: string; - topic?: string; - } -} - -/** IoT 数据流转规则 */ -export interface DataRule { - id?: number; - name?: string; - description?: string; - status?: number; - productId?: number; - productKey?: string; - sourceConfigs?: any[]; - sinkIds?: number[]; - createTime?: Date; } /** 查询数据流转规则分页 */ export function getDataRulePage(params: PageParam) { - return requestClient.get>( + return requestClient.get>( '/iot/data-rule/page', { params }, ); @@ -49,16 +25,16 @@ export function getDataRulePage(params: PageParam) { /** 查询数据流转规则详情 */ export function getDataRule(id: number) { - return requestClient.get(`/iot/data-rule/get?id=${id}`); + return requestClient.get(`/iot/data-rule/get?id=${id}`); } /** 新增数据流转规则 */ -export function createDataRule(data: DataRule) { +export function createDataRule(data: DataRuleApi.DataRule) { return requestClient.post('/iot/data-rule/create', data); } /** 修改数据流转规则 */ -export function updateDataRule(data: DataRule) { +export function updateDataRule(data: DataRuleApi.DataRule) { return requestClient.put('/iot/data-rule/update', data); } @@ -66,18 +42,3 @@ export function updateDataRule(data: DataRule) { export function deleteDataRule(id: number) { return requestClient.delete(`/iot/data-rule/delete?id=${id}`); } - -/** 批量删除数据流转规则 */ -export function deleteDataRuleList(ids: number[]) { - return requestClient.delete('/iot/data-rule/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 更新数据流转规则状态 */ -export function updateDataRuleStatus(id: number, status: number) { - return requestClient.put(`/iot/data-rule/update-status`, { - id, - status, - }); -} diff --git a/apps/web-antdv-next/src/api/iot/rule/data/sink/index.ts b/apps/web-antdv-next/src/api/iot/rule/data/sink/index.ts index 4614c2a6e..3c26df91d 100644 --- a/apps/web-antdv-next/src/api/iot/rule/data/sink/index.ts +++ b/apps/web-antdv-next/src/api/iot/rule/data/sink/index.ts @@ -2,101 +2,147 @@ import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; +interface BaseConfig { + type: string; +} + export namespace DataSinkApi { /** IoT 数据流转目的 VO */ - export interface Sink { + export interface DataSink { id?: number; - name: string; + name?: string; description?: string; status?: number; - type: string; - config?: any; + direction?: number; + type?: number; + config?: + | DatabaseConfig + | HttpConfig + | KafkaMQConfig + | MqttConfig + | RabbitMQConfig + | RedisStreamMQConfig + | RocketMQConfig + | TcpConfig + | WebSocketConfig; createTime?: Date; } + + /** HTTP 配置 */ + export interface HttpConfig extends BaseConfig { + url: string; + method: string; + headers: Record; + query: Record; + body: string; + } + + /** TCP 配置 */ + export interface TcpConfig extends BaseConfig { + host: string; + port: number; + connectTimeoutMs: number; + readTimeoutMs: number; + ssl: boolean; + sslCertPath: string; + dataFormat: string; + heartbeatIntervalMs: number; + reconnectIntervalMs: number; + maxReconnectAttempts: number; + } + + /** WebSocket 配置 */ + export interface WebSocketConfig extends BaseConfig { + serverUrl: string; + connectTimeoutMs: number; + sendTimeoutMs: number; + heartbeatIntervalMs: number; + heartbeatMessage: string; + subprotocols: string; + customHeaders: string; + verifySslCert: boolean; + dataFormat: string; + reconnectIntervalMs: number; + maxReconnectAttempts: number; + enableCompression: boolean; + sendRetryCount: number; + sendRetryIntervalMs: number; + } + + /** MQTT 配置 */ + export interface MqttConfig extends BaseConfig { + url: string; + username: string; + password: string; + clientId: string; + topic: string; + } + + /** Database 配置 */ + export interface DatabaseConfig extends BaseConfig { + jdbcUrl: string; + username: string; + password: string; + tableName: string; + } + + /** RocketMQ 配置 */ + export interface RocketMQConfig extends BaseConfig { + nameServer: string; + accessKey: string; + secretKey: string; + group: string; + topic: string; + tags: string; + } + + /** Kafka 配置 */ + export interface KafkaMQConfig extends BaseConfig { + bootstrapServers: string; + username: string; + password: string; + ssl: boolean; + topic: string; + } + + /** RabbitMQ 配置 */ + export interface RabbitMQConfig extends BaseConfig { + host: string; + port: number; + virtualHost: string; + username: string; + password: string; + exchange: string; + routingKey: string; + queue: string; + } + + /** Redis Stream MQ 配置 */ + export interface RedisStreamMQConfig extends BaseConfig { + host: string; + port: number; + password: string; + database: number; + topic: string; + } } -/** IoT 数据流转目的 */ -export interface DataSinkVO { - id?: number; - name?: string; - description?: string; - status?: number; - type?: string; - config?: any; - createTime?: Date; -} - -/** IoT 数据目的类型枚举 */ -export enum IotDataSinkTypeEnum { - HTTP = 'HTTP', - KAFKA = 'KAFKA', - MQTT = 'MQTT', - RABBITMQ = 'RABBITMQ', - REDIS_STREAM = 'REDIS_STREAM', - ROCKETMQ = 'ROCKETMQ', -} - -/** HTTP 配置 */ -export interface HttpConfig { - url?: string; - method?: string; - headers?: Record; - timeout?: number; -} - -/** MQTT 配置 */ -export interface MqttConfig { - broker?: string; - port?: number; - topic?: string; - username?: string; - password?: string; - clientId?: string; - qos?: number; -} - -/** Kafka 配置 */ -export interface KafkaMQConfig { - bootstrapServers?: string; - topic?: string; - acks?: string; - retries?: number; - batchSize?: number; -} - -/** RabbitMQ 配置 */ -export interface RabbitMQConfig { - host?: string; - port?: number; - virtualHost?: string; - username?: string; - password?: string; - exchange?: string; - routingKey?: string; - queue?: string; -} - -/** RocketMQ 配置 */ -export interface RocketMQConfig { - nameServer?: string; - topic?: string; - tag?: string; - producerGroup?: string; -} - -/** Redis Stream 配置 */ -export interface RedisStreamMQConfig { - host?: string; - port?: number; - password?: string; - database?: number; - streamKey?: string; - maxLen?: number; -} +/** 数据流转目的类型 */ +export const IotDataSinkTypeEnum = { + HTTP: 1, + TCP: 2, + WEBSOCKET: 3, + MQTT: 10, + DATABASE: 20, + REDIS_STREAM: 21, + ROCKETMQ: 30, + RABBITMQ: 31, + KAFKA: 32, +} as const; /** 查询数据流转目的分页 */ export function getDataSinkPage(params: PageParam) { - return requestClient.get>( + return requestClient.get>( '/iot/data-sink/page', { params }, ); @@ -104,26 +150,23 @@ export function getDataSinkPage(params: PageParam) { /** 查询数据流转目的详情 */ export function getDataSink(id: number) { - return requestClient.get(`/iot/data-sink/get?id=${id}`); + return requestClient.get(`/iot/data-sink/get?id=${id}`); } -/** 查询所有数据流转目的列表 */ -export function getDataSinkList() { - return requestClient.get('/iot/data-sink/list'); -} - -/** 查询数据流转目的简单列表 */ +/** 查询数据流转目的(精简)列表 */ export function getDataSinkSimpleList() { - return requestClient.get('/iot/data-sink/simple-list'); + return requestClient.get( + '/iot/data-sink/simple-list', + ); } /** 新增数据流转目的 */ -export function createDataSink(data: DataSinkVO) { +export function createDataSink(data: DataSinkApi.DataSink) { return requestClient.post('/iot/data-sink/create', data); } /** 修改数据流转目的 */ -export function updateDataSink(data: DataSinkVO) { +export function updateDataSink(data: DataSinkApi.DataSink) { return requestClient.put('/iot/data-sink/update', data); } @@ -131,18 +174,3 @@ export function updateDataSink(data: DataSinkVO) { export function deleteDataSink(id: number) { return requestClient.delete(`/iot/data-sink/delete?id=${id}`); } - -/** 批量删除数据流转目的 */ -export function deleteDataSinkList(ids: number[]) { - return requestClient.delete('/iot/data-sink/delete-list', { - params: { ids: ids.join(',') }, - }); -} - -/** 更新数据流转目的状态 */ -export function updateDataSinkStatus(id: number, status: number) { - return requestClient.put(`/iot/data-sink/update-status`, { - id, - status, - }); -} diff --git a/apps/web-antdv-next/src/api/iot/rule/scene/index.ts b/apps/web-antdv-next/src/api/iot/rule/scene/index.ts index 9a8acf758..23549f1ad 100644 --- a/apps/web-antdv-next/src/api/iot/rule/scene/index.ts +++ b/apps/web-antdv-next/src/api/iot/rule/scene/index.ts @@ -11,25 +11,20 @@ export namespace RuleSceneApi { status?: number; triggers?: Trigger[]; actions?: Action[]; + lastTriggeredTime?: Date; createTime?: Date; } /** 场景联动规则的触发器 */ export interface Trigger { - type?: string; + type?: number; productId?: number; deviceId?: number; identifier?: string; operator?: string; value?: any; cronExpression?: string; - conditionGroups?: TriggerConditionGroup[]; - } - - /** 场景联动规则的触发条件组 */ - export interface TriggerConditionGroup { - conditions?: TriggerCondition[]; - operator?: string; + conditionGroups?: TriggerCondition[][]; // 后端结构:List>;外层「或」、组内「且」 } /** 场景联动规则的触发条件 */ @@ -39,72 +34,22 @@ export namespace RuleSceneApi { identifier?: string; operator?: string; value?: any; - type?: string; + type?: number; + param?: string; } /** 场景联动规则的动作 */ export interface Action { - type?: string; + type?: number; productId?: number; deviceId?: number; identifier?: string; value?: any; alertConfigId?: number; + params?: string; } } -// TODO @haohao:貌似下面的,和 RuleSceneApi 重复了。 -/** IoT 场景联动规则 */ -export interface IotSceneRule { - id?: number; - name?: string; - description?: string; - status?: number; - triggers?: Trigger[]; - actions?: Action[]; - createTime?: Date; -} - -/** IoT 场景联动规则触发器 */ -export interface Trigger { - type?: string; - productId?: number; - deviceId?: number; - identifier?: string; - operator?: string; - value?: any; - cronExpression?: string; - conditionGroups?: TriggerConditionGroup[]; -} - -/** IoT 场景联动规则触发条件组 */ -export interface TriggerConditionGroup { - conditions?: TriggerCondition[]; - operator?: string; -} - -/** IoT 场景联动规则触发条件 */ -export interface TriggerCondition { - productId?: number; - deviceId?: number; - identifier?: string; - operator?: string; - value?: any; - type?: string; - param?: string; -} - -/** IoT 场景联动规则动作 */ -export interface Action { - type?: string; - productId?: number; - deviceId?: number; - identifier?: string; - value?: any; - alertConfigId?: number; - params?: string; -} - /** 查询场景联动规则分页 */ export function getSceneRulePage(params: PageParam) { return requestClient.get>( @@ -121,12 +66,12 @@ export function getSceneRule(id: number) { } /** 新增场景联动规则 */ -export function createSceneRule(data: IotSceneRule) { +export function createSceneRule(data: RuleSceneApi.SceneRule) { return requestClient.post('/iot/scene-rule/create', data); } /** 修改场景联动规则 */ -export function updateSceneRule(data: IotSceneRule) { +export function updateSceneRule(data: RuleSceneApi.SceneRule) { return requestClient.put('/iot/scene-rule/update', data); } @@ -135,14 +80,6 @@ export function deleteSceneRule(id: number) { return requestClient.delete(`/iot/scene-rule/delete?id=${id}`); } -/** 批量删除场景联动规则 */ -// TODO @haohao:貌似用上。 -export function deleteSceneRuleList(ids: number[]) { - return requestClient.delete('/iot/scene-rule/delete-list', { - params: { ids: ids.join(',') }, - }); -} - /** 更新场景联动规则状态 */ export function updateSceneRuleStatus(id: number, status: number) { return requestClient.put(`/iot/scene-rule/update-status`, { diff --git a/apps/web-antdv-next/src/api/iot/statistics/index.ts b/apps/web-antdv-next/src/api/iot/statistics/index.ts index a02b342d2..dc7971eb6 100644 --- a/apps/web-antdv-next/src/api/iot/statistics/index.ts +++ b/apps/web-antdv-next/src/api/iot/statistics/index.ts @@ -17,18 +17,6 @@ export namespace IotStatisticsApi { productCategoryDeviceCounts: Record; // 按品类统计的设备数量 } - /** 时间戳-数值的键值对类型 */ - export interface TimeValueItem { - [key: string]: number; - } - - /** 消息统计数据类型 */ - export interface DeviceMessageSummary { - statType: number; - upstreamCounts: TimeValueItem[]; - downstreamCounts: TimeValueItem[]; - } - /** 设备消息数量统计(按日期) */ export interface DeviceMessageSummaryByDateRespVO { time: string; // 时间轴 diff --git a/apps/web-antdv-next/src/api/iot/thingmodel/index.ts b/apps/web-antdv-next/src/api/iot/thingmodel/index.ts index 9e89b869c..002ccd9c2 100644 --- a/apps/web-antdv-next/src/api/iot/thingmodel/index.ts +++ b/apps/web-antdv-next/src/api/iot/thingmodel/index.ts @@ -1,126 +1,209 @@ +import type { Rule } from 'antdv-next/es/form'; + import type { PageParam, PageResult } from '@vben/request'; +import { isEmpty } from '@vben/utils'; + import { requestClient } from '#/api/request'; export namespace ThingModelApi { - /** IoT 物模型数据 VO */ + /** IoT 物模型数据 */ export interface ThingModel { id?: number; productId?: number; productKey?: string; - identifier: string; - name: string; - desc?: string; - type: string; - property?: ThingModelProperty; - event?: ThingModelEvent; - service?: ThingModelService; + identifier?: string; + name?: string; + description?: string; + dataType?: string; + type?: number; // 参见 IoTThingModelTypeEnum 枚举类 + property?: Property; + event?: Event; + service?: Service; } /** IoT 物模型属性 */ export interface Property { - identifier: string; - name: string; - accessMode: string; - dataType: string; + identifier?: string; + name?: string; + accessMode?: string; + required?: boolean; + dataType?: string; + description?: string; dataSpecs?: any; dataSpecsList?: any[]; - desc?: string; } /** IoT 物模型服务 */ export interface Service { - identifier: string; - name: string; - callType: string; - inputData?: any[]; - outputData?: any[]; - desc?: string; + identifier?: string; + name?: string; + required?: boolean; + callType?: string; + description?: string; + inputParams?: Param[]; + outputParams?: Param[]; + method?: string; } /** IoT 物模型事件 */ export interface Event { - identifier: string; + identifier?: string; + name?: string; + required?: boolean; + type?: string; + description?: string; + outputParams?: Param[]; + method?: string; + } + + /** IoT 物模型参数 */ + export interface Param { + identifier?: string; + name?: string; + direction?: string; + paraOrder?: number; + dataType?: string; + dataSpecs?: any; + dataSpecsList?: any[]; + } + + /** IoT 物模型 TSL(树形)响应 */ + export interface ThingModelTSL { + productId?: number; + productKey?: string; + properties?: Property[]; + events?: Event[]; + services?: Service[]; + } + + /** IoT 数据定义(数值型) */ + export interface DataSpecsNumberData { + min?: number | string; + max?: number | string; + step?: number | string; + unit?: string; + unitName?: string; + } + + /** IoT 数据定义(枚举/布尔型) */ + export interface DataSpecsEnumOrBoolData { + value: number | string; name: string; - type: string; - outputData?: any[]; - desc?: string; } } -/** IoT 物模型数据 */ -export interface ThingModelData { - id?: number; - productId?: number; - productKey?: string; - identifier?: string; - name?: string; - desc?: string; - type?: string; - dataType?: string; - property?: ThingModelProperty; - event?: ThingModelEvent; - service?: ThingModelService; +/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */ +function buildRequiredNumberValidator(label: string) { + return (_rule: any, value: any, callback: any) => { + if (isEmpty(value)) { + callback(new Error(`${label}不能为空`)); + return; + } + if (Number.isNaN(Number(value))) { + callback(new Error(`${label}必须是数字`)); + return; + } + callback(); + }; } -/** IoT 物模型属性 */ -export interface ThingModelProperty { - identifier?: string; - name?: string; - accessMode?: string; - dataType?: string; - dataSpecs?: any; - dataSpecsList?: any[]; - desc?: string; -} - -/** IoT 物模型服务 */ -export interface ThingModelService { - identifier?: string; - name?: string; - callType?: string; - inputData?: any[]; - outputData?: any[]; - desc?: string; -} - -/** IoT 物模型事件 */ -export interface ThingModelEvent { - identifier?: string; - name?: string; - type?: string; - outputData?: any[]; - desc?: string; -} - -/** IoT 数据定义(数值型) */ -export interface DataSpecsNumberData { - min?: number | string; - max?: number | string; - step?: number | string; - unit?: string; - unitName?: string; -} - -/** IoT 数据定义(枚举/布尔型) */ -export interface DataSpecsEnumOrBoolData { - value: number | string; - name: string; +/** 生成「标识符样式」名称校验器:开头需为中文 / 英文 / 数字,整体仅允许中文、英文、数字、下划线、短划线,长度 ≤ 20 */ +export function buildIdentifierLikeNameValidator(label: string) { + return (_rule: any, value: string, callback: any) => { + if (isEmpty(value)) { + callback(new Error(`${label}不能为空`)); + return; + } + if (!/^[一-龥A-Za-z0-9]/.test(value)) { + callback(new Error(`${label}必须以中文、英文字母或数字开头`)); + return; + } + if (!/^[一-龥A-Za-z0-9][\w一-龥-]*$/.test(value)) { + callback( + new Error(`${label}只能包含中文、英文字母、数字、下划线和短划线`), + ); + return; + } + if (value.length > 20) { + callback(new Error(`${label}长度不能超过 20 个字符`)); + return; + } + callback(); + }; } /** IoT 物模型表单校验规则 */ -export interface ThingModelFormRules { - [key: string]: any; -} +export const ThingModelFormRules: Record = { + name: [ + { required: true, message: '功能名称不能为空', trigger: 'blur' }, + { + pattern: /^[一-龥A-Za-z0-9][一-龥A-Za-z0-9\-_/.]{0,29}$/, + message: + '支持中文、大小写字母、日文、数字、短划线、下划线、斜杠和小数点,必须以中文、英文或数字开头,不超过 30 个字符', + trigger: 'blur', + }, + ], + type: [{ required: true, message: '功能类型不能为空', trigger: 'blur' }], + identifier: [ + { required: true, message: '标识符不能为空', trigger: 'blur' }, + { + pattern: /^[a-zA-Z][a-zA-Z0-9_]{0,31}$/, + message: '支持大小写字母、数字和下划线,必须以字母开头,不超过 32 个字符', + trigger: 'blur', + }, + { + validator: (_rule: any, value: string, callback: any) => { + const reservedKeywords = [ + 'set', + 'get', + 'post', + 'property', + 'event', + 'time', + 'value', + ]; + if (reservedKeywords.includes(value)) { + callback( + new Error( + 'set, get, post, property, event, time, value 是系统保留字段,不能用于标识符定义', + ), + ); + return; + } + if (/^\d+$/.test(value)) { + callback(new Error('标识符不能是纯数字')); + return; + } + callback(); + }, + trigger: 'blur', + }, + ], + childDataType: [{ required: true, message: '元素类型不能为空' }], + size: [ + { + required: true, + validator: buildRequiredNumberValidator('元素个数'), + trigger: 'blur', + }, + ], + length: [ + { + required: true, + validator: buildRequiredNumberValidator('文本长度'), + trigger: 'blur', + }, + ], + accessMode: [ + { required: true, message: '请选择读写类型', trigger: 'change' }, + ], + callType: [{ required: true, message: '请选择调用方式', trigger: 'change' }], + eventType: [{ required: true, message: '请选择事件类型', trigger: 'change' }], +}; -/** 验证布尔型名称 */ -export function validateBoolName(_rule: any, value: any, callback: any) { - if (value) { - callback(); - } else { - callback(new Error('枚举描述不能为空')); - } -} +/** 校验布尔值名称 */ +export const validateBoolName = buildIdentifierLikeNameValidator('布尔值名称'); /** 查询产品物模型分页 */ export function getThingModelPage(params: PageParam) { @@ -141,17 +224,19 @@ export function getThingModel(id: number) { export function getThingModelListByProductId(productId: number) { return requestClient.get( '/iot/thing-model/list', - { params: { productId } }, + { + params: { productId }, + }, ); } /** 新增物模型 */ -export function createThingModel(data: ThingModelData) { +export function createThingModel(data: ThingModelApi.ThingModel) { return requestClient.post('/iot/thing-model/create', data); } /** 修改物模型 */ -export function updateThingModel(data: ThingModelData) { +export function updateThingModel(data: ThingModelApi.ThingModel) { return requestClient.put('/iot/thing-model/update', data); } @@ -161,26 +246,11 @@ export function deleteThingModel(id: number) { } /** 获取物模型 TSL */ -export function getThingModelTSL(productId: number) { - return requestClient.get( +export function getThingModelTSLByProductId(productId: number) { + return requestClient.get( '/iot/thing-model/get-tsl', - { params: { productId } }, + { + params: { productId }, + }, ); } - -/** 导入物模型 TSL -export function importThingModelTSL(productId: number, tslData: any) { - return requestClient.post('/iot/thing-model/import-tsl', { - productId, - tslData, - }); -} - */ - -/** 导出物模型 TSL -export function exportThingModelTSL(productId: number) { - return requestClient.get('/iot/thing-model/export-tsl', { - params: { productId }, - }); -} - */ diff --git a/apps/web-antdv-next/src/api/member/user/index.ts b/apps/web-antdv-next/src/api/member/user/index.ts index e02f332ed..35229ad98 100644 --- a/apps/web-antdv-next/src/api/member/user/index.ts +++ b/apps/web-antdv-next/src/api/member/user/index.ts @@ -13,6 +13,7 @@ export namespace MemberUserApi { loginIp: string; mark: string; mobile: string; + email?: string; name?: string; nickname?: string; registerIp: string; diff --git a/apps/web-antdv-next/src/api/mes/cal/calendar/index.ts b/apps/web-antdv-next/src/api/mes/cal/calendar/index.ts new file mode 100644 index 000000000..817fce27e --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/calendar/index.ts @@ -0,0 +1,27 @@ +import { requestClient } from '#/api/request'; + +export namespace MesCalCalendarApi { + /** 排班日历班组排班项 */ + export interface CalendarTeamShiftItem { + teamId?: number; // 班组编号 + teamName?: string; // 班组名称 + shiftId?: number; // 班次编号 + shiftName?: string; // 班次名称 + sort?: number; // 排序 + } + + /** 排班日历天 */ + export interface CalendarDay { + day?: string; // 日期 + shiftType?: number; // 轮班方式 + teamShifts?: CalendarTeamShiftItem[]; // 班组班次 + } +} + +/** 查询排班日历列表 */ +export function getCalendarList(params: any) { + return requestClient.get( + '/mes/cal/calendar/list', + { params }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/cal/holiday/index.ts b/apps/web-antdv-next/src/api/mes/cal/holiday/index.ts new file mode 100644 index 000000000..79657487a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/holiday/index.ts @@ -0,0 +1,39 @@ +import { requestClient } from '#/api/request'; + +export namespace MesCalHolidayApi { + /** MES 假期设置 */ + export interface Holiday { + id?: number; // 编号 + day?: number | string; // 日期 + type?: number; // 日期类型 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } + + /** 假期查询参数 */ + export interface HolidayQuery { + startDay?: string; + endDay?: string; + } +} + +/** 查询假期设置列表 */ +export function getHolidayList(params?: MesCalHolidayApi.HolidayQuery) { + return requestClient.get( + '/mes/cal/holiday/list', + { params }, + ); +} + +/** 根据日期查询假期设置 */ +export function getHolidayByDay(day: string) { + return requestClient.get( + '/mes/cal/holiday/get-by-day', + { params: { day } }, + ); +} + +/** 保存假期设置 */ +export function saveHoliday(data: MesCalHolidayApi.Holiday) { + return requestClient.post('/mes/cal/holiday/save', data); +} diff --git a/apps/web-antdv-next/src/api/mes/cal/plan/index.ts b/apps/web-antdv-next/src/api/mes/cal/plan/index.ts new file mode 100644 index 000000000..f52a6ba16 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/plan/index.ts @@ -0,0 +1,59 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesCalPlanApi { + /** MES 排班计划 */ + export interface Plan { + id?: number; // 计划编号 + code?: string; // 计划编码 + name?: string; // 计划名称 + calendarType?: number; // 班组类型 + startDate?: number; // 开始日期 + endDate?: number; // 结束日期 + shiftType?: number; // 轮班方式 + shiftMethod?: number; // 倒班方式 + shiftCount?: number; // 倒班天数 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询排班计划分页 */ +export function getPlanPage(params: PageParam) { + return requestClient.get>( + '/mes/cal/plan/page', + { params }, + ); +} + +/** 查询排班计划详情 */ +export function getPlan(id: number) { + return requestClient.get(`/mes/cal/plan/get?id=${id}`); +} + +/** 新增排班计划 */ +export function createPlan(data: MesCalPlanApi.Plan) { + return requestClient.post('/mes/cal/plan/create', data); +} + +/** 修改排班计划 */ +export function updatePlan(data: MesCalPlanApi.Plan) { + return requestClient.put('/mes/cal/plan/update', data); +} + +/** 确认排班计划 */ +export function confirmPlan(id: number) { + return requestClient.put(`/mes/cal/plan/confirm?id=${id}`); +} + +/** 删除排班计划 */ +export function deletePlan(id: number) { + return requestClient.delete(`/mes/cal/plan/delete?id=${id}`); +} + +/** 导出排班计划 */ +export function exportPlan(params: any) { + return requestClient.download('/mes/cal/plan/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/cal/plan/shift/index.ts b/apps/web-antdv-next/src/api/mes/cal/plan/shift/index.ts new file mode 100644 index 000000000..f7828ab51 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/plan/shift/index.ts @@ -0,0 +1,36 @@ +import { requestClient } from '#/api/request'; + +export namespace MesCalPlanShiftApi { + /** MES 计划班次 */ + export interface PlanShift { + id?: number; // 班次编号 + planId?: number; // 排班计划编号 + sort?: number; // 显示顺序 + name?: string; // 班次名称 + startTime?: string; // 开始时间 + endTime?: string; // 结束时间 + remark?: string; // 备注 + } +} + +/** 查询指定排班计划的班次列表 */ +export function getPlanShiftListByPlan(planId: number) { + return requestClient.get( + `/mes/cal/plan-shift/list-by-plan?planId=${planId}`, + ); +} + +/** 新增计划班次 */ +export function createPlanShift(data: MesCalPlanShiftApi.PlanShift) { + return requestClient.post('/mes/cal/plan-shift/create', data); +} + +/** 修改计划班次 */ +export function updatePlanShift(data: MesCalPlanShiftApi.PlanShift) { + return requestClient.put('/mes/cal/plan-shift/update', data); +} + +/** 删除计划班次 */ +export function deletePlanShift(id: number) { + return requestClient.delete(`/mes/cal/plan-shift/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/cal/plan/team/index.ts b/apps/web-antdv-next/src/api/mes/cal/plan/team/index.ts new file mode 100644 index 000000000..a513312c3 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/plan/team/index.ts @@ -0,0 +1,30 @@ +import { requestClient } from '#/api/request'; + +export namespace MesCalPlanTeamApi { + /** MES 计划班组关联 */ + export interface PlanTeam { + id?: number; // 关联编号 + planId?: number; // 排班计划编号 + teamId?: number; // 班组编号 + teamCode?: string; // 班组编码 + teamName?: string; // 班组名称 + remark?: string; // 备注 + } +} + +/** 查询指定排班计划的班组列表 */ +export function getPlanTeamListByPlan(planId: number) { + return requestClient.get( + `/mes/cal/plan-team/list-by-plan?planId=${planId}`, + ); +} + +/** 新增计划班组关联 */ +export function createPlanTeam(data: MesCalPlanTeamApi.PlanTeam) { + return requestClient.post('/mes/cal/plan-team/create', data); +} + +/** 删除计划班组关联 */ +export function deletePlanTeam(id: number) { + return requestClient.delete(`/mes/cal/plan-team/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/cal/team/index.ts b/apps/web-antdv-next/src/api/mes/cal/team/index.ts new file mode 100644 index 000000000..b3a125d83 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/team/index.ts @@ -0,0 +1,53 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesCalTeamApi { + /** MES 班组 */ + export interface Team { + id?: number; // 班组编号 + code?: string; // 班组编码 + name?: string; // 班组名称 + calendarType?: number; // 班组类型 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询班组分页 */ +export function getTeamPage(params: PageParam) { + return requestClient.get>( + '/mes/cal/team/page', + { params }, + ); +} + +/** 查询班组列表 */ +export function getTeamList() { + return requestClient.get('/mes/cal/team/list'); +} + +/** 查询班组详情 */ +export function getTeam(id: number) { + return requestClient.get(`/mes/cal/team/get?id=${id}`); +} + +/** 新增班组 */ +export function createTeam(data: MesCalTeamApi.Team) { + return requestClient.post('/mes/cal/team/create', data); +} + +/** 修改班组 */ +export function updateTeam(data: MesCalTeamApi.Team) { + return requestClient.put('/mes/cal/team/update', data); +} + +/** 删除班组 */ +export function deleteTeam(id: number) { + return requestClient.delete(`/mes/cal/team/delete?id=${id}`); +} + +/** 导出班组 */ +export function exportTeam(params: any) { + return requestClient.download('/mes/cal/team/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/cal/team/member/index.ts b/apps/web-antdv-next/src/api/mes/cal/team/member/index.ts new file mode 100644 index 000000000..2608f67c3 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/cal/team/member/index.ts @@ -0,0 +1,51 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesCalTeamMemberApi { + /** MES 班组成员 */ + export interface TeamMember { + id?: number; // 成员编号 + teamId?: number; // 班组编号 + userId?: number; // 用户编号 + nickname?: string; // 用户昵称 + telephone?: string; // 用户手机号 + remark?: string; // 备注 + } +} + +/** 创建班组成员 */ +export function createTeamMember(data: MesCalTeamMemberApi.TeamMember) { + return requestClient.post('/mes/cal/team-member/create', data); +} + +/** 删除班组成员 */ +export function deleteTeamMember(id: number) { + return requestClient.delete(`/mes/cal/team-member/delete?id=${id}`); +} + +/** 查询班组成员分页 */ +export function getTeamMemberPage(params: PageParam) { + return requestClient.get>( + '/mes/cal/team-member/page', + { params }, + ); +} + +/** 查询指定班组的成员列表 */ +export function getTeamMemberListByTeam(teamId: number) { + return requestClient.get( + '/mes/cal/team-member/list-by-team', + { params: { teamId } }, + ); +} + +/** 查询多个班组的成员列表 */ +export function getTeamMemberListByTeamIds(teamIds: number[]) { + return requestClient.get( + '/mes/cal/team-member/list-by-team', + { + params: { teamIds: teamIds.join(',') }, + }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/checkplan/index.ts b/apps/web-antdv-next/src/api/mes/dv/checkplan/index.ts new file mode 100644 index 000000000..feeac8a58 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/checkplan/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvCheckPlanApi { + /** MES 点检保养方案 */ + export interface CheckPlan { + id?: number; // 方案编号 + code?: string; // 方案编码 + name?: string; // 方案名称 + type?: number; // 方案类型 + startDate?: Date | number; // 开始日期 + endDate?: Date | number; // 结束日期 + cycleType?: number; // 周期类型 + cycleCount?: number; // 周期数量 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询点检保养方案分页 */ +export function getCheckPlanPage(params: PageParam) { + return requestClient.get>( + '/mes/dv/check-plan/page', + { params }, + ); +} + +/** 查询点检保养方案详情 */ +export function getCheckPlan(id: number) { + return requestClient.get( + `/mes/dv/check-plan/get?id=${id}`, + ); +} + +/** 新增点检保养方案 */ +export function createCheckPlan(data: MesDvCheckPlanApi.CheckPlan) { + return requestClient.post('/mes/dv/check-plan/create', data); +} + +/** 修改点检保养方案 */ +export function updateCheckPlan(data: MesDvCheckPlanApi.CheckPlan) { + return requestClient.put('/mes/dv/check-plan/update', data); +} + +/** 启用点检保养方案 */ +export function enableCheckPlan(id: number) { + return requestClient.put(`/mes/dv/check-plan/enable?id=${id}`); +} + +/** 停用点检保养方案 */ +export function disableCheckPlan(id: number) { + return requestClient.put(`/mes/dv/check-plan/disable?id=${id}`); +} + +/** 删除点检保养方案 */ +export function deleteCheckPlan(id: number) { + return requestClient.delete(`/mes/dv/check-plan/delete?id=${id}`); +} + +/** 导出点检保养方案 */ +export function exportCheckPlan(params: any) { + return requestClient.download('/mes/dv/check-plan/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/checkplan/machinery/index.ts b/apps/web-antdv-next/src/api/mes/dv/checkplan/machinery/index.ts new file mode 100644 index 000000000..ad79aad23 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/checkplan/machinery/index.ts @@ -0,0 +1,34 @@ +import { requestClient } from '#/api/request'; + +export namespace MesDvCheckPlanMachineryApi { + /** MES 点检保养方案设备 */ + export interface CheckPlanMachinery { + id?: number; // 关联编号 + planId?: number; // 方案编号 + machineryId?: number; // 设备编号 + machineryCode?: string; // 设备编码 + machineryName?: string; // 设备名称 + machineryBrand?: string; // 品牌 + machinerySpecification?: string; // 规格型号 + remark?: string; // 备注 + } +} + +/** 查询指定方案的设备列表 */ +export function getCheckPlanMachineryListByPlan(planId: number) { + return requestClient.get( + `/mes/dv/check-plan-machinery/list-by-plan?planId=${planId}`, + ); +} + +/** 新增方案设备关联 */ +export function createCheckPlanMachinery( + data: MesDvCheckPlanMachineryApi.CheckPlanMachinery, +) { + return requestClient.post('/mes/dv/check-plan-machinery/create', data); +} + +/** 删除方案设备关联 */ +export function deleteCheckPlanMachinery(id: number) { + return requestClient.delete(`/mes/dv/check-plan-machinery/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/checkplan/subject/index.ts b/apps/web-antdv-next/src/api/mes/dv/checkplan/subject/index.ts new file mode 100644 index 000000000..6d60b4a67 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/checkplan/subject/index.ts @@ -0,0 +1,35 @@ +import { requestClient } from '#/api/request'; + +export namespace MesDvCheckPlanSubjectApi { + /** MES 点检保养方案项目 */ + export interface CheckPlanSubject { + id?: number; // 关联编号 + planId?: number; // 方案编号 + subjectId?: number; // 项目编号 + subjectCode?: string; // 项目编码 + subjectName?: string; // 项目名称 + subjectType?: number; // 项目类型 + subjectContent?: string; // 项目内容 + subjectStandard?: string; // 标准 + remark?: string; // 备注 + } +} + +/** 查询指定方案的项目列表 */ +export function getCheckPlanSubjectListByPlan(planId: number) { + return requestClient.get( + `/mes/dv/check-plan-subject/list-by-plan?planId=${planId}`, + ); +} + +/** 新增方案项目关联 */ +export function createCheckPlanSubject( + data: MesDvCheckPlanSubjectApi.CheckPlanSubject, +) { + return requestClient.post('/mes/dv/check-plan-subject/create', data); +} + +/** 删除方案项目关联 */ +export function deleteCheckPlanSubject(id: number) { + return requestClient.delete(`/mes/dv/check-plan-subject/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/checkrecord/index.ts b/apps/web-antdv-next/src/api/mes/dv/checkrecord/index.ts new file mode 100644 index 000000000..4edd79ca2 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/checkrecord/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvCheckRecordApi { + /** MES 设备点检记录 */ + export interface CheckRecord { + id?: number; // 记录编号 + planId?: number; // 点检计划编号 + planName?: string; // 计划名称 + machineryId?: number; // 设备编号 + machineryCode?: string; // 设备编码 + machineryName?: string; // 设备名称 + machineryBrand?: string; // 品牌 + machinerySpecification?: string; // 规格型号 + checkTime?: Date | number; // 点检时间 + userId?: number; // 点检人编号 + nickname?: string; // 点检人名称 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询设备点检记录分页 */ +export function getCheckRecordPage(params: PageParam) { + return requestClient.get>( + '/mes/dv/check-record/page', + { params }, + ); +} + +/** 查询设备点检记录详情 */ +export function getCheckRecord(id: number) { + return requestClient.get( + `/mes/dv/check-record/get?id=${id}`, + ); +} + +/** 新增设备点检记录 */ +export function createCheckRecord(data: MesDvCheckRecordApi.CheckRecord) { + return requestClient.post('/mes/dv/check-record/create', data); +} + +/** 修改设备点检记录 */ +export function updateCheckRecord(data: MesDvCheckRecordApi.CheckRecord) { + return requestClient.put('/mes/dv/check-record/update', data); +} + +/** 提交设备点检记录 */ +export function submitCheckRecord(id: number) { + return requestClient.put(`/mes/dv/check-record/submit?id=${id}`); +} + +/** 删除设备点检记录 */ +export function deleteCheckRecord(id: number) { + return requestClient.delete(`/mes/dv/check-record/delete?id=${id}`); +} + +/** 导出设备点检记录 */ +export function exportCheckRecord(params: any) { + return requestClient.download('/mes/dv/check-record/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/checkrecord/line/index.ts b/apps/web-antdv-next/src/api/mes/dv/checkrecord/line/index.ts new file mode 100644 index 000000000..aae27a596 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/checkrecord/line/index.ts @@ -0,0 +1,53 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvCheckRecordLineApi { + /** MES 设备点检记录明细 */ + export interface CheckRecordLine { + id?: number; // 明细编号 + recordId?: number; // 点检记录编号 + subjectId?: number; // 点检项目编号 + subjectCode?: string; // 项目编码 + subjectName?: string; // 项目名称 + subjectContent?: string; // 检查内容 + subjectStandard?: string; // 检查标准 + checkStatus?: number; // 点检结果 + checkResult?: string; // 异常描述 + remark?: string; // 备注 + } +} + +/** 查询设备点检记录明细分页 */ +export function getCheckRecordLinePage(params: PageParam) { + return requestClient.get>( + '/mes/dv/check-record-line/page', + { params }, + ); +} + +/** 查询设备点检记录明细详情 */ +export function getCheckRecordLine(id: number) { + return requestClient.get( + `/mes/dv/check-record-line/get?id=${id}`, + ); +} + +/** 新增设备点检记录明细 */ +export function createCheckRecordLine( + data: MesDvCheckRecordLineApi.CheckRecordLine, +) { + return requestClient.post('/mes/dv/check-record-line/create', data); +} + +/** 修改设备点检记录明细 */ +export function updateCheckRecordLine( + data: MesDvCheckRecordLineApi.CheckRecordLine, +) { + return requestClient.put('/mes/dv/check-record-line/update', data); +} + +/** 删除设备点检记录明细 */ +export function deleteCheckRecordLine(id: number) { + return requestClient.delete(`/mes/dv/check-record-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/machinery/index.ts b/apps/web-antdv-next/src/api/mes/dv/machinery/index.ts new file mode 100644 index 000000000..f57a77299 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/machinery/index.ts @@ -0,0 +1,85 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvMachineryApi { + /** MES 设备台账 */ + export interface Machinery { + id?: number; // 设备编号 + code?: string; // 设备编码 + name?: string; // 设备名称 + brand?: string; // 品牌 + specification?: string; // 规格型号 + machineryTypeId?: number; // 设备类型编号 + machineryTypeName?: string; // 设备类型名称 + workshopId?: number; // 所属车间编号 + workshopName?: string; // 所属车间名称 + status?: number; // 设备状态 + lastMaintenTime?: Date; // 最近保养时间 + lastCheckTime?: Date; // 最近点检时间 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } + + /** 设备导入结果 */ + export interface MachineryImportRespVO { + createCodes?: string[]; // 新增成功的设备编码 + updateCodes?: string[]; // 更新成功的设备编码 + failureCodes?: Record; // 导入失败的设备编码及原因 + } +} + +/** 查询设备分页 */ +export function getMachineryPage(params: PageParam) { + return requestClient.get>( + '/mes/dv/machinery/page', + { params }, + ); +} + +/** 查询设备精简列表 */ +export function getMachinerySimpleList() { + return requestClient.get( + '/mes/dv/machinery/simple-list', + ); +} + +/** 查询设备详情 */ +export function getMachinery(id: number) { + return requestClient.get( + `/mes/dv/machinery/get?id=${id}`, + ); +} + +/** 新增设备 */ +export function createMachinery(data: MesDvMachineryApi.Machinery) { + return requestClient.post('/mes/dv/machinery/create', data); +} + +/** 修改设备 */ +export function updateMachinery(data: MesDvMachineryApi.Machinery) { + return requestClient.put('/mes/dv/machinery/update', data); +} + +/** 删除设备 */ +export function deleteMachinery(id: number) { + return requestClient.delete(`/mes/dv/machinery/delete?id=${id}`); +} + +/** 导出设备 */ +export function exportMachinery(params: any) { + return requestClient.download('/mes/dv/machinery/export-excel', { params }); +} + +/** 下载设备导入模板 */ +export function importMachineryTemplate() { + return requestClient.download('/mes/dv/machinery/get-import-template'); +} + +/** 导入设备 */ +export function importMachinery(file: File, updateSupport: boolean) { + return requestClient.upload( + `/mes/dv/machinery/import?updateSupport=${updateSupport}`, + { file }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/machinery/type/index.ts b/apps/web-antdv-next/src/api/mes/dv/machinery/type/index.ts new file mode 100644 index 000000000..eddc2caa8 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/machinery/type/index.ts @@ -0,0 +1,53 @@ +import { requestClient } from '#/api/request'; + +export namespace MesDvMachineryTypeApi { + /** MES 设备类型 */ + export interface MachineryType { + id?: number; // 设备类型编号 + parentId?: number; // 父类型编号 + code?: string; // 类型编码 + name?: string; // 类型名称 + sort?: number; // 显示排序 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + children?: MachineryType[]; // 子类型 + } +} + +/** 查询设备类型列表 */ +export function getMachineryTypeList(params?: any) { + return requestClient.get( + '/mes/dv/machinery-type/list', + { params }, + ); +} + +/** 查询设备类型精简列表 */ +export function getMachineryTypeSimpleList() { + return requestClient.get( + '/mes/dv/machinery-type/simple-list', + ); +} + +/** 查询设备类型详情 */ +export function getMachineryType(id: number) { + return requestClient.get( + `/mes/dv/machinery-type/get?id=${id}`, + ); +} + +/** 新增设备类型 */ +export function createMachineryType(data: MesDvMachineryTypeApi.MachineryType) { + return requestClient.post('/mes/dv/machinery-type/create', data); +} + +/** 修改设备类型 */ +export function updateMachineryType(data: MesDvMachineryTypeApi.MachineryType) { + return requestClient.put('/mes/dv/machinery-type/update', data); +} + +/** 删除设备类型 */ +export function deleteMachineryType(id: number) { + return requestClient.delete(`/mes/dv/machinery-type/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/maintenrecord/index.ts b/apps/web-antdv-next/src/api/mes/dv/maintenrecord/index.ts new file mode 100644 index 000000000..3ebf305f8 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/maintenrecord/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvMaintenRecordApi { + /** MES 设备保养记录 */ + export interface MaintenRecord { + id?: number; // 记录编号 + planId?: number; // 计划编号 + planName?: string; // 计划名称 + machineryId?: number; // 设备编号 + machineryCode?: string; // 设备编码 + machineryName?: string; // 设备名称 + machineryBrand?: string; // 品牌 + machinerySpecification?: string; // 规格型号 + maintenTime?: Date | number; // 保养时间 + userId?: number; // 用户编号 + nickname?: string; // 保养人名称 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询设备保养记录分页 */ +export function getMaintenRecordPage(params: PageParam) { + return requestClient.get>( + '/mes/dv/mainten-record/page', + { params }, + ); +} + +/** 查询设备保养记录详情 */ +export function getMaintenRecord(id: number) { + return requestClient.get( + `/mes/dv/mainten-record/get?id=${id}`, + ); +} + +/** 新增设备保养记录 */ +export function createMaintenRecord(data: MesDvMaintenRecordApi.MaintenRecord) { + return requestClient.post('/mes/dv/mainten-record/create', data); +} + +/** 修改设备保养记录 */ +export function updateMaintenRecord(data: MesDvMaintenRecordApi.MaintenRecord) { + return requestClient.put('/mes/dv/mainten-record/update', data); +} + +/** 提交设备保养记录 */ +export function submitMaintenRecord(id: number) { + return requestClient.put(`/mes/dv/mainten-record/submit?id=${id}`); +} + +/** 删除设备保养记录 */ +export function deleteMaintenRecord(id: number) { + return requestClient.delete(`/mes/dv/mainten-record/delete?id=${id}`); +} + +/** 导出设备保养记录 */ +export function exportMaintenRecord(params: any) { + return requestClient.download('/mes/dv/mainten-record/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/maintenrecord/line/index.ts b/apps/web-antdv-next/src/api/mes/dv/maintenrecord/line/index.ts new file mode 100644 index 000000000..fa67f638a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/maintenrecord/line/index.ts @@ -0,0 +1,51 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvMaintenRecordLineApi { + /** MES 设备保养记录明细 */ + export interface MaintenRecordLine { + id?: number; // 明细编号 + recordId?: number; // 保养记录编号 + subjectId?: number; // 项目编号 + subjectName?: string; // 项目名称 + subjectContent?: string; // 项目内容 + subjectStandard?: string; // 项目标准 + status?: number; // 保养结果 + result?: string; // 异常描述 + remark?: string; // 备注 + } +} + +/** 查询设备保养记录明细分页 */ +export function getMaintenRecordLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/dv/mainten-record-line/page', { params }); +} + +/** 查询设备保养记录明细详情 */ +export function getMaintenRecordLine(id: number) { + return requestClient.get( + `/mes/dv/mainten-record-line/get?id=${id}`, + ); +} + +/** 新增设备保养记录明细 */ +export function createMaintenRecordLine( + data: MesDvMaintenRecordLineApi.MaintenRecordLine, +) { + return requestClient.post('/mes/dv/mainten-record-line/create', data); +} + +/** 修改设备保养记录明细 */ +export function updateMaintenRecordLine( + data: MesDvMaintenRecordLineApi.MaintenRecordLine, +) { + return requestClient.put('/mes/dv/mainten-record-line/update', data); +} + +/** 删除设备保养记录明细 */ +export function deleteMaintenRecordLine(id: number) { + return requestClient.delete(`/mes/dv/mainten-record-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/repair/index.ts b/apps/web-antdv-next/src/api/mes/dv/repair/index.ts new file mode 100644 index 000000000..45a69fcfe --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/repair/index.ts @@ -0,0 +1,81 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvRepairApi { + /** MES 维修工单 */ + export interface Repair { + id?: number; // 工单编号 + code?: string; // 维修工单编码 + name?: string; // 维修工单名称 + machineryId?: number; // 设备编号 + machineryCode?: string; // 设备编码 + machineryName?: string; // 设备名称 + machineryBrand?: string; // 品牌 + machinerySpecification?: string; // 规格型号 + requireDate?: Date | number; // 报修日期 + finishDate?: Date | number; // 维修完成日期 + confirmDate?: Date | number; // 验收日期 + result?: number; // 维修结果 + acceptedUserId?: number; // 维修人编号 + acceptedUserNickname?: string; // 维修人名称 + confirmUserId?: number; // 验收人编号 + confirmUserNickname?: string; // 验收人名称 + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceDocCode?: string; // 来源单据编码 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询维修工单分页 */ +export function getRepairPage(params: PageParam) { + return requestClient.get>( + '/mes/dv/repair/page', + { params }, + ); +} + +/** 查询维修工单详情 */ +export function getRepair(id: number) { + return requestClient.get( + `/mes/dv/repair/get?id=${id}`, + ); +} + +/** 新增维修工单 */ +export function createRepair(data: MesDvRepairApi.Repair) { + return requestClient.post('/mes/dv/repair/create', data); +} + +/** 修改维修工单 */ +export function updateRepair(data: MesDvRepairApi.Repair) { + return requestClient.put('/mes/dv/repair/update', data); +} + +/** 删除维修工单 */ +export function deleteRepair(id: number) { + return requestClient.delete(`/mes/dv/repair/delete?id=${id}`); +} + +/** 导出维修工单 */ +export function exportRepair(params: any) { + return requestClient.download('/mes/dv/repair/export-excel', { params }); +} + +/** 提交维修工单 */ +export function submitRepair(id: number) { + return requestClient.put(`/mes/dv/repair/submit?id=${id}`); +} + +/** 确认维修完成 */ +export function confirmRepair(data: MesDvRepairApi.Repair) { + return requestClient.put('/mes/dv/repair/confirm', data); +} + +/** 完成验收 */ +export function finishRepair(id: number, result: number) { + return requestClient.put(`/mes/dv/repair/finish?id=${id}&result=${result}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/repair/line/index.ts b/apps/web-antdv-next/src/api/mes/dv/repair/line/index.ts new file mode 100644 index 000000000..cf951c5dd --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/repair/line/index.ts @@ -0,0 +1,49 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvRepairLineApi { + /** MES 维修工单行 */ + export interface RepairLine { + id?: number; // 明细编号 + repairId?: number; // 维修工单编号 + subjectId?: number; // 项目编号 + subjectName?: string; // 项目名称 + subjectContent?: string; // 项目内容 + subjectStandard?: string; // 项目标准 + malfunction?: string; // 故障描述 + malfunctionUrl?: string; // 故障图片 URL + description?: string; // 维修描述 + remark?: string; // 备注 + } +} + +/** 查询维修工单行分页 */ +export function getRepairLinePage(params: PageParam) { + return requestClient.get>( + '/mes/dv/repair-line/page', + { params }, + ); +} + +/** 查询维修工单行详情 */ +export function getRepairLine(id: number) { + return requestClient.get( + `/mes/dv/repair-line/get?id=${id}`, + ); +} + +/** 新增维修工单行 */ +export function createRepairLine(data: MesDvRepairLineApi.RepairLine) { + return requestClient.post('/mes/dv/repair-line/create', data); +} + +/** 修改维修工单行 */ +export function updateRepairLine(data: MesDvRepairLineApi.RepairLine) { + return requestClient.put('/mes/dv/repair-line/update', data); +} + +/** 删除维修工单行 */ +export function deleteRepairLine(id: number) { + return requestClient.delete(`/mes/dv/repair-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/dv/subject/index.ts b/apps/web-antdv-next/src/api/mes/dv/subject/index.ts new file mode 100644 index 000000000..b74ba0ad4 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/dv/subject/index.ts @@ -0,0 +1,60 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesDvSubjectApi { + /** MES 点检保养项目 */ + export interface Subject { + id?: number; // 项目编号 + code?: string; // 项目编码 + name?: string; // 项目名称 + type?: number; // 项目类型 + content?: string; // 项目内容 + standard?: string; // 标准 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询点检保养项目分页 */ +export function getSubjectPage(params: PageParam) { + return requestClient.get>( + '/mes/dv/subject/page', + { params }, + ); +} + +/** 查询点检保养项目精简列表 */ +export function getSubjectSimpleList() { + return requestClient.get( + '/mes/dv/subject/simple-list', + ); +} + +/** 查询点检保养项目详情 */ +export function getSubject(id: number) { + return requestClient.get( + `/mes/dv/subject/get?id=${id}`, + ); +} + +/** 新增点检保养项目 */ +export function createSubject(data: MesDvSubjectApi.Subject) { + return requestClient.post('/mes/dv/subject/create', data); +} + +/** 修改点检保养项目 */ +export function updateSubject(data: MesDvSubjectApi.Subject) { + return requestClient.put('/mes/dv/subject/update', data); +} + +/** 删除点检保养项目 */ +export function deleteSubject(id: number) { + return requestClient.delete(`/mes/dv/subject/delete?id=${id}`); +} + +/** 导出点检保养项目 */ +export function exportSubject(params: any) { + return requestClient.download('/mes/dv/subject/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/home/index.ts b/apps/web-antdv-next/src/api/mes/home/index.ts new file mode 100644 index 000000000..cf1aa9953 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/home/index.ts @@ -0,0 +1,55 @@ +import { requestClient } from '#/api/request'; + +export namespace MesHomeApi { + /** MES 首页汇总统计 */ + export interface Summary { + workOrderActiveCount: number; // 进行中工单数 + workOrderPrepareCount: number; // 待排产工单数 + workOrderFinishedCount: number; // 已完成工单数 + todayOutput: number; // 今日产量 + yesterdayOutput: number; // 昨日产量 + todayQualifiedQuantity: number; // 今日合格品数 + todayUnqualifiedQuantity: number; // 今日不良品数 + machineryTotal: number; // 设备总数 + machineryProducing: number; // 生产中设备数 + machineryStop: number; // 停机设备数 + machineryMaintenance: number; // 维护中设备数 + andonActiveCount: number; // 未处置安灯呼叫数 + repairActiveCount: number; // 待处理维修工单数 + } + + /** MES 工单状态分布 */ + export interface WorkOrderStatus { + status: number; // 工单状态 + statusName: string; // 工单状态名称 + count: number; // 数量 + } + + /** MES 生产趋势 */ + export interface ProductionTrend { + date: string; // 日期 + quantity: number; // 产量 + qualifiedQuantity: number; // 合格品数 + unqualifiedQuantity: number; // 不良品数 + } +} + +/** 获得首页汇总统计 */ +export function getHomeSummary() { + return requestClient.get('/mes/home-statistics/summary'); +} + +/** 获得工单状态分布 */ +export function getWorkOrderStatusDistribution() { + return requestClient.get( + '/mes/home-statistics/work-order-status', + ); +} + +/** 获得生产趋势 */ +export function getProductionTrend(days?: number) { + return requestClient.get( + '/mes/home-statistics/production-trend', + { params: { days } }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/autocode/part/index.ts b/apps/web-antdv-next/src/api/mes/md/autocode/part/index.ts new file mode 100644 index 000000000..c64684c9b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/autocode/part/index.ts @@ -0,0 +1,49 @@ +import { requestClient } from '#/api/request'; + +export namespace MesMdAutoCodePartApi { + /** MES 编码规则分段 */ + export interface AutoCodePart { + id?: number; // 分段编号 + ruleId?: number; // 规则编号 + sort?: number; // 排序 + type?: number; // 分段类型 + length?: number; // 长度 + dateFormat?: string; // 日期格式 + fixCharacter?: string; // 固定字符 + serialStartNo?: number; // 流水号起始值 + serialStep?: number; // 流水号步长 + cycleFlag?: boolean; // 是否循环 + cycleMethod?: number; // 循环方式 + remark?: string; // 备注 + } +} + +/** 查询编码规则分段详情 */ +export function getAutoCodePart(id: number) { + return requestClient.get( + `/mes/md/auto-code-part/get?id=${id}`, + ); +} + +/** 查询编码规则分段列表 */ +export function getAutoCodePartListByRuleId(ruleId: number) { + return requestClient.get( + '/mes/md/auto-code-part/list-by-rule-id', + { params: { ruleId } }, + ); +} + +/** 新增编码规则分段 */ +export function createAutoCodePart(data: MesMdAutoCodePartApi.AutoCodePart) { + return requestClient.post('/mes/md/auto-code-part/create', data); +} + +/** 修改编码规则分段 */ +export function updateAutoCodePart(data: MesMdAutoCodePartApi.AutoCodePart) { + return requestClient.put('/mes/md/auto-code-part/update', data); +} + +/** 删除编码规则分段 */ +export function deleteAutoCodePart(id: number) { + return requestClient.delete(`/mes/md/auto-code-part/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/md/autocode/record/index.ts b/apps/web-antdv-next/src/api/mes/md/autocode/record/index.ts new file mode 100644 index 000000000..6110249ee --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/autocode/record/index.ts @@ -0,0 +1,9 @@ +import { requestClient } from '#/api/request'; + +/** 生成 MES 编码 */ +export function generateAutoCode(ruleCode: string, inputChar?: string) { + return requestClient.post('/mes/md/auto-code-record/generate', { + inputChar, + ruleCode, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/md/autocode/rule/index.ts b/apps/web-antdv-next/src/api/mes/md/autocode/rule/index.ts new file mode 100644 index 000000000..6955e7304 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/autocode/rule/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdAutoCodeRuleApi { + /** MES 编码规则 */ + export interface AutoCodeRule { + id?: number; // 规则编号 + code?: string; // 规则编码 + name?: string; // 规则名称 + description?: string; // 规则描述 + maxLength?: number; // 最大长度 + padded?: boolean; // 是否补齐 + paddedChar?: string; // 补齐字符 + paddedMethod?: number; // 补齐方式 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询编码规则分页 */ +export function getAutoCodeRulePage(params: PageParam) { + return requestClient.get>( + '/mes/md/auto-code-rule/page', + { params }, + ); +} + +/** 查询编码规则详情 */ +export function getAutoCodeRule(id: number) { + return requestClient.get( + `/mes/md/auto-code-rule/get?id=${id}`, + ); +} + +/** 新增编码规则 */ +export function createAutoCodeRule(data: MesMdAutoCodeRuleApi.AutoCodeRule) { + return requestClient.post('/mes/md/auto-code-rule/create', data); +} + +/** 修改编码规则 */ +export function updateAutoCodeRule(data: MesMdAutoCodeRuleApi.AutoCodeRule) { + return requestClient.put('/mes/md/auto-code-rule/update', data); +} + +/** 删除编码规则 */ +export function deleteAutoCodeRule(id: number) { + return requestClient.delete(`/mes/md/auto-code-rule/delete?id=${id}`); +} + +/** 导出编码规则 */ +export function exportAutoCodeRule(params: PageParam) { + return requestClient.download('/mes/md/auto-code-rule/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/md/client/index.ts b/apps/web-antdv-next/src/api/mes/md/client/index.ts new file mode 100644 index 000000000..9be868d69 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/client/index.ts @@ -0,0 +1,86 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdClientApi { + /** MES 客户 */ + export interface Client { + id?: number; // 客户编号 + code?: string; // 客户编码 + name?: string; // 客户名称 + nickname?: string; // 客户简称 + englishName?: string; // 客户英文名称 + description?: string; // 客户简介 + logo?: string; // 客户 LOGO 地址 + type?: number; // 客户类型 + address?: string; // 客户地址 + website?: string; // 客户官网地址 + email?: string; // 客户邮箱地址 + telephone?: string; // 客户电话 + contact1Name?: string; // 联系人1 + contact1Telephone?: string; // 联系人1电话 + contact1Email?: string; // 联系人1邮箱 + contact2Name?: string; // 联系人2 + contact2Telephone?: string; // 联系人2电话 + contact2Email?: string; // 联系人2邮箱 + creditCode?: string; // 统一社会信用代码 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } + + /** 客户导入结果 */ + export interface ClientImportRespVO { + createCodes?: string[]; // 新增成功的客户编码 + updateCodes?: string[]; // 更新成功的客户编码 + failureCodes?: Record; // 导入失败的客户编码及原因 + } +} + +/** 查询客户分页 */ +export function getClientPage(params: PageParam) { + return requestClient.get>( + '/mes/md-client/page', + { params }, + ); +} + +/** 查询客户详情 */ +export function getClient(id: number) { + return requestClient.get( + `/mes/md-client/get?id=${id}`, + ); +} + +/** 新增客户 */ +export function createClient(data: MesMdClientApi.Client) { + return requestClient.post('/mes/md-client/create', data); +} + +/** 修改客户 */ +export function updateClient(data: MesMdClientApi.Client) { + return requestClient.put('/mes/md-client/update', data); +} + +/** 删除客户 */ +export function deleteClient(id: number) { + return requestClient.delete(`/mes/md-client/delete?id=${id}`); +} + +/** 导出客户 */ +export function exportClient(params: any) { + return requestClient.download('/mes/md-client/export-excel', { params }); +} + +/** 下载客户导入模板 */ +export function importClientTemplate() { + return requestClient.download('/mes/md-client/get-import-template'); +} + +/** 导入客户 */ +export function importClient(file: File, updateSupport: boolean) { + return requestClient.upload( + `/mes/md-client/import?updateSupport=${updateSupport}`, + { file }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/item/batchConfig/index.ts b/apps/web-antdv-next/src/api/mes/md/item/batchConfig/index.ts new file mode 100644 index 000000000..676f02f75 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/item/batchConfig/index.ts @@ -0,0 +1,35 @@ +import { requestClient } from '#/api/request'; + +export namespace MesMdItemBatchConfigApi { + /** MES 物料批次属性配置 */ + export interface BatchConfig { + id?: number; // 编号 + itemId?: number; // 物料编号 + produceDateFlag?: boolean; // 批次属性-生产日期 + expireDateFlag?: boolean; // 批次属性-有效期 + receiptDateFlag?: boolean; // 批次属性-入库日期 + vendorFlag?: boolean; // 批次属性-供应商 + clientFlag?: boolean; // 批次属性-客户 + salesOrderCodeFlag?: boolean; // 批次属性-销售订单编号 + purchaseOrderCodeFlag?: boolean; // 批次属性-采购订单编号 + workorderFlag?: boolean; // 批次属性-生产工单 + taskFlag?: boolean; // 批次属性-生产任务 + workstationFlag?: boolean; // 批次属性-工作站 + toolFlag?: boolean; // 批次属性-工具 + moldFlag?: boolean; // 批次属性-模具 + lotNumberFlag?: boolean; // 批次属性-生产批号 + qualityStatusFlag?: boolean; // 批次属性-质量状态 + } +} + +/** 根据物料编号获取批次属性配置 */ +export function getBatchConfigByItemId(itemId: number) { + return requestClient.get( + `/mes/md/item-batch-config/get-by-item-id?itemId=${itemId}`, + ); +} + +/** 保存批次属性配置 */ +export function saveBatchConfig(data: MesMdItemBatchConfigApi.BatchConfig) { + return requestClient.post('/mes/md/item-batch-config/save', data); +} diff --git a/apps/web-antdv-next/src/api/mes/md/item/index.ts b/apps/web-antdv-next/src/api/mes/md/item/index.ts new file mode 100644 index 000000000..9d3b107f8 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/item/index.ts @@ -0,0 +1,83 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdItemApi { + /** MES 物料产品 */ + export interface Item { + id?: number; // 物料编号 + code?: string; // 物料编码 + name?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureId?: number; // 计量单位编号 + unitMeasureName?: string; // 计量单位名称 + itemTypeId?: number; // 物料分类编号 + itemTypeName?: string; // 物料分类名称 + itemOrProduct?: string; // 物料/产品标识 + status?: number; // 状态 + safeStockFlag?: boolean; // 是否启用安全库存 + minStock?: number; // 最低库存量 + maxStock?: number; // 最高库存量 + highValue?: boolean; // 是否高值物料 + batchFlag?: boolean; // 是否启用批次管理 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } + + /** 物料导入结果 */ + export interface ItemImportRespVO { + createCodes?: string[]; // 新增成功的物料编码 + updateCodes?: string[]; // 更新成功的物料编码 + failureCodes?: Record; // 导入失败的物料编码及原因 + } +} + +/** 查询物料产品分页 */ +export function getItemPage(params: PageParam) { + return requestClient.get>('/mes/md/item/page', { params }); +} + +/** 查询物料产品详情 */ +export function getItem(id: number) { + return requestClient.get(`/mes/md/item/get?id=${id}`); +} + +/** 新增物料产品 */ +export function createItem(data: MesMdItemApi.Item) { + return requestClient.post('/mes/md/item/create', data); +} + +/** 修改物料产品 */ +export function updateItem(data: MesMdItemApi.Item) { + return requestClient.put('/mes/md/item/update', data); +} + +/** 修改物料产品状态 */ +export function updateItemStatus(id: number, status: number) { + return requestClient.put('/mes/md/item/update-status', undefined, { + params: { id, status }, + }); +} + +/** 删除物料产品 */ +export function deleteItem(id: number) { + return requestClient.delete(`/mes/md/item/delete?id=${id}`); +} + +/** 导出物料产品 */ +export function exportItem(params: any) { + return requestClient.download('/mes/md/item/export-excel', { params }); +} + +/** 下载物料导入模板 */ +export function importItemTemplate() { + return requestClient.download('/mes/md/item/get-import-template'); +} + +/** 导入物料产品 */ +export function importItem(file: File, updateSupport: boolean) { + return requestClient.upload( + `/mes/md/item/import?updateSupport=${updateSupport}`, + { file }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/item/productBom/index.ts b/apps/web-antdv-next/src/api/mes/md/item/productBom/index.ts new file mode 100644 index 000000000..27176a60a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/item/productBom/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdProductBomApi { + /** MES 产品 BOM */ + export interface ProductBom { + id?: number; // BOM 编号 + itemId?: number; // 物料产品编号 + bomItemId?: number; // BOM 物料编号 + quantity?: number; // 物料使用比例 + status?: number; // 是否启用 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + bomItemCode?: string; // BOM 物料编码 + bomItemName?: string; // BOM 物料名称 + bomItemSpecification?: string; // BOM 物料规格 + unitMeasureName?: string; // 计量单位名称 + itemOrProduct?: string; // 物料/产品标识 + } +} + +/** 新增产品 BOM */ +export function createProductBom(data: MesMdProductBomApi.ProductBom) { + return requestClient.post('/mes/md/product-bom/create', data); +} + +/** 修改产品 BOM */ +export function updateProductBom(data: MesMdProductBomApi.ProductBom) { + return requestClient.put('/mes/md/product-bom/update', data); +} + +/** 删除产品 BOM */ +export function deleteProductBom(id: number) { + return requestClient.delete(`/mes/md/product-bom/delete?id=${id}`); +} + +/** 查询产品 BOM 详情 */ +export function getProductBom(id: number) { + return requestClient.get( + `/mes/md/product-bom/get?id=${id}`, + ); +} + +/** 查询产品 BOM 分页 */ +export function getProductBomPage(params: PageParam) { + return requestClient.get>( + '/mes/md/product-bom/page', + { params }, + ); +} + +/** 根据物料产品编号查询产品 BOM 列表 */ +export function getProductBomListByItemId(itemId: number) { + return requestClient.get( + `/mes/md/product-bom/list-by-item-id?itemId=${itemId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/item/productSip/index.ts b/apps/web-antdv-next/src/api/mes/md/item/productSip/index.ts new file mode 100644 index 000000000..eac5599d7 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/item/productSip/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdProductSipApi { + /** MES 产品 SIP */ + export interface ProductSip { + id?: number; // SIP 编号 + itemId?: number; // 物料产品编号 + sort?: number; // 排列顺序 + processId?: number; // 工序编号 + title?: string; // 标题 + description?: string; // 详细描述 + url?: string; // 图片地址 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + processCode?: string; // 工序编码 + processName?: string; // 工序名称 + } +} + +/** 新增产品 SIP */ +export function createProductSip(data: MesMdProductSipApi.ProductSip) { + return requestClient.post('/mes/md/product-sip/create', data); +} + +/** 修改产品 SIP */ +export function updateProductSip(data: MesMdProductSipApi.ProductSip) { + return requestClient.put('/mes/md/product-sip/update', data); +} + +/** 删除产品 SIP */ +export function deleteProductSip(id: number) { + return requestClient.delete(`/mes/md/product-sip/delete?id=${id}`); +} + +/** 查询产品 SIP 详情 */ +export function getProductSip(id: number) { + return requestClient.get( + `/mes/md/product-sip/get?id=${id}`, + ); +} + +/** 查询产品 SIP 分页 */ +export function getProductSipPage(params: PageParam) { + return requestClient.get>( + '/mes/md/product-sip/page', + { params }, + ); +} + +/** 根据物料产品编号查询产品 SIP 列表 */ +export function getProductSipListByItemId(itemId: number) { + return requestClient.get( + `/mes/md/product-sip/list-by-item-id?itemId=${itemId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/item/productSop/index.ts b/apps/web-antdv-next/src/api/mes/md/item/productSop/index.ts new file mode 100644 index 000000000..554869a41 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/item/productSop/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdProductSopApi { + /** MES 产品 SOP */ + export interface ProductSop { + id?: number; // SOP 编号 + itemId?: number; // 物料产品编号 + sort?: number; // 排列顺序 + processId?: number; // 工序编号 + title?: string; // 标题 + description?: string; // 详细描述 + url?: string; // 图片地址 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + processCode?: string; // 工序编码 + processName?: string; // 工序名称 + } +} + +/** 新增产品 SOP */ +export function createProductSop(data: MesMdProductSopApi.ProductSop) { + return requestClient.post('/mes/md/product-sop/create', data); +} + +/** 修改产品 SOP */ +export function updateProductSop(data: MesMdProductSopApi.ProductSop) { + return requestClient.put('/mes/md/product-sop/update', data); +} + +/** 删除产品 SOP */ +export function deleteProductSop(id: number) { + return requestClient.delete(`/mes/md/product-sop/delete?id=${id}`); +} + +/** 查询产品 SOP 详情 */ +export function getProductSop(id: number) { + return requestClient.get( + `/mes/md/product-sop/get?id=${id}`, + ); +} + +/** 查询产品 SOP 分页 */ +export function getProductSopPage(params: PageParam) { + return requestClient.get>( + '/mes/md/product-sop/page', + { params }, + ); +} + +/** 根据物料产品编号查询产品 SOP 列表 */ +export function getProductSopListByItemId(itemId: number) { + return requestClient.get( + `/mes/md/product-sop/list-by-item-id?itemId=${itemId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/item/type/index.ts b/apps/web-antdv-next/src/api/mes/md/item/type/index.ts new file mode 100644 index 000000000..e9367ee1f --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/item/type/index.ts @@ -0,0 +1,54 @@ +import { requestClient } from '#/api/request'; + +export namespace MesMdItemTypeApi { + /** MES 物料产品分类 */ + export interface ItemType { + id?: number; // 分类编号 + parentId?: number; // 父分类编号 + code?: string; // 分类编码 + name?: string; // 分类名称 + itemOrProduct?: string; // 物料/产品标识 + sort?: number; // 显示排序 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + children?: ItemType[]; // 子分类 + } +} + +/** 查询物料产品分类列表 */ +export function getItemTypeList(params?: any) { + return requestClient.get( + '/mes/md/item-type/list', + { params }, + ); +} + +/** 查询物料产品分类精简列表 */ +export function getItemTypeSimpleList() { + return requestClient.get( + '/mes/md/item-type/simple-list', + ); +} + +/** 查询物料产品分类详情 */ +export function getItemType(id: number) { + return requestClient.get( + `/mes/md/item-type/get?id=${id}`, + ); +} + +/** 新增物料产品分类 */ +export function createItemType(data: MesMdItemTypeApi.ItemType) { + return requestClient.post('/mes/md/item-type/create', data); +} + +/** 修改物料产品分类 */ +export function updateItemType(data: MesMdItemTypeApi.ItemType) { + return requestClient.put('/mes/md/item-type/update', data); +} + +/** 删除物料产品分类 */ +export function deleteItemType(id: number) { + return requestClient.delete(`/mes/md/item-type/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/md/unitmeasure/index.ts b/apps/web-antdv-next/src/api/mes/md/unitmeasure/index.ts new file mode 100644 index 000000000..d90cc19c3 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/unitmeasure/index.ts @@ -0,0 +1,62 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdUnitMeasureApi { + /** MES 计量单位 */ + export interface UnitMeasure { + id?: number; // 单位编号 + code?: string; // 单位编码 + name?: string; // 单位名称 + primaryFlag?: boolean; // 是否主单位 + primaryId?: number; // 主单位编号 + changeRate?: number; // 与主单位换算比例 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询计量单位分页 */ +export function getUnitMeasurePage(params: PageParam) { + return requestClient.get>( + '/mes/md/unit-measure/page', + { params }, + ); +} + +/** 查询计量单位精简列表 */ +export function getUnitMeasureSimpleList() { + return requestClient.get( + '/mes/md/unit-measure/simple-list', + ); +} + +/** 查询计量单位详情 */ +export function getUnitMeasure(id: number) { + return requestClient.get( + `/mes/md/unit-measure/get?id=${id}`, + ); +} + +/** 新增计量单位 */ +export function createUnitMeasure(data: MesMdUnitMeasureApi.UnitMeasure) { + return requestClient.post('/mes/md/unit-measure/create', data); +} + +/** 修改计量单位 */ +export function updateUnitMeasure(data: MesMdUnitMeasureApi.UnitMeasure) { + return requestClient.put('/mes/md/unit-measure/update', data); +} + +/** 删除计量单位 */ +export function deleteUnitMeasure(id: number) { + return requestClient.delete(`/mes/md/unit-measure/delete?id=${id}`); +} + +/** 导出计量单位 */ +export function exportUnitMeasure(params: PageParam) { + return requestClient.download('/mes/md/unit-measure/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/md/vendor/index.ts b/apps/web-antdv-next/src/api/mes/md/vendor/index.ts new file mode 100644 index 000000000..e64845f53 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/vendor/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdVendorApi { + /** MES 供应商 */ + export interface Vendor { + id?: number; // 供应商编号 + code?: string; // 供应商编码 + name?: string; // 供应商名称 + nickname?: string; // 供应商简称 + englishName?: string; // 供应商英文名称 + description?: string; // 供应商简介 + logo?: string; // 供应商 LOGO 地址 + level?: string; // 供应商等级 + score?: number; // 供应商评分 + address?: string; // 供应商地址 + website?: string; // 供应商官网地址 + email?: string; // 供应商邮箱地址 + telephone?: string; // 供应商电话 + contact1Name?: string; // 联系人1 + contact1Telephone?: string; // 联系人1电话 + contact1Email?: string; // 联系人1邮箱 + contact2Name?: string; // 联系人2 + contact2Telephone?: string; // 联系人2电话 + contact2Email?: string; // 联系人2邮箱 + creditCode?: string; // 统一社会信用代码 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } + + /** 供应商导入结果 */ + export interface VendorImportRespVO { + createCodes?: string[]; // 新增成功的供应商编码 + updateCodes?: string[]; // 更新成功的供应商编码 + failureCodes?: Record; // 导入失败的供应商编码及原因 + } +} + +/** 查询供应商分页 */ +export function getVendorPage(params: PageParam) { + return requestClient.get>( + '/mes/md-vendor/page', + { params }, + ); +} + +/** 查询供应商详情 */ +export function getVendor(id: number) { + return requestClient.get( + `/mes/md-vendor/get?id=${id}`, + ); +} + +/** 新增供应商 */ +export function createVendor(data: MesMdVendorApi.Vendor) { + return requestClient.post('/mes/md-vendor/create', data); +} + +/** 修改供应商 */ +export function updateVendor(data: MesMdVendorApi.Vendor) { + return requestClient.put('/mes/md-vendor/update', data); +} + +/** 删除供应商 */ +export function deleteVendor(id: number) { + return requestClient.delete(`/mes/md-vendor/delete?id=${id}`); +} + +/** 导出供应商 */ +export function exportVendor(params: any) { + return requestClient.download('/mes/md-vendor/export-excel', { params }); +} + +/** 下载供应商导入模板 */ +export function importVendorTemplate() { + return requestClient.download('/mes/md-vendor/get-import-template'); +} + +/** 导入供应商 */ +export function importVendor(file: File, updateSupport: boolean) { + return requestClient.upload( + `/mes/md-vendor/import?updateSupport=${updateSupport}`, + { file }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/md/workstation/index.ts b/apps/web-antdv-next/src/api/mes/md/workstation/index.ts new file mode 100644 index 000000000..4880f3bbe --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/workstation/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdWorkstationApi { + /** MES 工作站 */ + export interface Workstation { + id?: number; // 工作站编号 + code?: string; // 工作站编码 + name?: string; // 工作站名称 + address?: string; // 工作站地点 + workshopId?: number; // 所在车间编号 + workshopName?: string; // 所在车间名称 + processId?: number; // 工序编号 + processName?: string; // 工序名称 + warehouseId?: number; // 线边库编号 + locationId?: number; // 库区编号 + areaId?: number; // 库位编号 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询工作站分页 */ +export function getWorkstationPage(params: PageParam) { + return requestClient.get>( + '/mes/md-workstation/page', + { params }, + ); +} + +/** 查询工作站详情 */ +export function getWorkstation(id: number) { + return requestClient.get( + `/mes/md-workstation/get?id=${id}`, + ); +} + +/** 新增工作站 */ +export function createWorkstation(data: MesMdWorkstationApi.Workstation) { + return requestClient.post('/mes/md-workstation/create', data); +} + +/** 修改工作站 */ +export function updateWorkstation(data: MesMdWorkstationApi.Workstation) { + return requestClient.put('/mes/md-workstation/update', data); +} + +/** 删除工作站 */ +export function deleteWorkstation(id: number) { + return requestClient.delete(`/mes/md-workstation/delete?id=${id}`); +} + +/** 导出工作站 */ +export function exportWorkstation(params: any) { + return requestClient.download('/mes/md-workstation/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/md/workstation/machine/index.ts b/apps/web-antdv-next/src/api/mes/md/workstation/machine/index.ts new file mode 100644 index 000000000..40dd8692b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/workstation/machine/index.ts @@ -0,0 +1,35 @@ +import { requestClient } from '#/api/request'; + +export namespace MesMdWorkstationMachineApi { + /** MES 工作站设备资源 */ + export interface WorkstationMachine { + id?: number; // 资源编号 + workstationId?: number; // 工作站编号 + machineryId?: number; // 设备编号 + machineryCode?: string; // 设备编码 + machineryName?: string; // 设备名称 + quantity?: number; // 数量 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询工作站设备资源列表 */ +export function getWorkstationMachineList(workstationId: number) { + return requestClient.get( + '/mes/md-workstation-machine/list-by-workstation', + { params: { workstationId } }, + ); +} + +/** 新增工作站设备资源 */ +export function createWorkstationMachine( + data: MesMdWorkstationMachineApi.WorkstationMachine, +) { + return requestClient.post('/mes/md-workstation-machine/create', data); +} + +/** 删除工作站设备资源 */ +export function deleteWorkstationMachine(id: number) { + return requestClient.delete(`/mes/md-workstation-machine/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/md/workstation/tool/index.ts b/apps/web-antdv-next/src/api/mes/md/workstation/tool/index.ts new file mode 100644 index 000000000..d98e5f122 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/workstation/tool/index.ts @@ -0,0 +1,41 @@ +import { requestClient } from '#/api/request'; + +export namespace MesMdWorkstationToolApi { + /** MES 工作站工装夹具资源 */ + export interface WorkstationTool { + id?: number; // 资源编号 + workstationId?: number; // 工作站编号 + toolTypeId?: number; // 工具类型编号 + toolTypeName?: string; // 工具类型名称 + quantity?: number; // 数量 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询工作站工装夹具资源列表 */ +export function getWorkstationToolList(workstationId: number) { + return requestClient.get( + '/mes/md-workstation-tool/list-by-workstation', + { params: { workstationId } }, + ); +} + +/** 新增工作站工装夹具资源 */ +export function createWorkstationTool( + data: MesMdWorkstationToolApi.WorkstationTool, +) { + return requestClient.post('/mes/md-workstation-tool/create', data); +} + +/** 修改工作站工装夹具资源 */ +export function updateWorkstationTool( + data: MesMdWorkstationToolApi.WorkstationTool, +) { + return requestClient.put('/mes/md-workstation-tool/update', data); +} + +/** 删除工作站工装夹具资源 */ +export function deleteWorkstationTool(id: number) { + return requestClient.delete(`/mes/md-workstation-tool/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/md/workstation/worker/index.ts b/apps/web-antdv-next/src/api/mes/md/workstation/worker/index.ts new file mode 100644 index 000000000..3bd4ab9ad --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/workstation/worker/index.ts @@ -0,0 +1,41 @@ +import { requestClient } from '#/api/request'; + +export namespace MesMdWorkstationWorkerApi { + /** MES 工作站人力资源 */ + export interface WorkstationWorker { + id?: number; // 资源编号 + workstationId?: number; // 工作站编号 + postId?: number; // 岗位编号 + postName?: string; // 岗位名称 + quantity?: number; // 数量 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询工作站人力资源列表 */ +export function getWorkstationWorkerList(workstationId: number) { + return requestClient.get( + '/mes/md-workstation-worker/list-by-workstation', + { params: { workstationId } }, + ); +} + +/** 新增工作站人力资源 */ +export function createWorkstationWorker( + data: MesMdWorkstationWorkerApi.WorkstationWorker, +) { + return requestClient.post('/mes/md-workstation-worker/create', data); +} + +/** 修改工作站人力资源 */ +export function updateWorkstationWorker( + data: MesMdWorkstationWorkerApi.WorkstationWorker, +) { + return requestClient.put('/mes/md-workstation-worker/update', data); +} + +/** 删除工作站人力资源 */ +export function deleteWorkstationWorker(id: number) { + return requestClient.delete(`/mes/md-workstation-worker/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/md/workstation/workshop/index.ts b/apps/web-antdv-next/src/api/mes/md/workstation/workshop/index.ts new file mode 100644 index 000000000..5a96399c9 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/md/workstation/workshop/index.ts @@ -0,0 +1,60 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesMdWorkshopApi { + /** MES 车间 */ + export interface Workshop { + id?: number; // 车间编号 + code?: string; // 车间编码 + name?: string; // 车间名称 + area?: number; // 面积 + chargeUserId?: number; // 负责人用户编号 + chargeUserName?: string; // 负责人名称 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询车间分页 */ +export function getWorkshopPage(params: PageParam) { + return requestClient.get>( + '/mes/md-workshop/page', + { params }, + ); +} + +/** 查询车间精简列表 */ +export function getWorkshopSimpleList() { + return requestClient.get( + '/mes/md-workshop/simple-list', + ); +} + +/** 查询车间详情 */ +export function getWorkshop(id: number) { + return requestClient.get( + `/mes/md-workshop/get?id=${id}`, + ); +} + +/** 新增车间 */ +export function createWorkshop(data: MesMdWorkshopApi.Workshop) { + return requestClient.post('/mes/md-workshop/create', data); +} + +/** 修改车间 */ +export function updateWorkshop(data: MesMdWorkshopApi.Workshop) { + return requestClient.put('/mes/md-workshop/update', data); +} + +/** 删除车间 */ +export function deleteWorkshop(id: number) { + return requestClient.delete(`/mes/md-workshop/delete?id=${id}`); +} + +/** 导出车间 */ +export function exportWorkshop(params: any) { + return requestClient.download('/mes/md-workshop/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/andon/config/index.ts b/apps/web-antdv-next/src/api/mes/pro/andon/config/index.ts new file mode 100644 index 000000000..9309a0c8c --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/andon/config/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProAndonConfigApi { + /** MES 安灯配置 */ + export interface AndonConfig { + id?: number; // 编号 + reason?: string; // 呼叫原因 + level?: number; // 级别 + handlerRoleId?: number; // 处置角色编号 + handlerRoleName?: string; // 处置角色名称 + handlerUserId?: number; // 处置人编号 + handlerUserNickname?: string; // 处置人昵称 + remark?: string; // 备注 + } +} + +/** 查询安灯配置分页 */ +export function getAndonConfigPage(params: PageParam) { + return requestClient.get>( + '/mes/pro/andon-config/page', + { params }, + ); +} + +/** 查询安灯配置列表 */ +export function getAndonConfigList() { + return requestClient.get( + '/mes/pro/andon-config/list', + ); +} + +/** 查询安灯配置详情 */ +export function getAndonConfig(id: number) { + return requestClient.get( + `/mes/pro/andon-config/get?id=${id}`, + ); +} + +/** 新增安灯配置 */ +export function createAndonConfig(data: MesProAndonConfigApi.AndonConfig) { + return requestClient.post('/mes/pro/andon-config/create', data); +} + +/** 修改安灯配置 */ +export function updateAndonConfig(data: MesProAndonConfigApi.AndonConfig) { + return requestClient.put('/mes/pro/andon-config/update', data); +} + +/** 删除安灯配置 */ +export function deleteAndonConfig(id: number) { + return requestClient.delete(`/mes/pro/andon-config/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/andon/record/index.ts b/apps/web-antdv-next/src/api/mes/pro/andon/record/index.ts new file mode 100644 index 000000000..b8cf4349b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/andon/record/index.ts @@ -0,0 +1,76 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProAndonRecordApi { + /** MES 安灯记录 */ + export interface AndonRecord { + id?: number; + configId?: number; // 安灯配置编号 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 工单编码 + processId?: number; // 工序编号 + processName?: string; // 工序名称 + userId?: number; // 发起用户编号 + userNickname?: string; // 发起人昵称 + reason?: string; // 呼叫原因 + level?: number; // 级别 + status?: number; // 处置状态 + handleTime?: number; // 处置时间(毫秒时间戳) + handlerUserId?: number; // 处置人编号 + handlerUserNickname?: string; // 处置人昵称 + remark?: string; // 备注 + createTime?: number; // 发起时间 + } + + /** MES 安灯记录分页查询参数 */ + export interface PageParams extends PageParam { + workstationId?: number; // 工作站编号 + userId?: number; // 发起用户编号 + handlerUserId?: number; // 处置人编号 + status?: number; // 处置状态 + createTime?: string[]; // 发起时间区间 + } +} + +/** 查询安灯记录分页 */ +export function getAndonRecordPage(params: MesProAndonRecordApi.PageParams) { + return requestClient.get>( + '/mes/pro/andon-record/page', + { params }, + ); +} + +/** 查询安灯记录详情 */ +export function getAndonRecord(id: number) { + return requestClient.get( + `/mes/pro/andon-record/get?id=${id}`, + ); +} + +/** 新增安灯记录 */ +export function createAndonRecord(data: MesProAndonRecordApi.AndonRecord) { + return requestClient.post('/mes/pro/andon-record/create', data); +} + +/** 删除安灯记录 */ +export function deleteAndonRecord(id: number) { + return requestClient.delete(`/mes/pro/andon-record/delete?id=${id}`); +} + +/** 更新安灯记录(保存/已处置) */ +export function updateAndonRecord(data: MesProAndonRecordApi.AndonRecord) { + return requestClient.put('/mes/pro/andon-record/update', data); +} + +/** 导出安灯记录 Excel */ +export function exportAndonRecord( + params: Partial, +) { + return requestClient.download('/mes/pro/andon-record/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/card/index.ts b/apps/web-antdv-next/src/api/mes/pro/card/index.ts new file mode 100644 index 000000000..a9d123cc3 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/card/index.ts @@ -0,0 +1,79 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProCardApi { + /** MES 生产流转卡 */ + export interface Card { + id?: number; // 编号 + code?: string; // 流转卡编码 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 工单编码 + workOrderName?: string; // 工单名称 + batchCode?: string; // 批次号 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品编码 + itemName?: string; // 产品名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + transferedQuantity?: number; // 流转数量 + status?: number; // 状态 + remark?: string; // 备注 + } + + /** MES 生产流转卡分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + workOrderId?: number; + itemId?: number; + batchCode?: string; + } +} + +/** 查询生产流转卡分页 */ +export function getCardPage(params: MesProCardApi.PageParams) { + return requestClient.get>( + '/mes/pro/card/page', + { params }, + ); +} + +/** 查询生产流转卡详情 */ +export function getCard(id: number) { + return requestClient.get(`/mes/pro/card/get?id=${id}`); +} + +/** 新增生产流转卡 */ +export function createCard(data: MesProCardApi.Card) { + return requestClient.post('/mes/pro/card/create', data); +} + +/** 修改生产流转卡 */ +export function updateCard(data: MesProCardApi.Card) { + return requestClient.put('/mes/pro/card/update', data); +} + +/** 删除生产流转卡 */ +export function deleteCard(id: number) { + return requestClient.delete(`/mes/pro/card/delete?id=${id}`); +} + +/** 导出生产流转卡 */ +export function exportCard(params: any) { + return requestClient.download('/mes/pro/card/export-excel', { params }); +} + +/** 提交生产流转卡 */ +export function submitCard(id: number) { + return requestClient.put(`/mes/pro/card/submit?id=${id}`); +} + +/** 完成生产流转卡 */ +export function finishCard(id: number) { + return requestClient.put(`/mes/pro/card/finish?id=${id}`); +} + +/** 取消生产流转卡 */ +export function cancelCard(id: number) { + return requestClient.put(`/mes/pro/card/cancel?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/card/process/index.ts b/apps/web-antdv-next/src/api/mes/pro/card/process/index.ts new file mode 100644 index 000000000..a6f372fe2 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/card/process/index.ts @@ -0,0 +1,62 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProCardProcessApi { + /** MES 流转卡工序记录 */ + export interface CardProcess { + id?: number; // 编号 + cardId?: number; // 流转卡编号 + sort?: number; // 序号 + processId?: number; // 工序编号 + processCode?: string; // 工序编码 + processName?: string; // 工序名称 + inputTime?: number; // 进入工序时间 + outputTime?: number; // 出工序时间 + inputQuantity?: number; // 投入数量 + outputQuantity?: number; // 产出数量 + unqualifiedQuantity?: number; // 不合格品数量 + workstationId?: number; // 工位编号 + workstationCode?: string; // 工位编码 + workstationName?: string; // 工位名称 + userId?: number; // 操作人编号 + nickname?: string; // 操作人名称 + ipqcId?: number; // 过程检验单编号 + remark?: string; // 备注 + } + + /** MES 流转卡工序记录分页查询参数 */ + export interface PageParams extends PageParam { + cardId?: number; + } +} + +/** 查询流转卡工序记录分页 */ +export function getCardProcessPage(params: MesProCardProcessApi.PageParams) { + return requestClient.get>( + '/mes/pro/card-process/page', + { params }, + ); +} + +/** 查询流转卡工序记录详情 */ +export function getCardProcess(id: number) { + return requestClient.get( + `/mes/pro/card-process/get?id=${id}`, + ); +} + +/** 新增流转卡工序记录 */ +export function createCardProcess(data: MesProCardProcessApi.CardProcess) { + return requestClient.post('/mes/pro/card-process/create', data); +} + +/** 修改流转卡工序记录 */ +export function updateCardProcess(data: MesProCardProcessApi.CardProcess) { + return requestClient.put('/mes/pro/card-process/update', data); +} + +/** 删除流转卡工序记录 */ +export function deleteCardProcess(id: number) { + return requestClient.delete(`/mes/pro/card-process/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/feedback/index.ts b/apps/web-antdv-next/src/api/mes/pro/feedback/index.ts new file mode 100644 index 000000000..21a988ba8 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/feedback/index.ts @@ -0,0 +1,113 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProFeedbackApi { + /** MES 生产报工 */ + export interface Feedback { + id?: number; + code?: string; // 报工单编号 + type?: number; // 报工类型 + channel?: string; // 报工途径 + feedbackTime?: number; // 报工时间 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + routeId?: number; // 工艺路线编号 + routeCode?: string; // 工艺路线编码 + processId?: number; // 工序编号 + processCode?: string; // 工序编码 + processName?: string; // 工序名称 + checkFlag?: boolean; // 是否需要检验 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 工单编码 + workOrderName?: string; // 工单名称 + taskId?: number; // 生产任务编号 + taskCode?: string; // 任务编码 + itemId?: number; // 产品物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + itemSpecification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位名称 + expireDate?: number; // 过期日期 + scheduledQuantity?: number; // 排产数量 + feedbackQuantity?: number; // 本次报工数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不良品数量 + uncheckQuantity?: number; // 待检测数量 + laborScrapQuantity?: number; // 工废数量 + materialScrapQuantity?: number; // 料废数量 + otherScrapQuantity?: number; // 其他废品数量 + feedbackUserId?: number; // 报工用户编号 + feedbackUserNickname?: string; // 报工人昵称 + approveUserId?: number; // 审核用户编号 + approveUserNickname?: string; // 审核人昵称 + status?: number; // 状态 + remark?: string; // 备注 + creator?: string; // 创建人 + createTime?: number; // 创建时间 + } + + /** MES 生产报工分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + type?: number; + workOrderId?: number; + itemId?: number; + feedbackUserId?: number; + creator?: string; + status?: number; + feedbackTime?: string[]; + } +} + +/** 查询生产报工分页 */ +export function getFeedbackPage(params: MesProFeedbackApi.PageParams) { + return requestClient.get>( + '/mes/pro/feedback/page', + { params }, + ); +} + +/** 查询生产报工详情 */ +export function getFeedback(id: number) { + return requestClient.get( + `/mes/pro/feedback/get?id=${id}`, + ); +} + +/** 新增生产报工 */ +export function createFeedback(data: MesProFeedbackApi.Feedback) { + return requestClient.post('/mes/pro/feedback/create', data); +} + +/** 修改生产报工 */ +export function updateFeedback(data: MesProFeedbackApi.Feedback) { + return requestClient.put('/mes/pro/feedback/update', data); +} + +/** 删除生产报工 */ +export function deleteFeedback(id: number) { + return requestClient.delete(`/mes/pro/feedback/delete?id=${id}`); +} + +/** 导出生产报工 Excel */ +export function exportFeedback(params: Partial) { + return requestClient.download('/mes/pro/feedback/export-excel', { params }); +} + +/** 提交生产报工 */ +export function submitFeedback(id: number) { + return requestClient.put(`/mes/pro/feedback/submit?id=${id}`); +} + +/** 驳回生产报工 */ +export function rejectFeedback(id: number) { + return requestClient.put(`/mes/pro/feedback/reject?id=${id}`); +} + +/** 审批生产报工(返回是否已审批完成) */ +export function approveFeedback(id: number) { + return requestClient.put(`/mes/pro/feedback/approve?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/process/content/index.ts b/apps/web-antdv-next/src/api/mes/pro/process/content/index.ts new file mode 100644 index 000000000..8a4c15e59 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/process/content/index.ts @@ -0,0 +1,49 @@ +import { requestClient } from '#/api/request'; + +export namespace MesProProcessContentApi { + /** MES 生产工序内容(操作步骤) */ + export interface ProcessContent { + id?: number; + processId?: number; + sort?: number; + content?: string; + device?: string; + material?: string; + docUrl?: string; + remark?: string; + createTime?: Date; + } +} + +/** 按工序编号查询工序内容列表 */ +export function getProcessContentListByProcessId(processId: number) { + return requestClient.get( + `/mes/pro/process-content/list-by-process?processId=${processId}`, + ); +} + +/** 查询工序内容详情 */ +export function getProcessContent(id: number) { + return requestClient.get( + `/mes/pro/process-content/get?id=${id}`, + ); +} + +/** 新增工序内容 */ +export function createProcessContent( + data: MesProProcessContentApi.ProcessContent, +) { + return requestClient.post('/mes/pro/process-content/create', data); +} + +/** 修改工序内容 */ +export function updateProcessContent( + data: MesProProcessContentApi.ProcessContent, +) { + return requestClient.put('/mes/pro/process-content/update', data); +} + +/** 删除工序内容 */ +export function deleteProcessContent(id: number) { + return requestClient.delete(`/mes/pro/process-content/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/process/index.ts b/apps/web-antdv-next/src/api/mes/pro/process/index.ts new file mode 100644 index 000000000..a4ff1ea64 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/process/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProProcessApi { + /** MES 生产工序 */ + export interface Process { + id?: number; + code?: string; + name?: string; + attention?: string; + status?: number; + remark?: string; + createTime?: Date; + } +} + +/** 查询生产工序分页 */ +export function getProcessPage(params: PageParam) { + return requestClient.get>( + '/mes/pro/process/page', + { params }, + ); +} + +/** 查询生产工序精简列表 */ +export function getProcessSimpleList() { + return requestClient.get( + '/mes/pro/process/simple-list', + ); +} + +/** 查询生产工序详情 */ +export function getProcess(id: number) { + return requestClient.get( + `/mes/pro/process/get?id=${id}`, + ); +} + +/** 新增生产工序 */ +export function createProcess(data: MesProProcessApi.Process) { + return requestClient.post('/mes/pro/process/create', data); +} + +/** 修改生产工序 */ +export function updateProcess(data: MesProProcessApi.Process) { + return requestClient.put('/mes/pro/process/update', data); +} + +/** 删除生产工序 */ +export function deleteProcess(id: number) { + return requestClient.delete(`/mes/pro/process/delete?id=${id}`); +} + +/** 导出生产工序 Excel */ +export function exportProcess(params: any) { + return requestClient.download('/mes/pro/process/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/route/index.ts b/apps/web-antdv-next/src/api/mes/pro/route/index.ts new file mode 100644 index 000000000..56baff6b5 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/route/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProRouteApi { + /** MES 工艺路线 */ + export interface Route { + id?: number; + code?: string; + name?: string; + description?: string; + status?: number; + remark?: string; + createTime?: Date; + } +} + +/** 查询工艺路线分页 */ +export function getRoutePage(params: PageParam) { + return requestClient.get>( + '/mes/pro/route/page', + { params }, + ); +} + +/** 查询工艺路线精简列表 */ +export function getRouteSimpleList() { + return requestClient.get( + '/mes/pro/route/simple-list', + ); +} + +/** 查询工艺路线详情 */ +export function getRoute(id: number) { + return requestClient.get( + `/mes/pro/route/get?id=${id}`, + ); +} + +/** 新增工艺路线 */ +export function createRoute(data: MesProRouteApi.Route) { + return requestClient.post('/mes/pro/route/create', data); +} + +/** 修改工艺路线 */ +export function updateRoute(data: MesProRouteApi.Route) { + return requestClient.put('/mes/pro/route/update', data); +} + +/** 修改工艺路线状态 */ +export function updateRouteStatus(id: number, status: number) { + return requestClient.put( + `/mes/pro/route/update-status?id=${id}&status=${status}`, + ); +} + +/** 删除工艺路线 */ +export function deleteRoute(id: number) { + return requestClient.delete(`/mes/pro/route/delete?id=${id}`); +} + +/** 导出工艺路线 Excel */ +export function exportRoute(params: any) { + return requestClient.download('/mes/pro/route/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/route/process/index.ts b/apps/web-antdv-next/src/api/mes/pro/route/process/index.ts new file mode 100644 index 000000000..fee0ce9c4 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/route/process/index.ts @@ -0,0 +1,70 @@ +import { requestClient } from '#/api/request'; + +export namespace MesProRouteProcessApi { + /** MES 工艺路线工序 */ + export interface RouteProcess { + id?: number; + routeId?: number; + processId?: number; + processCode?: string; + processName?: string; + sort?: number; + nextProcessId?: number; + nextProcessName?: string; + linkType?: number; + prepareTime?: number; + waitTime?: number; + colorCode?: string; + keyFlag?: boolean; + checkFlag?: boolean; + remark?: string; + createTime?: Date; + } +} + +/** 按工艺路线查询工序列表 */ +export function getRouteProcessListByRoute(routeId: number) { + return requestClient.get( + `/mes/pro/route-process/list-by-route?routeId=${routeId}`, + ); +} + +/** 按产品查询工序列表(自动查找关联的工艺路线) */ +export function getRouteProcessListByProduct(productId: number) { + return requestClient.get( + `/mes/pro/route-process/list-by-product?productId=${productId}`, + ); +} + +/** 查询工艺路线工序详情 */ +export function getRouteProcess(id: number) { + return requestClient.get( + `/mes/pro/route-process/get?id=${id}`, + ); +} + +/** 按工艺路线 + 工序精确查询工序配置 */ +export function getRouteProcessByRouteAndProcess( + routeId: number, + processId: number, +) { + return requestClient.get( + '/mes/pro/route-process/get-by-route-and-process', + { params: { processId, routeId } }, + ); +} + +/** 新增工艺路线工序 */ +export function createRouteProcess(data: MesProRouteProcessApi.RouteProcess) { + return requestClient.post('/mes/pro/route-process/create', data); +} + +/** 修改工艺路线工序 */ +export function updateRouteProcess(data: MesProRouteProcessApi.RouteProcess) { + return requestClient.put('/mes/pro/route-process/update', data); +} + +/** 删除工艺路线工序 */ +export function deleteRouteProcess(id: number) { + return requestClient.delete(`/mes/pro/route-process/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/route/product/index.ts b/apps/web-antdv-next/src/api/mes/pro/route/product/index.ts new file mode 100644 index 000000000..2312f688c --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/route/product/index.ts @@ -0,0 +1,48 @@ +import { requestClient } from '#/api/request'; + +export namespace MesProRouteProductApi { + /** MES 工艺路线产品 */ + export interface RouteProduct { + id?: number; + routeId?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + specification?: string; + unitName?: string; + quantity?: number; + productionTime?: number; + timeUnitType?: string; + remark?: string; + createTime?: Date; + } +} + +/** 按工艺路线查询产品列表 */ +export function getRouteProductListByRoute(routeId: number) { + return requestClient.get( + `/mes/pro/route-product/list-by-route?routeId=${routeId}`, + ); +} + +/** 查询工艺路线产品详情 */ +export function getRouteProduct(id: number) { + return requestClient.get( + `/mes/pro/route-product/get?id=${id}`, + ); +} + +/** 新增工艺路线产品 */ +export function createRouteProduct(data: MesProRouteProductApi.RouteProduct) { + return requestClient.post('/mes/pro/route-product/create', data); +} + +/** 修改工艺路线产品 */ +export function updateRouteProduct(data: MesProRouteProductApi.RouteProduct) { + return requestClient.put('/mes/pro/route-product/update', data); +} + +/** 删除工艺路线产品 */ +export function deleteRouteProduct(id: number) { + return requestClient.delete(`/mes/pro/route-product/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/route/productbom/index.ts b/apps/web-antdv-next/src/api/mes/pro/route/productbom/index.ts new file mode 100644 index 000000000..7cfcbcc85 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/route/productbom/index.ts @@ -0,0 +1,57 @@ +import { requestClient } from '#/api/request'; + +export namespace MesProRouteProductBomApi { + /** MES 工艺路线产品 BOM */ + export interface RouteProductBom { + id?: number; + routeId?: number; + processId?: number; + productId?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + specification?: string; + unitName?: string; + quantity?: number; + remark?: string; + createTime?: Date; + } +} + +/** 查询工艺路线产品 BOM 列表 */ +export function getRouteProductBomList(params: { + processId?: number; + productId?: number; + routeId: number; +}) { + return requestClient.get( + '/mes/pro/route-product-bom/list', + { params }, + ); +} + +/** 查询工艺路线产品 BOM 详情 */ +export function getRouteProductBom(id: number) { + return requestClient.get( + `/mes/pro/route-product-bom/get?id=${id}`, + ); +} + +/** 新增工艺路线产品 BOM */ +export function createRouteProductBom( + data: MesProRouteProductBomApi.RouteProductBom, +) { + return requestClient.post('/mes/pro/route-product-bom/create', data); +} + +/** 修改工艺路线产品 BOM */ +export function updateRouteProductBom( + data: MesProRouteProductBomApi.RouteProductBom, +) { + return requestClient.put('/mes/pro/route-product-bom/update', data); +} + +/** 删除工艺路线产品 BOM */ +export function deleteRouteProductBom(id: number) { + return requestClient.delete(`/mes/pro/route-product-bom/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/task/index.ts b/apps/web-antdv-next/src/api/mes/pro/task/index.ts new file mode 100644 index 000000000..5e160c840 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/task/index.ts @@ -0,0 +1,95 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProTaskApi { + /** MES 生产任务 */ + export interface Task { + id?: number; + code?: string; // 任务编码 + name?: string; // 任务名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 工单编码 + workOrderName?: string; // 工单名称 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + routeId?: number; // 工艺路线编号 + processId?: number; // 工序编号 + processName?: string; // 工序名称 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品编码 + itemName?: string; // 产品名称 + itemSpecification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 排产数量 + producedQuantity?: number; // 已生产数量 + qualifyQuantity?: number; // 合格品数量 + unqualifyQuantity?: number; // 不良品数量 + changedQuantity?: number; // 调整数量 + clientId?: number; // 客户编号 + clientName?: string; // 客户名称 + startTime?: number; // 开始生产时间 + endTime?: number; // 结束生产时间 + duration?: number; // 生产时长(工作日,1=8小时) + requestDate?: number; // 需求日期(从工单查) + finishDate?: number; // 完成日期 + cancelDate?: number; // 取消日期 + colorCode?: string; // 甘特图显示颜色 + status?: number; // 任务状态 + checkFlag?: boolean; // 是否质检(派生自工艺路线工序) + remark?: string; // 备注 + } + + /** MES 生产任务分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + name?: string; + workOrderId?: number; + workstationId?: number; + routeId?: number; + processId?: number; + itemId?: number; + statuses?: number[]; + status?: number; + } +} + +/** 查询生产任务分页 */ +export function getTaskPage(params: MesProTaskApi.PageParams) { + return requestClient.get>( + '/mes/pro/task/page', + { params }, + ); +} + +/** 查询生产任务详情 */ +export function getTask(id: number) { + return requestClient.get(`/mes/pro/task/get?id=${id}`); +} + +/** 新增生产任务 */ +export function createTask(data: MesProTaskApi.Task) { + return requestClient.post('/mes/pro/task/create', data); +} + +/** 修改生产任务 */ +export function updateTask(data: MesProTaskApi.Task) { + return requestClient.put('/mes/pro/task/update', data); +} + +/** 删除生产任务 */ +export function deleteTask(id: number) { + return requestClient.delete(`/mes/pro/task/delete?id=${id}`); +} + +/** 导出生产任务 */ +export function exportTask(params: any) { + return requestClient.download('/mes/pro/task/export-excel', { params }); +} + +/** 查询甘特图任务列表(非分页) */ +export function getGanttTaskList(params: any) { + return requestClient.get('/mes/pro/task/gantt-list', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/task/issue/index.ts b/apps/web-antdv-next/src/api/mes/pro/task/issue/index.ts new file mode 100644 index 000000000..b3ccf956b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/task/issue/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProTaskIssueApi { + /** MES 生产任务投料 */ + export interface TaskIssue { + id?: number; // 编号 + taskId?: number; // 生产任务编号 + workOrderId?: number; // 生产工单编号 + workstationId?: number; // 工作站编号 + sourceDocType?: string; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceLineId?: number; // 来源单据行编号 + sourceDocCode?: string; // 来源单据编码 + batchCode?: string; // 投料批次 + itemId?: number; // 产品物料编号 + itemName?: string; // 产品名称 + itemCode?: string; // 产品编码 + itemSpecification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位名称 + issuedQuantity?: number; // 总投料数量 + availableQuantity?: number; // 当前可用数量 + usedQuantity?: number; // 当前使用数量 + remark?: string; // 备注 + } + + /** MES 生产任务投料分页查询参数 */ + export interface PageParams extends PageParam { + taskId?: number; // 生产任务编号 + workOrderId?: number; // 生产工单编号 + workstationId?: number; // 工作站编号 + itemId?: number; // 产品物料编号 + } +} + +/** 查询生产任务投料分页 */ +export function getTaskIssuePage(params: MesProTaskIssueApi.PageParams) { + return requestClient.get>( + '/mes/pro/task-issue/page', + { params }, + ); +} + +/** 查询生产任务投料详情 */ +export function getTaskIssue(id: number) { + return requestClient.get( + `/mes/pro/task-issue/get?id=${id}`, + ); +} + +/** 新增生产任务投料 */ +export function createTaskIssue(data: MesProTaskIssueApi.TaskIssue) { + return requestClient.post('/mes/pro/task-issue/create', data); +} + +/** 修改生产任务投料 */ +export function updateTaskIssue(data: MesProTaskIssueApi.TaskIssue) { + return requestClient.put('/mes/pro/task-issue/update', data); +} + +/** 删除生产任务投料 */ +export function deleteTaskIssue(id: number) { + return requestClient.delete(`/mes/pro/task-issue/delete?id=${id}`); +} + +/** 按生产任务查询投料列表 */ +export function getTaskIssueListByTask(taskId: number) { + return requestClient.get( + `/mes/pro/task-issue/list-by-task?taskId=${taskId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/workorder/bom/index.ts b/apps/web-antdv-next/src/api/mes/pro/workorder/bom/index.ts new file mode 100644 index 000000000..f04ef761c --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/workorder/bom/index.ts @@ -0,0 +1,62 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProWorkOrderBomApi { + /** MES 生产工单 BOM */ + export interface WorkOrderBom { + id?: number; // 编号 + workOrderId?: number; // 生产工单编号 + itemId?: number; // BOM 物料编号 + itemName?: string; // 物料名称 + itemCode?: string; // 物料编码 + itemSpecification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 预计使用量 + remark?: string; // 备注 + itemOrProduct?: string; // 物料产品标识 + } + + /** MES 生产工单 BOM 分页查询参数 */ + export interface PageParams extends PageParam { + workOrderId?: number; + } +} + +/** 查询工单 BOM 分页 */ +export function getWorkOrderBomPage(params: MesProWorkOrderBomApi.PageParams) { + return requestClient.get>( + '/mes/pro/work-order-bom/page', + { params }, + ); +} + +/** 查询工单 BOM 详情 */ +export function getWorkOrderBom(id: number) { + return requestClient.get( + `/mes/pro/work-order-bom/get?id=${id}`, + ); +} + +/** 新增工单 BOM */ +export function createWorkOrderBom(data: MesProWorkOrderBomApi.WorkOrderBom) { + return requestClient.post('/mes/pro/work-order-bom/create', data); +} + +/** 修改工单 BOM */ +export function updateWorkOrderBom(data: MesProWorkOrderBomApi.WorkOrderBom) { + return requestClient.put('/mes/pro/work-order-bom/update', data); +} + +/** 删除工单 BOM */ +export function deleteWorkOrderBom(id: number) { + return requestClient.delete(`/mes/pro/work-order-bom/delete?id=${id}`); +} + +/** 查询工单物料需求列表 */ +export function getWorkOrderBomItemListByWorkOrderId(workOrderId: number) { + return requestClient.get( + `/mes/pro/work-order-bom/item-list-by-work-order-id?workOrderId=${workOrderId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/workorder/index.ts b/apps/web-antdv-next/src/api/mes/pro/workorder/index.ts new file mode 100644 index 000000000..c4c0a152a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/workorder/index.ts @@ -0,0 +1,101 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProWorkOrderApi { + /** MES 生产工单 */ + export interface WorkOrder { + id?: number; // 编号 + code?: string; // 工单编码 + name?: string; // 工单名称 + type?: number; // 工单类型 + orderSourceType?: number; // 来源类型 + orderSourceCode?: string; // 来源单据编号 + productId?: number; // 产品编号 + productName?: string; // 产品名称 + productCode?: string; // 产品编码 + productSpecification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 生产数量 + quantityProduced?: number; // 已生产数量 + quantityChanged?: number; // 调整数量 + quantityScheduled?: number; // 已排产数量 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + vendorId?: number; // 供应商编号 + vendorName?: string; // 供应商名称 + vendorCode?: string; // 供应商编码 + batchCode?: string; // 批次号 + requestDate?: number; // 需求日期 + parentId?: number; // 父工单编号 + parentCode?: string; // 父工单编码 + finishDate?: number; // 完成时间 + cancelDate?: number; // 取消时间 + status?: number; // 工单状态 + remark?: string; // 备注 + createTime?: number; // 创建时间 + } + + /** MES 生产工单分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + name?: string; + orderSourceCode?: string; + productId?: number; + clientId?: number; + status?: number; + type?: number; + requestDate?: number[]; + } +} + +/** 查询生产工单分页 */ +export function getWorkOrderPage(params: MesProWorkOrderApi.PageParams) { + return requestClient.get>( + '/mes/pro/work-order/page', + { params }, + ); +} + +/** 查询生产工单详情 */ +export function getWorkOrder(id: number) { + return requestClient.get( + `/mes/pro/work-order/get?id=${id}`, + ); +} + +/** 新增生产工单 */ +export function createWorkOrder(data: MesProWorkOrderApi.WorkOrder) { + return requestClient.post('/mes/pro/work-order/create', data); +} + +/** 修改生产工单 */ +export function updateWorkOrder(data: MesProWorkOrderApi.WorkOrder) { + return requestClient.put('/mes/pro/work-order/update', data); +} + +/** 删除生产工单 */ +export function deleteWorkOrder(id: number) { + return requestClient.delete(`/mes/pro/work-order/delete?id=${id}`); +} + +/** 导出生产工单 */ +export function exportWorkOrder(params: any) { + return requestClient.download('/mes/pro/work-order/export-excel', { params }); +} + +/** 完成工单 */ +export function finishWorkOrder(id: number) { + return requestClient.put(`/mes/pro/work-order/finish?id=${id}`); +} + +/** 取消工单 */ +export function cancelWorkOrder(id: number) { + return requestClient.put(`/mes/pro/work-order/cancel?id=${id}`); +} + +/** 确认工单 */ +export function confirmWorkOrder(id: number) { + return requestClient.put(`/mes/pro/work-order/confirm?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/pro/workrecord/index.ts b/apps/web-antdv-next/src/api/mes/pro/workrecord/index.ts new file mode 100644 index 000000000..08950365c --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/pro/workrecord/index.ts @@ -0,0 +1,71 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesProWorkRecordApi { + /** MES 工作记录流水 */ + export interface WorkRecordLog { + id?: number; // 编号 + userId?: number; // 用户编号 + userNickname?: string; // 用户昵称 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + type?: number; // 1=上工 2=下工 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } + + /** MES 当前用户工作站绑定状态 */ + export interface MyWorkRecord { + userId?: number; // 用户编号 + userNickname?: string; // 用户昵称 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + type?: number; // 1=上工 2=下工 + clockInTime?: Date; // 上工时间 + clockOutTime?: Date; // 下工时间 + } +} + +/** 查询工作记录分页 */ +export function getWorkRecordLogPage(params: PageParam) { + return requestClient.get>( + '/mes/pro/workrecord/log/page', + { params }, + ); +} + +/** 查询工作记录详情 */ +export function getWorkRecordLog(id: number) { + return requestClient.get( + `/mes/pro/workrecord/log/get?id=${id}`, + ); +} + +/** 导出工作记录 */ +export function exportWorkRecordLog(params: any) { + return requestClient.download('/mes/pro/workrecord/log/export-excel', { + params, + }); +} + +/** 上工(绑定工作站) */ +export function clockInWorkRecord(workstationId: number) { + return requestClient.put('/mes/pro/workrecord/clock-in', null, { + params: { workstationId }, + }); +} + +/** 下工(解绑工作站) */ +export function clockOutWorkRecord() { + return requestClient.put('/mes/pro/workrecord/clock-out'); +} + +/** 查询当前用户绑定的工作站 */ +export function getMyWorkRecord() { + return requestClient.get( + '/mes/pro/workrecord/get-my', + ); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/defect/index.ts b/apps/web-antdv-next/src/api/mes/qc/defect/index.ts new file mode 100644 index 000000000..0b46d3581 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/defect/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcDefectApi { + /** MES 缺陷类型 */ + export interface Defect { + id?: number; // 编号 + code?: string; // 缺陷编码 + name?: string; // 缺陷描述 + type?: number; // 检测项类型 + level?: number; // 缺陷等级 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询缺陷类型分页 */ +export function getDefectPage(params: PageParam) { + return requestClient.get>( + '/mes/qc/defect/page', + { params }, + ); +} + +/** 查询缺陷类型精简列表 */ +export function getDefectSimpleList() { + return requestClient.get('/mes/qc/defect/simple-list'); +} + +/** 查询缺陷类型详情 */ +export function getDefect(id: number) { + return requestClient.get(`/mes/qc/defect/get?id=${id}`); +} + +/** 新增缺陷类型 */ +export function createDefect(data: MesQcDefectApi.Defect) { + return requestClient.post('/mes/qc/defect/create', data); +} + +/** 修改缺陷类型 */ +export function updateDefect(data: MesQcDefectApi.Defect) { + return requestClient.put('/mes/qc/defect/update', data); +} + +/** 删除缺陷类型 */ +export function deleteDefect(id: number) { + return requestClient.delete(`/mes/qc/defect/delete?id=${id}`); +} + +/** 导出缺陷类型 */ +export function exportDefect(params: any) { + return requestClient.download('/mes/qc/defect/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/defectrecord/index.ts b/apps/web-antdv-next/src/api/mes/qc/defectrecord/index.ts new file mode 100644 index 000000000..a434a29b6 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/defectrecord/index.ts @@ -0,0 +1,49 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcDefectRecordApi { + /** MES 质检缺陷记录 */ + export interface DefectRecord { + id?: number; // 编号 + qcType?: number; // 检验类型 + qcId?: number; // 检验单 ID + lineId?: number; // 检验行 ID + name?: string; // 缺陷描述 + level?: number; // 缺陷等级 + quantity?: number; // 缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询质检缺陷记录 */ +export function getDefectRecord(id: number) { + return requestClient.get( + `/mes/qc/defect-record/get?id=${id}`, + ); +} + +/** 查询质检缺陷记录分页 */ +export function getDefectRecordPage( + params: PageParam & { lineId?: number; qcId?: number; qcType?: number; }, +) { + return requestClient.get>( + '/mes/qc/defect-record/page', + { params }, + ); +} + +/** 新增质检缺陷记录 */ +export function createDefectRecord(data: MesQcDefectRecordApi.DefectRecord) { + return requestClient.post('/mes/qc/defect-record/create', data); +} + +/** 修改质检缺陷记录 */ +export function updateDefectRecord(data: MesQcDefectRecordApi.DefectRecord) { + return requestClient.put('/mes/qc/defect-record/update', data); +} + +/** 删除质检缺陷记录 */ +export function deleteDefectRecord(id: number) { + return requestClient.delete(`/mes/qc/defect-record/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/indicator/index.ts b/apps/web-antdv-next/src/api/mes/qc/indicator/index.ts new file mode 100644 index 000000000..163f11d89 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/indicator/index.ts @@ -0,0 +1,53 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIndicatorApi { + /** MES 质检指标 */ + export interface Indicator { + id?: number; // 编号 + code?: string; // 检测项编码 + name?: string; // 检测项名称 + type?: number; // 检测项类型 + tool?: string; // 检测工具 + resultType?: number; // 结果值类型 + resultSpecification?: string; // 结果值属性 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询质检指标分页 */ +export function getIndicatorPage(params: PageParam) { + return requestClient.get>( + '/mes/qc/indicator/page', + { params }, + ); +} + +/** 查询质检指标详情 */ +export function getIndicator(id: number) { + return requestClient.get( + `/mes/qc/indicator/get?id=${id}`, + ); +} + +/** 新增质检指标 */ +export function createIndicator(data: MesQcIndicatorApi.Indicator) { + return requestClient.post('/mes/qc/indicator/create', data); +} + +/** 修改质检指标 */ +export function updateIndicator(data: MesQcIndicatorApi.Indicator) { + return requestClient.put('/mes/qc/indicator/update', data); +} + +/** 删除质检指标 */ +export function deleteIndicator(id: number) { + return requestClient.delete(`/mes/qc/indicator/delete?id=${id}`); +} + +/** 导出质检指标 */ +export function exportIndicator(params: any) { + return requestClient.download('/mes/qc/indicator/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/indicatorresult/index.ts b/apps/web-antdv-next/src/api/mes/qc/indicatorresult/index.ts new file mode 100644 index 000000000..dfa8a7f93 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/indicatorresult/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIndicatorResultApi { + /** MES 检验结果明细 */ + export interface IndicatorResultDetail { + id?: number; // 编号 + resultId?: number; // 关联检验结果 ID + indicatorId?: number; // 检测指标 ID + value?: string; // 检测值(统一存为字符串) + valueNumber?: number; // UI 数值绑定(提交前转字符串) + remark?: string; // 备注 + // 关联查询字段(来自 indicator) + indicatorName?: string; // 检测指标名称 + valueType?: number; // 质检值类型 + valueSpecification?: string; // 值属性 + } + + /** MES 检验结果 */ + export interface IndicatorResult { + id?: number; // 编号 + code?: string; // 样品编号 + qcId?: number; // 关联质检单 ID + qcType?: number; // 质检类型 + itemId?: number; // 产品物料 ID + sn?: string; // 物资 SN + remark?: string; // 备注 + createTime?: Date; // 创建时间 + items?: IndicatorResultDetail[]; // 检验结果明细列表 + } +} + +/** 查询检验结果分页 */ +export function getIndicatorResultPage( + params: PageParam & { qcId?: number; qcType?: number }, +) { + return requestClient.get>( + '/mes/qc/indicator-result/page', + { params }, + ); +} + +/** 查询检验结果明细(含检测项模板):编辑传 id,新增不传 */ +export function getIndicatorResultDetail( + qcId: number, + qcType: number, + id?: number, +) { + return requestClient.get( + '/mes/qc/indicator-result/get-detail', + { params: { id, qcId, qcType } }, + ); +} + +/** 新增检验结果 */ +export function createIndicatorResult( + data: MesQcIndicatorResultApi.IndicatorResult, +) { + return requestClient.post('/mes/qc/indicator-result/create', data); +} + +/** 修改检验结果 */ +export function updateIndicatorResult( + data: MesQcIndicatorResultApi.IndicatorResult, +) { + return requestClient.put('/mes/qc/indicator-result/update', data); +} + +/** 删除检验结果 */ +export function deleteIndicatorResult(id: number) { + return requestClient.delete(`/mes/qc/indicator-result/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/ipqc/index.ts b/apps/web-antdv-next/src/api/mes/qc/ipqc/index.ts new file mode 100644 index 000000000..9c885bedb --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/ipqc/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIpqcApi { + /** MES 过程检验单 */ + export interface Ipqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + type?: number; // IPQC 检验类型 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + workOrderId?: number; // 生产工单 ID + workOrderCode?: string; // 工单编号(关联查询) + workOrderName?: string; // 工单名称(关联查询) + taskId?: number; // 生产任务 ID + workstationId?: number; // 工位 ID + workstationName?: string; // 工位名称(关联查询) + processId?: number; // 工序 ID + processName?: string; // 工序名称(关联查询) + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + checkQuantity?: number; // 检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格品数量 + laborScrapQuantity?: number; // 工废数量 + materialScrapQuantity?: number; // 料废数量 + otherScrapQuantity?: number; // 其他废品数量 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + checkResult?: number; // 检测结果 + inspectDate?: number; // 检测日期 + inspectorUserId?: number; // 检测人员用户 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询过程检验单分页 */ +export function getIpqcPage(params: PageParam) { + return requestClient.get>( + '/mes/qc/ipqc/page', + { params }, + ); +} + +/** 查询过程检验单详情 */ +export function getIpqc(id: number) { + return requestClient.get(`/mes/qc/ipqc/get?id=${id}`); +} + +/** 新增过程检验单 */ +export function createIpqc(data: MesQcIpqcApi.Ipqc) { + return requestClient.post('/mes/qc/ipqc/create', data); +} + +/** 修改过程检验单 */ +export function updateIpqc(data: MesQcIpqcApi.Ipqc) { + return requestClient.put('/mes/qc/ipqc/update', data); +} + +/** 完成过程检验单 */ +export function finishIpqc(id: number) { + return requestClient.put(`/mes/qc/ipqc/finish?id=${id}`); +} + +/** 删除过程检验单 */ +export function deleteIpqc(id: number) { + return requestClient.delete(`/mes/qc/ipqc/delete?id=${id}`); +} + +/** 导出过程检验单 */ +export function exportIpqc(params: any) { + return requestClient.download('/mes/qc/ipqc/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/ipqc/line/index.ts b/apps/web-antdv-next/src/api/mes/qc/ipqc/line/index.ts new file mode 100644 index 000000000..4f114c845 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/ipqc/line/index.ts @@ -0,0 +1,42 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIpqcLineApi { + /** MES 过程检验单行 */ + export interface IpqcLine { + id?: number; // 编号 + ipqcId?: number; // 过程检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + toolId?: number; // 检测工具 ID + toolName?: string; // 检测工具名称(关联查询) + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询过程检验单行分页 */ +export function getIpqcLinePage(params: PageParam & { ipqcId?: number }) { + return requestClient.get>( + '/mes/qc/ipqc/line/page', + { params }, + ); +} + +/** 查询过程检验单行详情 */ +export function getIpqcLine(id: number) { + return requestClient.get( + `/mes/qc/ipqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/iqc/index.ts b/apps/web-antdv-next/src/api/mes/qc/iqc/index.ts new file mode 100644 index 000000000..cdb04cb6a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/iqc/index.ts @@ -0,0 +1,80 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIqcApi { + /** MES 来料检验单 */ + export interface Iqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + vendorId?: number; // 供应商 ID + vendorNickname?: string; // 供应商简称(关联查询) + vendorBatch?: string; // 供应商批次号 + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + receivedQuantity?: number; // 本次接收数量 + checkQuantity?: number; // 本次检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格品数量 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + checkResult?: number; // 检测结果 + receiveDate?: number; // 来料日期 + inspectDate?: number; // 检测日期 + inspector?: string; // 检测人员(昵称) + inspectorUserId?: number; // 检测人员 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询来料检验单分页 */ +export function getIqcPage(params: PageParam) { + return requestClient.get>('/mes/qc/iqc/page', { + params, + }); +} + +/** 查询来料检验单详情 */ +export function getIqc(id: number) { + return requestClient.get(`/mes/qc/iqc/get?id=${id}`); +} + +/** 新增来料检验单 */ +export function createIqc(data: MesQcIqcApi.Iqc) { + return requestClient.post('/mes/qc/iqc/create', data); +} + +/** 修改来料检验单 */ +export function updateIqc(data: MesQcIqcApi.Iqc) { + return requestClient.put('/mes/qc/iqc/update', data); +} + +/** 完成来料检验单 */ +export function finishIqc(id: number) { + return requestClient.put(`/mes/qc/iqc/finish?id=${id}`); +} + +/** 删除来料检验单 */ +export function deleteIqc(id: number) { + return requestClient.delete(`/mes/qc/iqc/delete?id=${id}`); +} + +/** 导出来料检验单 */ +export function exportIqc(params: any) { + return requestClient.download('/mes/qc/iqc/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/iqc/line/index.ts b/apps/web-antdv-next/src/api/mes/qc/iqc/line/index.ts new file mode 100644 index 000000000..dc37aa99b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/iqc/line/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcIqcLineApi { + /** MES 来料检验单行 */ + export interface IqcLine { + id?: number; // 编号 + iqcId?: number; // 来料检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + tool?: string; // 检测工具 + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询来料检验单行分页 */ +export function getIqcLinePage(params: PageParam & { iqcId?: number }) { + return requestClient.get>( + '/mes/qc/iqc/line/page', + { params }, + ); +} + +/** 查询来料检验单行详情 */ +export function getIqcLine(id: number) { + return requestClient.get( + `/mes/qc/iqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/oqc/index.ts b/apps/web-antdv-next/src/api/mes/qc/oqc/index.ts new file mode 100644 index 000000000..793f6db43 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/oqc/index.ts @@ -0,0 +1,81 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcOqcApi { + /** MES 出货检验单 */ + export interface Oqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + clientId?: number; // 客户 ID + clientNickname?: string; // 客户简称(关联查询) + batchCode?: string; // 批次号 + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + minCheckQuantity?: number; // 最低检测数 + maxUnqualifiedQuantity?: number; // 最大不合格数 + outQuantity?: number; // 本次出货数量 + checkQuantity?: number; // 本次检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格品数量 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + checkResult?: number; // 检测结果 + outDate?: number; // 出货日期 + inspectDate?: number; // 检测日期 + inspectorUserId?: number; // 检测人员用户 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询出货检验单分页 */ +export function getOqcPage(params: PageParam) { + return requestClient.get>('/mes/qc/oqc/page', { + params, + }); +} + +/** 查询出货检验单详情 */ +export function getOqc(id: number) { + return requestClient.get(`/mes/qc/oqc/get?id=${id}`); +} + +/** 新增出货检验单 */ +export function createOqc(data: MesQcOqcApi.Oqc) { + return requestClient.post('/mes/qc/oqc/create', data); +} + +/** 修改出货检验单 */ +export function updateOqc(data: MesQcOqcApi.Oqc) { + return requestClient.put('/mes/qc/oqc/update', data); +} + +/** 完成出货检验单 */ +export function finishOqc(id: number) { + return requestClient.put(`/mes/qc/oqc/finish?id=${id}`); +} + +/** 删除出货检验单 */ +export function deleteOqc(id: number) { + return requestClient.delete(`/mes/qc/oqc/delete?id=${id}`); +} + +/** 导出出货检验单 */ +export function exportOqc(params: any) { + return requestClient.download('/mes/qc/oqc/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/oqc/line/index.ts b/apps/web-antdv-next/src/api/mes/qc/oqc/line/index.ts new file mode 100644 index 000000000..aa7deb59a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/oqc/line/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcOqcLineApi { + /** MES 出货检验单行 */ + export interface OqcLine { + id?: number; // 编号 + oqcId?: number; // 出货检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + tool?: string; // 检测工具 + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询出货检验单行分页 */ +export function getOqcLinePage(params: PageParam & { oqcId?: number }) { + return requestClient.get>( + '/mes/qc/oqc/line/page', + { params }, + ); +} + +/** 查询出货检验单行详情 */ +export function getOqcLine(id: number) { + return requestClient.get( + `/mes/qc/oqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/pendinginspect/index.ts b/apps/web-antdv-next/src/api/mes/qc/pendinginspect/index.ts new file mode 100644 index 000000000..dceda8213 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/pendinginspect/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcPendingInspectApi { + /** MES 待检任务 */ + export interface PendingInspect { + sourceDocType?: number; // 来源单据类型(MesBizTypeConstants) + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号 + qcType?: number; // 检验类型(MesQcTypeEnum) + itemId?: number; // 物料 ID + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitName?: string; // 单位名称 + quantity?: number; // 待检数量 + // 供应商(IQC 场景) + vendorId?: number; // 供应商 ID + vendorName?: string; // 供应商名称 + // 工单/工作站/任务(IPQC/RQC 场景) + workOrderId?: number; // 生产工单 ID + workstationId?: number; // 工作站 ID + workstationName?: string; // 工作站名称 + taskId?: number; // 生产任务 ID + taskCode?: string; // 生产任务编码 + // 客户(OQC/RQC 场景) + clientId?: number; // 客户 ID + clientName?: string; // 客户名称 + recordTime?: number; // 记录时间(epoch ms) + } +} + +/** 查询待检任务分页 */ +export function getPendingInspectPage(params: PageParam) { + return requestClient.get>( + '/mes/qc/pending-inspect/page', + { params }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/rqc/index.ts b/apps/web-antdv-next/src/api/mes/qc/rqc/index.ts new file mode 100644 index 000000000..60b54da15 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/rqc/index.ts @@ -0,0 +1,77 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcRqcApi { + /** MES 退货检验单 */ + export interface Rqc { + id?: number; // 编号 + code?: string; // 检验单编号 + name?: string; // 检验单名称 + templateId?: number; // 检验模板 ID + sourceDocType?: number; // 来源单据类型 + sourceDocId?: number; // 来源单据 ID + sourceLineId?: number; // 来源单据行 ID + sourceDocCode?: string; // 来源单据编号(关联查询) + type?: number; // 检验类型 + itemId?: number; // 产品物料 ID + itemCode?: string; // 产品物料编码(关联查询) + itemName?: string; // 产品物料名称(关联查询) + itemSpecification?: string; // 规格型号(关联查询) + unitName?: string; // 单位名称(关联查询) + batchCode?: string; // 批次号 + checkQuantity?: number; // 检测数量 + qualifiedQuantity?: number; // 合格品数量 + unqualifiedQuantity?: number; // 不合格数量 + checkResult?: number; // 检测结果 + inspectDate?: number; // 检测日期 + inspectorUserId?: number; // 检测人员用户 ID + inspectorNickname?: string; // 检测人员昵称(关联查询) + status?: number; // 状态 + remark?: string; // 备注 + // 缺陷统计 + criticalRate?: number; // 致命缺陷率(%) + majorRate?: number; // 严重缺陷率(%) + minorRate?: number; // 轻微缺陷率(%) + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + } +} + +/** 查询退货检验单分页 */ +export function getRqcPage(params: PageParam) { + return requestClient.get>('/mes/qc/rqc/page', { + params, + }); +} + +/** 查询退货检验单详情 */ +export function getRqc(id: number) { + return requestClient.get(`/mes/qc/rqc/get?id=${id}`); +} + +/** 新增退货检验单 */ +export function createRqc(data: MesQcRqcApi.Rqc) { + return requestClient.post('/mes/qc/rqc/create', data); +} + +/** 修改退货检验单 */ +export function updateRqc(data: MesQcRqcApi.Rqc) { + return requestClient.put('/mes/qc/rqc/update', data); +} + +/** 完成退货检验单 */ +export function finishRqc(id: number) { + return requestClient.put(`/mes/qc/rqc/finish?id=${id}`); +} + +/** 删除退货检验单 */ +export function deleteRqc(id: number) { + return requestClient.delete(`/mes/qc/rqc/delete?id=${id}`); +} + +/** 导出退货检验单 */ +export function exportRqc(params: any) { + return requestClient.download('/mes/qc/rqc/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/rqc/line/index.ts b/apps/web-antdv-next/src/api/mes/qc/rqc/line/index.ts new file mode 100644 index 000000000..abb44a758 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/rqc/line/index.ts @@ -0,0 +1,41 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcRqcLineApi { + /** MES 退货检验单行 */ + export interface RqcLine { + id?: number; // 编号 + rqcId?: number; // 退货检验单 ID + indicatorId?: number; // 检测指标 ID + indicatorCode?: string; // 检测指标编码(关联查询) + indicatorName?: string; // 检测指标名称(关联查询) + indicatorType?: number; // 检测指标类型(关联查询) + tool?: string; // 检测工具 + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位 ID + unitMeasureName?: string; // 计量单位名称(关联查询) + maxThreshold?: number; // 误差上限 + minThreshold?: number; // 误差下限 + criticalQuantity?: number; // 致命缺陷数量 + majorQuantity?: number; // 严重缺陷数量 + minorQuantity?: number; // 轻微缺陷数量 + remark?: string; // 备注 + } +} + +/** 查询退货检验单行分页 */ +export function getRqcLinePage(params: PageParam & { rqcId?: number }) { + return requestClient.get>( + '/mes/qc/rqc/line/page', + { params }, + ); +} + +/** 查询退货检验单行详情 */ +export function getRqcLine(id: number) { + return requestClient.get( + `/mes/qc/rqc/line/get?id=${id}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/template/index.ts b/apps/web-antdv-next/src/api/mes/qc/template/index.ts new file mode 100644 index 000000000..768864482 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/template/index.ts @@ -0,0 +1,51 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcTemplateApi { + /** MES 质检方案 */ + export interface Template { + id?: number; // 编号 + code?: string; // 方案编号 + name?: string; // 方案名称 + types?: number[]; // 检测种类 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询质检方案分页 */ +export function getTemplatePage(params: PageParam) { + return requestClient.get>( + '/mes/qc/template/page', + { params }, + ); +} + +/** 查询质检方案详情 */ +export function getTemplate(id: number) { + return requestClient.get( + `/mes/qc/template/get?id=${id}`, + ); +} + +/** 新增质检方案 */ +export function createTemplate(data: MesQcTemplateApi.Template) { + return requestClient.post('/mes/qc/template/create', data); +} + +/** 修改质检方案 */ +export function updateTemplate(data: MesQcTemplateApi.Template) { + return requestClient.put('/mes/qc/template/update', data); +} + +/** 删除质检方案 */ +export function deleteTemplate(id: number) { + return requestClient.delete(`/mes/qc/template/delete?id=${id}`); +} + +/** 导出质检方案 */ +export function exportTemplate(params: any) { + return requestClient.download('/mes/qc/template/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/template/indicator/index.ts b/apps/web-antdv-next/src/api/mes/qc/template/indicator/index.ts new file mode 100644 index 000000000..8fa8119e6 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/template/indicator/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcTemplateIndicatorApi { + /** MES 质检方案-检测指标项 */ + export interface TemplateIndicator { + id?: number; // 编号 + templateId?: number; // 质检方案ID + indicatorId?: number; // 质检指标ID + checkMethod?: string; // 检测方法 + standardValue?: number; // 标准值 + unitMeasureId?: number; // 计量单位ID + thresholdMax?: number; // 误差上限 + thresholdMin?: number; // 误差下限 + docUrl?: string; // 说明图URL + remark?: string; // 备注 + indicatorCode?: string; // 检测项编码(JOIN) + indicatorName?: string; // 检测项名称(JOIN) + indicatorType?: number; // 检测项类型(JOIN) + indicatorTool?: string; // 检测工具(JOIN) + unitMeasureName?: string; // 计量单位名称(JOIN) + } +} + +/** 查询检测指标项分页 */ +export function getTemplateIndicatorPage(params: PageParam & { templateId?: number }) { + return requestClient.get< + PageResult + >('/mes/qc/template/indicator/page', { params }); +} + +/** 查询检测指标项详情 */ +export function getTemplateIndicator(id: number) { + return requestClient.get( + `/mes/qc/template/indicator/get?id=${id}`, + ); +} + +/** 新增检测指标项 */ +export function createTemplateIndicator( + data: MesQcTemplateIndicatorApi.TemplateIndicator, +) { + return requestClient.post('/mes/qc/template/indicator/create', data); +} + +/** 修改检测指标项 */ +export function updateTemplateIndicator( + data: MesQcTemplateIndicatorApi.TemplateIndicator, +) { + return requestClient.put('/mes/qc/template/indicator/update', data); +} + +/** 删除检测指标项 */ +export function deleteTemplateIndicator(id: number) { + return requestClient.delete(`/mes/qc/template/indicator/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/qc/template/item/index.ts b/apps/web-antdv-next/src/api/mes/qc/template/item/index.ts new file mode 100644 index 000000000..b1d5b1e6b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/qc/template/item/index.ts @@ -0,0 +1,52 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesQcTemplateItemApi { + /** MES 质检方案-产品关联 */ + export interface TemplateItem { + id?: number; // 编号 + templateId?: number; // 质检方案ID + itemId?: number; // 产品物料ID + quantityCheck?: number; // 最低检测数 + quantityUnqualified?: number; // 最大不合格数 + criticalRate?: number; // 最大致命缺陷率(%) + majorRate?: number; // 最大严重缺陷率(%) + minorRate?: number; // 最大轻微缺陷率(%) + remark?: string; // 备注 + itemCode?: string; // 物料编码(JOIN) + itemName?: string; // 物料名称(JOIN) + specification?: string; // 规格型号(JOIN) + unitMeasureName?: string; // 计量单位名称(JOIN) + } +} + +/** 查询产品关联分页 */ +export function getTemplateItemPage(params: PageParam & { templateId?: number }) { + return requestClient.get>( + '/mes/qc/template/item/page', + { params }, + ); +} + +/** 查询产品关联详情 */ +export function getTemplateItem(id: number) { + return requestClient.get( + `/mes/qc/template/item/get?id=${id}`, + ); +} + +/** 新增产品关联 */ +export function createTemplateItem(data: MesQcTemplateItemApi.TemplateItem) { + return requestClient.post('/mes/qc/template/item/create', data); +} + +/** 修改产品关联 */ +export function updateTemplateItem(data: MesQcTemplateItemApi.TemplateItem) { + return requestClient.put('/mes/qc/template/item/update', data); +} + +/** 删除产品关联 */ +export function deleteTemplateItem(id: number) { + return requestClient.delete(`/mes/qc/template/item/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/tm/tool/index.ts b/apps/web-antdv-next/src/api/mes/tm/tool/index.ts new file mode 100644 index 000000000..05bed4940 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/tm/tool/index.ts @@ -0,0 +1,61 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesTmToolApi { + /** MES 工具台账 */ + export interface Tool { + id?: number; // 工具编号 + code?: string; // 工具编码 + name?: string; // 工具名称 + brand?: string; // 品牌 + specification?: string; // 型号规格 + toolTypeId?: number; // 工具类型编号 + toolTypeName?: string; // 工具类型名称 + quantity?: number; // 数量 + availableQuantity?: number; // 可用数量 + maintenType?: number; // 保养维护类型 + nextMaintenPeriod?: number; // 下次保养周期 + nextMaintenDate?: Date | number; // 下次保养日期 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询工具台账分页 */ +export function getToolPage(params: PageParam) { + return requestClient.get>('/mes/tm/tool/page', { + params, + }); +} + +/** 查询工具精简列表 */ +export function getToolSimpleList() { + return requestClient.get('/mes/tm/tool/simple-list'); +} + +/** 查询工具台账详情 */ +export function getTool(id: number) { + return requestClient.get(`/mes/tm/tool/get?id=${id}`); +} + +/** 新增工具台账 */ +export function createTool(data: MesTmToolApi.Tool) { + return requestClient.post('/mes/tm/tool/create', data); +} + +/** 修改工具台账 */ +export function updateTool(data: MesTmToolApi.Tool) { + return requestClient.put('/mes/tm/tool/update', data); +} + +/** 删除工具台账 */ +export function deleteTool(id: number) { + return requestClient.delete(`/mes/tm/tool/delete?id=${id}`); +} + +/** 导出工具台账 */ +export function exportTool(params: any) { + return requestClient.download('/mes/tm/tool/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/tm/tool/type/index.ts b/apps/web-antdv-next/src/api/mes/tm/tool/type/index.ts new file mode 100644 index 000000000..319f85f03 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/tm/tool/type/index.ts @@ -0,0 +1,59 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesTmToolTypeApi { + /** MES 工具类型 */ + export interface ToolType { + id?: number; // 工具类型编号 + code?: string; // 类型编码 + name?: string; // 类型名称 + codeFlag?: boolean; // 是否编码管理 + maintenType?: number; // 保养维护类型 + maintenPeriod?: number; // 保养周期 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询工具类型分页 */ +export function getToolTypePage(params: PageParam) { + return requestClient.get>( + '/mes/tm/tool-type/page', + { params }, + ); +} + +/** 查询工具类型精简列表 */ +export function getToolTypeSimpleList() { + return requestClient.get( + '/mes/tm/tool-type/simple-list', + ); +} + +/** 查询工具类型详情 */ +export function getToolType(id: number) { + return requestClient.get( + `/mes/tm/tool-type/get?id=${id}`, + ); +} + +/** 新增工具类型 */ +export function createToolType(data: MesTmToolTypeApi.ToolType) { + return requestClient.post('/mes/tm/tool-type/create', data); +} + +/** 修改工具类型 */ +export function updateToolType(data: MesTmToolTypeApi.ToolType) { + return requestClient.put('/mes/tm/tool-type/update', data); +} + +/** 删除工具类型 */ +export function deleteToolType(id: number) { + return requestClient.delete(`/mes/tm/tool-type/delete?id=${id}`); +} + +/** 导出工具类型 */ +export function exportToolType(params: any) { + return requestClient.download('/mes/tm/tool-type/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/arrivalnotice/index.ts b/apps/web-antdv-next/src/api/mes/wm/arrivalnotice/index.ts new file mode 100644 index 000000000..73e8eb849 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/arrivalnotice/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmArrivalNoticeApi { + /** MES 到货通知单 */ + export interface ArrivalNotice { + id?: number; // 通知单编号 + code?: string; // 通知单编号 + name?: string; // 通知单名称 + purchaseOrderCode?: string; // 采购订单编号 + vendorId?: number; // 供应商编号 + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + arrivalDate?: number; // 到货日期 + contactName?: string; // 联系人 + contactTelephone?: string; // 联系方式 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询到货通知单分页 */ +export function getArrivalNoticePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/arrival-notice/page', + { params }, + ); +} + +/** 查询到货通知单详情 */ +export function getArrivalNotice(id: number) { + return requestClient.get( + `/mes/wm/arrival-notice/get?id=${id}`, + ); +} + +/** 新增到货通知单 */ +export function createArrivalNotice( + data: MesWmArrivalNoticeApi.ArrivalNotice, +) { + return requestClient.post('/mes/wm/arrival-notice/create', data); +} + +/** 修改到货通知单 */ +export function updateArrivalNotice( + data: MesWmArrivalNoticeApi.ArrivalNotice, +) { + return requestClient.put('/mes/wm/arrival-notice/update', data); +} + +/** 删除到货通知单 */ +export function deleteArrivalNotice(id: number) { + return requestClient.delete(`/mes/wm/arrival-notice/delete?id=${id}`); +} + +/** 提交到货通知单 */ +export function submitArrivalNotice(id: number) { + return requestClient.put(`/mes/wm/arrival-notice/submit?id=${id}`); +} + +/** 导出到货通知单 */ +export function exportArrivalNotice(params: any) { + return requestClient.download('/mes/wm/arrival-notice/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/arrivalnotice/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/arrivalnotice/line/index.ts new file mode 100644 index 000000000..b763b2ad5 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/arrivalnotice/line/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmArrivalNoticeLineApi { + /** MES 到货通知单行 */ + export interface ArrivalNoticeLine { + id?: number; // 行编号 + noticeId?: number; // 到货通知单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + arrivalQuantity?: number; // 到货数量 + qualifiedQuantity?: number; // 合格数量 + iqcCheckFlag?: boolean; // 是否检验 + iqcId?: number; // 来料检验单编号 + iqcCode?: string; // 来料检验单编码 + remark?: string; // 备注 + } +} + +/** 查询到货通知单行分页 */ +export function getArrivalNoticeLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/arrival-notice-line/page', { params }); +} + +/** 查询到货通知单行详情 */ +export function getArrivalNoticeLine(id: number) { + return requestClient.get( + `/mes/wm/arrival-notice-line/get?id=${id}`, + ); +} + +/** 新增到货通知单行 */ +export function createArrivalNoticeLine( + data: MesWmArrivalNoticeLineApi.ArrivalNoticeLine, +) { + return requestClient.post( + '/mes/wm/arrival-notice-line/create', + data, + ); +} + +/** 修改到货通知单行 */ +export function updateArrivalNoticeLine( + data: MesWmArrivalNoticeLineApi.ArrivalNoticeLine, +) { + return requestClient.put('/mes/wm/arrival-notice-line/update', data); +} + +/** 删除到货通知单行 */ +export function deleteArrivalNoticeLine(id: number) { + return requestClient.delete(`/mes/wm/arrival-notice-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/barcode/config/index.ts b/apps/web-antdv-next/src/api/mes/wm/barcode/config/index.ts new file mode 100644 index 000000000..862da4fbb --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/barcode/config/index.ts @@ -0,0 +1,49 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmBarcodeConfigApi { + /** MES 条码配置 */ + export interface BarcodeConfig { + id?: number; // 编号 + format?: number; // 条码格式 + bizType?: number; // 业务类型 + contentFormat?: string; // 内容格式模板 + contentExample?: string; // 内容样例 + autoGenerateFlag?: boolean; // 是否自动生成 + defaultTemplate?: string; // 默认打印模板 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询条码配置分页 */ +export function getBarcodeConfigPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/barcode-config/page', + { params }, + ); +} + +/** 查询条码配置详情 */ +export function getBarcodeConfig(id: number) { + return requestClient.get( + `/mes/wm/barcode-config/get?id=${id}`, + ); +} + +/** 新增条码配置 */ +export function createBarcodeConfig(data: MesWmBarcodeConfigApi.BarcodeConfig) { + return requestClient.post('/mes/wm/barcode-config/create', data); +} + +/** 修改条码配置 */ +export function updateBarcodeConfig(data: MesWmBarcodeConfigApi.BarcodeConfig) { + return requestClient.put('/mes/wm/barcode-config/update', data); +} + +/** 删除条码配置 */ +export function deleteBarcodeConfig(id: number) { + return requestClient.delete(`/mes/wm/barcode-config/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/barcode/index.ts b/apps/web-antdv-next/src/api/mes/wm/barcode/index.ts new file mode 100644 index 000000000..39673a3ae --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/barcode/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmBarcodeApi { + /** MES 条码清单 */ + export interface Barcode { + id?: number; // 条码编号 + configId?: number; // 条码配置编号 + format?: number; // 条码格式 + bizType?: number; // 业务类型 + content?: string; // 条码内容 + bizId?: number; // 业务对象编号 + bizCode?: string; // 业务对象编码 + bizName?: string; // 业务对象名称 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询条码分页 */ +export function getBarcodePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/barcode/page', + { params }, + ); +} + +/** 查询条码详情 */ +export function getBarcode(id: number) { + return requestClient.get( + `/mes/wm/barcode/get?id=${id}`, + ); +} + +/** 根据业务对象获取条码 */ +export function getBarcodeByBusiness(bizType: number, bizId: number) { + return requestClient.get( + '/mes/wm/barcode/get-by-business', + { params: { bizId, bizType } }, + ); +} + +/** 新增条码 */ +export function createBarcode(data: MesWmBarcodeApi.Barcode) { + return requestClient.post('/mes/wm/barcode/create', data); +} + +/** 修改条码 */ +export function updateBarcode(data: MesWmBarcodeApi.Barcode) { + return requestClient.put('/mes/wm/barcode/update', data); +} + +/** 删除条码 */ +export function deleteBarcode(id: number) { + return requestClient.delete(`/mes/wm/barcode/delete?id=${id}`); +} + +/** 导出条码 */ +export function exportBarcode(params: any) { + return requestClient.download('/mes/wm/barcode/export-excel', { params }); +} + +/** 生成条码内容 */ +export function generateBarcodeContent(bizType: number, bizCode: string) { + return requestClient.get('/mes/wm/barcode/generate-content', { + params: { bizCode, bizType }, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/batch/index.ts b/apps/web-antdv-next/src/api/mes/wm/batch/index.ts new file mode 100644 index 000000000..14d5fa1bd --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/batch/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmBatchApi { + /** MES 批次 */ + export interface Batch { + id?: number; // 批次 ID + code?: string; // 批次编码 + itemId?: number; // 物料 ID + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + itemSpecification?: string; // 规格型号 + unitName?: string; // 单位名称 + produceDate?: Date; // 生产日期 + expireDate?: Date; // 有效期 + receiptDate?: Date; // 入库日期 + vendorId?: number; // 供应商 ID + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + clientId?: number; // 客户 ID + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + purchaseOrderCode?: string; // 采购订单编号 + salesOrderCode?: string; // 销售订单编号 + workOrderId?: number; // 生产工单 ID + workOrderCode?: string; // 生产工单编号 + taskId?: number; // 生产任务 ID + taskCode?: string; // 生产任务编号 + workstationId?: number; // 工作站 ID + workstationCode?: string; // 工作站编码 + toolId?: number; // 工具 ID + toolCode?: string; // 工具编号 + moldId?: number; // 模具 ID + lotNumber?: string; // 生产批号 + qualityStatus?: number; // 质量状态 + remark?: string; // 备注 + } + + /** MES 批次分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; // 批次号 + itemId?: number; // 物料编号 + vendorId?: number; // 供应商编号 + clientId?: number; // 客户编号 + workOrderId?: number; // 工单编号 + taskId?: number; // 生产任务编号 + workstationId?: number; // 工作站编号 + toolId?: number; // 工具编号 + moldId?: number; // 模具编号 + salesOrderCode?: string; // 销售订单号 + purchaseOrderCode?: string; // 采购订单号 + lotNumber?: string; // 批号 + qualityStatus?: number; // 质量状态 + produceDate?: string[]; // 生产日期 + expireDate?: string[]; // 过期日期 + receiptDate?: string[]; // 入库日期 + } +} + +/** 查询批次详情 */ +export function getBatch(id: number) { + return requestClient.get(`/mes/wm/batch/get?id=${id}`); +} + +/** 查询批次分页 */ +export function getBatchPage(params: MesWmBatchApi.PageParams) { + return requestClient.get>( + '/mes/wm/batch/page', + { params }, + ); +} + +/** 批次向前追溯 */ +export function getForwardBatchList(code: string) { + return requestClient.get('/mes/wm/batch/forward-list', { + params: { code }, + }); +} + +/** 批次向后追溯 */ +export function getBackwardBatchList(code: string) { + return requestClient.get( + '/mes/wm/batch/backward-list', + { params: { code } }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/itemconsume/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/itemconsume/line/index.ts new file mode 100644 index 000000000..2a353b766 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/itemconsume/line/index.ts @@ -0,0 +1,37 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmItemConsumeLineApi { + /** MES 物料消耗行 */ + export interface ItemConsumeLine { + id?: number; + feedbackId?: number; // 报工编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物资编码 + itemName?: string; // 物资名称 + specification?: string; // 规格型号 + unitId?: number; // 单位编号 + unitName?: string; // 单位 + quantity?: number; // 消耗数量 + batchCode?: string; // 批次号 + locationId?: number; // 库位编号 + locationName?: string; // 库位名称 + remark?: string; // 备注 + } + + /** MES 物料消耗行分页查询参数 */ + export interface PageParams extends PageParam { + feedbackId?: number; + } +} + +/** 查询物料消耗行分页 */ +export function getItemConsumeLinePage( + params: MesWmItemConsumeLineApi.PageParams, +) { + return requestClient.get>( + '/mes/wm/item-consume-line/page', + { params }, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/itemreceipt/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/itemreceipt/detail/index.ts new file mode 100644 index 000000000..b147288ed --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/itemreceipt/detail/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmItemReceiptDetailApi { + /** MES 采购入库明细 */ + export interface ItemReceiptDetail { + id?: number; // 明细编号 + lineId?: number; // 入库单行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询采购入库明细列表(按行编号) */ +export function getItemReceiptDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/item-receipt-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询采购入库明细详情 */ +export function getItemReceiptDetail(id: number) { + return requestClient.get( + `/mes/wm/item-receipt-detail/get?id=${id}`, + ); +} + +/** 新增采购入库明细 */ +export function createItemReceiptDetail( + data: MesWmItemReceiptDetailApi.ItemReceiptDetail, +) { + return requestClient.post('/mes/wm/item-receipt-detail/create', data); +} + +/** 修改采购入库明细 */ +export function updateItemReceiptDetail( + data: MesWmItemReceiptDetailApi.ItemReceiptDetail, +) { + return requestClient.put('/mes/wm/item-receipt-detail/update', data); +} + +/** 删除采购入库明细 */ +export function deleteItemReceiptDetail(id: number) { + return requestClient.delete(`/mes/wm/item-receipt-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/itemreceipt/index.ts b/apps/web-antdv-next/src/api/mes/wm/itemreceipt/index.ts new file mode 100644 index 000000000..c1a77cd98 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/itemreceipt/index.ts @@ -0,0 +1,86 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmItemReceiptApi { + /** MES 采购入库单 */ + export interface ItemReceipt { + id?: number; // 入库单编号 + code?: string; // 入库单编码 + name?: string; // 入库单名称 + iqcId?: number; // 来料检验单编号 + iqcCode?: string; // 来料检验单编码 + noticeId?: number; // 到货通知单编号 + noticeCode?: string; // 到货通知单编码 + purchaseOrderCode?: string; // 采购订单号 + vendorId?: number; // 供应商编号 + vendorName?: string; // 供应商名称 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + receiptDate?: number; // 入库日期 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询采购入库单分页 */ +export function getItemReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/item-receipt/page', + { params }, + ); +} + +/** 查询采购入库单详情 */ +export function getItemReceipt(id: number) { + return requestClient.get( + `/mes/wm/item-receipt/get?id=${id}`, + ); +} + +/** 新增采购入库单 */ +export function createItemReceipt(data: MesWmItemReceiptApi.ItemReceipt) { + return requestClient.post('/mes/wm/item-receipt/create', data); +} + +/** 修改采购入库单 */ +export function updateItemReceipt(data: MesWmItemReceiptApi.ItemReceipt) { + return requestClient.put('/mes/wm/item-receipt/update', data); +} + +/** 删除采购入库单 */ +export function deleteItemReceipt(id: number) { + return requestClient.delete(`/mes/wm/item-receipt/delete?id=${id}`); +} + +/** 提交采购入库单 */ +export function submitItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/submit?id=${id}`); +} + +/** 执行上架 */ +export function stockItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/stock?id=${id}`); +} + +/** 执行入库 */ +export function finishItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/finish?id=${id}`); +} + +/** 取消采购入库单 */ +export function cancelItemReceipt(id: number) { + return requestClient.put(`/mes/wm/item-receipt/cancel?id=${id}`); +} + +/** 导出采购入库单 */ +export function exportItemReceipt(params: any) { + return requestClient.download('/mes/wm/item-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/itemreceipt/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/itemreceipt/line/index.ts new file mode 100644 index 000000000..8ce7236c1 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/itemreceipt/line/index.ts @@ -0,0 +1,63 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmItemReceiptLineApi { + /** MES 采购入库单行 */ + export interface ItemReceiptLine { + id?: number; // 行编号 + receiptId?: number; // 入库单编号 + receiptCode?: string; // 入库单编码 + arrivalNoticeLineId?: number; // 到货通知单行编号 + purchaseOrderCode?: string; // 采购订单号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + receivedQuantity?: number; // 入库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + productionDate?: number; // 生产日期 + expireDate?: number; // 有效期 + lotNumber?: string; // 生产批号 + iqcCheckFlag?: boolean; // 是否检验 + iqcId?: number; // 来料检验单编号 + iqcCode?: string; // 来料检验单编码 + remark?: string; // 备注 + } +} + +/** 查询采购入库单行分页 */ +export function getItemReceiptLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/item-receipt-line/page', + { params }, + ); +} + +/** 查询采购入库单行详情 */ +export function getItemReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/item-receipt-line/get?id=${id}`, + ); +} + +/** 新增采购入库单行 */ +export function createItemReceiptLine( + data: MesWmItemReceiptLineApi.ItemReceiptLine, +) { + return requestClient.post('/mes/wm/item-receipt-line/create', data); +} + +/** 修改采购入库单行 */ +export function updateItemReceiptLine( + data: MesWmItemReceiptLineApi.ItemReceiptLine, +) { + return requestClient.put('/mes/wm/item-receipt-line/update', data); +} + +/** 删除采购入库单行 */ +export function deleteItemReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/item-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/materialstock/index.ts b/apps/web-antdv-next/src/api/mes/wm/materialstock/index.ts new file mode 100644 index 000000000..49aab9620 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/materialstock/index.ts @@ -0,0 +1,61 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMaterialStockApi { + /** MES 库存台账 */ + export interface MaterialStock { + id?: number; // 编号 + itemTypeId?: number; // 物料分类编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseCode?: string; // 仓库编码 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + vendorId?: number; // 供应商编号 + vendorName?: string; // 供应商名称 + quantity?: number; // 在库数量 + receiptTime?: string; // 入库日期 + frozen?: boolean; // 是否冻结 + createTime?: Date; // 创建时间 + } +} + +/** 查询库存台账分页 */ +export function getMaterialStockPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/material-stock/page', + { params }, + ); +} + +/** 查询库存台账详情 */ +export function getMaterialStock(id: number) { + return requestClient.get( + `/mes/wm/material-stock/get?id=${id}`, + ); +} + +/** 更新库存冻结状态 */ +export function updateMaterialStockFrozen(data: { + frozen: boolean; + id: number; +}) { + return requestClient.put('/mes/wm/material-stock/update-frozen', data); +} + +/** 导出库存台账 */ +export function exportMaterialStock(params: any) { + return requestClient.download('/mes/wm/material-stock/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/miscissue/index.ts b/apps/web-antdv-next/src/api/mes/wm/miscissue/index.ts new file mode 100644 index 000000000..1a54df4f4 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/miscissue/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscIssueApi { + /** MES 杂项出库单 */ + export interface MiscIssue { + id?: number; // 编号 + code?: string; // 出库单编号 + name?: string; // 出库单名称 + type?: number; // 业务类型 + sourceDocType?: string; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceDocCode?: string; // 来源单据编码 + issueDate?: number; // 出库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询杂项出库单分页 */ +export function getMiscIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/misc-issue/page', + { params }, + ); +} + +/** 查询杂项出库单详情 */ +export function getMiscIssue(id: number) { + return requestClient.get( + `/mes/wm/misc-issue/get?id=${id}`, + ); +} + +/** 新增杂项出库单 */ +export function createMiscIssue(data: MesWmMiscIssueApi.MiscIssue) { + return requestClient.post('/mes/wm/misc-issue/create', data); +} + +/** 修改杂项出库单 */ +export function updateMiscIssue(data: MesWmMiscIssueApi.MiscIssue) { + return requestClient.put('/mes/wm/misc-issue/update', data); +} + +/** 删除杂项出库单 */ +export function deleteMiscIssue(id: number) { + return requestClient.delete(`/mes/wm/misc-issue/delete?id=${id}`); +} + +/** 提交杂项出库单 */ +export function submitMiscIssue(id: number) { + return requestClient.put(`/mes/wm/misc-issue/submit?id=${id}`); +} + +/** 执行出库 */ +export function finishMiscIssue(id: number) { + return requestClient.put(`/mes/wm/misc-issue/finish?id=${id}`); +} + +/** 取消杂项出库单 */ +export function cancelMiscIssue(id: number) { + return requestClient.put(`/mes/wm/misc-issue/cancel?id=${id}`); +} + +/** 导出杂项出库单 */ +export function exportMiscIssue(params: any) { + return requestClient.download('/mes/wm/misc-issue/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/miscissue/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/miscissue/line/index.ts new file mode 100644 index 000000000..56f4d8950 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/miscissue/line/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscIssueLineApi { + /** MES 杂项出库单行 */ + export interface MiscIssueLine { + id?: number; // 编号 + issueId?: number; // 出库单编号 + sourceDocLineId?: number; // 来源单据行编号 + materialStockId?: number; // 库存编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasure?: string; // 计量单位 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 出库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseCode?: string; // 仓库编码 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationCode?: string; // 库区编码 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaCode?: string; // 库位编码 + areaName?: string; // 库位名称 + remark?: string; // 备注 + quantityMax?: number; // 可出库最大数量(前端用于限制出库数量,取自库存在库数量) + } +} + +/** 查询杂项出库单行分页 */ +export function getMiscIssueLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/misc-issue-line/page', + { params }, + ); +} + +/** 查询杂项出库单行列表 */ +export function getMiscIssueLineListByIssueId(issueId: number) { + return requestClient.get( + `/mes/wm/misc-issue-line/list-by-issue-id?issueId=${issueId}`, + ); +} + +/** 查询杂项出库单行详情 */ +export function getMiscIssueLine(id: number) { + return requestClient.get( + `/mes/wm/misc-issue-line/get?id=${id}`, + ); +} + +/** 新增杂项出库单行 */ +export function createMiscIssueLine(data: MesWmMiscIssueLineApi.MiscIssueLine) { + return requestClient.post('/mes/wm/misc-issue-line/create', data); +} + +/** 修改杂项出库单行 */ +export function updateMiscIssueLine(data: MesWmMiscIssueLineApi.MiscIssueLine) { + return requestClient.put('/mes/wm/misc-issue-line/update', data); +} + +/** 删除杂项出库单行 */ +export function deleteMiscIssueLine(id: number) { + return requestClient.delete(`/mes/wm/misc-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/miscreceipt/index.ts b/apps/web-antdv-next/src/api/mes/wm/miscreceipt/index.ts new file mode 100644 index 000000000..112cb4aac --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/miscreceipt/index.ts @@ -0,0 +1,70 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscReceiptApi { + /** MES 杂项入库单 */ + export interface MiscReceipt { + id?: number; // 编号 + code?: string; // 入库单编号 + name?: string; // 入库单名称 + type?: number; // 杂项类型 + sourceDocType?: string; // 来源单据类型 + sourceDocId?: number; // 来源单据编号 + sourceDocCode?: string; // 来源单据编码 + receiptDate?: number; // 入库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询杂项入库单分页 */ +export function getMiscReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/misc-receipt/page', + { params }, + ); +} + +/** 查询杂项入库单详情 */ +export function getMiscReceipt(id: number) { + return requestClient.get( + `/mes/wm/misc-receipt/get?id=${id}`, + ); +} + +/** 新增杂项入库单 */ +export function createMiscReceipt(data: MesWmMiscReceiptApi.MiscReceipt) { + return requestClient.post('/mes/wm/misc-receipt/create', data); +} + +/** 修改杂项入库单 */ +export function updateMiscReceipt(data: MesWmMiscReceiptApi.MiscReceipt) { + return requestClient.put('/mes/wm/misc-receipt/update', data); +} + +/** 删除杂项入库单 */ +export function deleteMiscReceipt(id: number) { + return requestClient.delete(`/mes/wm/misc-receipt/delete?id=${id}`); +} + +/** 提交杂项入库单 */ +export function submitMiscReceipt(id: number) { + return requestClient.put(`/mes/wm/misc-receipt/submit?id=${id}`); +} + +/** 执行入库 */ +export function finishMiscReceipt(id: number) { + return requestClient.put(`/mes/wm/misc-receipt/finish?id=${id}`); +} + +/** 取消杂项入库单 */ +export function cancelMiscReceipt(id: number) { + return requestClient.put(`/mes/wm/misc-receipt/cancel?id=${id}`); +} + +/** 导出杂项入库单 */ +export function exportMiscReceipt(params: any) { + return requestClient.download('/mes/wm/misc-receipt/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/miscreceipt/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/miscreceipt/line/index.ts new file mode 100644 index 000000000..4ff66e549 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/miscreceipt/line/index.ts @@ -0,0 +1,57 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmMiscReceiptLineApi { + /** MES 杂项入库单行 */ + export interface MiscReceiptLine { + id?: number; // 编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 入库数量 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询杂项入库单行列表 */ +export function getMiscReceiptLineListByReceiptId(receiptId: number) { + return requestClient.get( + `/mes/wm/misc-receipt-line/list-by-receipt-id?receiptId=${receiptId}`, + ); +} + +/** 查询杂项入库单行详情 */ +export function getMiscReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/misc-receipt-line/get?id=${id}`, + ); +} + +/** 新增杂项入库单行 */ +export function createMiscReceiptLine( + data: MesWmMiscReceiptLineApi.MiscReceiptLine, +) { + return requestClient.post('/mes/wm/misc-receipt-line/create', data); +} + +/** 修改杂项入库单行 */ +export function updateMiscReceiptLine( + data: MesWmMiscReceiptLineApi.MiscReceiptLine, +) { + return requestClient.put('/mes/wm/misc-receipt-line/update', data); +} + +/** 删除杂项入库单行 */ +export function deleteMiscReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/misc-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/outsourceissue/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/outsourceissue/detail/index.ts new file mode 100644 index 000000000..15b50b6a6 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/outsourceissue/detail/index.ts @@ -0,0 +1,60 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceIssueDetailApi { + /** MES 外协发料单明细 */ + export interface OutsourceIssueDetail { + id?: number; // 明细编号 + lineId?: number; // 行编号 + issueId?: number; // 发料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 数量 + materialStockId?: number; // 库存编号 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协发料单明细列表 */ +export function getOutsourceIssueDetailListByLineId(lineId: number) { + return requestClient.get< + MesWmOutsourceIssueDetailApi.OutsourceIssueDetail[] + >('/mes/wm/outsource-issue-detail/list-by-line', { params: { lineId } }); +} + +/** 查询外协发料单明细详情 */ +export function getOutsourceIssueDetail(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue-detail/get?id=${id}`, + ); +} + +/** 新增外协发料单明细 */ +export function createOutsourceIssueDetail( + data: MesWmOutsourceIssueDetailApi.OutsourceIssueDetail, +) { + return requestClient.post('/mes/wm/outsource-issue-detail/create', data); +} + +/** 修改外协发料单明细 */ +export function updateOutsourceIssueDetail( + data: MesWmOutsourceIssueDetailApi.OutsourceIssueDetail, +) { + return requestClient.put('/mes/wm/outsource-issue-detail/update', data); +} + +/** 删除外协发料单明细 */ +export function deleteOutsourceIssueDetail(id: number) { + return requestClient.delete(`/mes/wm/outsource-issue-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/outsourceissue/index.ts b/apps/web-antdv-next/src/api/mes/wm/outsourceissue/index.ts new file mode 100644 index 000000000..8b3b94b75 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/outsourceissue/index.ts @@ -0,0 +1,90 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceIssueApi { + /** MES 外协发料单 */ + export interface OutsourceIssue { + id?: number; // 发料单编号 + code?: string; // 发料单编号 + name?: string; // 发料单名称 + vendorId?: number; // 供应商编号 + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + workOrderName?: string; // 生产工单名称 + issueDate?: number; // 发料日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协发料单分页 */ +export function getOutsourceIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/outsource-issue/page', + { params }, + ); +} + +/** 查询外协发料单详情 */ +export function getOutsourceIssue(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue/get?id=${id}`, + ); +} + +/** 新增外协发料单 */ +export function createOutsourceIssue( + data: MesWmOutsourceIssueApi.OutsourceIssue, +) { + return requestClient.post('/mes/wm/outsource-issue/create', data); +} + +/** 修改外协发料单 */ +export function updateOutsourceIssue( + data: MesWmOutsourceIssueApi.OutsourceIssue, +) { + return requestClient.put('/mes/wm/outsource-issue/update', data); +} + +/** 删除外协发料单 */ +export function deleteOutsourceIssue(id: number) { + return requestClient.delete(`/mes/wm/outsource-issue/delete?id=${id}`); +} + +/** 提交外协发料单 */ +export function submitOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/stock?id=${id}`); +} + +/** 执行领出 */ +export function finishOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/finish?id=${id}`); +} + +/** 取消外协发料单 */ +export function cancelOutsourceIssue(id: number) { + return requestClient.put(`/mes/wm/outsource-issue/cancel?id=${id}`); +} + +/** 校验外协发料单拣货数量是否与发料数量一致 */ +export function checkOutsourceIssueQuantity(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue/check-quantity?id=${id}`, + ); +} + +/** 导出外协发料单 */ +export function exportOutsourceIssue(params: any) { + return requestClient.download('/mes/wm/outsource-issue/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/outsourceissue/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/outsourceissue/line/index.ts new file mode 100644 index 000000000..68fae8f95 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/outsourceissue/line/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceIssueLineApi { + /** MES 外协发料单行 */ + export interface OutsourceIssueLine { + id?: number; // 行编号 + issueId?: number; // 发料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 发料数量 + materialStockId?: number; // 库存编号 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协发料单行分页 */ +export function getOutsourceIssueLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/outsource-issue-line/page', { params }); +} + +/** 查询外协发料单行详情 */ +export function getOutsourceIssueLine(id: number) { + return requestClient.get( + `/mes/wm/outsource-issue-line/get?id=${id}`, + ); +} + +/** 新增外协发料单行 */ +export function createOutsourceIssueLine( + data: MesWmOutsourceIssueLineApi.OutsourceIssueLine, +) { + return requestClient.post('/mes/wm/outsource-issue-line/create', data); +} + +/** 修改外协发料单行 */ +export function updateOutsourceIssueLine( + data: MesWmOutsourceIssueLineApi.OutsourceIssueLine, +) { + return requestClient.put('/mes/wm/outsource-issue-line/update', data); +} + +/** 删除外协发料单行 */ +export function deleteOutsourceIssueLine(id: number) { + return requestClient.delete(`/mes/wm/outsource-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/detail/index.ts new file mode 100644 index 000000000..645fa7ad3 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/detail/index.ts @@ -0,0 +1,61 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceReceiptDetailApi { + /** MES 外协入库单明细 */ + export interface OutsourceReceiptDetail { + id?: number; // 明细编号 + lineId?: number; // 行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 上架数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协入库单明细列表 */ +export function getOutsourceReceiptDetailListByLineId(lineId: number) { + return requestClient.get< + MesWmOutsourceReceiptDetailApi.OutsourceReceiptDetail[] + >('/mes/wm/outsource-receipt-detail/list-by-line', { params: { lineId } }); +} + +/** 查询外协入库单明细详情 */ +export function getOutsourceReceiptDetail(id: number) { + return requestClient.get( + `/mes/wm/outsource-receipt-detail/get?id=${id}`, + ); +} + +/** 新增外协入库单明细 */ +export function createOutsourceReceiptDetail( + data: MesWmOutsourceReceiptDetailApi.OutsourceReceiptDetail, +) { + return requestClient.post('/mes/wm/outsource-receipt-detail/create', data); +} + +/** 修改外协入库单明细 */ +export function updateOutsourceReceiptDetail( + data: MesWmOutsourceReceiptDetailApi.OutsourceReceiptDetail, +) { + return requestClient.put('/mes/wm/outsource-receipt-detail/update', data); +} + +/** 删除外协入库单明细 */ +export function deleteOutsourceReceiptDetail(id: number) { + return requestClient.delete( + `/mes/wm/outsource-receipt-detail/delete?id=${id}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/index.ts b/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/index.ts new file mode 100644 index 000000000..730b2f8b9 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/index.ts @@ -0,0 +1,81 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceReceiptApi { + /** MES 外协入库单 */ + export interface OutsourceReceipt { + id?: number; // 入库单编号 + code?: string; // 入库单编码 + name?: string; // 入库单名称 + workOrderId?: number; // 外协工单编号 + workOrderCode?: string; // 外协工单编码 + vendorId?: number; // 供应商编号 + vendorName?: string; // 供应商名称 + receiptDate?: number; // 入库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协入库单分页 */ +export function getOutsourceReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/outsource-receipt/page', + { params }, + ); +} + +/** 查询外协入库单详情 */ +export function getOutsourceReceipt(id: number) { + return requestClient.get( + `/mes/wm/outsource-receipt/get?id=${id}`, + ); +} + +/** 新增外协入库单 */ +export function createOutsourceReceipt( + data: MesWmOutsourceReceiptApi.OutsourceReceipt, +) { + return requestClient.post('/mes/wm/outsource-receipt/create', data); +} + +/** 修改外协入库单 */ +export function updateOutsourceReceipt( + data: MesWmOutsourceReceiptApi.OutsourceReceipt, +) { + return requestClient.put('/mes/wm/outsource-receipt/update', data); +} + +/** 删除外协入库单 */ +export function deleteOutsourceReceipt(id: number) { + return requestClient.delete(`/mes/wm/outsource-receipt/delete?id=${id}`); +} + +/** 提交外协入库单 */ +export function submitOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/submit?id=${id}`); +} + +/** 执行上架 */ +export function stockOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/stock?id=${id}`); +} + +/** 完成入库 */ +export function finishOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/finish?id=${id}`); +} + +/** 取消外协入库单 */ +export function cancelOutsourceReceipt(id: number) { + return requestClient.put(`/mes/wm/outsource-receipt/cancel?id=${id}`); +} + +/** 导出外协入库单 */ +export function exportOutsourceReceipt(params: any) { + return requestClient.download('/mes/wm/outsource-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/line/index.ts new file mode 100644 index 000000000..d28412a5b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/outsourcereceipt/line/index.ts @@ -0,0 +1,59 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmOutsourceReceiptLineApi { + /** MES 外协入库单行 */ + export interface OutsourceReceiptLine { + id?: number; // 行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 入库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次编码 + productionDate?: number; // 生产日期 + expireDate?: number; // 有效期 + lotNumber?: string; // 生产批号 + iqcCheckFlag?: boolean; // 是否需要质检 + qualityStatus?: number; // 质量状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询外协入库单行分页 */ +export function getOutsourceReceiptLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/outsource-receipt-line/page', { params }); +} + +/** 查询外协入库单行详情 */ +export function getOutsourceReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/outsource-receipt-line/get?id=${id}`, + ); +} + +/** 新增外协入库单行 */ +export function createOutsourceReceiptLine( + data: MesWmOutsourceReceiptLineApi.OutsourceReceiptLine, +) { + return requestClient.post('/mes/wm/outsource-receipt-line/create', data); +} + +/** 修改外协入库单行 */ +export function updateOutsourceReceiptLine( + data: MesWmOutsourceReceiptLineApi.OutsourceReceiptLine, +) { + return requestClient.put('/mes/wm/outsource-receipt-line/update', data); +} + +/** 删除外协入库单行 */ +export function deleteOutsourceReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/outsource-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/packages/index.ts b/apps/web-antdv-next/src/api/mes/wm/packages/index.ts new file mode 100644 index 000000000..cdbe51cf0 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/packages/index.ts @@ -0,0 +1,83 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmPackageApi { + /** 装箱单 */ + export interface Package { + id?: number; // 装箱单编号 + code?: string; // 装箱单编码 + parentId?: number; // 父箱编号 + packageDate?: number; // 装箱日期 + salesOrderCode?: string; // 销售订单编号 + invoiceCode?: string; // 发票编号 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + clientNickname?: string; // 客户简称 + length?: number; // 箱长度 + width?: number; // 箱宽度 + height?: number; // 箱高度 + sizeUnitId?: number; // 尺寸单位编号 + sizeUnitName?: string; // 尺寸单位名称 + netWeight?: number; // 净重 + grossWeight?: number; // 毛重 + weightUnitId?: number; // 重量单位编号 + weightUnitName?: string; // 重量单位名称 + inspectorUserId?: number; // 检查员用户编号 + inspectorName?: string; // 检查员名称 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: string; // 创建时间 + children?: Package[]; // 子箱列表 + } +} + +/** 查询装箱单分页 */ +export function getPackagePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/package/page', + { params }, + ); +} + +/** 查询装箱单详情 */ +export function getPackage(id: number) { + return requestClient.get( + `/mes/wm/package/get?id=${id}`, + ); +} + +/** 新增装箱单 */ +export function createPackage(data: MesWmPackageApi.Package) { + return requestClient.post('/mes/wm/package/create', data); +} + +/** 修改装箱单 */ +export function updatePackage(data: MesWmPackageApi.Package) { + return requestClient.put('/mes/wm/package/update', data); +} + +/** 删除装箱单 */ +export function deletePackage(id: number) { + return requestClient.delete(`/mes/wm/package/delete?id=${id}`); +} + +/** 完成装箱单 */ +export function finishPackage(id: number) { + return requestClient.put(`/mes/wm/package/finish?id=${id}`); +} + +/** 添加子箱 */ +export function addChildPackage(parentId: number, childId: number) { + return requestClient.put('/mes/wm/package/add-child-package', null, { + params: { childId, parentId }, + }); +} + +/** 移除子箱 */ +export function removeChildPackage(childId: number) { + return requestClient.put( + `/mes/wm/package/remove-child-package?childId=${childId}`, + ); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/packages/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/packages/line/index.ts new file mode 100644 index 000000000..0f8e77b4e --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/packages/line/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmPackageLineApi { + /** 装箱明细 */ + export interface PackageLine { + id?: number; // 装箱明细编号 + packageId?: number; // 装箱单编号 + materialStockId?: number; // 库存编号 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品物料编码 + itemName?: string; // 产品物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + quantity?: number; // 装箱数量 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编号 + batchCode?: string; // 批次号 + expireDate?: number; // 有效期 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询装箱明细分页 */ +export function getPackageLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/package-line/page', + { params }, + ); +} + +/** 查询装箱明细详情 */ +export function getPackageLine(id: number) { + return requestClient.get( + `/mes/wm/package-line/get?id=${id}`, + ); +} + +/** 新增装箱明细 */ +export function createPackageLine(data: MesWmPackageLineApi.PackageLine) { + return requestClient.post('/mes/wm/package-line/create', data); +} + +/** 修改装箱明细 */ +export function updatePackageLine(data: MesWmPackageLineApi.PackageLine) { + return requestClient.put('/mes/wm/package-line/update', data); +} + +/** 删除装箱明细 */ +export function deletePackageLine(id: number) { + return requestClient.delete(`/mes/wm/package-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productissue/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/productissue/detail/index.ts new file mode 100644 index 000000000..96def9c44 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productissue/detail/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmProductIssueDetailApi { + /** MES 领料出库明细 */ + export interface ProductIssueDetail { + id?: number; // 明细编号 + issueId?: number; // 领料单编号 + lineId?: number; // 领料单行编号 + materialStockId?: number; // 库存记录编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询领料出库明细列表(按行编号) */ +export function getProductIssueDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/product-issue-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询领料出库明细详情 */ +export function getProductIssueDetail(id: number) { + return requestClient.get( + `/mes/wm/product-issue-detail/get?id=${id}`, + ); +} + +/** 新增领料出库明细 */ +export function createProductIssueDetail( + data: MesWmProductIssueDetailApi.ProductIssueDetail, +) { + return requestClient.post('/mes/wm/product-issue-detail/create', data); +} + +/** 修改领料出库明细 */ +export function updateProductIssueDetail( + data: MesWmProductIssueDetailApi.ProductIssueDetail, +) { + return requestClient.put('/mes/wm/product-issue-detail/update', data); +} + +/** 删除领料出库明细 */ +export function deleteProductIssueDetail(id: number) { + return requestClient.delete(`/mes/wm/product-issue-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productissue/index.ts b/apps/web-antdv-next/src/api/mes/wm/productissue/index.ts new file mode 100644 index 000000000..78e792289 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productissue/index.ts @@ -0,0 +1,87 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductIssueApi { + /** MES 领料出库单 */ + export interface ProductIssue { + id?: number; // 领料单编号 + code?: string; // 领料单编号 + name?: string; // 领料单名称 + workstationId?: number; // 工作站编号 + workstationCode?: string; // 工作站编码 + workstationName?: string; // 工作站名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + requiredTime?: number; // 需求时间 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询领料出库单分页 */ +export function getProductIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-issue/page', + { params }, + ); +} + +/** 查询领料出库单详情 */ +export function getProductIssue(id: number) { + return requestClient.get( + `/mes/wm/product-issue/get?id=${id}`, + ); +} + +/** 新增领料出库单 */ +export function createProductIssue(data: MesWmProductIssueApi.ProductIssue) { + return requestClient.post('/mes/wm/product-issue/create', data); +} + +/** 修改领料出库单 */ +export function updateProductIssue(data: MesWmProductIssueApi.ProductIssue) { + return requestClient.put('/mes/wm/product-issue/update', data); +} + +/** 删除领料出库单 */ +export function deleteProductIssue(id: number) { + return requestClient.delete(`/mes/wm/product-issue/delete?id=${id}`); +} + +/** 提交领料出库单 */ +export function submitProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/stock?id=${id}`); +} + +/** 完成领料出库单 */ +export function finishProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/finish?id=${id}`); +} + +/** 取消领料出库单 */ +export function cancelProductIssue(id: number) { + return requestClient.put(`/mes/wm/product-issue/cancel?id=${id}`); +} + +/** 校验领料出库单拣货数量是否与领料数量一致 */ +export function checkProductIssueQuantity(id: number) { + return requestClient.get( + `/mes/wm/product-issue/check-quantity?id=${id}`, + ); +} + +/** 导出领料出库单 */ +export function exportProductIssue(params: any) { + return requestClient.download('/mes/wm/product-issue/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productissue/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/productissue/line/index.ts new file mode 100644 index 000000000..65ae7a187 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productissue/line/index.ts @@ -0,0 +1,53 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductIssueLineApi { + /** MES 领料出库单行 */ + export interface ProductIssueLine { + id?: number; // 行编号 + issueId?: number; // 领料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 领料数量 + batchId?: number; // 批次编号 + remark?: string; // 备注 + } +} + +/** 查询领料出库单行分页 */ +export function getProductIssueLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-issue-line/page', + { params }, + ); +} + +/** 查询领料出库单行详情 */ +export function getProductIssueLine(id: number) { + return requestClient.get( + `/mes/wm/product-issue-line/get?id=${id}`, + ); +} + +/** 新增领料出库单行 */ +export function createProductIssueLine( + data: MesWmProductIssueLineApi.ProductIssueLine, +) { + return requestClient.post('/mes/wm/product-issue-line/create', data); +} + +/** 修改领料出库单行 */ +export function updateProductIssueLine( + data: MesWmProductIssueLineApi.ProductIssueLine, +) { + return requestClient.put('/mes/wm/product-issue-line/update', data); +} + +/** 删除领料出库单行 */ +export function deleteProductIssueLine(id: number) { + return requestClient.delete(`/mes/wm/product-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productproduce/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/productproduce/line/index.ts new file mode 100644 index 000000000..ab3f49f29 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productproduce/line/index.ts @@ -0,0 +1,37 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductProduceLineApi { + /** MES 产品产出行 */ + export interface ProductProduceLine { + id?: number; + feedbackId?: number; // 报工编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物资编码 + itemName?: string; // 物资名称 + specification?: string; // 规格型号 + unitMeasureId?: number; // 单位编号 + unitMeasureName?: string; // 单位 + quantity?: number; // 产出数量 + batchCode?: string; // 批次号 + qualityStatus?: number; // 质量状态 + locationId?: number; // 库位编号 + locationName?: string; // 库位名称 + remark?: string; // 备注 + } + + /** MES 产品产出行分页查询参数 */ + export interface PageParams extends PageParam { + feedbackId?: number; + } +} + +/** 查询产品产出行分页 */ +export function getProductProduceLinePage( + params: MesWmProductProduceLineApi.PageParams, +) { + return requestClient.get< + PageResult + >('/mes/wm/product-produce-line/page', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productreceipt/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/productreceipt/detail/index.ts new file mode 100644 index 000000000..8e371a4d9 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productreceipt/detail/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmProductReceiptDetailApi { + /** MES 产品入库明细 */ + export interface ProductReceiptDetail { + id?: number; // 明细编号 + lineId?: number; // 入库单行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询产品入库明细列表(按行编号) */ +export function getProductReceiptDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/product-receipt-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询产品入库明细详情 */ +export function getProductReceiptDetail(id: number) { + return requestClient.get( + `/mes/wm/product-receipt-detail/get?id=${id}`, + ); +} + +/** 新增产品入库明细 */ +export function createProductReceiptDetail( + data: MesWmProductReceiptDetailApi.ProductReceiptDetail, +) { + return requestClient.post( + '/mes/wm/product-receipt-detail/create', + data, + ); +} + +/** 修改产品入库明细 */ +export function updateProductReceiptDetail( + data: MesWmProductReceiptDetailApi.ProductReceiptDetail, +) { + return requestClient.put('/mes/wm/product-receipt-detail/update', data); +} + +/** 删除产品入库明细 */ +export function deleteProductReceiptDetail(id: number) { + return requestClient.delete(`/mes/wm/product-receipt-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productreceipt/index.ts b/apps/web-antdv-next/src/api/mes/wm/productreceipt/index.ts new file mode 100644 index 000000000..73e30a178 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productreceipt/index.ts @@ -0,0 +1,91 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductReceiptApi { + /** MES 产品入库单 */ + export interface ProductReceipt { + id?: number; // 入库单编号 + code?: string; // 入库单编码 + name?: string; // 入库单名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + itemId?: number; // 产品物料编号 + itemCode?: string; // 产品物料编码 + itemName?: string; // 产品物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + receiptDate?: number; // 入库日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询产品入库单分页 */ +export function getProductReceiptPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-receipt/page', + { params }, + ); +} + +/** 查询产品入库单详情 */ +export function getProductReceipt(id: number) { + return requestClient.get( + `/mes/wm/product-receipt/get?id=${id}`, + ); +} + +/** 新增产品入库单 */ +export function createProductReceipt( + data: MesWmProductReceiptApi.ProductReceipt, +) { + return requestClient.post('/mes/wm/product-receipt/create', data); +} + +/** 修改产品入库单 */ +export function updateProductReceipt( + data: MesWmProductReceiptApi.ProductReceipt, +) { + return requestClient.put('/mes/wm/product-receipt/update', data); +} + +/** 删除产品入库单 */ +export function deleteProductReceipt(id: number) { + return requestClient.delete(`/mes/wm/product-receipt/delete?id=${id}`); +} + +/** 提交产品入库单 */ +export function submitProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/submit?id=${id}`); +} + +/** 执行上架 */ +export function stockProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/stock?id=${id}`); +} + +/** 执行入库 */ +export function finishProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/finish?id=${id}`); +} + +/** 取消产品入库单 */ +export function cancelProductReceipt(id: number) { + return requestClient.put(`/mes/wm/product-receipt/cancel?id=${id}`); +} + +/** 校验产品入库单明细数量是否与行收货数量一致 */ +export function checkProductReceiptQuantity(id: number) { + return requestClient.get( + `/mes/wm/product-receipt/check-quantity?id=${id}`, + ); +} + +/** 导出产品入库单 */ +export function exportProductReceipt(params: any) { + return requestClient.download('/mes/wm/product-receipt/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productreceipt/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/productreceipt/line/index.ts new file mode 100644 index 000000000..04e113b3b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productreceipt/line/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductReceiptLineApi { + /** MES 产品入库单行 */ + export interface ProductReceiptLine { + id?: number; // 行编号 + receiptId?: number; // 入库单编号 + itemId?: number; // 物料编号 + materialStockId?: number; // 库存记录编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 入库数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + remark?: string; // 备注 + } +} + +/** 查询产品入库单行分页 */ +export function getProductReceiptLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/product-receipt-line/page', { params }); +} + +/** 查询产品入库单行详情 */ +export function getProductReceiptLine(id: number) { + return requestClient.get( + `/mes/wm/product-receipt-line/get?id=${id}`, + ); +} + +/** 新增产品入库单行 */ +export function createProductReceiptLine( + data: MesWmProductReceiptLineApi.ProductReceiptLine, +) { + return requestClient.post( + '/mes/wm/product-receipt-line/create', + data, + ); +} + +/** 修改产品入库单行 */ +export function updateProductReceiptLine( + data: MesWmProductReceiptLineApi.ProductReceiptLine, +) { + return requestClient.put('/mes/wm/product-receipt-line/update', data); +} + +/** 删除产品入库单行 */ +export function deleteProductReceiptLine(id: number) { + return requestClient.delete(`/mes/wm/product-receipt-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productsales/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/productsales/detail/index.ts new file mode 100644 index 000000000..34aa22d5b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productsales/detail/index.ts @@ -0,0 +1,58 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmProductSalesDetailApi { + /** MES 销售出库明细 */ + export interface ProductSalesDetail { + id?: number; // 明细编号 + lineId?: number; // 出库单行编号 + salesId?: number; // 出库单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + quantity?: number; // 数量 + materialStockId?: number; // 库存记录编号 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询销售出库明细列表(按行编号) */ +export function getProductSalesDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/product-sales-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询销售出库明细详情 */ +export function getProductSalesDetail(id: number) { + return requestClient.get( + `/mes/wm/product-sales-detail/get?id=${id}`, + ); +} + +/** 新增销售出库明细 */ +export function createProductSalesDetail( + data: MesWmProductSalesDetailApi.ProductSalesDetail, +) { + return requestClient.post('/mes/wm/product-sales-detail/create', data); +} + +/** 修改销售出库明细 */ +export function updateProductSalesDetail( + data: MesWmProductSalesDetailApi.ProductSalesDetail, +) { + return requestClient.put('/mes/wm/product-sales-detail/update', data); +} + +/** 删除销售出库明细 */ +export function deleteProductSalesDetail(id: number) { + return requestClient.delete(`/mes/wm/product-sales-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productsales/index.ts b/apps/web-antdv-next/src/api/mes/wm/productsales/index.ts new file mode 100644 index 000000000..b0fddcfe4 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productsales/index.ts @@ -0,0 +1,96 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductSalesApi { + /** MES 销售出库单 */ + export interface ProductSales { + id?: number; // 出库单编号 + code?: string; // 出库单编号 + name?: string; // 出库单名称 + noticeId?: number; // 发货通知单编号 + noticeCode?: string; // 发货通知单编码 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + salesOrderCode?: string; // 销售订单编号 + salesDate?: number; // 出库日期 + contactName?: string; // 收货人 + contactTelephone?: string; // 联系方式 + contactAddress?: string; // 收货地址 + carrier?: string; // 承运商 + shippingNumber?: string; // 运输单号 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询销售出库单分页 */ +export function getProductSalesPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/product-sales/page', + { params }, + ); +} + +/** 查询销售出库单详情 */ +export function getProductSales(id: number) { + return requestClient.get( + `/mes/wm/product-sales/get?id=${id}`, + ); +} + +/** 新增销售出库单 */ +export function createProductSales(data: MesWmProductSalesApi.ProductSales) { + return requestClient.post('/mes/wm/product-sales/create', data); +} + +/** 修改销售出库单 */ +export function updateProductSales(data: MesWmProductSalesApi.ProductSales) { + return requestClient.put('/mes/wm/product-sales/update', data); +} + +/** 删除销售出库单 */ +export function deleteProductSales(id: number) { + return requestClient.delete(`/mes/wm/product-sales/delete?id=${id}`); +} + +/** 提交销售出库单 */ +export function submitProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/stock?id=${id}`); +} + +/** 填写运单 */ +export function shippingProductSales(data: MesWmProductSalesApi.ProductSales) { + return requestClient.put('/mes/wm/product-sales/shipping', data); +} + +/** 执行出库 */ +export function finishProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/finish?id=${id}`); +} + +/** 取消销售出库单 */ +export function cancelProductSales(id: number) { + return requestClient.put(`/mes/wm/product-sales/cancel?id=${id}`); +} + +/** 校验销售出库单拣货数量是否与出库数量一致 */ +export function checkProductSalesQuantity(id: number) { + return requestClient.get( + `/mes/wm/product-sales/check-quantity?id=${id}`, + ); +} + +/** 导出销售出库单 */ +export function exportProductSales(params: any) { + return requestClient.download('/mes/wm/product-sales/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/productsales/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/productsales/line/index.ts new file mode 100644 index 000000000..f1d4ff57b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/productsales/line/index.ts @@ -0,0 +1,56 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmProductSalesLineApi { + /** MES 销售出库单行 */ + export interface ProductSalesLine { + id?: number; // 行编号 + salesId?: number; // 出库单编号 + noticeLineId?: number; // 发货通知单行编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 出库数量 + pickedQuantity?: number; // 已拣货数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + oqcCheckFlag?: boolean; // 是否检验 + remark?: string; // 备注 + } +} + +/** 查询销售出库单行分页 */ +export function getProductSalesLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/product-sales-line/page', { params }); +} + +/** 查询销售出库单行详情 */ +export function getProductSalesLine(id: number) { + return requestClient.get( + `/mes/wm/product-sales-line/get?id=${id}`, + ); +} + +/** 新增销售出库单行 */ +export function createProductSalesLine( + data: MesWmProductSalesLineApi.ProductSalesLine, +) { + return requestClient.post('/mes/wm/product-sales-line/create', data); +} + +/** 修改销售出库单行 */ +export function updateProductSalesLine( + data: MesWmProductSalesLineApi.ProductSalesLine, +) { + return requestClient.put('/mes/wm/product-sales-line/update', data); +} + +/** 删除销售出库单行 */ +export function deleteProductSalesLine(id: number) { + return requestClient.delete(`/mes/wm/product-sales-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnissue/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnissue/detail/index.ts new file mode 100644 index 000000000..7c878bb15 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnissue/detail/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnIssueDetailApi { + /** MES 生产退料明细 */ + export interface ReturnIssueDetail { + id?: number; // 明细编号 + issueId?: number; // 退料单编号 + lineId?: number; // 退料单行编号 + materialStockId?: number; // 库存记录编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询生产退料明细列表(按行编号) */ +export function getReturnIssueDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/return-issue-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询生产退料明细详情 */ +export function getReturnIssueDetail(id: number) { + return requestClient.get( + `/mes/wm/return-issue-detail/get?id=${id}`, + ); +} + +/** 新增生产退料明细 */ +export function createReturnIssueDetail( + data: MesWmReturnIssueDetailApi.ReturnIssueDetail, +) { + return requestClient.post('/mes/wm/return-issue-detail/create', data); +} + +/** 修改生产退料明细 */ +export function updateReturnIssueDetail( + data: MesWmReturnIssueDetailApi.ReturnIssueDetail, +) { + return requestClient.put('/mes/wm/return-issue-detail/update', data); +} + +/** 删除生产退料明细 */ +export function deleteReturnIssueDetail(id: number) { + return requestClient.delete(`/mes/wm/return-issue-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnissue/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnissue/index.ts new file mode 100644 index 000000000..c2a10b099 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnissue/index.ts @@ -0,0 +1,78 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnIssueApi { + /** MES 生产退料单 */ + export interface ReturnIssue { + id?: number; // 退料单编号 + code?: string; // 退料单编号 + name?: string; // 退料单名称 + workstationId?: number; // 工作站编号 + workstationName?: string; // 工作站名称 + workOrderId?: number; // 生产工单编号 + workOrderCode?: string; // 生产工单编码 + type?: number; // 退料类型 + returnDate?: number; // 退料日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询生产退料单分页 */ +export function getReturnIssuePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-issue/page', + { params }, + ); +} + +/** 查询生产退料单详情 */ +export function getReturnIssue(id: number) { + return requestClient.get( + `/mes/wm/return-issue/get?id=${id}`, + ); +} + +/** 新增生产退料单 */ +export function createReturnIssue(data: MesWmReturnIssueApi.ReturnIssue) { + return requestClient.post('/mes/wm/return-issue/create', data); +} + +/** 修改生产退料单 */ +export function updateReturnIssue(data: MesWmReturnIssueApi.ReturnIssue) { + return requestClient.put('/mes/wm/return-issue/update', data); +} + +/** 删除生产退料单 */ +export function deleteReturnIssue(id: number) { + return requestClient.delete(`/mes/wm/return-issue/delete?id=${id}`); +} + +/** 提交生产退料单 */ +export function submitReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/submit?id=${id}`); +} + +/** 入库上架 */ +export function stockReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/stock?id=${id}`); +} + +/** 完成生产退料单 */ +export function finishReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/finish?id=${id}`); +} + +/** 取消生产退料单 */ +export function cancelReturnIssue(id: number) { + return requestClient.put(`/mes/wm/return-issue/cancel?id=${id}`); +} + +/** 导出生产退料单 */ +export function exportReturnIssue(params: any) { + return requestClient.download('/mes/wm/return-issue/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnissue/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnissue/line/index.ts new file mode 100644 index 000000000..05bef0792 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnissue/line/index.ts @@ -0,0 +1,58 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnIssueLineApi { + /** MES 生产退料单行 */ + export interface ReturnIssueLine { + id?: number; // 行编号 + issueId?: number; // 退料单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + materialStockId?: number; // 库存记录编号 + quantity?: number; // 退料数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + rqcCheckFlag?: boolean; // 是否检测 + qualityStatus?: number; // 质量状态 + rqcId?: number; // 退货检验单编号 + remark?: string; // 备注 + } +} + +/** 查询生产退料单行分页 */ +export function getReturnIssueLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-issue-line/page', + { params }, + ); +} + +/** 查询生产退料单行详情 */ +export function getReturnIssueLine(id: number) { + return requestClient.get( + `/mes/wm/return-issue-line/get?id=${id}`, + ); +} + +/** 新增生产退料单行 */ +export function createReturnIssueLine( + data: MesWmReturnIssueLineApi.ReturnIssueLine, +) { + return requestClient.post('/mes/wm/return-issue-line/create', data); +} + +/** 修改生产退料单行 */ +export function updateReturnIssueLine( + data: MesWmReturnIssueLineApi.ReturnIssueLine, +) { + return requestClient.put('/mes/wm/return-issue-line/update', data); +} + +/** 删除生产退料单行 */ +export function deleteReturnIssueLine(id: number) { + return requestClient.delete(`/mes/wm/return-issue-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnsales/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnsales/detail/index.ts new file mode 100644 index 000000000..dfba83fa7 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnsales/detail/index.ts @@ -0,0 +1,55 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnSalesDetailApi { + /** MES 销售退货明细 */ + export interface ReturnSalesDetail { + id?: number; // 明细编号 + returnId?: number; // 退货单编号 + lineId?: number; // 退货单行编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询销售退货明细列表(按行编号) */ +export function getReturnSalesDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/return-sales-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询销售退货明细详情 */ +export function getReturnSalesDetail(id: number) { + return requestClient.get( + `/mes/wm/return-sales-detail/get?id=${id}`, + ); +} + +/** 新增销售退货明细 */ +export function createReturnSalesDetail( + data: MesWmReturnSalesDetailApi.ReturnSalesDetail, +) { + return requestClient.post('/mes/wm/return-sales-detail/create', data); +} + +/** 修改销售退货明细 */ +export function updateReturnSalesDetail( + data: MesWmReturnSalesDetailApi.ReturnSalesDetail, +) { + return requestClient.put('/mes/wm/return-sales-detail/update', data); +} + +/** 删除销售退货明细 */ +export function deleteReturnSalesDetail(id: number) { + return requestClient.delete(`/mes/wm/return-sales-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnsales/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnsales/index.ts new file mode 100644 index 000000000..8ad32ce0e --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnsales/index.ts @@ -0,0 +1,78 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnSalesApi { + /** MES 销售退货单 */ + export interface ReturnSales { + id?: number; // 退货单编号 + code?: string; // 退货单编号 + name?: string; // 退货单名称 + salesOrderCode?: string; // 销售订单号 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + returnDate?: number; // 退货日期 + returnReason?: string; // 退货原因 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询销售退货单分页 */ +export function getReturnSalesPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-sales/page', + { params }, + ); +} + +/** 查询销售退货单详情 */ +export function getReturnSales(id: number) { + return requestClient.get( + `/mes/wm/return-sales/get?id=${id}`, + ); +} + +/** 新增销售退货单 */ +export function createReturnSales(data: MesWmReturnSalesApi.ReturnSales) { + return requestClient.post('/mes/wm/return-sales/create', data); +} + +/** 修改销售退货单 */ +export function updateReturnSales(data: MesWmReturnSalesApi.ReturnSales) { + return requestClient.put('/mes/wm/return-sales/update', data); +} + +/** 删除销售退货单 */ +export function deleteReturnSales(id: number) { + return requestClient.delete(`/mes/wm/return-sales/delete?id=${id}`); +} + +/** 提交销售退货单 */ +export function submitReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/submit?id=${id}`); +} + +/** 执行退货 */ +export function finishReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/finish?id=${id}`); +} + +/** 执行上架 */ +export function stockReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/stock?id=${id}`); +} + +/** 取消销售退货单 */ +export function cancelReturnSales(id: number) { + return requestClient.put(`/mes/wm/return-sales/cancel?id=${id}`); +} + +/** 导出销售退货单 */ +export function exportReturnSales(params: any) { + return requestClient.download('/mes/wm/return-sales/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnsales/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnsales/line/index.ts new file mode 100644 index 000000000..f08ce776b --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnsales/line/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnSalesLineApi { + /** MES 销售退货单行 */ + export interface ReturnSalesLine { + id?: number; // 行编号 + returnId?: number; // 退货单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 退货数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + rqcCheckFlag?: boolean; // 是否需要质检 + rqcId?: number; // 退货检验单编号 + qualityStatus?: number; // 质量状态 + remark?: string; // 备注 + } +} + +/** 查询销售退货单行分页 */ +export function getReturnSalesLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-sales-line/page', + { params }, + ); +} + +/** 查询销售退货单行详情 */ +export function getReturnSalesLine(id: number) { + return requestClient.get( + `/mes/wm/return-sales-line/get?id=${id}`, + ); +} + +/** 新增销售退货单行 */ +export function createReturnSalesLine( + data: MesWmReturnSalesLineApi.ReturnSalesLine, +) { + return requestClient.post('/mes/wm/return-sales-line/create', data); +} + +/** 修改销售退货单行 */ +export function updateReturnSalesLine( + data: MesWmReturnSalesLineApi.ReturnSalesLine, +) { + return requestClient.put('/mes/wm/return-sales-line/update', data); +} + +/** 删除销售退货单行 */ +export function deleteReturnSalesLine(id: number) { + return requestClient.delete(`/mes/wm/return-sales-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnvendor/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnvendor/detail/index.ts new file mode 100644 index 000000000..92bb049f1 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnvendor/detail/index.ts @@ -0,0 +1,56 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnVendorDetailApi { + /** MES 供应商退货明细 */ + export interface ReturnVendorDetail { + id?: number; // 明细编号 + returnId?: number; // 退货单编号 + lineId?: number; // 退货单行编号 + materialStockId?: number; // 库存记录编号 + itemId?: number; // 物料编号 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + remark?: string; // 备注 + } +} + +/** 查询供应商退货明细列表(按行编号) */ +export function getReturnVendorDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/return-vendor-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询供应商退货明细详情 */ +export function getReturnVendorDetail(id: number) { + return requestClient.get( + `/mes/wm/return-vendor-detail/get?id=${id}`, + ); +} + +/** 新增供应商退货明细 */ +export function createReturnVendorDetail( + data: MesWmReturnVendorDetailApi.ReturnVendorDetail, +) { + return requestClient.post('/mes/wm/return-vendor-detail/create', data); +} + +/** 修改供应商退货明细 */ +export function updateReturnVendorDetail( + data: MesWmReturnVendorDetailApi.ReturnVendorDetail, +) { + return requestClient.put('/mes/wm/return-vendor-detail/update', data); +} + +/** 删除供应商退货明细 */ +export function deleteReturnVendorDetail(id: number) { + return requestClient.delete(`/mes/wm/return-vendor-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnvendor/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnvendor/index.ts new file mode 100644 index 000000000..fdb5bbe6d --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnvendor/index.ts @@ -0,0 +1,88 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnVendorApi { + /** MES 供应商退货单 */ + export interface ReturnVendor { + id?: number; // 退货单编号 + code?: string; // 退货单编号 + name?: string; // 退货单名称 + purchaseOrderCode?: string; // 采购订单号 + vendorId?: number; // 供应商编号 + vendorCode?: string; // 供应商编码 + vendorName?: string; // 供应商名称 + vendorNickname?: string; // 供应商简称 + returnDate?: number; // 退货日期 + returnReason?: string; // 退货原因 + transportCode?: string; // 运单号 + transportTelephone?: string; // 联系电话 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询供应商退货单分页 */ +export function getReturnVendorPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-vendor/page', + { params }, + ); +} + +/** 查询供应商退货单详情 */ +export function getReturnVendor(id: number) { + return requestClient.get( + `/mes/wm/return-vendor/get?id=${id}`, + ); +} + +/** 新增供应商退货单 */ +export function createReturnVendor(data: MesWmReturnVendorApi.ReturnVendor) { + return requestClient.post('/mes/wm/return-vendor/create', data); +} + +/** 修改供应商退货单 */ +export function updateReturnVendor(data: MesWmReturnVendorApi.ReturnVendor) { + return requestClient.put('/mes/wm/return-vendor/update', data); +} + +/** 删除供应商退货单 */ +export function deleteReturnVendor(id: number) { + return requestClient.delete(`/mes/wm/return-vendor/delete?id=${id}`); +} + +/** 提交供应商退货单 */ +export function submitReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/submit?id=${id}`); +} + +/** 执行拣货 */ +export function stockReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/stock?id=${id}`); +} + +/** 完成供应商退货单 */ +export function finishReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/finish?id=${id}`); +} + +/** 取消供应商退货单 */ +export function cancelReturnVendor(id: number) { + return requestClient.put(`/mes/wm/return-vendor/cancel?id=${id}`); +} + +/** 校验供应商退货单拣货数量是否与退货数量一致 */ +export function checkReturnVendorQuantity(id: number) { + return requestClient.get( + `/mes/wm/return-vendor/check-quantity?id=${id}`, + ); +} + +/** 导出供应商退货单 */ +export function exportReturnVendor(params: any) { + return requestClient.download('/mes/wm/return-vendor/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/returnvendor/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/returnvendor/line/index.ts new file mode 100644 index 000000000..c2ff06c62 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/returnvendor/line/index.ts @@ -0,0 +1,54 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmReturnVendorLineApi { + /** MES 供应商退货单行 */ + export interface ReturnVendorLine { + id?: number; // 行编号 + returnId?: number; // 退货单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + quantity?: number; // 退货数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + remark?: string; // 备注 + } +} + +/** 查询供应商退货单行分页 */ +export function getReturnVendorLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/return-vendor-line/page', + { params }, + ); +} + +/** 查询供应商退货单行详情 */ +export function getReturnVendorLine(id: number) { + return requestClient.get( + `/mes/wm/return-vendor-line/get?id=${id}`, + ); +} + +/** 新增供应商退货单行 */ +export function createReturnVendorLine( + data: MesWmReturnVendorLineApi.ReturnVendorLine, +) { + return requestClient.post('/mes/wm/return-vendor-line/create', data); +} + +/** 修改供应商退货单行 */ +export function updateReturnVendorLine( + data: MesWmReturnVendorLineApi.ReturnVendorLine, +) { + return requestClient.put('/mes/wm/return-vendor-line/update', data); +} + +/** 删除供应商退货单行 */ +export function deleteReturnVendorLine(id: number) { + return requestClient.delete(`/mes/wm/return-vendor-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/salesnotice/index.ts b/apps/web-antdv-next/src/api/mes/wm/salesnotice/index.ts new file mode 100644 index 000000000..c053f69c7 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/salesnotice/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmSalesNoticeApi { + /** MES 发货通知单 */ + export interface SalesNotice { + id?: number; // 通知单编号 + code?: string; // 通知单编号 + name?: string; // 通知单名称 + salesOrderCode?: string; // 销售订单编号 + clientId?: number; // 客户编号 + clientCode?: string; // 客户编码 + clientName?: string; // 客户名称 + salesDate?: number; // 发货日期 + recipientName?: string; // 收货人 + recipientTelephone?: string; // 联系方式 + recipientAddress?: string; // 收货地址 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询发货通知单分页 */ +export function getSalesNoticePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/sales-notice/page', + { params }, + ); +} + +/** 查询发货通知单详情 */ +export function getSalesNotice(id: number) { + return requestClient.get( + `/mes/wm/sales-notice/get?id=${id}`, + ); +} + +/** 新增发货通知单 */ +export function createSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) { + return requestClient.post('/mes/wm/sales-notice/create', data); +} + +/** 修改发货通知单 */ +export function updateSalesNotice(data: MesWmSalesNoticeApi.SalesNotice) { + return requestClient.put('/mes/wm/sales-notice/update', data); +} + +/** 删除发货通知单 */ +export function deleteSalesNotice(id: number) { + return requestClient.delete(`/mes/wm/sales-notice/delete?id=${id}`); +} + +/** 提交发货通知单 */ +export function submitSalesNotice(id: number) { + return requestClient.put(`/mes/wm/sales-notice/submit?id=${id}`); +} + +/** 导出发货通知单 */ +export function exportSalesNotice(params: any) { + return requestClient.download('/mes/wm/sales-notice/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/salesnotice/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/salesnotice/line/index.ts new file mode 100644 index 000000000..948d1bc63 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/salesnotice/line/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmSalesNoticeLineApi { + /** MES 发货通知单行 */ + export interface SalesNoticeLine { + id?: number; // 行编号 + noticeId?: number; // 发货通知单编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + quantity?: number; // 发货数量 + oqcCheckFlag?: boolean; // 是否检验 + remark?: string; // 备注 + } +} + +/** 查询发货通知单行分页 */ +export function getSalesNoticeLinePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/sales-notice-line/page', + { params }, + ); +} + +/** 查询发货通知单行详情 */ +export function getSalesNoticeLine(id: number) { + return requestClient.get( + `/mes/wm/sales-notice-line/get?id=${id}`, + ); +} + +/** 新增发货通知单行 */ +export function createSalesNoticeLine( + data: MesWmSalesNoticeLineApi.SalesNoticeLine, +) { + return requestClient.post('/mes/wm/sales-notice-line/create', data); +} + +/** 修改发货通知单行 */ +export function updateSalesNoticeLine( + data: MesWmSalesNoticeLineApi.SalesNoticeLine, +) { + return requestClient.put('/mes/wm/sales-notice-line/update', data); +} + +/** 删除发货通知单行 */ +export function deleteSalesNoticeLine(id: number) { + return requestClient.delete(`/mes/wm/sales-notice-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/sn/index.ts b/apps/web-antdv-next/src/api/mes/wm/sn/index.ts new file mode 100644 index 000000000..6970a796a --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/sn/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmSnApi { + /** MES SN 码分组 */ + export interface SnGroup { + uuid?: string; // 批次 UUID + count?: number; // SN 码数量 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitName?: string; // 单位名称 + batchCode?: string; // 批次号 + workOrderId?: number; // 生产工单编号 + createTime?: Date; // 生成时间 + } + + /** MES SN 码生成参数 */ + export interface SnGenerate { + itemId?: number; // 物料编号 + batchCode?: string; // 批次号 + workOrderId?: number; // 生产工单编号 + count?: number; // 生成数量 + } + + /** MES SN 码分组分页查询参数 */ + export interface PageParams extends PageParam { + uuid?: string; // 分组 UUID + code?: string; // SN 码 + itemId?: number; // 物料编号 + batchCode?: string; // 批次号 + createTime?: string[]; // 创建时间 + } +} + +/** 生成 SN 码 */ +export function generateSnCodes(data: MesWmSnApi.SnGenerate) { + return requestClient.post('/mes/wm/sn/generate', data); +} + +/** 查询 SN 码分组分页 */ +export function getSnGroupPage(params: MesWmSnApi.PageParams) { + return requestClient.get>( + '/mes/wm/sn/group-page', + { params }, + ); +} + +/** 批量删除 SN 码(按批次 UUID) */ +export function deleteSnBatch(uuid: string) { + return requestClient.delete('/mes/wm/sn/delete-batch', { + params: { uuid }, + }); +} + +/** 导出 SN 码分组 Excel */ +export function exportSnGroupExcel(params: MesWmSnApi.PageParams) { + return requestClient.download('/mes/wm/sn/group-export-excel', { params }); +} + +/** 导出批次 SN 码明细 Excel */ +export function exportSnDetailExcel(uuid: string) { + return requestClient.download('/mes/wm/sn/export-excel', { + params: { uuid }, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/stocktaking/plan/index.ts b/apps/web-antdv-next/src/api/mes/wm/stocktaking/plan/index.ts new file mode 100644 index 000000000..c6f29f092 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/stocktaking/plan/index.ts @@ -0,0 +1,68 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingPlanApi { + /** 盘点方案 */ + export interface StockTakingPlan { + id?: number; // 方案编号 + code?: string; // 方案编码 + name?: string; // 方案名称 + type?: number; // 盘点类型 + startTime?: number; // 开始时间 + endTime?: number; // 结束时间 + blindFlag?: boolean; // 是否盲盘 + frozen?: boolean; // 是否冻结库存 + status?: number; // 状态 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询盘点方案分页 */ +export function getStockTakingPlanPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/stocktaking-plan/page', + { params }, + ); +} + +/** 查询盘点方案详情 */ +export function getStockTakingPlan(id: number) { + return requestClient.get( + `/mes/wm/stocktaking-plan/get?id=${id}`, + ); +} + +/** 新增盘点方案 */ +export function createStockTakingPlan( + data: MesWmStockTakingPlanApi.StockTakingPlan, +) { + return requestClient.post('/mes/wm/stocktaking-plan/create', data); +} + +/** 修改盘点方案 */ +export function updateStockTakingPlan( + data: MesWmStockTakingPlanApi.StockTakingPlan, +) { + return requestClient.put('/mes/wm/stocktaking-plan/update', data); +} + +/** 修改盘点方案状态 */ +export function updateStockTakingPlanStatus(id: number, status: number) { + return requestClient.put('/mes/wm/stocktaking-plan/update-status', null, { + params: { id, status }, + }); +} + +/** 删除盘点方案 */ +export function deleteStockTakingPlan(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-plan/delete?id=${id}`); +} + +/** 导出盘点方案 */ +export function exportStockTakingPlan(params: any) { + return requestClient.download('/mes/wm/stocktaking-plan/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/stocktaking/plan/param/index.ts b/apps/web-antdv-next/src/api/mes/wm/stocktaking/plan/param/index.ts new file mode 100644 index 000000000..b6eb6e09e --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/stocktaking/plan/param/index.ts @@ -0,0 +1,49 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingPlanParamApi { + /** 盘点方案条件 */ + export interface StockTakingPlanParam { + id?: number; // 条件编号 + planId?: number; // 方案编号 + type?: number; // 条件类型 + valueId?: number; // 条件值编号 + valueCode?: string; // 条件值编码 + valueName?: string; // 条件值名称 + remark?: string; // 备注 + } +} + +/** 查询盘点方案条件分页 */ +export function getStockTakingPlanParamPage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/stocktaking-plan-param/page', { params }); +} + +/** 查询盘点方案条件详情 */ +export function getStockTakingPlanParam(id: number) { + return requestClient.get( + `/mes/wm/stocktaking-plan-param/get?id=${id}`, + ); +} + +/** 新增盘点方案条件 */ +export function createStockTakingPlanParam( + data: MesWmStockTakingPlanParamApi.StockTakingPlanParam, +) { + return requestClient.post('/mes/wm/stocktaking-plan-param/create', data); +} + +/** 修改盘点方案条件 */ +export function updateStockTakingPlanParam( + data: MesWmStockTakingPlanParamApi.StockTakingPlanParam, +) { + return requestClient.put('/mes/wm/stocktaking-plan-param/update', data); +} + +/** 删除盘点方案条件 */ +export function deleteStockTakingPlanParam(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-plan-param/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/index.ts b/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/index.ts new file mode 100644 index 000000000..77622f351 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/index.ts @@ -0,0 +1,86 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingTaskApi { + /** 盘点任务 */ + export interface StockTakingTask { + id?: number; // 任务编号 + code?: string; // 任务编码 + name?: string; // 任务名称 + takingDate?: string; // 盘点日期 + type?: number; // 盘点类型 + userId?: number; // 盘点人用户编号 + userNickname?: string; // 盘点人名称 + planId?: number; // 盘点方案编号 + planCode?: string; // 盘点方案编码 + planName?: string; // 盘点方案名称 + blindFlag?: boolean; // 是否盲盘 + frozen?: boolean; // 是否冻结库存 + startTime?: number; // 开始时间 + endTime?: number; // 结束时间 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询盘点任务分页 */ +export function getStockTakingPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/stocktaking-task/page', + { params }, + ); +} + +/** 查询盘点任务详情 */ +export function getStockTaking(id: number) { + return requestClient.get( + `/mes/wm/stocktaking-task/get?id=${id}`, + ); +} + +/** 新增盘点任务 */ +export function createStockTaking( + data: MesWmStockTakingTaskApi.StockTakingTask, +) { + return requestClient.post('/mes/wm/stocktaking-task/create', data); +} + +/** 修改盘点任务 */ +export function updateStockTaking( + data: MesWmStockTakingTaskApi.StockTakingTask, +) { + return requestClient.put('/mes/wm/stocktaking-task/update', data); +} + +/** 删除盘点任务 */ +export function deleteStockTaking(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-task/delete?id=${id}`); +} + +/** 提交盘点任务 */ +export function submitStockTaking(id: number) { + return requestClient.put('/mes/wm/stocktaking-task/submit', null, { + params: { id }, + }); +} + +/** 取消盘点任务 */ +export function cancelStockTaking(id: number) { + return requestClient.put('/mes/wm/stocktaking-task/cancel', null, { + params: { id }, + }); +} + +/** 执行盘点任务 */ +export function finishStockTaking(id: number) { + return requestClient.put('/mes/wm/stocktaking-task/finish', { id }); +} + +/** 导出盘点任务 */ +export function exportStockTaking(params: any) { + return requestClient.download('/mes/wm/stocktaking-task/export-excel', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/line/index.ts new file mode 100644 index 000000000..804483ec7 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/line/index.ts @@ -0,0 +1,72 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingTaskLineApi { + /** 盘点任务行 */ + export interface StockTakingTaskLine { + id?: number; // 盘点行编号 + taskId?: number; // 任务编号 + materialStockId?: number; // 库存编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + quantity?: number; // 在库数量 + takingQuantity?: number; // 盘点数量 + differenceQuantity?: number; // 差异数量 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + status?: number; // 状态 + remark?: string; // 备注 + } +} + +/** 查询盘点任务行分页 */ +export function getStockTakingTaskLinePage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/stocktaking-task-line/page', { params }); +} + +/** 查询盘点任务行精简列表 */ +export function getStockTakingTaskLineSimpleList(taskId: number) { + return requestClient.get( + '/mes/wm/stocktaking-task-line/simple-list', + { params: { taskId } }, + ); +} + +/** 查询盘点任务行详情 */ +export function getStockTakingTaskLine(id: number) { + return requestClient.get( + '/mes/wm/stocktaking-task-line/get', + { params: { id } }, + ); +} + +/** 新增盘点任务行 */ +export function createStockTakingTaskLine( + data: MesWmStockTakingTaskLineApi.StockTakingTaskLine, +) { + return requestClient.post('/mes/wm/stocktaking-task-line/create', data); +} + +/** 修改盘点任务行 */ +export function updateStockTakingTaskLine( + data: MesWmStockTakingTaskLineApi.StockTakingTaskLine, +) { + return requestClient.put('/mes/wm/stocktaking-task-line/update', data); +} + +/** 删除盘点任务行 */ +export function deleteStockTakingTaskLine(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-task-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/result/index.ts b/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/result/index.ts new file mode 100644 index 000000000..acd9a5f64 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/stocktaking/task/result/index.ts @@ -0,0 +1,64 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmStockTakingResultApi { + /** 盘点结果 */ + export interface StockTakingResult { + id?: number; // 结果编号 + taskId?: number; // 任务编号 + lineId?: number; // 盘点行编号 + materialStockId?: number; // 库存编号 + itemId?: number; // 物料编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 计量单位名称 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + areaId?: number; // 库位编号 + areaName?: string; // 库位名称 + quantity?: number; // 在库数量 + takingQuantity?: number; // 盘点数量 + remark?: string; // 备注 + createTime?: string; // 创建时间 + } +} + +/** 查询盘点结果分页 */ +export function getStockTakingResultPage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/stocktaking-task-result/page', { params }); +} + +/** 查询盘点结果详情 */ +export function getStockTakingResult(id: number) { + return requestClient.get( + '/mes/wm/stocktaking-task-result/get', + { params: { id } }, + ); +} + +/** 新增盘点结果 */ +export function createStockTakingResult( + data: MesWmStockTakingResultApi.StockTakingResult, +) { + return requestClient.post('/mes/wm/stocktaking-task-result/create', data); +} + +/** 修改盘点结果 */ +export function updateStockTakingResult( + data: MesWmStockTakingResultApi.StockTakingResult, +) { + return requestClient.put('/mes/wm/stocktaking-task-result/update', data); +} + +/** 删除盘点结果 */ +export function deleteStockTakingResult(id: number) { + return requestClient.delete(`/mes/wm/stocktaking-task-result/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/transfer/detail/index.ts b/apps/web-antdv-next/src/api/mes/wm/transfer/detail/index.ts new file mode 100644 index 000000000..ff215d92c --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/transfer/detail/index.ts @@ -0,0 +1,59 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmTransferDetailApi { + /** MES 调拨明细 */ + export interface TransferDetail { + id?: number; // 编号 + lineId?: number; // 转移单行编号 + transferId?: number; // 转移单编号 + itemId?: number; // 物料产品编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + toWarehouseId?: number; // 移入仓库编号 + toWarehouseName?: string; // 移入仓库名称 + toLocationId?: number; // 移入库区编号 + toLocationName?: string; // 移入库区名称 + toAreaId?: number; // 移入库位编号 + toAreaName?: string; // 移入库位名称 + remark?: string; // 备注 + } +} + +/** 查询调拨明细列表(按行编号) */ +export function getTransferDetailListByLineId(lineId: number) { + return requestClient.get( + '/mes/wm/transfer-detail/list-by-line', + { params: { lineId } }, + ); +} + +/** 查询调拨明细详情 */ +export function getTransferDetail(id: number) { + return requestClient.get( + `/mes/wm/transfer-detail/get?id=${id}`, + ); +} + +/** 新增调拨明细 */ +export function createTransferDetail( + data: MesWmTransferDetailApi.TransferDetail, +) { + return requestClient.post('/mes/wm/transfer-detail/create', data); +} + +/** 修改调拨明细 */ +export function updateTransferDetail( + data: MesWmTransferDetailApi.TransferDetail, +) { + return requestClient.put('/mes/wm/transfer-detail/update', data); +} + +/** 删除调拨明细 */ +export function deleteTransferDetail(id: number) { + return requestClient.delete(`/mes/wm/transfer-detail/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/transfer/index.ts b/apps/web-antdv-next/src/api/mes/wm/transfer/index.ts new file mode 100644 index 000000000..14d9b860f --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/transfer/index.ts @@ -0,0 +1,92 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmTransferApi { + /** MES 转移单 */ + export interface Transfer { + id?: number; // 编号 + code?: string; // 转移单编号 + name?: string; // 转移单名称 + type?: number; // 转移单类型 + deliveryFlag?: boolean; // 是否配送 + recipientName?: string; // 收货人 + recipientTelephone?: string; // 联系电话 + destinationAddress?: string; // 目的地 + carrier?: string; // 承运商 + shippingNumber?: string; // 运输单号 + confirmFlag?: boolean; // 是否确认 + transferDate?: string; // 转移日期 + status?: number; // 单据状态 + remark?: string; // 备注 + createTime?: number; // 创建时间 + } + + /** MES 转移单分页查询参数 */ + export interface PageParams extends PageParam { + code?: string; + name?: string; + type?: number; + status?: number; + } +} + +/** 查询转移单分页 */ +export function getTransferPage(params: MesWmTransferApi.PageParams) { + return requestClient.get>( + '/mes/wm/transfer/page', + { params }, + ); +} + +/** 查询转移单详情 */ +export function getTransfer(id: number) { + return requestClient.get( + `/mes/wm/transfer/get?id=${id}`, + ); +} + +/** 新增转移单 */ +export function createTransfer(data: MesWmTransferApi.Transfer) { + return requestClient.post('/mes/wm/transfer/create', data); +} + +/** 修改转移单 */ +export function updateTransfer(data: MesWmTransferApi.Transfer) { + return requestClient.put('/mes/wm/transfer/update', data); +} + +/** 删除转移单 */ +export function deleteTransfer(id: number) { + return requestClient.delete(`/mes/wm/transfer/delete?id=${id}`); +} + +/** 提交转移单 */ +export function submitTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/submit?id=${id}`); +} + +/** 到货确认 */ +export function confirmTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/confirm?id=${id}`); +} + +/** 执行上架 */ +export function stockTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/stock?id=${id}`); +} + +/** 完成转移 */ +export function finishTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/finish?id=${id}`); +} + +/** 取消转移单 */ +export function cancelTransfer(id: number) { + return requestClient.put(`/mes/wm/transfer/cancel?id=${id}`); +} + +/** 导出转移单 */ +export function exportTransfer(params: any) { + return requestClient.download('/mes/wm/transfer/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/transfer/line/index.ts b/apps/web-antdv-next/src/api/mes/wm/transfer/line/index.ts new file mode 100644 index 000000000..9ec7b5ea9 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/transfer/line/index.ts @@ -0,0 +1,55 @@ +import { requestClient } from '#/api/request'; + +export namespace MesWmTransferLineApi { + /** MES 转移单行 */ + export interface TransferLine { + id?: number; // 编号 + transferId?: number; // 转移单编号 + materialStockId?: number; // 库存台账编号 + itemId?: number; // 物料产品编号 + itemCode?: string; // 物料编码 + itemName?: string; // 物料名称 + specification?: string; // 规格型号 + unitMeasureName?: string; // 单位名称 + quantity?: number; // 转移数量 + batchId?: number; // 批次编号 + batchCode?: string; // 批次号 + fromWarehouseId?: number; // 移出仓库编号 + fromWarehouseName?: string; // 移出仓库名称 + fromLocationId?: number; // 移出库区编号 + fromLocationName?: string; // 移出库区名称 + fromAreaId?: number; // 移出库位编号 + fromAreaName?: string; // 移出库位名称 + remark?: string; // 备注 + } +} + +/** 查询转移单行列表 */ +export function getTransferLineList(transferId: number) { + return requestClient.get( + '/mes/wm/transfer-line/list', + { params: { transferId } }, + ); +} + +/** 查询转移单行详情 */ +export function getTransferLine(id: number) { + return requestClient.get( + `/mes/wm/transfer-line/get?id=${id}`, + ); +} + +/** 新增转移单行 */ +export function createTransferLine(data: MesWmTransferLineApi.TransferLine) { + return requestClient.post('/mes/wm/transfer-line/create', data); +} + +/** 修改转移单行 */ +export function updateTransferLine(data: MesWmTransferLineApi.TransferLine) { + return requestClient.put('/mes/wm/transfer-line/update', data); +} + +/** 删除转移单行 */ +export function deleteTransferLine(id: number) { + return requestClient.delete(`/mes/wm/transfer-line/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/warehouse/area/index.ts b/apps/web-antdv-next/src/api/mes/wm/warehouse/area/index.ts new file mode 100644 index 000000000..ca67789d8 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/warehouse/area/index.ts @@ -0,0 +1,65 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmWarehouseAreaApi { + /** MES 库位 */ + export interface WarehouseArea { + id?: number; // 库位编号 + code?: string; // 库位编码 + name?: string; // 库位名称 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + locationId?: number; // 库区编号 + locationName?: string; // 库区名称 + area?: number; // 面积 + maxLoad?: number; // 最大载荷 + positionX?: number; // X 坐标 + positionY?: number; // Y 坐标 + positionZ?: number; // Z 坐标 + status?: number; // 状态 + frozen?: boolean; // 是否冻结 + allowItemMixing?: boolean; // 是否允许物料混放 + allowBatchMixing?: boolean; // 是否允许批次混放 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询库位分页 */ +export function getWarehouseAreaPage(params: PageParam) { + return requestClient.get>( + '/mes/wm/warehouse-area/page', + { params }, + ); +} + +/** 查询库位精简列表 */ +export function getWarehouseAreaSimpleList(locationId?: number) { + return requestClient.get( + '/mes/wm/warehouse-area/simple-list', + { params: { locationId } }, + ); +} + +/** 查询库位详情 */ +export function getWarehouseArea(id: number) { + return requestClient.get( + `/mes/wm/warehouse-area/get?id=${id}`, + ); +} + +/** 新增库位 */ +export function createWarehouseArea(data: MesWmWarehouseAreaApi.WarehouseArea) { + return requestClient.post('/mes/wm/warehouse-area/create', data); +} + +/** 修改库位 */ +export function updateWarehouseArea(data: MesWmWarehouseAreaApi.WarehouseArea) { + return requestClient.put('/mes/wm/warehouse-area/update', data); +} + +/** 删除库位 */ +export function deleteWarehouseArea(id: number) { + return requestClient.delete(`/mes/wm/warehouse-area/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/warehouse/index.ts b/apps/web-antdv-next/src/api/mes/wm/warehouse/index.ts new file mode 100644 index 000000000..661b62ee4 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/warehouse/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmWarehouseApi { + /** MES 仓库 */ + export interface Warehouse { + id?: number; // 仓库编号 + code?: string; // 仓库编码 + name?: string; // 仓库名称 + address?: string; // 地址 + area?: number; // 面积 + chargeUserId?: number; // 负责人 + frozen?: boolean; // 是否冻结 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询仓库分页 */ +export function getWarehousePage(params: PageParam) { + return requestClient.get>( + '/mes/wm/warehouse/page', + { params }, + ); +} + +/** 查询仓库精简列表 */ +export function getWarehouseSimpleList() { + return requestClient.get( + '/mes/wm/warehouse/simple-list', + ); +} + +/** 查询仓库详情 */ +export function getWarehouse(id: number) { + return requestClient.get( + `/mes/wm/warehouse/get?id=${id}`, + ); +} + +/** 新增仓库 */ +export function createWarehouse(data: MesWmWarehouseApi.Warehouse) { + return requestClient.post('/mes/wm/warehouse/create', data); +} + +/** 修改仓库 */ +export function updateWarehouse(data: MesWmWarehouseApi.Warehouse) { + return requestClient.put('/mes/wm/warehouse/update', data); +} + +/** 删除仓库 */ +export function deleteWarehouse(id: number) { + return requestClient.delete(`/mes/wm/warehouse/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/mes/wm/warehouse/location/index.ts b/apps/web-antdv-next/src/api/mes/wm/warehouse/location/index.ts new file mode 100644 index 000000000..4211f73c8 --- /dev/null +++ b/apps/web-antdv-next/src/api/mes/wm/warehouse/location/index.ts @@ -0,0 +1,72 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace MesWmWarehouseLocationApi { + /** MES 库区 */ + export interface WarehouseLocation { + id?: number; // 库区编号 + code?: string; // 库区编码 + name?: string; // 库区名称 + warehouseId?: number; // 仓库编号 + warehouseName?: string; // 仓库名称 + area?: number; // 面积 + frozen?: boolean; // 是否冻结 + remark?: string; // 备注 + createTime?: Date; // 创建时间 + } +} + +/** 查询库区分页 */ +export function getWarehouseLocationPage(params: PageParam) { + return requestClient.get< + PageResult + >('/mes/wm/warehouse-location/page', { params }); +} + +/** 查询库区精简列表 */ +export function getWarehouseLocationSimpleList(warehouseId?: number) { + return requestClient.get( + '/mes/wm/warehouse-location/simple-list', + { params: { warehouseId } }, + ); +} + +/** 查询库区详情 */ +export function getWarehouseLocation(id: number) { + return requestClient.get( + `/mes/wm/warehouse-location/get?id=${id}`, + ); +} + +/** 新增库区 */ +export function createWarehouseLocation( + data: MesWmWarehouseLocationApi.WarehouseLocation, +) { + return requestClient.post('/mes/wm/warehouse-location/create', data); +} + +/** 修改库区 */ +export function updateWarehouseLocation( + data: MesWmWarehouseLocationApi.WarehouseLocation, +) { + return requestClient.put('/mes/wm/warehouse-location/update', data); +} + +/** 删除库区 */ +export function deleteWarehouseLocation(id: number) { + return requestClient.delete(`/mes/wm/warehouse-location/delete?id=${id}`); +} + +/** 批量设置库区下所有库位的混放规则 */ +export function updateAreaByLocationId( + locationId: number, + allowItemMixing?: boolean, + allowBatchMixing?: boolean, +) { + return requestClient.put( + '/mes/wm/warehouse-location/update-by-location-id', + null, + { params: { allowBatchMixing, allowItemMixing, locationId } }, + ); +} diff --git a/apps/web-antdv-next/src/api/system/mail/template/index.ts b/apps/web-antdv-next/src/api/system/mail/template/index.ts index 57f722cf5..fffd5d62b 100644 --- a/apps/web-antdv-next/src/api/system/mail/template/index.ts +++ b/apps/web-antdv-next/src/api/system/mail/template/index.ts @@ -17,6 +17,13 @@ export namespace SystemMailTemplateApi { createTime: Date; } + /** 邮件模版精简信息 */ + export interface MailTemplateSimple { + id: number; + name: string; + code: string; + } + /** 邮件发送信息 */ export interface MailSendReqVO { toMails: string[]; @@ -35,6 +42,13 @@ export function getMailTemplatePage(params: PageParam) { ); } +/** 查询邮件模版精简列表 */ +export function getSimpleMailTemplateList() { + return requestClient.get( + '/system/mail-template/simple-list', + ); +} + /** 查询邮件模版详情 */ export function getMailTemplate(id: number) { return requestClient.get( diff --git a/apps/web-antdv-next/src/api/system/notify/template/index.ts b/apps/web-antdv-next/src/api/system/notify/template/index.ts index dd19f4b8f..92c7d7bcc 100644 --- a/apps/web-antdv-next/src/api/system/notify/template/index.ts +++ b/apps/web-antdv-next/src/api/system/notify/template/index.ts @@ -16,6 +16,13 @@ export namespace SystemNotifyTemplateApi { remark: string; } + /** 站内信模板精简信息 */ + export interface NotifyTemplateSimple { + id: number; + name: string; + code: string; + } + /** 发送站内信请求 */ export interface NotifySendReqVO { userId: number; @@ -33,6 +40,13 @@ export function getNotifyTemplatePage(params: PageParam) { ); } +/** 查询站内信模板精简列表 */ +export function getSimpleNotifyTemplateList() { + return requestClient.get( + '/system/notify-template/simple-list', + ); +} + /** 查询站内信模板详情 */ export function getNotifyTemplate(id: number) { return requestClient.get( diff --git a/apps/web-antdv-next/src/api/system/sms/template/index.ts b/apps/web-antdv-next/src/api/system/sms/template/index.ts index eccfb911e..5cfc5ca9b 100644 --- a/apps/web-antdv-next/src/api/system/sms/template/index.ts +++ b/apps/web-antdv-next/src/api/system/sms/template/index.ts @@ -19,6 +19,13 @@ export namespace SystemSmsTemplateApi { createTime?: Date; } + /** 短信模板精简信息 */ + export interface SmsTemplateSimple { + id: number; + name: string; + code: string; + } + /** 发送短信请求 */ export interface SmsSendReqVO { mobile: string; @@ -35,6 +42,13 @@ export function getSmsTemplatePage(params: PageParam) { ); } +/** 查询短信模板精简列表 */ +export function getSimpleSmsTemplateList() { + return requestClient.get( + '/system/sms-template/simple-list', + ); +} + /** 查询短信模板详情 */ export function getSmsTemplate(id: number) { return requestClient.get( diff --git a/apps/web-antdv-next/src/api/wms/home/index.ts b/apps/web-antdv-next/src/api/wms/home/index.ts new file mode 100644 index 000000000..ae9577201 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/home/index.ts @@ -0,0 +1,66 @@ +import { requestClient } from '#/api/request'; + +export namespace WmsHomeStatisticsApi { + export interface StatisticsReq { + goodsLimit?: number; + warehouseId?: number; + warehouseLimit?: number; + } + + export interface OrderStatus { + count: number; + status: number; + } + + export interface OrderSummary { + statuses: OrderStatus[]; + total: number; + type: number; + } + + export interface OrderTrend { + checkCount: number; + movementCount: number; + receiptCount: number; + shipmentCount: number; + time: number | string; + } + + export interface InventoryRankItem { + id: number; + name: string; + quantity: number; + } + + export interface InventorySummary { + goodsShareList: InventoryRankItem[]; + totalQuantity: number; + warehouseDistributionList: InventoryRankItem[]; + } +} + +export function getOrderSummary(params?: WmsHomeStatisticsApi.StatisticsReq) { + return requestClient.get( + '/wms/home-statistics/order-summary', + { params }, + ); +} + +export function getOrderTrend( + days?: number, + params?: WmsHomeStatisticsApi.StatisticsReq, +) { + return requestClient.get( + '/wms/home-statistics/order-trend', + { params: { ...params, days } }, + ); +} + +export function getInventorySummary( + params?: WmsHomeStatisticsApi.StatisticsReq, +) { + return requestClient.get( + '/wms/home-statistics/inventory-summary', + { params }, + ); +} diff --git a/apps/web-antdv-next/src/api/wms/inventory/history/index.ts b/apps/web-antdv-next/src/api/wms/inventory/history/index.ts new file mode 100644 index 000000000..02f6bccd1 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/inventory/history/index.ts @@ -0,0 +1,37 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsInventoryHistoryApi { + /** WMS 库存记录 */ + export interface InventoryHistory { + id?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + unit?: string; + skuId?: number; + skuCode?: string; + skuName?: string; + warehouseId?: number; + warehouseName?: string; + quantity?: number; + beforeQuantity?: number; + afterQuantity?: number; + price?: number; + totalPrice?: number; + remark?: string; + orderId?: number; + orderNo?: string; + orderType?: number; + createTime?: Date; + } +} + +/** 查询库存记录分页 */ +export function getInventoryHistoryPage(params: PageParam) { + return requestClient.get>( + '/wms/inventory-history/page', + { params }, + ); +} diff --git a/apps/web-antdv-next/src/api/wms/inventory/index.ts b/apps/web-antdv-next/src/api/wms/inventory/index.ts new file mode 100644 index 000000000..90ca4a11d --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/inventory/index.ts @@ -0,0 +1,42 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsInventoryApi { + /** WMS 库存统计 */ + export interface Inventory { + id?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + unit?: string; + skuId?: number; + skuCode?: string; + skuName?: string; + warehouseId?: number; + warehouseName?: string; + quantity?: number; + remark?: string; + createTime?: Date; + } + + /** WMS 库存统计列表请求 */ + export interface InventoryListReq { + warehouseId: number; + } +} + +/** 查询库存统计分页 */ +export function getInventoryPage(params: PageParam) { + return requestClient.get>( + '/wms/inventory/page', + { params }, + ); +} + +/** 查询库存统计列表 */ +export function getInventoryList(params: WmsInventoryApi.InventoryListReq) { + return requestClient.get('/wms/inventory/list', { + params, + }); +} diff --git a/apps/web-antdv-next/src/api/wms/md/item/brand/index.ts b/apps/web-antdv-next/src/api/wms/md/item/brand/index.ts new file mode 100644 index 000000000..a251b05ca --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/md/item/brand/index.ts @@ -0,0 +1,55 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsItemBrandApi { + /** WMS 商品品牌 */ + export interface ItemBrand { + id?: number; + code?: string; + name?: string; + createTime?: Date; + } +} + +/** 查询商品品牌分页 */ +export function getItemBrandPage(params: PageParam) { + return requestClient.get>( + '/wms/item-brand/page', + { params }, + ); +} + +/** 查询商品品牌精简列表 */ +export function getItemBrandSimpleList() { + return requestClient.get( + '/wms/item-brand/simple-list', + ); +} + +/** 查询商品品牌详情 */ +export function getItemBrand(id: number) { + return requestClient.get( + `/wms/item-brand/get?id=${id}`, + ); +} + +/** 新增商品品牌 */ +export function createItemBrand(data: WmsItemBrandApi.ItemBrand) { + return requestClient.post('/wms/item-brand/create', data); +} + +/** 修改商品品牌 */ +export function updateItemBrand(data: WmsItemBrandApi.ItemBrand) { + return requestClient.put('/wms/item-brand/update', data); +} + +/** 删除商品品牌 */ +export function deleteItemBrand(id: number) { + return requestClient.delete(`/wms/item-brand/delete?id=${id}`); +} + +/** 导出商品品牌 */ +export function exportItemBrand(params: any) { + return requestClient.download('/wms/item-brand/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/md/item/category/index.ts b/apps/web-antdv-next/src/api/wms/md/item/category/index.ts new file mode 100644 index 000000000..be356f01e --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/md/item/category/index.ts @@ -0,0 +1,52 @@ +import { requestClient } from '#/api/request'; + +export namespace WmsItemCategoryApi { + /** WMS 商品分类 */ + export interface ItemCategory { + id?: number; + parentId?: number; + code?: string; + name?: string; + sort?: number; + status?: number; + createTime?: Date; + children?: ItemCategory[]; + } +} + +/** 查询商品分类列表 */ +export function getItemCategoryList(params?: any) { + return requestClient.get( + '/wms/item-category/list', + { params }, + ); +} + +/** 查询商品分类精简列表 */ +export function getItemCategorySimpleList() { + return requestClient.get( + '/wms/item-category/simple-list', + ); +} + +/** 查询商品分类详情 */ +export function getItemCategory(id: number) { + return requestClient.get( + `/wms/item-category/get?id=${id}`, + ); +} + +/** 新增商品分类 */ +export function createItemCategory(data: WmsItemCategoryApi.ItemCategory) { + return requestClient.post('/wms/item-category/create', data); +} + +/** 修改商品分类 */ +export function updateItemCategory(data: WmsItemCategoryApi.ItemCategory) { + return requestClient.put('/wms/item-category/update', data); +} + +/** 删除商品分类 */ +export function deleteItemCategory(id: number) { + return requestClient.delete(`/wms/item-category/delete?id=${id}`); +} diff --git a/apps/web-antdv-next/src/api/wms/md/item/index.ts b/apps/web-antdv-next/src/api/wms/md/item/index.ts new file mode 100644 index 000000000..fda44706c --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/md/item/index.ts @@ -0,0 +1,61 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import type { WmsItemSkuApi } from './sku'; + +import { requestClient } from '#/api/request'; + +export namespace WmsItemApi { + /** WMS 商品 */ + export interface Item { + id?: number; + code?: string; + name?: string; + categoryId?: number; + categoryName?: string; + unit?: string; + brandId?: number; + brandName?: string; + remark?: string; + skus?: WmsItemSkuApi.ItemSku[]; + createTime?: Date; + } +} + +/** 查询商品分页 */ +export function getItemPage(params: PageParam) { + return requestClient.get>('/wms/item/page', { + params, + }); +} + +/** 查询商品精简列表 */ +export function getItemSimpleList(params?: any) { + return requestClient.get('/wms/item/simple-list', { + params, + }); +} + +/** 查询商品详情 */ +export function getItem(id: number) { + return requestClient.get(`/wms/item/get?id=${id}`); +} + +/** 新增商品 */ +export function createItem(data: WmsItemApi.Item) { + return requestClient.post('/wms/item/create', data); +} + +/** 修改商品 */ +export function updateItem(data: WmsItemApi.Item) { + return requestClient.put('/wms/item/update', data); +} + +/** 删除商品 */ +export function deleteItem(id: number) { + return requestClient.delete(`/wms/item/delete?id=${id}`); +} + +/** 导出商品 */ +export function exportItem(params: any) { + return requestClient.download('/wms/item/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/md/item/sku/index.ts b/apps/web-antdv-next/src/api/wms/md/item/sku/index.ts new file mode 100644 index 000000000..2296becf1 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/md/item/sku/index.ts @@ -0,0 +1,37 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsItemSkuApi { + /** WMS 商品 SKU */ + export interface ItemSku { + id?: number; + name?: string; + itemId?: number; + itemCode?: string; + itemName?: string; + categoryId?: number; + categoryName?: string; + unit?: string; + brandId?: number; + brandName?: string; + barCode?: string; + code?: string; + length?: number; + width?: number; + height?: number; + grossWeight?: number; + netWeight?: number; + costPrice?: number; + sellingPrice?: number; + createTime?: Date; + } +} + +/** 按 SKU 维度分页(支持商品 / 品牌 / 分类多表联查筛选) */ +export function getItemSkuPage(params: PageParam) { + return requestClient.get>( + '/wms/item-sku/page', + { params }, + ); +} diff --git a/apps/web-antdv-next/src/api/wms/md/merchant/index.ts b/apps/web-antdv-next/src/api/wms/md/merchant/index.ts new file mode 100644 index 000000000..93539f098 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/md/merchant/index.ts @@ -0,0 +1,73 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsMerchantApi { + /** WMS 往来企业 */ + export interface Merchant { + id?: number; + code?: string; + name?: string; + type?: number; + level?: string; + bankName?: string; + bankAccount?: string; + address?: string; + mobile?: string; + telephone?: string; + contact?: string; + email?: string; + remark?: string; + createTime?: Date; + } + + /** WMS 往来企业精简列表请求 */ + export interface MerchantSimpleListReq { + types?: number[]; + } +} + +/** 查询往来企业分页 */ +export function getMerchantPage(params: PageParam) { + return requestClient.get>( + '/wms/merchant/page', + { params }, + ); +} + +/** 查询往来企业精简列表 */ +export function getMerchantSimpleList( + params?: WmsMerchantApi.MerchantSimpleListReq, +) { + return requestClient.get( + '/wms/merchant/simple-list', + { params }, + ); +} + +/** 查询往来企业详情 */ +export function getMerchant(id: number) { + return requestClient.get( + `/wms/merchant/get?id=${id}`, + ); +} + +/** 新增往来企业 */ +export function createMerchant(data: WmsMerchantApi.Merchant) { + return requestClient.post('/wms/merchant/create', data); +} + +/** 修改往来企业 */ +export function updateMerchant(data: WmsMerchantApi.Merchant) { + return requestClient.put('/wms/merchant/update', data); +} + +/** 删除往来企业 */ +export function deleteMerchant(id: number) { + return requestClient.delete(`/wms/merchant/delete?id=${id}`); +} + +/** 导出往来企业 */ +export function exportMerchant(params: any) { + return requestClient.download('/wms/merchant/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/md/warehouse/index.ts b/apps/web-antdv-next/src/api/wms/md/warehouse/index.ts new file mode 100644 index 000000000..2b99f3776 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/md/warehouse/index.ts @@ -0,0 +1,57 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import { requestClient } from '#/api/request'; + +export namespace WmsWarehouseApi { + /** WMS 仓库 */ + export interface Warehouse { + id?: number; + code?: string; + name?: string; + remark?: string; + sort?: number; + createTime?: Date; + } +} + +/** 查询仓库分页 */ +export function getWarehousePage(params: PageParam) { + return requestClient.get>( + '/wms/warehouse/page', + { params }, + ); +} + +/** 查询仓库精简列表 */ +export function getWarehouseSimpleList() { + return requestClient.get( + '/wms/warehouse/simple-list', + ); +} + +/** 查询仓库详情 */ +export function getWarehouse(id: number) { + return requestClient.get( + `/wms/warehouse/get?id=${id}`, + ); +} + +/** 新增仓库 */ +export function createWarehouse(data: WmsWarehouseApi.Warehouse) { + return requestClient.post('/wms/warehouse/create', data); +} + +/** 修改仓库 */ +export function updateWarehouse(data: WmsWarehouseApi.Warehouse) { + return requestClient.put('/wms/warehouse/update', data); +} + +/** 删除仓库 */ +export function deleteWarehouse(id: number) { + return requestClient.delete(`/wms/warehouse/delete?id=${id}`); +} + +/** 导出仓库 */ +export function exportWarehouse(params: any) { + return requestClient.download('/wms/warehouse/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/order/check/detail/index.ts b/apps/web-antdv-next/src/api/wms/order/check/detail/index.ts new file mode 100644 index 000000000..ae34b2154 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/check/detail/index.ts @@ -0,0 +1,23 @@ +export namespace WmsCheckOrderDetailApi { + /** WMS 盘库单明细 */ + export interface CheckOrderDetail { + id?: number; + orderId?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + unit?: string; + skuId?: number; + skuCode?: string; + skuName?: string; + inventoryId?: number; + warehouseId?: number; + warehouseName?: string; + receiptTime?: Date; + quantity?: number; + checkQuantity?: number; + availableQuantity?: number; + price?: number; + createTime?: Date; + } +} diff --git a/apps/web-antdv-next/src/api/wms/order/check/index.ts b/apps/web-antdv-next/src/api/wms/order/check/index.ts new file mode 100644 index 000000000..910c997d3 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/check/index.ts @@ -0,0 +1,71 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import type { WmsCheckOrderDetailApi } from './detail'; + +import { requestClient } from '#/api/request'; + +export namespace WmsCheckOrderApi { + /** WMS 盘库单 */ + export interface CheckOrder { + id?: number; + no?: string; + orderTime?: string; + status?: number; + remark?: string; + warehouseId?: number; + warehouseName?: string; + totalQuantity?: number; + totalPrice?: number; + actualPrice?: number; + details?: WmsCheckOrderDetailApi.CheckOrderDetail[]; + createTime?: Date; + creator?: string; + creatorName?: string; + updateTime?: Date; + updater?: string; + updaterName?: string; + } +} + +export function getCheckOrderPage(params: PageParam) { + return requestClient.get>( + '/wms/check-order/page', + { params }, + ); +} + +export function getCheckOrder(id: number) { + return requestClient.get( + `/wms/check-order/get?id=${id}`, + ); +} + +export function getCheckOrderDetailListByOrderId(orderId: number) { + return requestClient.get( + `/wms/check-order-detail/list-by-order-id?orderId=${orderId}`, + ); +} + +export function createCheckOrder(data: WmsCheckOrderApi.CheckOrder) { + return requestClient.post('/wms/check-order/create', data); +} + +export function updateCheckOrder(data: WmsCheckOrderApi.CheckOrder) { + return requestClient.put('/wms/check-order/update', data); +} + +export function completeCheckOrder(id: number) { + return requestClient.put(`/wms/check-order/complete?id=${id}`); +} + +export function cancelCheckOrder(id: number) { + return requestClient.put(`/wms/check-order/cancel?id=${id}`); +} + +export function deleteCheckOrder(id: number) { + return requestClient.delete(`/wms/check-order/delete?id=${id}`); +} + +export function exportCheckOrder(params: any) { + return requestClient.download('/wms/check-order/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/order/movement/detail/index.ts b/apps/web-antdv-next/src/api/wms/order/movement/detail/index.ts new file mode 100644 index 000000000..25a3aec6a --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/movement/detail/index.ts @@ -0,0 +1,23 @@ +export namespace WmsMovementOrderDetailApi { + /** WMS 移库单明细 */ + export interface MovementOrderDetail { + id?: number; + orderId?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + unit?: string; + skuId?: number; + skuCode?: string; + skuName?: string; + sourceWarehouseId?: number; + sourceWarehouseName?: string; + targetWarehouseId?: number; + targetWarehouseName?: string; + quantity?: number; + availableQuantity?: number; + price?: number; + totalPrice?: number; + createTime?: Date; + } +} diff --git a/apps/web-antdv-next/src/api/wms/order/movement/index.ts b/apps/web-antdv-next/src/api/wms/order/movement/index.ts new file mode 100644 index 000000000..f6b9e3197 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/movement/index.ts @@ -0,0 +1,72 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import type { WmsMovementOrderDetailApi } from './detail'; + +import { requestClient } from '#/api/request'; + +export namespace WmsMovementOrderApi { + /** WMS 移库单 */ + export interface MovementOrder { + id?: number; + no?: string; + orderTime?: string; + status?: number; + remark?: string; + sourceWarehouseId?: number; + sourceWarehouseName?: string; + targetWarehouseId?: number; + targetWarehouseName?: string; + totalQuantity?: number; + totalPrice?: number; + details?: WmsMovementOrderDetailApi.MovementOrderDetail[]; + createTime?: Date; + creator?: string; + creatorName?: string; + updateTime?: Date; + updater?: string; + updaterName?: string; + } +} + +export function getMovementOrderPage(params: PageParam) { + return requestClient.get>( + '/wms/movement-order/page', + { params }, + ); +} + +export function getMovementOrder(id: number) { + return requestClient.get( + `/wms/movement-order/get?id=${id}`, + ); +} + +export function getMovementOrderDetailListByOrderId(orderId: number) { + return requestClient.get( + `/wms/movement-order-detail/list-by-order-id?orderId=${orderId}`, + ); +} + +export function createMovementOrder(data: WmsMovementOrderApi.MovementOrder) { + return requestClient.post('/wms/movement-order/create', data); +} + +export function updateMovementOrder(data: WmsMovementOrderApi.MovementOrder) { + return requestClient.put('/wms/movement-order/update', data); +} + +export function completeMovementOrder(id: number) { + return requestClient.put(`/wms/movement-order/complete?id=${id}`); +} + +export function cancelMovementOrder(id: number) { + return requestClient.put(`/wms/movement-order/cancel?id=${id}`); +} + +export function deleteMovementOrder(id: number) { + return requestClient.delete(`/wms/movement-order/delete?id=${id}`); +} + +export function exportMovementOrder(params: any) { + return requestClient.download('/wms/movement-order/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/order/receipt/detail/index.ts b/apps/web-antdv-next/src/api/wms/order/receipt/detail/index.ts new file mode 100644 index 000000000..0695c224d --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/receipt/detail/index.ts @@ -0,0 +1,20 @@ +export namespace WmsReceiptOrderDetailApi { + /** WMS 入库单明细 */ + export interface ReceiptOrderDetail { + id?: number; + orderId?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + unit?: string; + skuId?: number; + skuCode?: string; + skuName?: string; + warehouseId?: number; + warehouseName?: string; + quantity?: number; + price?: number; + totalPrice?: number; + createTime?: Date; + } +} diff --git a/apps/web-antdv-next/src/api/wms/order/receipt/index.ts b/apps/web-antdv-next/src/api/wms/order/receipt/index.ts new file mode 100644 index 000000000..9c5a08a5e --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/receipt/index.ts @@ -0,0 +1,74 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import type { WmsReceiptOrderDetailApi } from './detail'; + +import { requestClient } from '#/api/request'; + +export namespace WmsReceiptOrderApi { + /** WMS 入库单 */ + export interface ReceiptOrder { + id?: number; + no?: string; + type?: number; + orderTime?: string; + status?: number; + bizOrderNo?: string; + merchantId?: number; + merchantName?: string; + remark?: string; + warehouseId?: number; + warehouseName?: string; + totalQuantity?: number; + totalPrice?: number; + details?: WmsReceiptOrderDetailApi.ReceiptOrderDetail[]; + createTime?: Date; + creator?: string; + creatorName?: string; + updateTime?: Date; + updater?: string; + updaterName?: string; + } +} + +export function getReceiptOrderPage(params: PageParam) { + return requestClient.get>( + '/wms/receipt-order/page', + { params }, + ); +} + +export function getReceiptOrder(id: number) { + return requestClient.get( + `/wms/receipt-order/get?id=${id}`, + ); +} + +export function getReceiptOrderDetailListByOrderId(orderId: number) { + return requestClient.get( + `/wms/receipt-order-detail/list-by-order-id?orderId=${orderId}`, + ); +} + +export function createReceiptOrder(data: WmsReceiptOrderApi.ReceiptOrder) { + return requestClient.post('/wms/receipt-order/create', data); +} + +export function updateReceiptOrder(data: WmsReceiptOrderApi.ReceiptOrder) { + return requestClient.put('/wms/receipt-order/update', data); +} + +export function completeReceiptOrder(id: number) { + return requestClient.put(`/wms/receipt-order/complete?id=${id}`); +} + +export function cancelReceiptOrder(id: number) { + return requestClient.put(`/wms/receipt-order/cancel?id=${id}`); +} + +export function deleteReceiptOrder(id: number) { + return requestClient.delete(`/wms/receipt-order/delete?id=${id}`); +} + +export function exportReceiptOrder(params: any) { + return requestClient.download('/wms/receipt-order/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/api/wms/order/shipment/detail/index.ts b/apps/web-antdv-next/src/api/wms/order/shipment/detail/index.ts new file mode 100644 index 000000000..17e796e18 --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/shipment/detail/index.ts @@ -0,0 +1,21 @@ +export namespace WmsShipmentOrderDetailApi { + /** WMS 出库单明细 */ + export interface ShipmentOrderDetail { + id?: number; + orderId?: number; + itemId?: number; + itemCode?: string; + itemName?: string; + unit?: string; + skuId?: number; + skuCode?: string; + skuName?: string; + warehouseId?: number; + warehouseName?: string; + quantity?: number; + availableQuantity?: number; + price?: number; + totalPrice?: number; + createTime?: Date; + } +} diff --git a/apps/web-antdv-next/src/api/wms/order/shipment/index.ts b/apps/web-antdv-next/src/api/wms/order/shipment/index.ts new file mode 100644 index 000000000..b52dcdaca --- /dev/null +++ b/apps/web-antdv-next/src/api/wms/order/shipment/index.ts @@ -0,0 +1,74 @@ +import type { PageParam, PageResult } from '@vben/request'; + +import type { WmsShipmentOrderDetailApi } from './detail'; + +import { requestClient } from '#/api/request'; + +export namespace WmsShipmentOrderApi { + /** WMS 出库单 */ + export interface ShipmentOrder { + id?: number; + no?: string; + type?: number; + orderTime?: string; + status?: number; + bizOrderNo?: string; + merchantId?: number; + merchantName?: string; + remark?: string; + warehouseId?: number; + warehouseName?: string; + totalQuantity?: number; + totalPrice?: number; + details?: WmsShipmentOrderDetailApi.ShipmentOrderDetail[]; + createTime?: Date; + creator?: string; + creatorName?: string; + updateTime?: Date; + updater?: string; + updaterName?: string; + } +} + +export function getShipmentOrderPage(params: PageParam) { + return requestClient.get>( + '/wms/shipment-order/page', + { params }, + ); +} + +export function getShipmentOrder(id: number) { + return requestClient.get( + `/wms/shipment-order/get?id=${id}`, + ); +} + +export function getShipmentOrderDetailListByOrderId(orderId: number) { + return requestClient.get( + `/wms/shipment-order-detail/list-by-order-id?orderId=${orderId}`, + ); +} + +export function createShipmentOrder(data: WmsShipmentOrderApi.ShipmentOrder) { + return requestClient.post('/wms/shipment-order/create', data); +} + +export function updateShipmentOrder(data: WmsShipmentOrderApi.ShipmentOrder) { + return requestClient.put('/wms/shipment-order/update', data); +} + +export function completeShipmentOrder(id: number) { + return requestClient.put(`/wms/shipment-order/complete?id=${id}`); +} + +export function cancelShipmentOrder(id: number) { + return requestClient.put(`/wms/shipment-order/cancel?id=${id}`); +} + +export function deleteShipmentOrder(id: number) { + return requestClient.delete(`/wms/shipment-order/delete?id=${id}`); +} + +export function exportShipmentOrder(params: any) { + return requestClient.download('/wms/shipment-order/export-excel', { params }); +} diff --git a/apps/web-antdv-next/src/assets/imgs/iot/device.png b/apps/web-antdv-next/src/assets/imgs/iot/device.png new file mode 100644 index 000000000..79339cdf4 Binary files /dev/null and b/apps/web-antdv-next/src/assets/imgs/iot/device.png differ diff --git a/apps/web-antdv-next/src/assets/svgs/iot/cube.svg b/apps/web-antdv-next/src/assets/svgs/iot/cube.svg new file mode 100644 index 000000000..200ac1b1c --- /dev/null +++ b/apps/web-antdv-next/src/assets/svgs/iot/cube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web-antdv-next/src/components/form-create/rules/use-area-select-rule.ts b/apps/web-antdv-next/src/components/form-create/rules/use-area-select-rule.ts index b118a1799..75c13a540 100644 --- a/apps/web-antdv-next/src/components/form-create/rules/use-area-select-rule.ts +++ b/apps/web-antdv-next/src/components/form-create/rules/use-area-select-rule.ts @@ -21,7 +21,7 @@ export function useAreaSelectRule() { title: label, info: '', $required: false, - modelField: 'value', // 特殊:ele 里是 model-value,antd 里是 value + modelField: 'value', // Ant Design Vue 组件使用 value;web-ele 自定义组件使用默认 modelValue }; }, props(_: any, { t }: any) { diff --git a/apps/web-antdv-next/src/components/form-create/rules/use-dict-select.ts b/apps/web-antdv-next/src/components/form-create/rules/use-dict-select.ts index 08171a24b..3b77092b7 100644 --- a/apps/web-antdv-next/src/components/form-create/rules/use-dict-select.ts +++ b/apps/web-antdv-next/src/components/form-create/rules/use-dict-select.ts @@ -39,7 +39,7 @@ export function useDictSelectRule() { title: label, info: '', $required: false, - modelField: 'value', // 特殊:ele 里是 model-value,antd 里是 value + modelField: 'value', // Ant Design Vue 组件使用 value;web-ele 自定义组件使用默认 modelValue }; }, props(_: any, { t }: any) { diff --git a/apps/web-antdv-next/src/components/form-create/rules/use-iframe-rule.ts b/apps/web-antdv-next/src/components/form-create/rules/use-iframe-rule.ts index 39d26d766..cb70c0720 100644 --- a/apps/web-antdv-next/src/components/form-create/rules/use-iframe-rule.ts +++ b/apps/web-antdv-next/src/components/form-create/rules/use-iframe-rule.ts @@ -21,7 +21,7 @@ export function useIframeRule() { title: label, info: '', $required: false, - modelField: 'value', // 特殊:ele 里是 model-value,antd 里是 value + modelField: 'value', // Ant Design Vue 组件使用 value;web-ele 自定义组件使用默认 modelValue }; }, props(_: any, { t }: any) { diff --git a/apps/web-antdv-next/src/components/number-range-input/index.ts b/apps/web-antdv-next/src/components/number-range-input/index.ts new file mode 100644 index 000000000..f1647e75d --- /dev/null +++ b/apps/web-antdv-next/src/components/number-range-input/index.ts @@ -0,0 +1,39 @@ +import type { VbenFormSchema } from '#/adapter/form'; + +import { markRaw } from 'vue'; + +import NumberRangeInput from './number-range-input.vue'; + +export { default as NumberRangeInput } from './number-range-input.vue'; + +export type NumberRangeValue = [number | undefined, number | undefined]; + +function splitNumberRange(minFieldName: string, maxFieldName: string) { + return ( + value: NumberRangeValue | undefined, + setValue: (fieldName: string, value: number | undefined) => void, + ) => { + setValue(minFieldName, value?.[0]); + setValue(maxFieldName, value?.[1]); + return undefined; + }; +} + +export function buildNumberRangeSchema( + label: string, + fieldName: string, + minFieldName: string, + maxFieldName: string, + precision: number, +): VbenFormSchema { + return { + component: markRaw(NumberRangeInput), + componentProps: { + min: 0, + precision, + }, + fieldName, + label, + valueFormat: splitNumberRange(minFieldName, maxFieldName), + }; +} diff --git a/apps/web-antdv-next/src/components/number-range-input/number-range-input.vue b/apps/web-antdv-next/src/components/number-range-input/number-range-input.vue new file mode 100644 index 000000000..31c6255ec --- /dev/null +++ b/apps/web-antdv-next/src/components/number-range-input/number-range-input.vue @@ -0,0 +1,73 @@ + + + diff --git a/apps/web-antdv-next/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue b/apps/web-antdv-next/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue index da1ef99e4..df70a42fb 100644 --- a/apps/web-antdv-next/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue +++ b/apps/web-antdv-next/src/components/shortcut-date-range-picker/shortcut-date-range-picker.vue @@ -3,7 +3,8 @@ import type { Dayjs } from 'dayjs'; import { onMounted, ref } from 'vue'; -import { Radio, RadioGroup } from 'antdv-next'; +import { DatePicker, Radio, RadioGroup } from 'antdv-next'; +import dayjs from 'dayjs'; import { getRangePickerDefaultProps } from '#/utils/rangePickerProps'; @@ -19,8 +20,20 @@ const times = ref<[Dayjs, Dayjs]>(); // 日期范围 const rangePickerProps = getRangePickerDefaultProps(); const timeRangeOptions = [ rangePickerProps.presets[3]!, // 昨天 - rangePickerProps.presets[1]!, // 最近 7 天 - rangePickerProps.presets[2]!, // 最近 30 天 + { + label: rangePickerProps.presets[1]!.label, + value: [ + dayjs().subtract(7, 'day').startOf('day'), + dayjs().subtract(1, 'day').endOf('day'), + ], + }, + { + label: rangePickerProps.presets[2]!.label, + value: [ + dayjs().subtract(30, 'day').startOf('day'), + dayjs().subtract(1, 'day').endOf('day'), + ], + }, ]; const timeRangeType = ref(timeRangeOptions[1]!.label); // 默认选中第一个选项 @@ -75,7 +88,7 @@ onMounted(() => { {{ option.label }} - import type { UploadFile, UploadProps } from 'antdv-next'; +import type { UploadRequestOption } from 'antdv-next/lib/vc-upload/interface'; import type { FileUploadProps } from './typing'; @@ -16,8 +17,6 @@ import { Button, message, Upload } from 'antdv-next'; import { UploadResultStatus } from './typing'; import { useUpload, useUploadType } from './use-upload'; -type UploadRequestOption = any; - defineOptions({ name: 'FileUpload', inheritAttrs: false }); const props = withDefaults(defineProps(), { @@ -33,6 +32,7 @@ const props = withDefaults(defineProps(), { multiple: false, api: undefined, resultField: '', + returnText: false, showDescription: false, }); const emit = defineEmits([ @@ -148,9 +148,6 @@ function handleUploadError(error: any) { * @returns 是否允许上传 */ async function beforeUpload(file: File) { - const fileContent = await file.text(); - emit('returnText', fileContent); - // 检查文件数量限制 if (fileList.value!.length >= props.maxNumber) { message.error($t('ui.upload.maxNumber', [props.maxNumber])); @@ -177,6 +174,10 @@ async function beforeUpload(file: File) { // 只有在验证通过后才增加计数器 uploadNumber.value++; + if (props.returnText) { + const fileContent = await file.text(); + emit('returnText', fileContent); + } return true; } diff --git a/apps/web-antdv-next/src/components/upload/input-upload.vue b/apps/web-antdv-next/src/components/upload/input-upload.vue index 7fd43320f..0ab67425b 100644 --- a/apps/web-antdv-next/src/components/upload/input-upload.vue +++ b/apps/web-antdv-next/src/components/upload/input-upload.vue @@ -58,6 +58,7 @@ const textareaProps = computed(() => { const fileUploadProps = computed(() => { return { ...props.fileUploadProps, + returnText: true, }; }); diff --git a/apps/web-antdv-next/src/components/upload/typing.ts b/apps/web-antdv-next/src/components/upload/typing.ts index f3c16bc4d..990aa7d8a 100644 --- a/apps/web-antdv-next/src/components/upload/typing.ts +++ b/apps/web-antdv-next/src/components/upload/typing.ts @@ -27,6 +27,7 @@ export interface FileUploadProps { maxSize?: number; // 文件最大多少MB multiple?: boolean; // 是否支持多选 resultField?: string; // support xxx.xxx.xx + returnText?: boolean; // 是否返回文件文本内容 showDescription?: boolean; // 是否显示下面的描述 value?: string | string[]; } diff --git a/apps/web-antdv-next/src/layouts/basic.vue b/apps/web-antdv-next/src/layouts/basic.vue index 7c87e08b1..885ba4024 100644 --- a/apps/web-antdv-next/src/layouts/basic.vue +++ b/apps/web-antdv-next/src/layouts/basic.vue @@ -202,6 +202,31 @@ onMounted(() => { ); }); +const handleClick = (item: NotificationItem) => { + // 如果通知项有链接,点击时跳转 + if (item.link) { + navigateTo(item.link, item.query, item.state); + } +}; + +function navigateTo( + link: string, + query?: Record, + state?: Record, +) { + if (link.startsWith('http://') || link.startsWith('https://')) { + // 外部链接,在新标签页打开 + window.open(link, '_blank'); + } else { + // 内部路由链接,支持 query 参数和 state + router.push({ + path: link, + query: query || {}, + state, + }); + } +} + watch( () => ({ enable: preferences.app.watermark, @@ -264,6 +289,7 @@ watch( @view-all="handleNotificationViewAll" @open="handleNotificationOpen" @read="handleNotificationRead" + @on-click="handleClick" /> - - diff --git a/apps/web-antdv-next/src/views/iot/device/device/modules/form.vue b/apps/web-antdv-next/src/views/iot/device/device/modules/form.vue index a0839970c..922b39bdd 100644 --- a/apps/web-antdv-next/src/views/iot/device/device/modules/form.vue +++ b/apps/web-antdv-next/src/views/iot/device/device/modules/form.vue @@ -1,4 +1,4 @@ - diff --git a/apps/web-antdv-next/src/views/iot/ota/data.ts b/apps/web-antdv-next/src/views/iot/ota/data.ts deleted file mode 100644 index a873d4d85..000000000 --- a/apps/web-antdv-next/src/views/iot/ota/data.ts +++ /dev/null @@ -1,173 +0,0 @@ -import type { VbenFormSchema } from '#/adapter/form'; -import type { VxeTableGridOptions } from '#/adapter/vxe-table'; - -import { getSimpleProductList } from '#/api/iot/product/product'; -import { getRangePickerDefaultProps } from '#/utils'; - -/** 新增/修改固件的表单 */ -export function useFormSchema(): VbenFormSchema[] { - return [ - { - component: 'Input', - fieldName: 'id', - dependencies: { - triggerFields: [''], - show: () => false, - }, - }, - { - fieldName: 'name', - label: '固件名称', - component: 'Input', - componentProps: { - placeholder: '请输入固件名称', - }, - rules: 'required', - }, - { - fieldName: 'productId', - label: '所属产品', - component: 'ApiSelect', - componentProps: { - api: getSimpleProductList, - labelField: 'name', - valueField: 'id', - placeholder: '请选择产品', - }, - rules: 'required', - }, - { - fieldName: 'version', - label: '版本号', - component: 'Input', - componentProps: { - placeholder: '请输入版本号', - }, - rules: 'required', - }, - { - fieldName: 'description', - label: '固件描述', - component: 'TextArea', - componentProps: { - placeholder: '请输入固件描述', - rows: 3, - }, - }, - { - fieldName: 'fileUrl', - label: '固件文件', - component: 'Upload', - componentProps: { - maxCount: 1, - accept: '.bin,.hex,.zip', - }, - rules: 'required', - help: '支持上传 .bin、.hex、.zip 格式的固件文件', - }, - ]; -} - -/** 列表的搜索表单 */ -export function useGridFormSchema(): VbenFormSchema[] { - return [ - { - fieldName: 'name', - label: '固件名称', - component: 'Input', - componentProps: { - placeholder: '请输入固件名称', - allowClear: true, - }, - }, - { - fieldName: 'productId', - label: '产品', - component: 'ApiSelect', - componentProps: { - api: getSimpleProductList, - labelField: 'name', - valueField: 'id', - placeholder: '请选择产品', - allowClear: true, - }, - }, - { - fieldName: 'createTime', - label: '创建时间', - component: 'RangePicker', - componentProps: { - ...getRangePickerDefaultProps(), - allowClear: true, - }, - }, - ]; -} - -/** 列表的字段 */ -export function useGridColumns(): VxeTableGridOptions['columns'] { - return [ - { - type: 'checkbox', - width: 50, - fixed: 'left', - }, - { - field: 'id', - title: '固件编号', - width: 100, - }, - { - field: 'name', - title: '固件名称', - minWidth: 150, - }, - { - field: 'version', - title: '版本号', - width: 120, - }, - { - field: 'productName', - title: '所属产品', - minWidth: 150, - }, - { - field: 'description', - title: '固件描述', - minWidth: 200, - showOverflow: 'tooltip', - }, - { - field: 'fileSize', - title: '文件大小', - width: 120, - formatter: ({ cellValue }) => { - if (!cellValue) return '-'; - const kb = cellValue / 1024; - if (kb < 1024) return `${kb.toFixed(2)} KB`; - return `${(kb / 1024).toFixed(2)} MB`; - }, - }, - { - field: 'status', - title: '状态', - width: 100, - formatter: ({ cellValue }) => { - return cellValue === 1 ? '启用' : '禁用'; - }, - }, - { - field: 'createTime', - title: '创建时间', - width: 180, - formatter: 'formatDateTime', - }, - { - title: '操作', - width: 160, - fixed: 'right', - slots: { default: 'actions' }, - }, - ]; -} diff --git a/apps/web-antdv-next/src/views/iot/ota/firmware/data.ts b/apps/web-antdv-next/src/views/iot/ota/firmware/data.ts index 298cd340b..8174e6b2b 100644 --- a/apps/web-antdv-next/src/views/iot/ota/firmware/data.ts +++ b/apps/web-antdv-next/src/views/iot/ota/firmware/data.ts @@ -1,9 +1,44 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import type { IotProductApi } from '#/api/iot/product/product'; +import type { DescriptionItemSchema } from '#/components/description'; + +import { formatDateTime } from '@vben/utils'; import { getSimpleProductList } from '#/api/iot/product/product'; import { getRangePickerDefaultProps } from '#/utils'; +/** 关联数据 */ +let productList: IotProductApi.Product[] = []; +getSimpleProductList().then((data) => (productList = data)); + +/** 根据产品 ID 取产品名称 */ +export function getProductName(productId?: number): string { + if (!productId) { + return '-'; + } + return productList.find((product) => product.id === productId)?.name || '-'; +} + +/** 固件详情的描述字段 */ +export function useDetailSchema(): DescriptionItemSchema[] { + return [ + { field: 'name', label: '固件名称' }, + { + field: 'productName', + label: '所属产品', + render: (val) => val || '-', + }, + { field: 'version', label: '固件版本' }, + { + field: 'createTime', + label: '创建时间', + render: (val) => (val ? (formatDateTime(val) as string) : '-'), + }, + { field: 'description', label: '固件描述', span: 2 }, + ]; +} + /** 新增/修改固件的表单 */ export function useFormSchema(): VbenFormSchema[] { return [ @@ -34,7 +69,13 @@ export function useFormSchema(): VbenFormSchema[] { valueField: 'id', placeholder: '请选择产品', }, - rules: 'required', + dependencies: { + triggerFields: ['id'], + componentProps: (values) => ({ + disabled: !!values.id, + }), + rules: (values) => (values.id ? null : 'required'), + }, }, { fieldName: 'version', @@ -43,7 +84,13 @@ export function useFormSchema(): VbenFormSchema[] { componentProps: { placeholder: '请输入版本号', }, - rules: 'required', + dependencies: { + triggerFields: ['id'], + componentProps: (values) => ({ + disabled: !!values.id, + }), + rules: (values) => (values.id ? null : 'required'), + }, }, { fieldName: 'description', @@ -60,11 +107,17 @@ export function useFormSchema(): VbenFormSchema[] { component: 'FileUpload', componentProps: { maxNumber: 1, - accept: ['bin', 'hex', 'zip'], + accept: ['bin', 'zip', 'pdf'], maxSize: 50, - helpText: '支持上传 .bin、.hex、.zip 格式的固件文件,最大 50MB', + helpText: '支持上传 .bin、.zip、.pdf 格式的固件文件,最大 50MB', + }, + dependencies: { + triggerFields: ['id'], + componentProps: (values) => ({ + disabled: !!values.id, + }), + rules: (values) => (values.id ? null : 'required'), }, - rules: 'required', }, ]; } @@ -108,7 +161,6 @@ export function useGridFormSchema(): VbenFormSchema[] { /** 列表的字段 */ export function useGridColumns(): VxeTableGridOptions['columns'] { return [ - { type: 'checkbox', width: 40 }, { field: 'id', title: '固件编号', @@ -133,7 +185,7 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { field: 'productId', title: '所属产品', minWidth: 150, - slots: { default: 'product' }, + slots: { default: 'productName' }, }, { field: 'fileUrl', diff --git a/apps/web-antdv-next/src/views/iot/ota/firmware/detail/index.vue b/apps/web-antdv-next/src/views/iot/ota/firmware/detail/index.vue new file mode 100644 index 000000000..7f9ff9a36 --- /dev/null +++ b/apps/web-antdv-next/src/views/iot/ota/firmware/detail/index.vue @@ -0,0 +1,74 @@ + + + diff --git a/apps/web-antdv-next/src/views/iot/ota/firmware/detail/modules/info.vue b/apps/web-antdv-next/src/views/iot/ota/firmware/detail/modules/info.vue new file mode 100644 index 000000000..6f40f3e45 --- /dev/null +++ b/apps/web-antdv-next/src/views/iot/ota/firmware/detail/modules/info.vue @@ -0,0 +1,26 @@ + + + diff --git a/apps/web-antdv-next/src/views/iot/ota/firmware/index.vue b/apps/web-antdv-next/src/views/iot/ota/firmware/index.vue index f39d4ae67..13f331313 100644 --- a/apps/web-antdv-next/src/views/iot/ota/firmware/index.vue +++ b/apps/web-antdv-next/src/views/iot/ota/firmware/index.vue @@ -13,10 +13,12 @@ import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteOtaFirmware, getOtaFirmwarePage } from '#/api/iot/ota/firmware'; import { $t } from '#/locales'; -import OtaFirmwareForm from '../modules/ota-firmware-form.vue'; -import { useGridColumns, useGridFormSchema } from './data'; - -defineOptions({ name: 'IoTOtaFirmware' }); +import { + getProductName, + useGridColumns, + useGridFormSchema, +} from './data'; +import OtaFirmwareForm from './modules/form.vue'; const { push } = useRouter(); @@ -47,7 +49,7 @@ async function handleDelete(row: IoTOtaFirmwareApi.Firmware) { duration: 0, }); try { - await deleteOtaFirmware(row.id as number); + await deleteOtaFirmware(row.id!); message.success({ content: $t('ui.actionMessage.deleteSuccess', [row.name]), }); @@ -62,6 +64,11 @@ function handleDetail(row: IoTOtaFirmwareApi.Firmware) { push({ name: 'IoTOtaFirmwareDetail', params: { id: row.id } }); } +/** 跳转到产品详情 */ +function handleOpenProductDetail(productId: number) { + push({ name: 'IoTProductDetail', params: { id: productId } }); +} + const [Grid, gridApi] = useVbenVxeGrid({ formOptions: { schema: useGridFormSchema(), @@ -104,17 +111,23 @@ const [Grid, gridApi] = useVbenVxeGrid({ label: $t('ui.actionTitle.create', ['固件']), type: 'primary', icon: ACTION_ICON.ADD, + auth: ['iot:ota-firmware:create'], onClick: handleCreate, }, ]" /> - - -