diff --git a/src/api/api-lock.json b/src/api/api-lock.json index 013853d..c15432d 100644 --- a/src/api/api-lock.json +++ b/src/api/api-lock.json @@ -4027,6 +4027,63 @@ } ] }, + { + "description": "批量生成条形码", + "name": "generateBarcodes", + "method": "post", + "path": "/material/{id}/generate-barcodes", + "response": { + "typeArgs": [ + { + "typeArgs": [], + "typeName": "string", + "isDefsType": false, + "templateIndex": -1, + "compileTemplateKeyword": "#/definitions/", + "enum": [], + "typeProperties": [] + } + ], + "typeName": "Array", + "isDefsType": false, + "templateIndex": -1, + "compileTemplateKeyword": "#/definitions/", + "enum": [], + "typeProperties": [] + }, + "parameters": [ + { + "description": "物料id", + "required": true, + "in": "path", + "name": "id", + "dataType": { + "typeArgs": [], + "typeName": "number", + "isDefsType": false, + "templateIndex": -1, + "compileTemplateKeyword": "#/definitions/", + "enum": [], + "typeProperties": [] + } + }, + { + "description": "条形码数量", + "required": true, + "in": "query", + "name": "count", + "dataType": { + "typeArgs": [], + "typeName": "number", + "isDefsType": false, + "templateIndex": -1, + "compileTemplateKeyword": "#/definitions/", + "enum": [], + "typeProperties": [] + } + } + ] + }, { "description": "分页查询物料列表", "name": "materials", diff --git a/src/api/material/mods/material/generateBarcodes.ts b/src/api/material/mods/material/generateBarcodes.ts new file mode 100644 index 0000000..9509147 --- /dev/null +++ b/src/api/material/mods/material/generateBarcodes.ts @@ -0,0 +1,29 @@ +/** + * @desc 批量生成条形码 + */ +import { defaultSuccess, defaultError, http } from '@/plugins/axios' +import type { AxiosResponse } from 'axios' +export interface Params { + /** 条形码数量 */ + count: number +} + +export default async function ( + /** 物料id */ + id: number, + + params: Params, + success: (data: Array) => void = defaultSuccess, + fail: (error: { code: string; error?: string }) => void = defaultError, +): Promise { + return http({ + method: 'post', + url: `/material/${id}/generate-barcodes`, + + params, + }) + .then((data: AxiosResponse, unknown>) => { + success(data.data) + }) + .catch((error: { code: string; error?: string }) => fail(error)) +} diff --git a/src/api/material/mods/material/index.ts b/src/api/material/mods/material/index.ts index 57efb60..340cfac 100644 --- a/src/api/material/mods/material/index.ts +++ b/src/api/material/mods/material/index.ts @@ -2,16 +2,18 @@ * @description 物料管理 * */ -import saveOrUpdateMaterial from './saveOrUpdateMaterial'; -import all from './all'; -import detail from './detail'; -import deleteMaterial from './deleteMaterial'; -import materials from './materials'; +import saveOrUpdateMaterial from './saveOrUpdateMaterial' +import all from './all' +import detail from './detail' +import deleteMaterial from './deleteMaterial' +import generateBarcodes from './generateBarcodes' +import materials from './materials' export default { - saveOrUpdateMaterial, - all, - detail, - deleteMaterial, - materials, -}; + saveOrUpdateMaterial, + all, + detail, + deleteMaterial, + generateBarcodes, + materials, +} diff --git a/src/components.d.ts b/src/components.d.ts index 61024e8..828025a 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -13,15 +13,15 @@ declare module 'vue' { ACard: typeof import('ant-design-vue/es')['Card'] ACol: typeof import('ant-design-vue/es')['Col'] AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] - ADatePicker: typeof import('ant-design-vue/es')['DatePicker'] - ADivider: typeof import('ant-design-vue/es')['Divider'] ADrawer: typeof import('ant-design-vue/es')['Drawer'] ADropdown: typeof import('ant-design-vue/es')['Dropdown'] + AFlex: typeof import('ant-design-vue/es')['Flex'] AFloatButton: typeof import('ant-design-vue/es')['FloatButton'] AForm: typeof import('ant-design-vue/es')['Form'] AFormItem: typeof import('ant-design-vue/es')['FormItem'] AImage: typeof import('ant-design-vue/es')['Image'] AInput: typeof import('ant-design-vue/es')['Input'] + AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] AInputPassword: typeof import('ant-design-vue/es')['InputPassword'] AInputSearch: typeof import('ant-design-vue/es')['InputSearch'] ALayout: typeof import('ant-design-vue/es')['Layout'] @@ -35,25 +35,18 @@ declare module 'vue' { AModal: typeof import('ant-design-vue/es')['Modal'] APageHeader: typeof import('ant-design-vue/es')['PageHeader'] APopconfirm: typeof import('ant-design-vue/es')['Popconfirm'] - ARadioButton: typeof import('ant-design-vue/es')['RadioButton'] - ARadioGroup: typeof import('ant-design-vue/es')['RadioGroup'] - AResult: typeof import('ant-design-vue/es')['Result'] ARow: typeof import('ant-design-vue/es')['Row'] ASelect: typeof import('ant-design-vue/es')['Select'] ASelectOption: typeof import('ant-design-vue/es')['SelectOption'] ASpace: typeof import('ant-design-vue/es')['Space'] - AStatistic: typeof import('ant-design-vue/es')['Statistic'] - ASteps: typeof import('ant-design-vue/es')['Steps'] ASubMenu: typeof import('ant-design-vue/es')['SubMenu'] ASwitch: typeof import('ant-design-vue/es')['Switch'] ATable: typeof import('ant-design-vue/es')['Table'] ATabPane: typeof import('ant-design-vue/es')['TabPane'] ATabs: typeof import('ant-design-vue/es')['Tabs'] ATag: typeof import('ant-design-vue/es')['Tag'] - ATextarea: typeof import('ant-design-vue/es')['Textarea'] ATooltip: typeof import('ant-design-vue/es')['Tooltip'] ATransfer: typeof import('ant-design-vue/es')['Transfer'] - ATree: typeof import('ant-design-vue/es')['Tree'] ATypographyLink: typeof import('ant-design-vue/es')['TypographyLink'] ATypographyParagraph: typeof import('ant-design-vue/es')['TypographyParagraph'] ATypographyTitle: typeof import('ant-design-vue/es')['TypographyTitle'] diff --git a/src/views/stock/material/print-code.vue b/src/views/stock/material/print-code.vue new file mode 100644 index 0000000..41ba65a --- /dev/null +++ b/src/views/stock/material/print-code.vue @@ -0,0 +1,121 @@ + + + + +