增加入库单、发货通知单、条码历史模块
							parent
							
								
									8a88401c01
								
							
						
					
					
						commit
						7520fa8dd9
					
				| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					import { baseRequest } from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const request = (url, ...arg) => baseRequest(`/inventory/inbound/` + url, ...arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 入库单Api接口管理器
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Luck
 | 
				
			||||||
 | 
					 * @date  2024/09/13 22:39
 | 
				
			||||||
 | 
					 **/
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						// 获取入库单分页
 | 
				
			||||||
 | 
						inventoryInboundPage(data) {
 | 
				
			||||||
 | 
							return request('page', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 获取入库单 明细列表
 | 
				
			||||||
 | 
						inventoryInboundDetailList(data) {
 | 
				
			||||||
 | 
							return request('/detail/list', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 获取入库单 条码列表
 | 
				
			||||||
 | 
						inventoryInboundBarcodeTree(data) {
 | 
				
			||||||
 | 
							return request('/barcode/tree/list', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 获取入库单 条码(子级)列表
 | 
				
			||||||
 | 
						inventoryInboundBarcodeTreeChildren(data) {
 | 
				
			||||||
 | 
							return request('/barcode/tree/childrenList', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 获取入库单详情
 | 
				
			||||||
 | 
						inventoryInboundDetail(data) {
 | 
				
			||||||
 | 
							return request('detail', data, 'get')
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					import { baseRequest } from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const request = (url, ...arg) => baseRequest(`/inventory/invoice/` + url, ...arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 发货通知单Api接口管理器
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Luck
 | 
				
			||||||
 | 
					 * @date  2024/09/23 20:53
 | 
				
			||||||
 | 
					 **/
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						// 获取发货通知单分页
 | 
				
			||||||
 | 
						inventoryInvoicePage(data) {
 | 
				
			||||||
 | 
							return request('page', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 提交发货通知单表单 edit为true时为编辑,默认为新增
 | 
				
			||||||
 | 
						inventoryInvoiceSubmitForm(data, edit = false) {
 | 
				
			||||||
 | 
							return request(edit ? 'edit' : 'add', data)
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 删除发货通知单
 | 
				
			||||||
 | 
						inventoryInvoiceDelete(data) {
 | 
				
			||||||
 | 
							return request('delete', data)
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 获取发货通知单详情
 | 
				
			||||||
 | 
						inventoryInvoiceDetail(data) {
 | 
				
			||||||
 | 
							return request('detail', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 审核发货单 通过
 | 
				
			||||||
 | 
						inventoryInvoiceAuditPass(data, edit = false) {
 | 
				
			||||||
 | 
							return request('audit/pass', data)
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					import { baseRequest } from '@/utils/request'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const request = (url, ...arg) => baseRequest(`/produce/barcode/history/` + url, ...arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 产品条码历史记录Api接口管理器
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Luck
 | 
				
			||||||
 | 
					 * @date  2024/09/09 19:41
 | 
				
			||||||
 | 
					 **/
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
						// 获取产品条码历史记录分页
 | 
				
			||||||
 | 
						produceBarcodeHistoryPage(data) {
 | 
				
			||||||
 | 
							return request('page', data, 'get')
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						// 获取产品条码历史记录详情
 | 
				
			||||||
 | 
						produceBarcodeHistoryDetail(data) {
 | 
				
			||||||
 | 
							return request('detail', data, 'get')
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,87 @@
 | 
				
			||||||
 | 
					export const tableColumns = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '单号',
 | 
				
			||||||
 | 
							dataIndex: 'billNumber',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '业务日期',
 | 
				
			||||||
 | 
							dataIndex: 'businessDate',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							sorter: true,
 | 
				
			||||||
 | 
							sortDirections: ['descend', 'ascend'],
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '类型',
 | 
				
			||||||
 | 
							dataIndex: 'type',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 100,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '供货单位',
 | 
				
			||||||
 | 
							dataIndex: 'customerName',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '供货单位编码',
 | 
				
			||||||
 | 
							dataIndex: 'customerNumber',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '仓库',
 | 
				
			||||||
 | 
							dataIndex: 'storeName',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '仓库编码',
 | 
				
			||||||
 | 
							dataIndex: 'storeNumber',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 250,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '备注',
 | 
				
			||||||
 | 
							dataIndex: 'remarks',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '创建人',
 | 
				
			||||||
 | 
							dataIndex: 'createUserName',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '创建时间',
 | 
				
			||||||
 | 
							dataIndex: 'createTime',
 | 
				
			||||||
 | 
							sorter: true,
 | 
				
			||||||
 | 
							sortDirections: ['descend', 'ascend'],
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,33 @@
 | 
				
			||||||
 | 
					import tool from '@/utils/tool'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const searchFields = [
 | 
				
			||||||
 | 
						{ name: 'billNumber', label: '单号', component: 'a-input', props: { placeholder: '请输入单号' } },
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '类型:',
 | 
				
			||||||
 | 
							name: 'type',
 | 
				
			||||||
 | 
							type: 'a-select',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择类型',
 | 
				
			||||||
 | 
								allowClear: true,
 | 
				
			||||||
 | 
								options: tool.dictList('INBOUND_TYPE')
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '仓库:',
 | 
				
			||||||
 | 
							name: 'storeId',
 | 
				
			||||||
 | 
							type: 'a-tree-select',
 | 
				
			||||||
 | 
							span: 6,
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择仓库',
 | 
				
			||||||
 | 
								treeData: [],
 | 
				
			||||||
 | 
								fieldNames: {
 | 
				
			||||||
 | 
									children: 'children',
 | 
				
			||||||
 | 
									label: 'name',
 | 
				
			||||||
 | 
									value: 'id'
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							defaultValue: ''
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{ name: 'customerName', label: '供货单位名称', component: 'a-input', props: { placeholder: '请输入供货单位名称' } },
 | 
				
			||||||
 | 
						{ name: 'customerNumber', label: '供货单位编码', component: 'a-input', props: { placeholder: '请输入供货单位编码' } }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,98 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<AdvancedSearchForm
 | 
				
			||||||
 | 
							:formState="searchFormState"
 | 
				
			||||||
 | 
							:formFields="searchFields"
 | 
				
			||||||
 | 
							@search="tableRef.refresh()"
 | 
				
			||||||
 | 
							@reset="tableRef.refresh()"
 | 
				
			||||||
 | 
						/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<a-card :bordered="false" class="mt-4" style="height: 100%">
 | 
				
			||||||
 | 
							<a-row :gutter="24">
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								<a-col :span="24">
 | 
				
			||||||
 | 
									<s-table
 | 
				
			||||||
 | 
										ref="tableRef"
 | 
				
			||||||
 | 
										:columns="columns"
 | 
				
			||||||
 | 
										:data="loadData"
 | 
				
			||||||
 | 
										:alert="options.alert.show"
 | 
				
			||||||
 | 
										bordered
 | 
				
			||||||
 | 
										:row-key="(record) => record.id"
 | 
				
			||||||
 | 
										:tool-config="options.toolConfig"
 | 
				
			||||||
 | 
										:row-selection="options.rowSelection"
 | 
				
			||||||
 | 
										:scroll="{
 | 
				
			||||||
 | 
											x: 100
 | 
				
			||||||
 | 
										}"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
										<template #operator>
 | 
				
			||||||
 | 
											<a-space>
 | 
				
			||||||
 | 
											</a-space>
 | 
				
			||||||
 | 
										</template>
 | 
				
			||||||
 | 
										<template #bodyCell="{ column, record }">
 | 
				
			||||||
 | 
											<template v-if="column.dataIndex === 'billNumber'">
 | 
				
			||||||
 | 
												<span style="color: #0d84ff">{{ record.billNumber }}</span>
 | 
				
			||||||
 | 
											</template>
 | 
				
			||||||
 | 
											<template v-if="column.dataIndex === 'type'">
 | 
				
			||||||
 | 
												<a-tag :color="tagColorList[record.type - 1]">{{
 | 
				
			||||||
 | 
													$TOOL.dictTypeData('INBOUND_TYPE', record.type || '')
 | 
				
			||||||
 | 
												}}</a-tag>
 | 
				
			||||||
 | 
											</template>
 | 
				
			||||||
 | 
											<template v-if="column.dataIndex === 'action'">
 | 
				
			||||||
 | 
												<a-space>
 | 
				
			||||||
 | 
													<a
 | 
				
			||||||
 | 
														@click="
 | 
				
			||||||
 | 
															navigateTo('/inventory/inbound/detail', {
 | 
				
			||||||
 | 
																type: 'SEARCH',
 | 
				
			||||||
 | 
																id: record.id
 | 
				
			||||||
 | 
															})
 | 
				
			||||||
 | 
														"
 | 
				
			||||||
 | 
													>
 | 
				
			||||||
 | 
														<EyeOutlined />
 | 
				
			||||||
 | 
														查看
 | 
				
			||||||
 | 
													</a>
 | 
				
			||||||
 | 
												</a-space>
 | 
				
			||||||
 | 
											</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										</template>
 | 
				
			||||||
 | 
									</s-table>
 | 
				
			||||||
 | 
								</a-col>
 | 
				
			||||||
 | 
							</a-row>
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup name="inventoryInbound">
 | 
				
			||||||
 | 
						import inventoryInboundApi from '@/api/inventory/inventoryInboundApi'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						import { useTableManagement } from '@/hook/useTableManagement'
 | 
				
			||||||
 | 
						import { searchFields } from '@/views/productionBusiness/inventory/inbound/formFields/searchFields'
 | 
				
			||||||
 | 
						import { tableColumns } from '@/views/productionBusiness/inventory/inbound/columns/tableColumn'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const tagColorList = ['warning', 'success', 'error', 'purple']
 | 
				
			||||||
 | 
						const {
 | 
				
			||||||
 | 
							searchFormState,
 | 
				
			||||||
 | 
							tableRef,
 | 
				
			||||||
 | 
							selectedRowKeys,
 | 
				
			||||||
 | 
							columns,
 | 
				
			||||||
 | 
							loadData,
 | 
				
			||||||
 | 
							deleteRecord,
 | 
				
			||||||
 | 
							deleteBatchRecords,
 | 
				
			||||||
 | 
							options,
 | 
				
			||||||
 | 
							navigateTo
 | 
				
			||||||
 | 
						} = useTableManagement(
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								page: inventoryInboundApi.inventoryInboundPage
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							tableColumns,
 | 
				
			||||||
 | 
							['inventoryInbound:export']
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						// 批量导出
 | 
				
			||||||
 | 
						const exportBatchVerify = () =>{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						onMounted(() => {
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,250 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<a-page-header style="padding: 10px; font-size: 20px" @back="handleBack">
 | 
				
			||||||
 | 
							<template #extra>
 | 
				
			||||||
 | 
								<a-button v-if="route.query.type !== 'SEARCH'" key="1" type="primary" @click="onSubmitForm">保存</a-button>
 | 
				
			||||||
 | 
							</template>
 | 
				
			||||||
 | 
						</a-page-header>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<a-card :bordered="false" title="基本信息">
 | 
				
			||||||
 | 
							<DynamicForm
 | 
				
			||||||
 | 
								:allDisabled="route.query.type === 'SEARCH'"
 | 
				
			||||||
 | 
								:formItems="basicInfoFormItems"
 | 
				
			||||||
 | 
								:rules="basicInfoFormRules"
 | 
				
			||||||
 | 
								:model="formData"
 | 
				
			||||||
 | 
								ref="formRef1"
 | 
				
			||||||
 | 
							>
 | 
				
			||||||
 | 
								<template #customerNameSlot="{ model, item }">
 | 
				
			||||||
 | 
									<a-input
 | 
				
			||||||
 | 
										:disabled="route.query.type === 'SEARCH'"
 | 
				
			||||||
 | 
										readonly
 | 
				
			||||||
 | 
										v-bind="{ ...item.attrs }"
 | 
				
			||||||
 | 
										v-model:value="model[item.name]"
 | 
				
			||||||
 | 
									></a-input>
 | 
				
			||||||
 | 
								</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							</DynamicForm>
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<a-card
 | 
				
			||||||
 | 
							:bordered="false"
 | 
				
			||||||
 | 
							class="mt-4"
 | 
				
			||||||
 | 
							style="height: 100%"
 | 
				
			||||||
 | 
							v-if="extendData.length > 0 || route.query.type !== 'ADD'"
 | 
				
			||||||
 | 
							title="扩展字段"
 | 
				
			||||||
 | 
						>
 | 
				
			||||||
 | 
							<DynamicForm
 | 
				
			||||||
 | 
									:allDisabled="route.query.type === 'SEARCH'"
 | 
				
			||||||
 | 
									:formItems="extendData"
 | 
				
			||||||
 | 
									:model="extendFormData"
 | 
				
			||||||
 | 
									:rules="formRules"
 | 
				
			||||||
 | 
									v-if="extendData.length > 0"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<a-card
 | 
				
			||||||
 | 
							:bordered="false"
 | 
				
			||||||
 | 
							class="mt-4"
 | 
				
			||||||
 | 
							style="height: 100%"
 | 
				
			||||||
 | 
							title="商品明细信息"
 | 
				
			||||||
 | 
						>
 | 
				
			||||||
 | 
							<a-space>
 | 
				
			||||||
 | 
								<a-button v-if="route.query.type !== 'SEARCH'" key="1" type="primary" @click="addRow">新增</a-button>
 | 
				
			||||||
 | 
								<xn-batch-delete
 | 
				
			||||||
 | 
									v-if="hasPerm('customerBatchDelete')"
 | 
				
			||||||
 | 
									:selectedRowKeys="selectedListRowKeys"
 | 
				
			||||||
 | 
									@batchDelete="deleteBatchRecords"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
							</a-space>
 | 
				
			||||||
 | 
							<a-table
 | 
				
			||||||
 | 
								class="mt-4"
 | 
				
			||||||
 | 
								ref="tableRef"
 | 
				
			||||||
 | 
								:dataSource="productDetailData"
 | 
				
			||||||
 | 
								:columns="productDetailFormItems"
 | 
				
			||||||
 | 
								:row-selection="rowSelection"
 | 
				
			||||||
 | 
								row-key="id"
 | 
				
			||||||
 | 
							>
 | 
				
			||||||
 | 
								<template #bodyCell="{ column, record, index }">
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'index'">
 | 
				
			||||||
 | 
										{{ index + 1 }}
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'productName'">
 | 
				
			||||||
 | 
										<a-input
 | 
				
			||||||
 | 
											:disabled="route.query.type === 'SEARCH'"
 | 
				
			||||||
 | 
											readonly
 | 
				
			||||||
 | 
											v-model:value="record['productName']"
 | 
				
			||||||
 | 
											placeholder="请选择商品信息"
 | 
				
			||||||
 | 
											@click="openMateriel"
 | 
				
			||||||
 | 
										></a-input>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'unitName'">
 | 
				
			||||||
 | 
										<a-select
 | 
				
			||||||
 | 
											style="width: 100%"
 | 
				
			||||||
 | 
											:options="record.unitArr"
 | 
				
			||||||
 | 
											v-model:value="record['unitName']"
 | 
				
			||||||
 | 
											@change="
 | 
				
			||||||
 | 
												(value, options) => {
 | 
				
			||||||
 | 
													cityChange(value, options, record)
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											"
 | 
				
			||||||
 | 
											:filter-option="filterOption"
 | 
				
			||||||
 | 
										></a-select>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'planAmount'">
 | 
				
			||||||
 | 
										<a-input-number class="xn-wd"
 | 
				
			||||||
 | 
											:disabled="route.query.type === 'SEARCH'"
 | 
				
			||||||
 | 
											v-model:value="record['planAmount']"
 | 
				
			||||||
 | 
											:min="0"
 | 
				
			||||||
 | 
										></a-input-number>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'action'">
 | 
				
			||||||
 | 
										<a-space>
 | 
				
			||||||
 | 
											<a-button type="link" danger size="small" >
 | 
				
			||||||
 | 
												<DeleteOutlined />删除
 | 
				
			||||||
 | 
											</a-button>
 | 
				
			||||||
 | 
										</a-space>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
								</template>
 | 
				
			||||||
 | 
							</a-table>
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<materiel-selector-plus ref="materielSelectorPlusRef" @ok="materielBackOk"></materiel-selector-plus>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup name="taskDetail">
 | 
				
			||||||
 | 
						import { required } from '@/utils/formRules'
 | 
				
			||||||
 | 
						import inventoryInvoiceApi from '@/api/inventory/inventoryInvoiceApi'
 | 
				
			||||||
 | 
						import sysStoreApi from '@/api/base/store/sysStoreApi'
 | 
				
			||||||
 | 
						import materialApi from '@/api/base/material/materialApi'
 | 
				
			||||||
 | 
						import useFormHandler from '@/hook/useFormHandler'
 | 
				
			||||||
 | 
						import { basicInfoFormRules, basicInfoFormItems, productDetailFormItems } from '@/views/productionBusiness/inventory/invoice/formFields/detailFields'
 | 
				
			||||||
 | 
						import { useRoute } from 'vue-router'
 | 
				
			||||||
 | 
						import MaterielSelectorPlus from '@/components/Selector/materielSelectorPlus.vue'
 | 
				
			||||||
 | 
						const route = useRoute()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const formRef1 = ref(null)
 | 
				
			||||||
 | 
						let extendData = ref([])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const { formData, formRefs, inform, extendFormData, onSubmit, handleBack, fetchData, getExtendField } =
 | 
				
			||||||
 | 
							useFormHandler([...basicInfoFormItems], {
 | 
				
			||||||
 | 
								submitForm: inventoryInvoiceApi.inventoryInvoiceSubmitForm,
 | 
				
			||||||
 | 
								getDetail: inventoryInvoiceApi.inventoryInvoiceDetail
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						onMounted(async () => {
 | 
				
			||||||
 | 
							formRefs.value = [formRef1.value]
 | 
				
			||||||
 | 
							fetchData(route.query.type).then((res) => {
 | 
				
			||||||
 | 
								if (res) {
 | 
				
			||||||
 | 
									formData.customerId = res.customerId // 客户id
 | 
				
			||||||
 | 
									formData.customerNumber = res.customerNumber // 客户编码
 | 
				
			||||||
 | 
									formData.storeId = res.storeId // 仓库id
 | 
				
			||||||
 | 
									formData.storeName = res.storeName // 仓库名称
 | 
				
			||||||
 | 
									formData.storeNumber = res.storeNumber // 仓库编码
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 处理表单 元素数据填充
 | 
				
			||||||
 | 
							const sysStoreTreeList = await sysStoreApi.sysStoreTree();
 | 
				
			||||||
 | 
							basicInfoFormItems.forEach((item) => {
 | 
				
			||||||
 | 
								if (item.name === 'storeId') {
 | 
				
			||||||
 | 
									item.attrs.treeData = (sysStoreTreeList || []);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							extendData.value = await getExtendField('MATERIAL')
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const onSubmitForm = () => {
 | 
				
			||||||
 | 
							onSubmit({
 | 
				
			||||||
 | 
								isDeep: true,
 | 
				
			||||||
 | 
								...formData
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*  物料选择器 */
 | 
				
			||||||
 | 
						const materielSelectorPlusRef = ref(null)
 | 
				
			||||||
 | 
						let materialPackageData = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 打开物料选择
 | 
				
			||||||
 | 
						const openMateriel = () => {
 | 
				
			||||||
 | 
							materielSelectorPlusRef.value.showOpen()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 物料选择器返回操作
 | 
				
			||||||
 | 
						const materielBackOk = (event) => {
 | 
				
			||||||
 | 
							const materielId = event.materielSelectedRows[0].id;
 | 
				
			||||||
 | 
							if(materielId){
 | 
				
			||||||
 | 
								// 判断处理 物料-包装关系 数据信息
 | 
				
			||||||
 | 
								let packageData = handleMaterialPackageData(materielId);
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// 下方无用可删除
 | 
				
			||||||
 | 
							formData.productName = event.materielSelectedRows[0].name // 物料名称
 | 
				
			||||||
 | 
							formData.productNumber = event.materielSelectedRows[0].number // 物料名称
 | 
				
			||||||
 | 
							formData.productId = event.materielSelectedRows[0].id // 物料id
 | 
				
			||||||
 | 
							// 选择物料自动带出基本单位和生产单位
 | 
				
			||||||
 | 
							formData.produceUnitName = event.materielSelectedRows[0].produceUnitName // 生产单位
 | 
				
			||||||
 | 
							formData.produceUnitId = event.materielSelectedRows[0].produceUnitId // 生产单位id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							formData.baseUnitName = event.materielSelectedRows[0].baseUnitName // 生产单位
 | 
				
			||||||
 | 
							formData.baseUnitId = event.materielSelectedRows[0].baseUnitId // 生产单位id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							formData.unitGroupId = event.materielSelectedRows[0].unitGroupId
 | 
				
			||||||
 | 
							formData.unitGroupName = event.materielSelectedRows[0].unitGroupName
 | 
				
			||||||
 | 
							formData.packageProportion = event.materielSelectedRows[0].packageProportion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const handleMaterialPackageData = async(materielId)=>{
 | 
				
			||||||
 | 
							let packageData = [];
 | 
				
			||||||
 | 
							if(materielId){
 | 
				
			||||||
 | 
								packageData = materialPackageData[materielId];
 | 
				
			||||||
 | 
								if(!packageData || packageData.length === 0){
 | 
				
			||||||
 | 
									packageData = await materialApi.materialPackageData({
 | 
				
			||||||
 | 
										materialId: materielId
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									if(packageData && packageData.length > 0){
 | 
				
			||||||
 | 
										materialPackageData[materielId] = packageData;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return packageData;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* =================================== 商品明细 ============================*/
 | 
				
			||||||
 | 
						const productDetailData = ref([])
 | 
				
			||||||
 | 
						let selectedListRowKeys = ref([])
 | 
				
			||||||
 | 
						let tableRef = ref(null)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const addRow = () => {
 | 
				
			||||||
 | 
							const newRow = {
 | 
				
			||||||
 | 
								id: Date.now().toString(),
 | 
				
			||||||
 | 
								...productDetailFormItems.reduce((acc, col) => {
 | 
				
			||||||
 | 
									if (col.dataIndex) acc[col.dataIndex] = ''
 | 
				
			||||||
 | 
									return acc
 | 
				
			||||||
 | 
								}, {})
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							productDetailData.value = [...productDetailData.value, newRow]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const deleteBatchRecords = (value) => {
 | 
				
			||||||
 | 
							productDetailData.value = productDetailData.value.filter((item) => {
 | 
				
			||||||
 | 
								return !value.some((itemValue) => itemValue.id === item.id)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const rowSelection = {
 | 
				
			||||||
 | 
							onChange: (selectedRowKeys, selectedRows) => {
 | 
				
			||||||
 | 
								selectedListRowKeys.value = selectedRowKeys
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,187 @@
 | 
				
			||||||
 | 
					import tool from '@/utils/tool'
 | 
				
			||||||
 | 
					import { required } from '@/utils/formRules'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const basicInfoFormRules = {
 | 
				
			||||||
 | 
						type: [required('请选择类型')],
 | 
				
			||||||
 | 
						businessDate: [required('请选择业务日期')],
 | 
				
			||||||
 | 
						storeId: [required('请选择仓库')],
 | 
				
			||||||
 | 
						customerName: [required('请选择客户')]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const basicInfoFormItems = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '单据号:',
 | 
				
			||||||
 | 
							name: 'billNumber',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入单号',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '业务日期:',
 | 
				
			||||||
 | 
							name: 'businessDate',
 | 
				
			||||||
 | 
							type: 'a-date-picker',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择业务日期',
 | 
				
			||||||
 | 
								allowClear: true,
 | 
				
			||||||
 | 
								valueFormat: 'YYYY-MM-DD HH:mm:ss'
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '类型:',
 | 
				
			||||||
 | 
							name: 'type',
 | 
				
			||||||
 | 
							type: 'a-select',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择类型',
 | 
				
			||||||
 | 
								allowClear: true,
 | 
				
			||||||
 | 
								options: tool.dictList('OUTBOUND_TYPE')
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '客户:',
 | 
				
			||||||
 | 
							name: 'customerName',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							isUseSlot: true,
 | 
				
			||||||
 | 
							slotName: 'customerNameSlot',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择客户'
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '仓库:',
 | 
				
			||||||
 | 
							name: 'storeId',
 | 
				
			||||||
 | 
							type: 'a-tree-select',
 | 
				
			||||||
 | 
							span: 6,
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择仓库',
 | 
				
			||||||
 | 
								treeData: [],
 | 
				
			||||||
 | 
								fieldNames: {
 | 
				
			||||||
 | 
									children: 'children',
 | 
				
			||||||
 | 
									label: 'name',
 | 
				
			||||||
 | 
									value: 'id'
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							defaultValue: ''
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '车牌号:',
 | 
				
			||||||
 | 
							name: 'carNumber',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入车牌号',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '停车位:',
 | 
				
			||||||
 | 
							name: 'parkingSpace',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入停车位',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '业务员:',
 | 
				
			||||||
 | 
							name: 'salesman',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入业务员',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '收货方:',
 | 
				
			||||||
 | 
							name: 'receiveParty',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入收货方',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '交货日期:',
 | 
				
			||||||
 | 
							name: 'deliveryDate',
 | 
				
			||||||
 | 
							type: 'a-date-picker',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请选择交货日期',
 | 
				
			||||||
 | 
								allowClear: true,
 | 
				
			||||||
 | 
								valueFormat: 'YYYY-MM-DD HH:mm:ss'
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '交货地址:',
 | 
				
			||||||
 | 
							name: 'deliveryAddress',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入交货地址',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							label: '备注:',
 | 
				
			||||||
 | 
							name: 'remarks',
 | 
				
			||||||
 | 
							type: 'a-input',
 | 
				
			||||||
 | 
							span: 12,
 | 
				
			||||||
 | 
							attrs: {
 | 
				
			||||||
 | 
								placeholder: '请输入备注',
 | 
				
			||||||
 | 
								allowClear: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const productDetailFormItems = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '序号',
 | 
				
			||||||
 | 
							dataIndex: 'index',
 | 
				
			||||||
 | 
							editable: true,
 | 
				
			||||||
 | 
							width: 80
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '商品名称',
 | 
				
			||||||
 | 
							dataIndex: 'productName',
 | 
				
			||||||
 | 
							editable: true,
 | 
				
			||||||
 | 
							width: 300,
 | 
				
			||||||
 | 
							dataType: 'select' // 或 'number', 'select'
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '商品编码',
 | 
				
			||||||
 | 
							dataIndex: 'productNumber',
 | 
				
			||||||
 | 
							editable: true,
 | 
				
			||||||
 | 
							width: 300
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '规格型号',
 | 
				
			||||||
 | 
							dataIndex: 'specification',
 | 
				
			||||||
 | 
							editable: true,
 | 
				
			||||||
 | 
							width: 300
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '基本单位',
 | 
				
			||||||
 | 
							dataIndex: 'baseUnitName',
 | 
				
			||||||
 | 
							editable: true,
 | 
				
			||||||
 | 
							width: 300
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '批次号',
 | 
				
			||||||
 | 
							dataIndex: 'batchNumber',
 | 
				
			||||||
 | 
							width: 300,
 | 
				
			||||||
 | 
							editable: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '单位',
 | 
				
			||||||
 | 
							dataIndex: 'unitName',
 | 
				
			||||||
 | 
							width: 300,
 | 
				
			||||||
 | 
							editable: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '计划数量',
 | 
				
			||||||
 | 
							dataIndex: 'planAmount',
 | 
				
			||||||
 | 
							width: 300,
 | 
				
			||||||
 | 
							editable: true,
 | 
				
			||||||
 | 
							dataType: 'number' // 或 'number', 'select'
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { basicInfoFormRules, basicInfoFormItems, productDetailFormItems }
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,298 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<a-card :bordered="false">
 | 
				
			||||||
 | 
							<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
 | 
				
			||||||
 | 
								<a-row :gutter="24">
 | 
				
			||||||
 | 
									<a-col :span="6">
 | 
				
			||||||
 | 
										<a-form-item label="名称" name="name">
 | 
				
			||||||
 | 
											<a-input v-model:value="searchFormState.name" placeholder="请输入名称" />
 | 
				
			||||||
 | 
										</a-form-item>
 | 
				
			||||||
 | 
									</a-col>
 | 
				
			||||||
 | 
									<a-col :span="6">
 | 
				
			||||||
 | 
										<a-form-item label="可用状态" name="enabledState">
 | 
				
			||||||
 | 
											<a-select
 | 
				
			||||||
 | 
												v-model:value="searchFormState.enabledState"
 | 
				
			||||||
 | 
												placeholder="请选择可用状态"
 | 
				
			||||||
 | 
												:options="$TOOL.dictList('COMMON_STATUS')"
 | 
				
			||||||
 | 
											/>
 | 
				
			||||||
 | 
										</a-form-item>
 | 
				
			||||||
 | 
									</a-col>
 | 
				
			||||||
 | 
									<a-col :span="6">
 | 
				
			||||||
 | 
										<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
 | 
				
			||||||
 | 
										<a-button style="margin: 0 8px" @click="reset">重置</a-button>
 | 
				
			||||||
 | 
									</a-col>
 | 
				
			||||||
 | 
								</a-row>
 | 
				
			||||||
 | 
							</a-form>
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<a-card :bordered="false" class="mt-4" style="height: 100%">
 | 
				
			||||||
 | 
							<s-table
 | 
				
			||||||
 | 
								ref="tableRef"
 | 
				
			||||||
 | 
								:columns="columns"
 | 
				
			||||||
 | 
								:data="loadData"
 | 
				
			||||||
 | 
								:alert="options.alert.show"
 | 
				
			||||||
 | 
								bordered
 | 
				
			||||||
 | 
								:row-key="(record) => record.id"
 | 
				
			||||||
 | 
								:tool-config="options.toolConfig"
 | 
				
			||||||
 | 
								:row-selection="options.rowSelection"
 | 
				
			||||||
 | 
								:scroll="{
 | 
				
			||||||
 | 
									x: 100
 | 
				
			||||||
 | 
								}"
 | 
				
			||||||
 | 
							>
 | 
				
			||||||
 | 
								<template #operator>
 | 
				
			||||||
 | 
									<a-space>
 | 
				
			||||||
 | 
										<a-button
 | 
				
			||||||
 | 
											type="primary"
 | 
				
			||||||
 | 
											@click="
 | 
				
			||||||
 | 
												navigateTo('/inventory/invoice/add', {
 | 
				
			||||||
 | 
													type: 'ADD'
 | 
				
			||||||
 | 
												})
 | 
				
			||||||
 | 
											"
 | 
				
			||||||
 | 
											v-if="hasPerm('inventoryInvoice:add')"
 | 
				
			||||||
 | 
										>
 | 
				
			||||||
 | 
											<template #icon><plus-outlined /></template>
 | 
				
			||||||
 | 
											新增
 | 
				
			||||||
 | 
										</a-button>
 | 
				
			||||||
 | 
										<xn-batch-delete
 | 
				
			||||||
 | 
											v-if="hasPerm('inventoryInvoice:delete')"
 | 
				
			||||||
 | 
											:selectedRowKeys="selectedRowKeys"
 | 
				
			||||||
 | 
											@batchDelete="deleteBatchRecords"
 | 
				
			||||||
 | 
										/>
 | 
				
			||||||
 | 
										<a-button type="primary" @click="handleExamine">
 | 
				
			||||||
 | 
											<template #icon><plus-outlined /></template>
 | 
				
			||||||
 | 
											审核
 | 
				
			||||||
 | 
										</a-button>
 | 
				
			||||||
 | 
									</a-space>
 | 
				
			||||||
 | 
								</template>
 | 
				
			||||||
 | 
								<template #bodyCell="{ column, record }">
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'billNumber'">
 | 
				
			||||||
 | 
										<span style="color: #0d84ff">{{ record.billNumber }}</span>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'state'">
 | 
				
			||||||
 | 
										<a-tag :color="tagColorList[record.state - 1]">{{
 | 
				
			||||||
 | 
											$TOOL.dictTypeData('PRODUCE_TASK_STATE', record.state || '')
 | 
				
			||||||
 | 
										}}</a-tag>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'type'">
 | 
				
			||||||
 | 
										<a-tag :color="tagColorList[record.type - 1]">{{
 | 
				
			||||||
 | 
											$TOOL.dictTypeData('OUTBOUND_TYPE', record.type || '')
 | 
				
			||||||
 | 
										}}</a-tag>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'action'">
 | 
				
			||||||
 | 
										<a-space>
 | 
				
			||||||
 | 
											<a
 | 
				
			||||||
 | 
												@click="
 | 
				
			||||||
 | 
													navigateTo('/inventory/invoice/edit', {
 | 
				
			||||||
 | 
														type: 'SEARCH',
 | 
				
			||||||
 | 
														id: record.id
 | 
				
			||||||
 | 
													})
 | 
				
			||||||
 | 
												"
 | 
				
			||||||
 | 
												v-if="hasPerm('inventoryInvoice:edit')"
 | 
				
			||||||
 | 
											>
 | 
				
			||||||
 | 
												<EyeOutlined />
 | 
				
			||||||
 | 
												查看
 | 
				
			||||||
 | 
											</a>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											<a-divider
 | 
				
			||||||
 | 
												type="vertical"
 | 
				
			||||||
 | 
												v-if="hasPerm(['inventoryInvoice:edit', 'inventoryInvoice:delete'], 'and') && record.state === '1'"
 | 
				
			||||||
 | 
											/>
 | 
				
			||||||
 | 
											<a-dropdown v-if="record.state === '1'">
 | 
				
			||||||
 | 
												<a class="ant-dropdown-link" @click.prevent>
 | 
				
			||||||
 | 
													更多
 | 
				
			||||||
 | 
													<DownOutlined />
 | 
				
			||||||
 | 
												</a>
 | 
				
			||||||
 | 
												<template #overlay>
 | 
				
			||||||
 | 
													<a-menu>
 | 
				
			||||||
 | 
														<a-menu-item>
 | 
				
			||||||
 | 
															<a-button
 | 
				
			||||||
 | 
																type="link"
 | 
				
			||||||
 | 
																size="small"
 | 
				
			||||||
 | 
																@click="
 | 
				
			||||||
 | 
																	navigateTo('/inventory/invoice/edit', {
 | 
				
			||||||
 | 
																		type: 'EDIT',
 | 
				
			||||||
 | 
																		id: record.id
 | 
				
			||||||
 | 
																	})
 | 
				
			||||||
 | 
																"
 | 
				
			||||||
 | 
																v-if="hasPerm('inventoryInvoice:edit')"
 | 
				
			||||||
 | 
															>
 | 
				
			||||||
 | 
																<FormOutlined />
 | 
				
			||||||
 | 
																编辑
 | 
				
			||||||
 | 
															</a-button>
 | 
				
			||||||
 | 
														</a-menu-item>
 | 
				
			||||||
 | 
														<a-menu-item>
 | 
				
			||||||
 | 
															<a-button
 | 
				
			||||||
 | 
																type="link"
 | 
				
			||||||
 | 
																danger
 | 
				
			||||||
 | 
																size="small"
 | 
				
			||||||
 | 
																v-if="hasPerm('inventoryInvoice:delete')"
 | 
				
			||||||
 | 
																@click="deleteRecord(record)"
 | 
				
			||||||
 | 
															>
 | 
				
			||||||
 | 
																<DeleteOutlined />
 | 
				
			||||||
 | 
																删除
 | 
				
			||||||
 | 
															</a-button>
 | 
				
			||||||
 | 
														</a-menu-item>
 | 
				
			||||||
 | 
														
 | 
				
			||||||
 | 
													</a-menu>
 | 
				
			||||||
 | 
												</template>
 | 
				
			||||||
 | 
											</a-dropdown>
 | 
				
			||||||
 | 
										</a-space>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
 | 
								</template>
 | 
				
			||||||
 | 
							</s-table>
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup name="task">
 | 
				
			||||||
 | 
						import inventoryInvoiceApi from '@/api/inventory/inventoryInvoiceApi'
 | 
				
			||||||
 | 
						import { useTableManagement } from '@/hook/useTableManagement'
 | 
				
			||||||
 | 
						import { message } from 'ant-design-vue'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const tagColorList = ['warning', 'success', 'error', 'purple']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const tableColumns = [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '单号',
 | 
				
			||||||
 | 
								dataIndex: 'billNumber',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true,
 | 
				
			||||||
 | 
								sorter: true,
 | 
				
			||||||
 | 
								sortDirections: ['descend', 'ascend']
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '业务日期',
 | 
				
			||||||
 | 
								dataIndex: 'businessDate',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true,
 | 
				
			||||||
 | 
								sorter: true,
 | 
				
			||||||
 | 
								sortDirections: ['descend', 'ascend']
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '状态',
 | 
				
			||||||
 | 
								dataIndex: 'state',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '类型',
 | 
				
			||||||
 | 
								dataIndex: 'type',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '客户',
 | 
				
			||||||
 | 
								dataIndex: 'customerName',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '客户编码',
 | 
				
			||||||
 | 
								dataIndex: 'customerNumber',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '计划发货仓库',
 | 
				
			||||||
 | 
								dataIndex: 'storeName',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '业务员',
 | 
				
			||||||
 | 
								dataIndex: 'salesman',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '车牌号',
 | 
				
			||||||
 | 
								dataIndex: 'carNumber',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '收货方',
 | 
				
			||||||
 | 
								dataIndex: 'receiveParty',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '创建时间',
 | 
				
			||||||
 | 
								dataIndex: 'createTime',
 | 
				
			||||||
 | 
								sorter: true,
 | 
				
			||||||
 | 
								sortDirections: ['descend', 'ascend'],
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								title: '创建人',
 | 
				
			||||||
 | 
								dataIndex: 'createUserName',
 | 
				
			||||||
 | 
								align: 'center',
 | 
				
			||||||
 | 
								resizable: true,
 | 
				
			||||||
 | 
								width: 300,
 | 
				
			||||||
 | 
								ellipsis: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const {
 | 
				
			||||||
 | 
							searchFormState,
 | 
				
			||||||
 | 
							tableRef,
 | 
				
			||||||
 | 
							selectedRowKeys,
 | 
				
			||||||
 | 
							columns,
 | 
				
			||||||
 | 
							loadData,
 | 
				
			||||||
 | 
							reset,
 | 
				
			||||||
 | 
							deleteRecord,
 | 
				
			||||||
 | 
							deleteBatchRecords,
 | 
				
			||||||
 | 
							options,
 | 
				
			||||||
 | 
							searchFormRef,
 | 
				
			||||||
 | 
							navigateTo
 | 
				
			||||||
 | 
						} = useTableManagement(
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								page: inventoryInvoiceApi.inventoryInvoicePage,
 | 
				
			||||||
 | 
								delete: inventoryInvoiceApi.inventoryInvoiceDelete
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							tableColumns,
 | 
				
			||||||
 | 
							['inventoryInvoice:edit', 'inventoryInvoice:delete']
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 审核
 | 
				
			||||||
 | 
						const handleExamine = () => {
 | 
				
			||||||
 | 
							if (selectedRowKeys.value.length === 0) return message.error('请选择审核数据!')
 | 
				
			||||||
 | 
							inventoryInvoiceApi
 | 
				
			||||||
 | 
								.inventoryInvoiceAuditPass(
 | 
				
			||||||
 | 
									selectedRowKeys.value.map((item) => {
 | 
				
			||||||
 | 
										return {
 | 
				
			||||||
 | 
											id: item
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
								.then((res) => {
 | 
				
			||||||
 | 
									message.success('审核成功!')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									tableRef.value.refresh()
 | 
				
			||||||
 | 
									tableRef.value.clearRefreshSelected()
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					@ -76,6 +76,11 @@
 | 
				
			||||||
						$TOOL.dictTypeData('PRODUCE_TASK_STATE', record.state || '')
 | 
											$TOOL.dictTypeData('PRODUCE_TASK_STATE', record.state || '')
 | 
				
			||||||
					}}</a-tag>
 | 
										}}</a-tag>
 | 
				
			||||||
				</template>
 | 
									</template>
 | 
				
			||||||
 | 
									<template v-if="column.dataIndex === 'produceType'">
 | 
				
			||||||
 | 
										<a-tag :color="tagColorList[record.state - 1]">{{
 | 
				
			||||||
 | 
											$TOOL.dictTypeData('PRODUCE_TYPE', record.produceType || '')
 | 
				
			||||||
 | 
										}}</a-tag>
 | 
				
			||||||
 | 
									</template>
 | 
				
			||||||
				<template v-if="column.dataIndex === 'action'">
 | 
									<template v-if="column.dataIndex === 'action'">
 | 
				
			||||||
					<a-space>
 | 
										<a-space>
 | 
				
			||||||
						<a
 | 
											<a
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,117 @@
 | 
				
			||||||
 | 
					export const tableColumns = [
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '条码',
 | 
				
			||||||
 | 
							dataIndex: 'barcode',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '上级条码',
 | 
				
			||||||
 | 
							dataIndex: 'parentBarcode',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '关联条码',
 | 
				
			||||||
 | 
							dataIndex: 'relateBarcode',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '关联单号',
 | 
				
			||||||
 | 
							dataIndex: 'docsNumber',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '类型',
 | 
				
			||||||
 | 
							dataIndex: 'typeName',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 100,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '物料编码',
 | 
				
			||||||
 | 
							dataIndex: 'productNumber',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '物料名称',
 | 
				
			||||||
 | 
							dataIndex: 'productName',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 250,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '规格型号',
 | 
				
			||||||
 | 
							dataIndex: 'specification',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '内码',
 | 
				
			||||||
 | 
							dataIndex: 'barcodeInterior',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '批号',
 | 
				
			||||||
 | 
							dataIndex: 'batchNumber',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '基本数量',
 | 
				
			||||||
 | 
							dataIndex: 'basicAmount',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 90,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '处理内容',
 | 
				
			||||||
 | 
							dataIndex: 'content',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 300,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '创建人',
 | 
				
			||||||
 | 
							dataIndex: 'createUserName',
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							title: '创建时间',
 | 
				
			||||||
 | 
							dataIndex: 'createTime',
 | 
				
			||||||
 | 
							sorter: true,
 | 
				
			||||||
 | 
							sortDirections: ['descend', 'ascend'],
 | 
				
			||||||
 | 
							align: 'center',
 | 
				
			||||||
 | 
							resizable: true,
 | 
				
			||||||
 | 
							width: 200,
 | 
				
			||||||
 | 
							ellipsis: true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					import tool from '@/utils/tool'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const searchFields = [
 | 
				
			||||||
 | 
						{ name: 'barcode', label: '条码', component: 'a-input', props: { placeholder: '请输入条码' } },
 | 
				
			||||||
 | 
						{ name: 'barcodeInterior', label: '内码', component: 'a-input', props: { placeholder: '请输入内码' } }
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,81 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<AdvancedSearchForm
 | 
				
			||||||
 | 
							:formState="searchFormState"
 | 
				
			||||||
 | 
							:formFields="searchFields"
 | 
				
			||||||
 | 
							@search="tableRef.refresh()"
 | 
				
			||||||
 | 
							@reset="tableRef.refresh()"
 | 
				
			||||||
 | 
						/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<a-card :bordered="false" class="mt-4" style="height: 100%">
 | 
				
			||||||
 | 
							<a-row :gutter="24">
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								<a-col :span="24">
 | 
				
			||||||
 | 
									<s-table
 | 
				
			||||||
 | 
										ref="tableRef"
 | 
				
			||||||
 | 
										:columns="columns"
 | 
				
			||||||
 | 
										:data="loadData"
 | 
				
			||||||
 | 
										:alert="options.alert.show"
 | 
				
			||||||
 | 
										bordered
 | 
				
			||||||
 | 
										:row-key="(record) => record.id"
 | 
				
			||||||
 | 
										:tool-config="options.toolConfig"
 | 
				
			||||||
 | 
										:row-selection="options.rowSelection"
 | 
				
			||||||
 | 
										:scroll="{
 | 
				
			||||||
 | 
											x: 100
 | 
				
			||||||
 | 
										}"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
										<template #operator>
 | 
				
			||||||
 | 
											<a-space>
 | 
				
			||||||
 | 
												<a-button @click="exportBatchVerify" v-if="hasPerm('produceBarcodeHistory:export')">
 | 
				
			||||||
 | 
													<template #icon><export-outlined /></template>
 | 
				
			||||||
 | 
													导出
 | 
				
			||||||
 | 
												</a-button>
 | 
				
			||||||
 | 
											</a-space>
 | 
				
			||||||
 | 
										</template>
 | 
				
			||||||
 | 
										<template #bodyCell="{ column, record }">
 | 
				
			||||||
 | 
											<template v-if="column.dataIndex === 'barcode'">
 | 
				
			||||||
 | 
												<span style="color: #0d84ff">{{ record.barcode }}</span>
 | 
				
			||||||
 | 
											</template>
 | 
				
			||||||
 | 
											
 | 
				
			||||||
 | 
										</template>
 | 
				
			||||||
 | 
									</s-table>
 | 
				
			||||||
 | 
								</a-col>
 | 
				
			||||||
 | 
							</a-row>
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						</a-card>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script setup name="basicDataClient">
 | 
				
			||||||
 | 
						import historyApi from '@/api/production/produceTask/produceBarcodeHistoryApi'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						import { useTableManagement } from '@/hook/useTableManagement'
 | 
				
			||||||
 | 
						import { searchFields } from '@/views/productionBusiness/traceability/barcodeHistory/formFields/searchFields'
 | 
				
			||||||
 | 
						import { tableColumns } from '@/views/productionBusiness/traceability/barcodeHistory/columns/tableColumn'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const {
 | 
				
			||||||
 | 
							searchFormState,
 | 
				
			||||||
 | 
							tableRef,
 | 
				
			||||||
 | 
							selectedRowKeys,
 | 
				
			||||||
 | 
							columns,
 | 
				
			||||||
 | 
							loadData,
 | 
				
			||||||
 | 
							deleteRecord,
 | 
				
			||||||
 | 
							deleteBatchRecords,
 | 
				
			||||||
 | 
							options,
 | 
				
			||||||
 | 
							navigateTo
 | 
				
			||||||
 | 
						} = useTableManagement(
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								page: historyApi.produceBarcodeHistoryPage
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							tableColumns,
 | 
				
			||||||
 | 
							['produceBarcodeHistory:export']
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						// 批量导出
 | 
				
			||||||
 | 
						const exportBatchVerify = () =>{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						onMounted(() => {
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue