增加入库单、发货通知单、条码历史模块
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