diff --git a/apps/web-antd/src/views/iot/ota/data.ts b/apps/web-antd/src/views/iot/ota/data.ts deleted file mode 100644 index ff9ba6ee1..000000000 --- a/apps/web-antd/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-antd/src/views/iot/ota/firmware/data.ts b/apps/web-antd/src/views/iot/ota/firmware/data.ts index 7b684dba9..5424ff39d 100644 --- a/apps/web-antd/src/views/iot/ota/firmware/data.ts +++ b/apps/web-antd/src/views/iot/ota/firmware/data.ts @@ -129,11 +129,12 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { title: '固件描述', minWidth: 200, }, + // TODO @AI:你看看 vue3 + ep 是这么干的么? { - field: 'productId', + field: 'productName', title: '所属产品', minWidth: 150, - slots: { default: 'product' }, + formatter: ({ row }) => row.productName || '未知产品', }, { field: 'fileUrl', diff --git a/apps/web-antd/src/views/iot/ota/firmware/detail/index.vue b/apps/web-antd/src/views/iot/ota/firmware/detail/index.vue new file mode 100644 index 000000000..a675e6d87 --- /dev/null +++ b/apps/web-antd/src/views/iot/ota/firmware/detail/index.vue @@ -0,0 +1,100 @@ + + + diff --git a/apps/web-antd/src/views/iot/ota/firmware/index.vue b/apps/web-antd/src/views/iot/ota/firmware/index.vue index 8d19ad230..6a5484dfa 100644 --- a/apps/web-antd/src/views/iot/ota/firmware/index.vue +++ b/apps/web-antd/src/views/iot/ota/firmware/index.vue @@ -13,11 +13,9 @@ 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 OtaFirmwareForm from '../modules/firmware-form.vue'; import { useGridColumns, useGridFormSchema } from './data'; -defineOptions({ name: 'IoTOtaFirmware' }); - const { push } = useRouter(); const [FormModal, formModalApi] = useVbenModal({ @@ -104,19 +102,15 @@ const [Grid, gridApi] = useVbenVxeGrid({ label: $t('ui.actionTitle.create', ['固件']), type: 'primary', icon: ACTION_ICON.ADD, + auth: ['iot:ota-firmware:create'], onClick: handleCreate, }, ]" /> - - - - - -