diff --git a/apps/web-antd/package.json b/apps/web-antd/package.json index 68aaacd5..8448820c 100644 --- a/apps/web-antd/package.json +++ b/apps/web-antd/package.json @@ -47,6 +47,7 @@ "markdown-it": "^14.1.0", "pinia": "catalog:", "vue": "catalog:", - "vue-router": "catalog:" + "vue-router": "catalog:", + "xlsx": "^0.18.5" } } diff --git a/apps/web-antd/src/views/business/product/china-medicine/api/index.ts b/apps/web-antd/src/views/business/product/china-medicine/api/index.ts index f8181198..b5ebe7d0 100644 --- a/apps/web-antd/src/views/business/product/china-medicine/api/index.ts +++ b/apps/web-antd/src/views/business/product/china-medicine/api/index.ts @@ -1,5 +1,3 @@ -import type { RequestResponse } from '@vben/request'; - import { requestClient } from '#/api/request'; const prefix = 'china-medicine/'; @@ -66,3 +64,35 @@ export async function deleteChinaMedicine(data: Record) { export async function importChinaMedicineApi(data: Record) { return requestClient.upload(`${prefix}import`, data); } + +/** + * 预览批量更新药品编码(只读) + */ +export async function previewBatchDrugNumberApi(data: { + items: { drug_name: string; drug_number: string }[]; +}) { + return requestClient.post(`${prefix}preview-batch-drug-number`, data); +} + +/** + * 批量更新编码:全量中药 id/名称/编号(卡片参考) + */ +export async function getAllDrugNumbersForBatchApi() { + return requestClient.get<{ + items: { + id: number; + drug_name: string; + drug_number: null | string; + pinyin_simple: string; + }[]; + }>(`${prefix}list-all-drug-numbers-for-batch`); +} + +/** + * 确认批量更新药品编码 + */ +export async function applyBatchDrugNumberApi(data: { + items: { id: number; drug_number: string }[]; +}) { + return requestClient.post(`${prefix}apply-batch-drug-number`, data); +} diff --git a/apps/web-antd/src/views/business/product/china-medicine/components/DrugNumberBatchModal.vue b/apps/web-antd/src/views/business/product/china-medicine/components/DrugNumberBatchModal.vue new file mode 100644 index 00000000..04606b13 --- /dev/null +++ b/apps/web-antd/src/views/business/product/china-medicine/components/DrugNumberBatchModal.vue @@ -0,0 +1,485 @@ + + + + + diff --git a/apps/web-antd/src/views/business/product/china-medicine/config/table.ts b/apps/web-antd/src/views/business/product/china-medicine/config/table.ts index de957d5b..9eb28c30 100644 --- a/apps/web-antd/src/views/business/product/china-medicine/config/table.ts +++ b/apps/web-antd/src/views/business/product/china-medicine/config/table.ts @@ -25,6 +25,7 @@ export const gridOptions: VxeGridProps = { { type: 'checkbox', width: 60 }, { field: 'id', align: 'left', title: 'ID', width: 100 }, { field: 'drug_name', align: 'left', title: '药品名称' }, + { field: 'drug_number', align: 'left', title: '药品编码(erp)' }, { field: 'pinyin_simple', title: '拼音' }, { field: 'status', title: '状态', slots: { default: 'status' } }, { field: 'created_at', title: '发布时间' }, diff --git a/apps/web-antd/src/views/business/product/china-medicine/index.vue b/apps/web-antd/src/views/business/product/china-medicine/index.vue index b2de842d..7fa77fb0 100644 --- a/apps/web-antd/src/views/business/product/china-medicine/index.vue +++ b/apps/web-antd/src/views/business/product/china-medicine/index.vue @@ -12,6 +12,7 @@ import { TableAction } from '#/components/table-action'; import { downloadByData } from '#/util/tool'; import { deleteChinaMedicine, exportChinaMedicineApi } from './api'; +import DrugNumberBatchModal from './components/DrugNumberBatchModal.vue'; import FormModalDemo from './components/modal.vue'; import ExcelUpload from './components/ExcelUpload.vue'; import { formOptions } from './config/search'; @@ -46,6 +47,10 @@ const [ExcelUploadModal, ExcelUploadModalApi] = useVbenModal({ connectedComponent: ExcelUpload, }); +const [DrugNumberBatchModalComp, drugNumberBatchModalApi] = useVbenModal({ + connectedComponent: DrugNumberBatchModal, +}); + const showModal = (data = {}, isUpdate = false) => { formModalApi.setData({ // 表单值 @@ -86,11 +91,19 @@ const openExcelUploadModal = () => { }); ExcelUploadModalApi.open(); }; + +const openDrugNumberBatchModal = () => { + drugNumberBatchModalApi.setData({ + gridApi, + }); + drugNumberBatchModalApi.open(); +};