feat(@vben/web-antd): erp-stock-in 优化库存入库模块
- 为表格列设置 minWidth 以优化布局 - 使用 Popconfirm组件替代 Modal 确认框 - 通过 message 组件展示操作结果 - 优化删除和审核操作的处理流程 - 引入 useVbenModal 优化表单弹窗pull/188/head
							parent
							
								
									510ec12582
								
							
						
					
					
						commit
						3afd957713
					
				|  | @ -281,12 +281,12 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|     { |     { | ||||||
|       field: 'supplierName', |       field: 'supplierName', | ||||||
|       title: '供应商', |       title: '供应商', | ||||||
|       width: 120, |       minWidth: 120, | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       field: 'inTime', |       field: 'inTime', | ||||||
|       title: '入库时间', |       title: '入库时间', | ||||||
|       width: 180, |       minWidth: 180, | ||||||
|       cellRender: { |       cellRender: { | ||||||
|         name: 'CellDateTime', |         name: 'CellDateTime', | ||||||
|       }, |       }, | ||||||
|  | @ -294,12 +294,12 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|     { |     { | ||||||
|       field: 'creatorName', |       field: 'creatorName', | ||||||
|       title: '创建人', |       title: '创建人', | ||||||
|       width: 100, |       minWidth: 100, | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       field: 'totalCount', |       field: 'totalCount', | ||||||
|       title: '数量', |       title: '数量', | ||||||
|       width: 100, |       minWidth: 100, | ||||||
|       cellRender: { |       cellRender: { | ||||||
|         name: 'CellAmount', |         name: 'CellAmount', | ||||||
|         props: { |         props: { | ||||||
|  | @ -310,7 +310,7 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|     { |     { | ||||||
|       field: 'totalPrice', |       field: 'totalPrice', | ||||||
|       title: '金额', |       title: '金额', | ||||||
|       width: 120, |       minWidth: 120, | ||||||
|       cellRender: { |       cellRender: { | ||||||
|         name: 'CellAmount', |         name: 'CellAmount', | ||||||
|         props: { |         props: { | ||||||
|  | @ -321,7 +321,7 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|     { |     { | ||||||
|       field: 'status', |       field: 'status', | ||||||
|       title: '状态', |       title: '状态', | ||||||
|       width: 90, |       minWidth: 90, | ||||||
|       fixed: 'right', |       fixed: 'right', | ||||||
|       cellRender: { |       cellRender: { | ||||||
|         name: 'CellDict', |         name: 'CellDict', | ||||||
|  | @ -330,7 +330,7 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       title: '操作', |       title: '操作', | ||||||
|       width: 220, |       width: 300, | ||||||
|       fixed: 'right', |       fixed: 'right', | ||||||
|       slots: { default: 'actions' }, |       slots: { default: 'actions' }, | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|  | @ -2,12 +2,10 @@ | ||||||
| import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | ||||||
| import type { ErpStockInApi } from '#/api/erp/stock/in'; | import type { ErpStockInApi } from '#/api/erp/stock/in'; | ||||||
| 
 | 
 | ||||||
| import { ref } from 'vue'; | import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; | ||||||
| 
 |  | ||||||
| import { DocAlert, Page } from '@vben/common-ui'; |  | ||||||
| import { downloadFileFromBlobPart } from '@vben/utils'; | import { downloadFileFromBlobPart } from '@vben/utils'; | ||||||
| 
 | 
 | ||||||
| import { message, Modal } from 'ant-design-vue'; | import { message } from 'ant-design-vue'; | ||||||
| 
 | 
 | ||||||
| import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; | import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; | ||||||
| import { | import { | ||||||
|  | @ -24,7 +22,10 @@ import StockInForm from './modules/form.vue'; | ||||||
| /** 其它入库单管理 */ | /** 其它入库单管理 */ | ||||||
| defineOptions({ name: 'ErpStockIn' }); | defineOptions({ name: 'ErpStockIn' }); | ||||||
| 
 | 
 | ||||||
| const formRef = ref(); | const [FormModal, formModalApi] = useVbenModal({ | ||||||
|  |   connectedComponent: StockInForm, | ||||||
|  |   destroyOnClose: true, | ||||||
|  | }); | ||||||
| 
 | 
 | ||||||
| /** 刷新表格 */ | /** 刷新表格 */ | ||||||
| function onRefresh() { | function onRefresh() { | ||||||
|  | @ -39,34 +40,46 @@ async function handleExport() { | ||||||
| 
 | 
 | ||||||
| /** 新增/编辑/详情 */ | /** 新增/编辑/详情 */ | ||||||
| function openForm(type: string, id?: number) { | function openForm(type: string, id?: number) { | ||||||
|   formRef.value?.modalApi.open({ type, id }); |   formModalApi.setData({ type, id }).open(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** 删除 */ | /** 删除 */ | ||||||
| function handleDelete(ids: any[]) { | async function handleDelete(ids: any[]) { | ||||||
|   Modal.confirm({ |   const hideLoading = message.loading({ | ||||||
|     title: '系统提示', |     content: '删除中...', | ||||||
|     content: `是否确认删除编号为 ${ids.join(',')} 的其它入库单?`, |     duration: 0, | ||||||
|     onOk: async () => { |     key: 'action_process_msg', | ||||||
|       await deleteStockIn(ids); |  | ||||||
|       message.success('删除成功'); |  | ||||||
|       onRefresh(); |  | ||||||
|     }, |  | ||||||
|   }); |   }); | ||||||
|  |   try { | ||||||
|  |     await deleteStockIn(ids); | ||||||
|  |     message.success({ | ||||||
|  |       content: '删除成功', | ||||||
|  |       key: 'action_process_msg', | ||||||
|  |     }); | ||||||
|  |     onRefresh(); | ||||||
|  |   } finally { | ||||||
|  |     hideLoading(); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** 审核/反审核 */ | /** 审核/反审核 */ | ||||||
| function handleUpdateStatus(id: any, status: number) { | async function handleUpdateStatus(id: any, status: number) { | ||||||
|   const statusText = status === 20 ? '审核' : '反审核'; |   const statusText = status === 20 ? '审核' : '反审核'; | ||||||
|   Modal.confirm({ |   const hideLoading = message.loading({ | ||||||
|     title: '系统提示', |     content: `${statusText}中...`, | ||||||
|     content: `确认要${statusText}该入库单吗?`, |     duration: 0, | ||||||
|     onOk: async () => { |     key: 'action_process_msg', | ||||||
|       await updateStockInStatus({ id, status }); |  | ||||||
|       message.success(`${statusText}成功`); |  | ||||||
|       onRefresh(); |  | ||||||
|     }, |  | ||||||
|   }); |   }); | ||||||
|  |   try { | ||||||
|  |     await updateStockInStatus({ id, status }); | ||||||
|  |     message.success({ | ||||||
|  |       content: `${statusText}成功`, | ||||||
|  |       key: 'action_process_msg', | ||||||
|  |     }); | ||||||
|  |     onRefresh(); | ||||||
|  |   } finally { | ||||||
|  |     hideLoading(); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const [Grid, gridApi] = useVbenVxeGrid({ | const [Grid, gridApi] = useVbenVxeGrid({ | ||||||
|  | @ -135,7 +148,9 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||||||
|               danger: true, |               danger: true, | ||||||
|               icon: ACTION_ICON.DELETE, |               icon: ACTION_ICON.DELETE, | ||||||
|               auth: ['erp:stock-in:delete'], |               auth: ['erp:stock-in:delete'], | ||||||
|               onClick: () => { |               popConfirm: { | ||||||
|  |                 title: '是否删除所选中数据?', | ||||||
|  |                 confirm: () => { | ||||||
|                   const checkboxRecords = gridApi.grid.getCheckboxRecords(); |                   const checkboxRecords = gridApi.grid.getCheckboxRecords(); | ||||||
|                   if (checkboxRecords.length === 0) { |                   if (checkboxRecords.length === 0) { | ||||||
|                     message.warning('请选择要删除的数据'); |                     message.warning('请选择要删除的数据'); | ||||||
|  | @ -144,6 +159,7 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||||||
|                   handleDelete(checkboxRecords.map((item) => item.id)); |                   handleDelete(checkboxRecords.map((item) => item.id)); | ||||||
|                 }, |                 }, | ||||||
|               }, |               }, | ||||||
|  |             }, | ||||||
|           ]" |           ]" | ||||||
|         /> |         /> | ||||||
|       </template> |       </template> | ||||||
|  | @ -168,21 +184,30 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||||||
|               type: 'primary', |               type: 'primary', | ||||||
|               auth: ['erp:stock-in:update'], |               auth: ['erp:stock-in:update'], | ||||||
|               ifShow: row.status === 10, |               ifShow: row.status === 10, | ||||||
|               onClick: () => handleUpdateStatus(row.id, 20), |               popConfirm: { | ||||||
|  |                 title: '确认要审核该入库单吗?', | ||||||
|  |                 confirm: () => handleUpdateStatus(row.id, 20), | ||||||
|  |               }, | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|               label: '反审核', |               label: '反审核', | ||||||
|               danger: true, |               danger: true, | ||||||
|               auth: ['erp:stock-in:update'], |               auth: ['erp:stock-in:update'], | ||||||
|               ifShow: row.status === 20, |               ifShow: row.status === 20, | ||||||
|               onClick: () => handleUpdateStatus(row.id, 10), |               popConfirm: { | ||||||
|  |                 title: '确认要反审核该入库单吗?', | ||||||
|  |                 confirm: () => handleUpdateStatus(row.id, 10), | ||||||
|  |               }, | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|               label: '删除', |               label: '删除', | ||||||
|               danger: true, |               danger: true, | ||||||
|               auth: ['erp:stock-in:delete'], |               auth: ['erp:stock-in:delete'], | ||||||
|               ifShow: row.status === 10, |               ifShow: row.status === 10, | ||||||
|               onClick: () => handleDelete([row.id]), |               popConfirm: { | ||||||
|  |                 title: '确认要删除该入库单吗?', | ||||||
|  |                 confirm: () => handleDelete([row.id]), | ||||||
|  |               }, | ||||||
|             }, |             }, | ||||||
|           ]" |           ]" | ||||||
|         /> |         /> | ||||||
|  | @ -190,6 +215,6 @@ const [Grid, gridApi] = useVbenVxeGrid({ | ||||||
|     </Grid> |     </Grid> | ||||||
| 
 | 
 | ||||||
|     <!-- 表单弹窗 --> |     <!-- 表单弹窗 --> | ||||||
|     <StockInForm ref="formRef" @success="onRefresh" /> |     <FormModal @success="onRefresh" /> | ||||||
|   </Page> |   </Page> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -358,7 +358,10 @@ defineExpose({ | ||||||
|               label: '删除', |               label: '删除', | ||||||
|               type: 'link', |               type: 'link', | ||||||
|               danger: true, |               danger: true, | ||||||
|               onClick: () => handleDelete(row), |               popConfirm: { | ||||||
|  |                 title: '确认删除该产品吗?', | ||||||
|  |                 confirm: handleDelete.bind(null, row), | ||||||
|  |               }, | ||||||
|             }, |             }, | ||||||
|           ]" |           ]" | ||||||
|         /> |         /> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 nehc
						nehc