服务端入库预约
parent
9c7474793c
commit
e12f5d26aa
@ -0,0 +1,46 @@
|
||||
// @ts-ignore
|
||||
import { request } from '/@/utils/request'
|
||||
import { DataResult, PageRequest } from '../model/baseModel'
|
||||
enum Api {
|
||||
list = '/WmsInPlan/GetWmsInPlanList',
|
||||
|
||||
getWmsInPlanGoodslist = '/WmsInPlan/GetWmsInPlanGoodsList',
|
||||
getInfo = '/WmsInPlan/GetWmsInPlanInfo',
|
||||
editInfo = '/WmsInPlan/EditWmsInPlanInfo',
|
||||
submitInfo = '/WmsInPlan/SubmitWmsInPlan',
|
||||
}
|
||||
export function getList(data: PageRequest) {
|
||||
return request<DataResult>({
|
||||
url: Api.list,
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
||||
export function getInfo(query: { id: string }) {
|
||||
return request<DataResult>({
|
||||
url: Api.getInfo,
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
export function getWmsInPlanGoodslist(query: { id: string }) {
|
||||
return request<DataResult>({
|
||||
url: Api.getWmsInPlanGoodslist,
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
export function editInfo(data: any) {
|
||||
return request<DataResult>({
|
||||
url: Api.editInfo,
|
||||
method: 'post',
|
||||
data,
|
||||
})
|
||||
}
|
||||
export function submitInfo(query: { id: string }) {
|
||||
return request<DataResult>({
|
||||
url: Api.submitInfo,
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
@ -0,0 +1,199 @@
|
||||
<template>
|
||||
<vxe-grid ref="xGrid" v-bind="gridOptions" />
|
||||
<!-- :refresh="{ query: loadListData }-->
|
||||
<!-- <vxe-table-->
|
||||
<!-- border-->
|
||||
<!-- show-overflow-->
|
||||
<!-- keep-source-->
|
||||
<!-- ref="xTable"-->
|
||||
<!-- height="500"-->
|
||||
<!-- :seq-config="tableSeq"-->
|
||||
<!-- :column-config="{ resizable: true }"-->
|
||||
<!-- :export-config="{}"-->
|
||||
<!-- :loading="planGoods.loading"-->
|
||||
<!-- :mouse-config="{ selected: true }"-->
|
||||
<!-- :checkbox-config="{ range: true }"-->
|
||||
<!-- :data="props.dataList"-->
|
||||
<!-- :keyboard-config="planGoods.tableKeyboardConfig"-->
|
||||
<!-- :edit-config="{ trigger: 'dblclick', mode: 'cell' }"-->
|
||||
<!-- @change="onTableChange"-->
|
||||
<!-- >-->
|
||||
<!-- <vxe-column type="checkbox" width="60" fixed="left" />-->
|
||||
<!-- <vxe-column type="seq" width="80" fixed="left">-->
|
||||
<!-- <template #header>-->
|
||||
<!-- <span>序号</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column field="goodscode" title="goodscode" :visible="false" />-->
|
||||
<!-- <vxe-column field="gid" title="gid" :visible="false" />-->
|
||||
<!-- <vxe-column field="storageunit" title="storageunit" :visible="false" />-->
|
||||
<!-- <vxe-column field="wmsplanid" title="wmsplanid" :visible="false" />-->
|
||||
<!-- <vxe-column field="goodsname" title="商品名称" width="250" />-->
|
||||
<!-- <vxe-column field="goodsmodel" title="规格型号" width="150" />-->
|
||||
<!-- <vxe-column-->
|
||||
<!-- field="kgs"-->
|
||||
<!-- title="毛重(千克)"-->
|
||||
<!-- width="200"-->
|
||||
<!-- :edit-render="{ autofocus: '.vxe-input--inner' }"-->
|
||||
<!-- >-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.kgs" type="number" min="0" clearable />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column-->
|
||||
<!-- field="netweight"-->
|
||||
<!-- title=" 净重(千克)"-->
|
||||
<!-- width="150"-->
|
||||
<!-- :edit-render="{ autofocus: '.vxe-input--inner' }"-->
|
||||
<!-- >-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.netweight" type="number" min="0" clearable />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column-->
|
||||
<!-- field="cbm"-->
|
||||
<!-- title="体积"-->
|
||||
<!-- width="100"-->
|
||||
<!-- :edit-render="{ autofocus: '.vxe-input--inner' }"-->
|
||||
<!-- >-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.cbm" type="number" min="0" clearable />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column-->
|
||||
<!-- field="pkgs"-->
|
||||
<!-- title="件数"-->
|
||||
<!-- width="100"-->
|
||||
<!-- :edit-render="{ autofocus: '.vxe-input--inner' }"-->
|
||||
<!-- >-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.pkgs" type="number" min="0" clearable />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column-->
|
||||
<!-- field="truckno"-->
|
||||
<!-- title="承运车号"-->
|
||||
<!-- width="150"-->
|
||||
<!-- :edit-render="{ autofocus: '.vxe-input--inner' }"-->
|
||||
<!-- >-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.truckno" type="text" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column-->
|
||||
<!-- field="drivername"-->
|
||||
<!-- title="司机"-->
|
||||
<!-- width="150"-->
|
||||
<!-- :edit-render="{ autofocus: '.vxe-input--inner' }"-->
|
||||
<!-- >-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.drivername" type="text" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- <vxe-column field="remark" title="备注" :edit-render="{ autofocus: '.vxe-input--inner' }">-->
|
||||
<!-- <template #edit="{ row }">-->
|
||||
<!-- <vxe-input v-model="row.remark" type="text" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </vxe-column>-->
|
||||
<!-- </vxe-table>-->
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { defineComponent, reactive, onMounted, ref, unref } from 'vue'
|
||||
import { VXETable, VxeGridProps, VxeTableInstance, VxeTablePropTypes } from 'vxe-table'
|
||||
import { getWmsInPlanGoodslist } from '/@/api/wms/wmsinplan'
|
||||
import { stringIsNull } from '/@/utils/commonUtil'
|
||||
import { propTypes } from '/@/utils/propTypes'
|
||||
const goodsFilterData = ref([])
|
||||
//getTableData()
|
||||
// 组件接收参数
|
||||
const props = defineProps({
|
||||
dataList: propTypes.array.def(() => []),
|
||||
id: propTypes.string,
|
||||
})
|
||||
const gridOptions = reactive<VxeGridProps>({
|
||||
border: true,
|
||||
height: 500,
|
||||
align: null,
|
||||
columnConfig: {
|
||||
resizable: true,
|
||||
},
|
||||
columns: [
|
||||
// { type: 'seq', width: 50 },
|
||||
// { field: 'name', title: 'name' },
|
||||
// { field: 'sex', title: 'sex', showHeaderOverflow: true },
|
||||
// { field: 'address', title: 'Address', showOverflow: true },
|
||||
{
|
||||
title: '序号',
|
||||
type: 'seq',
|
||||
fixed: 'left',
|
||||
width: '50',
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
title: '商品名称',
|
||||
field: 'goodsname',
|
||||
width: 200,
|
||||
fixed: 'left',
|
||||
},
|
||||
{
|
||||
title: '规格型号',
|
||||
field: 'goodsmodel',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '毛重(千克)',
|
||||
field: 'kgs',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '净重(千克)',
|
||||
field: 'netweight',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '体积',
|
||||
field: 'cbm',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '件数',
|
||||
field: 'pkgs',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '承运车号',
|
||||
field: 'truckno',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '司机',
|
||||
field: 'drivername',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '备注',
|
||||
field: 'remark',
|
||||
width: 200,
|
||||
},
|
||||
],
|
||||
toolbarConfig: {},
|
||||
// data: props.dataList,
|
||||
proxyConfig: {
|
||||
ajax: {
|
||||
// 接收 Promise
|
||||
query: () => {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
const list = props.dataList
|
||||
console.log(props.dataList)
|
||||
resolve(list)
|
||||
}, 100)
|
||||
})
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
@ -0,0 +1,290 @@
|
||||
<template>
|
||||
<BasicModal
|
||||
v-bind="$attrs"
|
||||
@register="registerModal"
|
||||
:useWrapper="true"
|
||||
:title="getTitle"
|
||||
width="80%"
|
||||
@ok="handleSave"
|
||||
>
|
||||
<BasicForm @register="registerForm">
|
||||
<template #auditStatusSlot="{ model, field }">
|
||||
<canvas id="canvas" width="200" height="200"></canvas>
|
||||
</template>
|
||||
</BasicForm>
|
||||
<Divider>预约入库明细</Divider>
|
||||
<!-- <VxeTableWmsInPlanGoods ref="tableRef" :dataList="dataSource" />-->
|
||||
<vxe-grid ref="xGrid" v-bind="gridOptions" />
|
||||
<!--右下角按钮-->
|
||||
<template #footer>
|
||||
<a-button
|
||||
v-show="isUpdate"
|
||||
@click="handleAudit"
|
||||
preIcon="ant-design:cloud-upload-outlined"
|
||||
type="error"
|
||||
:loading="loading"
|
||||
style="margin-right: 0.8rem"
|
||||
>审批</a-button
|
||||
>
|
||||
<a-button
|
||||
@click="closeModal"
|
||||
preIcon="ant-design:close-outlined"
|
||||
type="warning"
|
||||
:loading="loading"
|
||||
ghost
|
||||
style="margin-right: 0.8rem"
|
||||
>取消</a-button
|
||||
>
|
||||
</template>
|
||||
</BasicModal>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, computed, unref, h, reactive } from 'vue'
|
||||
import { BasicModal, useModalInner, useModal } from '/@/components/Modal'
|
||||
import { BasicForm, useForm } from '/@/components/Form/index'
|
||||
import { formSchema } from './columns'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
// import GoodsTypeSelectModal from './GoodsTypeSelectModal.vue'
|
||||
import chapter from '/@/utils/chapter'
|
||||
// import VxeTableWmsInPlanGoods from './VxeTableWmsInPlanGoods.vue'
|
||||
const { notification, createConfirm, createMessage } = useMessage()
|
||||
import { editInfo, getInfo, submitInfo, getWmsInPlanGoodslist } from '/@/api/wms/wmsinplan'
|
||||
import { Divider } from 'ant-design-vue'
|
||||
import { VxeGridProps } from 'vxe-table'
|
||||
// 声明Emits
|
||||
const emit = defineEmits(['change', 'update:value', 'success', 'register'])
|
||||
const isUpdate = ref(true)
|
||||
const loading = ref(false)
|
||||
const rowId = ref('')
|
||||
const dataSource = ref<any[]>([])
|
||||
|
||||
const [registerForm, { resetFields, setFieldsValue, validate, updateSchema, getFieldsValue }] =
|
||||
useForm({
|
||||
labelWidth: 180,
|
||||
schemas: formSchema,
|
||||
showActionButtonGroup: false,
|
||||
})
|
||||
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||
resetFields()
|
||||
setModalProps({ confirmLoading: false, loading: true })
|
||||
isUpdate.value = !!data?.isUpdate
|
||||
|
||||
if (unref(isUpdate)) {
|
||||
// setModalProps({ confirmLoading: true });
|
||||
rowId.value = data.record.wmsplanid
|
||||
const res: API.DataResult = await getInfo({ id: unref(rowId) })
|
||||
await loadListData()
|
||||
if (res.succeeded) {
|
||||
await setFieldsValue({
|
||||
...res.data,
|
||||
})
|
||||
// console.log(res.data.list)
|
||||
// data.value = res.data.list
|
||||
|
||||
const status = res.data.auditStatus
|
||||
console.log(status)
|
||||
if (status === -1) {
|
||||
chapter('未提交', '高速临空公共服务平台', 'red')
|
||||
} else if (status === 0) {
|
||||
chapter('待审批', '高速临空公共服务平台', 'blue')
|
||||
} else if (status === 1) {
|
||||
chapter('审核通过', '高速临空公共服务平台', 'green')
|
||||
} else if (status === 2) {
|
||||
chapter('审核驳回', '高速临空公共服务平台', 'orange')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dataSource.value = []
|
||||
updateSchema([
|
||||
{
|
||||
field: 'divider-audit',
|
||||
show: unref(isUpdate),
|
||||
},
|
||||
{
|
||||
field: 'auditStatus',
|
||||
show: unref(isUpdate),
|
||||
},
|
||||
{
|
||||
field: 'auditNote',
|
||||
show: unref(isUpdate),
|
||||
},
|
||||
])
|
||||
}
|
||||
setModalProps({ loading: false })
|
||||
})
|
||||
const [registerSelectModal, { openModal }] = useModal()
|
||||
|
||||
async function loadListData() {
|
||||
// const { summaryFunc, summaryData } = props;
|
||||
const res: API.DataResult = await getWmsInPlanGoodslist({ id: unref(rowId) })
|
||||
console.log(res)
|
||||
if (res.succeeded) {
|
||||
dataSource.value = res.data
|
||||
} else {
|
||||
dataSource.value = []
|
||||
}
|
||||
console.log(dataSource.value)
|
||||
}
|
||||
const gridOptions = reactive<VxeGridProps>({
|
||||
border: true,
|
||||
height: 500,
|
||||
align: null,
|
||||
columnConfig: {
|
||||
resizable: true,
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
title: '序号',
|
||||
type: 'seq',
|
||||
fixed: 'left',
|
||||
width: 50,
|
||||
align: 'center',
|
||||
},
|
||||
{
|
||||
title: '商品名称',
|
||||
field: 'goodsname',
|
||||
width: 200,
|
||||
fixed: 'left',
|
||||
},
|
||||
{
|
||||
title: '规格型号',
|
||||
field: 'goodsmodel',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '毛重(千克)',
|
||||
field: 'kgs',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '净重(千克)',
|
||||
field: 'netweight',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '体积',
|
||||
field: 'cbm',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '件数',
|
||||
field: 'pkgs',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '承运车号',
|
||||
field: 'truckno',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '司机',
|
||||
field: 'drivername',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '备注',
|
||||
field: 'remark',
|
||||
},
|
||||
],
|
||||
toolbarConfig: {},
|
||||
data: dataSource,
|
||||
// proxyConfig: {
|
||||
// ajax: {
|
||||
// // 接收 Promise
|
||||
// query: () => {
|
||||
// return new Promise((resolve) => {
|
||||
// setTimeout(() => {
|
||||
// const list = dataSource.value
|
||||
// resolve(list)
|
||||
// }, 100)
|
||||
// })
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
})
|
||||
const closeSelectModal = (data: any) => {
|
||||
console.log('接收值', data)
|
||||
setFieldsValue({
|
||||
goodsTypeGID: data.gid,
|
||||
goodsTypeName: data.goodsTypeName,
|
||||
})
|
||||
}
|
||||
const getTitle = computed(() => (!unref(isUpdate) ? '预约入库-新增' : '预约入库-审批'))
|
||||
|
||||
async function handleSave(exit) {
|
||||
try {
|
||||
const values = await validate()
|
||||
setModalProps({ confirmLoading: true })
|
||||
loading.value = true
|
||||
var postData = Object.assign({}, values, { list: dataSource.value })
|
||||
console.log(postData)
|
||||
const res: API.DataResult = await editInfo(postData)
|
||||
console.log(res)
|
||||
if (res.succeeded) {
|
||||
notification.success({ message: res.message, duration: 3 })
|
||||
emit('success')
|
||||
//刷新页面
|
||||
if (!exit) {
|
||||
await refresh()
|
||||
}
|
||||
} else {
|
||||
notification.error({ message: res.message, duration: 3 })
|
||||
}
|
||||
exit && closeModal()
|
||||
} finally {
|
||||
loading.value = false
|
||||
setModalProps({ confirmLoading: false })
|
||||
}
|
||||
}
|
||||
|
||||
//获取VxeTable明细数据;
|
||||
// function setValue(data: any) {
|
||||
// console.log('明细', data)
|
||||
// saveData.value = data
|
||||
// }
|
||||
async function refresh() {
|
||||
const res: API.DataResult = await getInfo({ id: unref(rowId) })
|
||||
await loadListData()
|
||||
if (res.succeeded) {
|
||||
await setFieldsValue({
|
||||
...res.data,
|
||||
})
|
||||
const status = res.data.auditStatus
|
||||
if (status === -1) {
|
||||
chapter('未提交', '高速临空公共服务平台', 'red')
|
||||
} else if (status === 0) {
|
||||
chapter('待审批', '高速临空公共服务平台', 'blue')
|
||||
} else if (status === 1) {
|
||||
chapter('审核通过', '高速临空公共服务平台', 'green')
|
||||
} else if (status === 2) {
|
||||
chapter('审核驳回', '高速临空公共服务平台', 'orange')
|
||||
}
|
||||
}
|
||||
}
|
||||
async function handleAudit() {
|
||||
try {
|
||||
const values = await validate()
|
||||
loading.value = true
|
||||
createConfirm({
|
||||
iconType: 'warning',
|
||||
title: '确认审批',
|
||||
content: '是否确认审批该单据!!!',
|
||||
onOk: async () => {
|
||||
// const res: API.DataResult = await submitInfo({ id: unref(rowId) })
|
||||
// // console.log(res);
|
||||
// if (res.succeeded) {
|
||||
// notification.success({ message: res.message, duration: 3 })
|
||||
// closeModal()
|
||||
// emit('success')
|
||||
// } else {
|
||||
// notification.error({ message: res.message, duration: 3 })
|
||||
// }
|
||||
closeModal()
|
||||
emit('success')
|
||||
},
|
||||
})
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,452 @@
|
||||
// import { h, ref } from 'vue';
|
||||
// import { Icon } from '/@/components/Icon';
|
||||
import { Tag } from 'ant-design-vue'
|
||||
import { BasicColumn, FormSchema } from '/@/components/Table'
|
||||
import { formatToDate, formatToDateTime } from '/@/utils/dateUtil';
|
||||
import dayjs from 'dayjs';
|
||||
import { getDictOption } from '/@/utils/dictUtil'
|
||||
import { UploadTypeEnum } from '/@/components/Form/src/Ds/components/DUpload'
|
||||
import { getGoodsList } from '/@/api/common'
|
||||
import {VxeGridPropTypes} from "vxe-table";
|
||||
export const columns: BasicColumn[] = [
|
||||
{
|
||||
title: 'wmsplanid',
|
||||
dataIndex: 'wmsplanid',
|
||||
ifShow: false,
|
||||
},
|
||||
{
|
||||
title: '委托编号',
|
||||
dataIndex: 'wmsno',
|
||||
width: 120,
|
||||
},
|
||||
{
|
||||
title: '客户名称',
|
||||
dataIndex: 'clientName',
|
||||
width: 150,
|
||||
},
|
||||
{
|
||||
title: '提单号',
|
||||
dataIndex: 'mblno',
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
title: '合同编号',
|
||||
dataIndex: 'contractno',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '品名',
|
||||
dataIndex: 'goodsname',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '承运车辆',
|
||||
dataIndex: 'truckno',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '预约日期',
|
||||
dataIndex: 'plantime',
|
||||
width: 80,
|
||||
customRender: ({ text }) => {
|
||||
return formatToDate(text)
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '包装方式',
|
||||
dataIndex: 'kindpkgs',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '是否保税',
|
||||
dataIndex: 'billtype',
|
||||
width: 40,
|
||||
customRender: ({ text }) => {
|
||||
if (text === '0') {
|
||||
return <Tag color="red">否</Tag>
|
||||
} else if (text === '1') {
|
||||
return <Tag color="success">是</Tag>
|
||||
}
|
||||
return text
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '规格型号',
|
||||
dataIndex: 'goodsmodel',
|
||||
width: 80,
|
||||
},
|
||||
{
|
||||
title: '审批状态',
|
||||
dataIndex: 'auditStatus',
|
||||
width: 50,
|
||||
filters: [
|
||||
{ text: '未提交', value: '-1' },
|
||||
{ text: '待审批', value: '0' },
|
||||
{ text: '审核通过', value: '1' },
|
||||
{ text: '驳回', value: '2' },
|
||||
],
|
||||
customRender: ({ text }) => {
|
||||
if (text === -1) {
|
||||
return <Tag color="red">未提交</Tag>
|
||||
} else if (text === 0) {
|
||||
return <Tag color="blue">待审批</Tag>
|
||||
} else if (text === 1) {
|
||||
return <Tag color="success">审核通过</Tag>
|
||||
} else if (text === 2) {
|
||||
return <Tag color="warning">驳回</Tag>
|
||||
}
|
||||
return text
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '审批备注',
|
||||
dataIndex: 'auditNote',
|
||||
width: 80,
|
||||
},
|
||||
]
|
||||
export const listcolumns: BasicColumn[] = [
|
||||
{
|
||||
title: 'gid',
|
||||
dataIndex: 'gid',
|
||||
ifShow: false,
|
||||
},
|
||||
{
|
||||
title: 'wmsplanid',
|
||||
dataIndex: 'wmsplanid',
|
||||
ifShow: false,
|
||||
},
|
||||
{
|
||||
title: 'storageunit',
|
||||
dataIndex: 'storageunit',
|
||||
ifShow: false,
|
||||
},
|
||||
// {
|
||||
// title: '提单号',
|
||||
// dataIndex: 'mblno',
|
||||
// editRow: true,
|
||||
// width: 80,
|
||||
// },
|
||||
{
|
||||
title: 'goodscode',
|
||||
dataIndex: 'goodscode',
|
||||
ifShow: false,
|
||||
},
|
||||
{
|
||||
title: '商品名称',
|
||||
dataIndex: 'goodsname',
|
||||
// editComponent: 'Select',
|
||||
editRow: true,
|
||||
fixed: 'left',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '规格型号',
|
||||
dataIndex: 'goodsmodel',
|
||||
// editComponent: 'Select',
|
||||
editRow: false,
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '毛重(千克)',
|
||||
dataIndex: 'kgs',
|
||||
editRow: true,
|
||||
width: 80,
|
||||
editComponent: 'InputNumber',
|
||||
editComponentProps: () => {
|
||||
return {
|
||||
min: 0,
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '净重(千克)',
|
||||
dataIndex: 'netweight',
|
||||
editRow: true,
|
||||
width: 80,
|
||||
editComponent: 'InputNumber',
|
||||
editComponentProps: () => {
|
||||
return {
|
||||
min: 0,
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '体积',
|
||||
dataIndex: 'cbm',
|
||||
editRow: true,
|
||||
width: 80,
|
||||
editComponent: 'InputNumber',
|
||||
editComponentProps: () => {
|
||||
return {
|
||||
min: 0,
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '件数',
|
||||
dataIndex: 'pkgs',
|
||||
editRow: true,
|
||||
width: 80,
|
||||
editComponent: 'InputNumber',
|
||||
editComponentProps: () => {
|
||||
return {
|
||||
min: 0,
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
title: '承运车号',
|
||||
dataIndex: 'truckno',
|
||||
editRow: true,
|
||||
editComponent: 'Input',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '司机',
|
||||
dataIndex: 'drivername',
|
||||
editRow: true,
|
||||
editComponent: 'Input',
|
||||
width: 100,
|
||||
},
|
||||
{
|
||||
title: '备注',
|
||||
dataIndex: 'remark',
|
||||
editRow: true,
|
||||
editComponent: 'Input',
|
||||
width: 120,
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
{
|
||||
field: 'ClientName',
|
||||
label: '客户名称:',
|
||||
component: 'Input',
|
||||
colProps: { span: 8 },
|
||||
},
|
||||
{
|
||||
field: 'MBLNO',
|
||||
label: '提单号:',
|
||||
component: 'Input',
|
||||
colProps: { span: 8 },
|
||||
},
|
||||
]
|
||||
export const formSchema: FormSchema[] = [
|
||||
{
|
||||
field: 'divider-selects',
|
||||
component: 'Divider',
|
||||
label: '基本信息',
|
||||
colProps: {
|
||||
span: 24,
|
||||
},
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
field: 'wmsplanid',
|
||||
component: 'Input',
|
||||
defaultValue: '',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
label: '',
|
||||
field: 'clientId',
|
||||
component: 'Input',
|
||||
defaultValue: '',
|
||||
show: false,
|
||||
},
|
||||
{
|
||||
field: 'wmsno',
|
||||
label: '委托编号',
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'plantime',
|
||||
label: '预计日期',
|
||||
component: 'DatePicker',
|
||||
required: true,
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {
|
||||
disabledDate: (current: dayjs.Dayjs) => {
|
||||
return current && current < dayjs().add(-1, 'day').endOf('day')
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'mblno',
|
||||
label: '提单号',
|
||||
required: true,
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {},
|
||||
},
|
||||
{
|
||||
field: 'contractno',
|
||||
label: '合同编号',
|
||||
required: true,
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {},
|
||||
},
|
||||
{
|
||||
field: 'billtype',
|
||||
label: '是否保税',
|
||||
required: true,
|
||||
component: 'RadioButtonGroup',
|
||||
defaultValue: '1',
|
||||
colProps: { span: 8 },
|
||||
componentProps: {
|
||||
options: getDictOption('shifou'),
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'ruleunit',
|
||||
label: '申报计量单位',
|
||||
component: 'RadioButtonGroup',
|
||||
defaultValue: '吨',
|
||||
required: true,
|
||||
colProps: { span: 8 },
|
||||
componentProps: {
|
||||
options: getDictOption('storeunit'),
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'kindpkgs',
|
||||
label: '包装方式',
|
||||
component: 'RadioButtonGroup',
|
||||
defaultValue: '托盘',
|
||||
required: true,
|
||||
colProps: { span: 8 },
|
||||
componentProps: {
|
||||
options: getDictOption('kindpkgs'),
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'goodsname',
|
||||
label: '商品名称',
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'goodsmodel',
|
||||
label: '规格型号',
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'truckno',
|
||||
label: '承运车辆',
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
componentProps: {
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'remark',
|
||||
label: '备注',
|
||||
component: 'InputTextArea',
|
||||
colProps: { span: 20 },
|
||||
componentProps: {
|
||||
placeholder: '',
|
||||
rows: 4,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'divider-selects',
|
||||
component: 'Divider',
|
||||
label: '报关资料',
|
||||
colProps: {
|
||||
span: 24,
|
||||
},
|
||||
helpMessage: ['请按要求上传报关单资料!'],
|
||||
ifShow: ({ values }) => {
|
||||
return values.billtype === '1' && !!values.wmsplanid
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'file',
|
||||
component: 'DUpload',
|
||||
helpMessage: '最多上传2个文件',
|
||||
label: '报关单',
|
||||
componentProps: {
|
||||
maxCount: 2,
|
||||
disabled: true,
|
||||
fileType: UploadTypeEnum.image,
|
||||
},
|
||||
ifShow: ({ values }) => {
|
||||
return values.billtype === '1' && !!values.wmsplanid
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'divider-selects',
|
||||
component: 'Divider',
|
||||
label: '审批意见',
|
||||
colProps: {
|
||||
span: 24,
|
||||
},
|
||||
},
|
||||
{
|
||||
field: 'auditStatus',
|
||||
label: '审批状态',
|
||||
component: 'Input',
|
||||
colProps: {
|
||||
span: 8,
|
||||
},
|
||||
slot: 'auditStatusSlot',
|
||||
},
|
||||
{
|
||||
field: 'auditNote',
|
||||
component: 'InputTextArea',
|
||||
label: '审核意见',
|
||||
colProps: {
|
||||
span: 18,
|
||||
},
|
||||
componentProps: {
|
||||
placeholder: '请填写审核意见',
|
||||
rows: 4,
|
||||
},
|
||||
required: true,
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
component: 'RadioButtonGroup',
|
||||
label: '审批选项',
|
||||
defaultValue: 1,
|
||||
required: true,
|
||||
colProps: {
|
||||
span: 18,
|
||||
},
|
||||
componentProps: {
|
||||
placeholder: '请选择状态',
|
||||
options: [
|
||||
{ label: '通过', value: 1 },
|
||||
{ label: '驳回', value: 2 },
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
@ -0,0 +1,130 @@
|
||||
<template>
|
||||
<PageWrapper contentBackground contentClass="flex" dense contentFullHeight fixedHeight>
|
||||
<BasicTable @register="registerTable">
|
||||
<template #toolbar> </template>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'action'">
|
||||
<TableAction
|
||||
:actions="[
|
||||
{
|
||||
icon: 'ant-design:fork-outlined',
|
||||
tooltip: '审批',
|
||||
color: 'error',
|
||||
onClick: handleAudit.bind(null, record),
|
||||
},
|
||||
]"
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
</BasicTable>
|
||||
<WmsInPlanModal @register="registerModal" @success="handleSuccess" />
|
||||
</PageWrapper>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { BasicTable, useTable, TableAction, SorterResult } from '/@/components/Table'
|
||||
import { useModal } from '/@/components/Modal'
|
||||
import { getList } from '/@/api/wms/wmsinplan'
|
||||
import { PageWrapper } from '/@/components/Page'
|
||||
import WmsInPlanModal from './WmsInPlanVxeModal.vue'
|
||||
import { columns, searchFormSchema } from './columns'
|
||||
let sortInfo: SorterResult = {}
|
||||
let filterInfo: Partial<Recordable<string[]>> = []
|
||||
const [registerModal, { openModal }] = useModal()
|
||||
const [registerTable, { reload, getForm, getPaginationRef }] = useTable({
|
||||
title: '预约入库列表',
|
||||
api: async (p) => {
|
||||
const res: API.DataResult = await getList(p)
|
||||
// console.log(items);
|
||||
return new Promise((resolve) => {
|
||||
resolve({ data: [...res.data], total: res.count })
|
||||
})
|
||||
},
|
||||
beforeFetch: () => {
|
||||
var currentPageInfo: any = getPaginationRef()
|
||||
// var data = getForm().getFieldsValue()
|
||||
const postParam: API.PageRequest = {
|
||||
queryCondition: '',
|
||||
pageCondition: {
|
||||
pageIndex: currentPageInfo.current,
|
||||
pageSize: currentPageInfo.pageSize,
|
||||
sortConditions: [],
|
||||
},
|
||||
}
|
||||
var data = getForm().getFieldsValue()
|
||||
/* 排序字段 */
|
||||
if (!!sortInfo.columnKey) {
|
||||
postParam.pageCondition.sortConditions.push({
|
||||
sortField: sortInfo.field,
|
||||
listSortDirection: sortInfo.order === 'ascend' ? 0 : 1,
|
||||
})
|
||||
} else {
|
||||
postParam.pageCondition.sortConditions.push({
|
||||
sortField: 'wmsno',
|
||||
listSortDirection: 1,
|
||||
})
|
||||
}
|
||||
/* 检索字段 */
|
||||
let condition: API.ConditionItem[] = []
|
||||
if (!!data.MBLNO) {
|
||||
condition.push({
|
||||
FieldName: 'MBLNO',
|
||||
FieldValue: data.MBLNO,
|
||||
ConditionalType: 1,
|
||||
})
|
||||
}
|
||||
// /* 筛选字段 */
|
||||
// if (filterInfo === null) {
|
||||
// } else {
|
||||
// if (!!filterInfo.userType && filterInfo.userType.length > 0) {
|
||||
// condition.push({
|
||||
// FieldName: 'UserType',
|
||||
// FieldValue: filterInfo.userType.join(),
|
||||
// ConditionalType: 6,
|
||||
// })
|
||||
// }
|
||||
// if (!!filterInfo.status && filterInfo.status.length > 0) {
|
||||
// condition.push({
|
||||
// FieldName: 'Status',
|
||||
// FieldValue: filterInfo.status.join(),
|
||||
// ConditionalType: 6,
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
postParam.queryCondition = JSON.stringify(condition)
|
||||
// console.log(postParam);
|
||||
return postParam
|
||||
},
|
||||
columns: columns,
|
||||
sortFn: (sorter) => {
|
||||
// console.log('排序:' + sorter);
|
||||
sortInfo = sorter
|
||||
},
|
||||
filterFn: (filters) => {
|
||||
// console.log('筛选:' + filters);
|
||||
filterInfo = filters
|
||||
},
|
||||
bordered: true,
|
||||
useSearchForm: true,
|
||||
formConfig: {
|
||||
labelWidth: 120,
|
||||
schemas: searchFormSchema,
|
||||
},
|
||||
showTableSetting: true,
|
||||
tableSetting: { fullScreen: true },
|
||||
actionColumn: {
|
||||
width: 80,
|
||||
title: '操作',
|
||||
dataIndex: 'action',
|
||||
fixed: undefined,
|
||||
},
|
||||
})
|
||||
function handleAudit(record: Recordable) {
|
||||
openModal(true, {
|
||||
record,
|
||||
isUpdate: true,
|
||||
})
|
||||
}
|
||||
function handleSuccess() {
|
||||
reload()
|
||||
}
|
||||
</script>
|
@ -0,0 +1,97 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace DS.WMS.Core.WmsModule.Dtos;
|
||||
|
||||
public class WmsInPlanGoodsInput
|
||||
{
|
||||
public Guid? GID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public Guid? WMSPLANID { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSCODE { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSNAME { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? KGS { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? CBM { get; set; }= 0;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? PKGS { get; set; }= 0;
|
||||
|
||||
/// <summary>
|
||||
/// 成交单位/仓储计费单位 库存的收费标准单位
|
||||
/// </summary>
|
||||
public string STORAGEUNIT { get; set; } = "";
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string REMARK { get; set; } = "";
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? NETWEIGHT { get; set; }= 0;
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string TRUCKNO { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string DRIVERNAME { get; set; } = "";
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string MBLNO { get; set; } = "";
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 验证
|
||||
/// </summary>
|
||||
public class WmsInPlanGoodsInputValidator : AbstractValidator<WmsInPlanGoodsInput>
|
||||
{
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
public WmsInPlanGoodsInputValidator()
|
||||
{
|
||||
this.RuleFor(o => o.GOODSCODE)
|
||||
.NotEmpty().WithName("商品编码");
|
||||
this.RuleFor(o => o.GOODSNAME)
|
||||
.NotEmpty().WithName("商品名称");
|
||||
this.RuleFor(o => o.TRUCKNO)
|
||||
.NotEmpty().WithName("承运车辆");
|
||||
}
|
||||
}
|
@ -0,0 +1,198 @@
|
||||
namespace DS.WMS.Core.WmsModule.Dtos;
|
||||
|
||||
/// <summary>
|
||||
/// 预约入库计划列表
|
||||
/// </summary>
|
||||
public class WmsInPlanGoodsListViewModel
|
||||
{
|
||||
public Guid GID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public Guid? WMSPLANID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string MATERIALNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSCODE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSNAME { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSHSCODE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CNTRNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 原箱号
|
||||
/// </summary>
|
||||
public string OLD_CNTRNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? KGS { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? CBM { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? PKGS { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string KINDPKGS { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 成交单位/仓储计费单位 库存的收费标准单位
|
||||
/// </summary>
|
||||
public string STORAGEUNIT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? STORAGEUNITCOUNT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string RULEUNIT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? RULEUNITCOUNT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string REMARK { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public bool? CUSTOMSINSPECTION { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public bool? STOREHOUSEINSPECTION { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? NETWEIGHT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string SEALNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CTNALL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? RULEPRICE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSLABEL { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string PALLET { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string XH { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? RULEAMOUNT { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string DIZHANGID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL2 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL3 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL4 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string TRUCKNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string DRIVERNAME { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string MBLNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? SMALLPKGS { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public decimal? MINPKGS { get; set; }
|
||||
/// <summary>
|
||||
/// 前端显示是否可编辑
|
||||
/// </summary>
|
||||
public bool EDITABLE { get; set; } = true;
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
using DS.WMS.Core.System.Dtos;
|
||||
|
||||
namespace DS.WMS.Core.WmsModule.Dtos;
|
||||
|
||||
public class WmsInPlanInfoViewModel
|
||||
{
|
||||
public Guid WMSPLANID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 委托编号
|
||||
/// </summary>
|
||||
public string WMSNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提单号
|
||||
/// </summary>
|
||||
public string MBLNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 合同编号
|
||||
/// </summary>
|
||||
public string CONTRACTNO { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string BILLTYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTOMNO { get; set; }
|
||||
/// <summary>
|
||||
/// 预计日期
|
||||
/// </summary>
|
||||
public DateTime? PLANTIME { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string TRUCKNO { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSNAME { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL { get; set; } = "";
|
||||
/// <summary>
|
||||
/// 包装方式
|
||||
/// </summary>
|
||||
public string KINDPKGS { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTOMERNAME { get; set; }
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string REMARK { get; set; }
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int? AuditStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审批时间
|
||||
/// </summary>
|
||||
public DateTime? AuditTime { get; set; }
|
||||
/// <summary>
|
||||
/// 审批人
|
||||
/// </summary>
|
||||
public string AuditBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审批备注
|
||||
/// </summary>
|
||||
public string AuditNote { get; set; }
|
||||
/// <summary>
|
||||
/// 客户ID
|
||||
/// </summary>
|
||||
public string ClientId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 上传文件列表
|
||||
/// </summary>
|
||||
public fileinfo[]? File { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 计划明细
|
||||
/// </summary>
|
||||
public List<WmsInPlanGoodsListViewModel> List{ get; set; }
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
using DS.WMS.Core.System.Dtos;
|
||||
|
||||
namespace DS.WMS.Core.WmsModule.Dtos;
|
||||
|
||||
public class WmsInPlanInput
|
||||
{
|
||||
public Guid? WMSPLANID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 委托编号
|
||||
/// </summary>
|
||||
public string WMSNO { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 提单号
|
||||
/// </summary>
|
||||
public string MBLNO { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 合同编号
|
||||
/// </summary>
|
||||
public string CONTRACTNO { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// 预计日期
|
||||
/// </summary>
|
||||
public DateTime? PLANTIME { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSNAME { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL { get; set; } = "";
|
||||
/// <summary>
|
||||
/// 包装方式
|
||||
/// </summary>
|
||||
public string KINDPKGS { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTOMERNAME { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string BILLTYPE { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTOMNO { get; set; } = "";
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string REMARK { get; set; } = "";
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 保税单
|
||||
/// </summary>
|
||||
public fileinfo[]? File { get; set; }
|
||||
/// <summary>
|
||||
/// 计划明细
|
||||
/// </summary>
|
||||
public List<WmsInPlanGoodsInput> List{ get; set; }
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
namespace DS.WMS.Core.WmsModule.Dtos;
|
||||
/// <summary>
|
||||
/// 预约入库列表
|
||||
/// </summary>
|
||||
public class WmsInPlanListViewModel
|
||||
{
|
||||
|
||||
public Guid WMSPLANID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 委托编号
|
||||
/// </summary>
|
||||
public string WMSNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 提单号
|
||||
/// </summary>
|
||||
public string MBLNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 合同编号
|
||||
/// </summary>
|
||||
public string CONTRACTNO { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 预计日期
|
||||
/// </summary>
|
||||
public DateTime? PLANTIME { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSNAME { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string GOODSMODEL { get; set; }
|
||||
/// <summary>
|
||||
/// 包装方式
|
||||
/// </summary>
|
||||
public string KINDPKGS { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string TRUCKNO { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTOMERNAME { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string BILLTYPE { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string CUSTOMNO { get; set; }
|
||||
/// <summary>
|
||||
/// 备注
|
||||
/// </summary>
|
||||
public string REMARK { get; set; }
|
||||
/// <summary>
|
||||
/// 审核状态
|
||||
/// </summary>
|
||||
public int? AuditStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审批时间
|
||||
/// </summary>
|
||||
public DateTime? AuditTime { get; set; }
|
||||
/// <summary>
|
||||
/// 审批人
|
||||
/// </summary>
|
||||
public string AuditBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 审批备注
|
||||
/// </summary>
|
||||
public string AuditNote { get; set; }
|
||||
/// <summary>
|
||||
/// 客户ID
|
||||
/// </summary>
|
||||
public string ClientId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 企业用户名称
|
||||
/// </summary>
|
||||
public string ClientName { get; set; }
|
||||
}
|
@ -1,6 +1,42 @@
|
||||
using DS.Module.Core;
|
||||
using DS.WMS.Core.WmsModule.Dtos;
|
||||
|
||||
namespace DS.WMS.Core.WmsModule.Interface;
|
||||
|
||||
public interface IWmsInPlanService
|
||||
{
|
||||
/// <summary>
|
||||
/// 列表查询
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
DataResult<List<WmsInPlanListViewModel>> GetListByPage(PageRequest request);
|
||||
|
||||
/// <summary>
|
||||
/// 获取预约入库信息
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
DataResult<WmsInPlanInfoViewModel> GetWmsInPlanInfo(string id);
|
||||
|
||||
/// <summary>
|
||||
/// 维护预约入库信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
DataResult EditWmsInPlanInfo(WmsInPlanInput model);
|
||||
|
||||
// /// <summary>
|
||||
// /// 审核
|
||||
// /// </summary>
|
||||
// /// <param name="id"></param>
|
||||
// /// <returns></returns>
|
||||
// public DataResult AuditWmsInPlan(string id);
|
||||
|
||||
/// <summary>
|
||||
/// 获取入库计划明细
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
DataResult GetWmsInPlanGoodsList(string id);
|
||||
}
|
@ -1,8 +1,269 @@
|
||||
using DS.Module.Core;
|
||||
using DS.Module.Core.Extensions;
|
||||
using DS.Module.User;
|
||||
using DS.WMS.Common.Enum;
|
||||
using DS.WMS.Core.System.Dtos;
|
||||
using DS.WMS.Core.System.Entity;
|
||||
using DS.WMS.Core.WmsModule.Dtos;
|
||||
using DS.WMS.Core.WmsModule.Entity;
|
||||
using DS.WMS.Core.WmsModule.Interface;
|
||||
using Mapster;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using SqlSugar;
|
||||
|
||||
namespace DS.WMS.Core.WmsModule.Method;
|
||||
|
||||
public class WmsInPlanService:IWmsInPlanService
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class WmsInPlanService : IWmsInPlanService
|
||||
{
|
||||
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly ISqlSugarClient db;
|
||||
private readonly IUser user;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="serviceProvider"></param>
|
||||
public WmsInPlanService(IServiceProvider serviceProvider)
|
||||
{
|
||||
_serviceProvider = serviceProvider;
|
||||
db = _serviceProvider.GetRequiredService<ISqlSugarClient>();
|
||||
user = _serviceProvider.GetRequiredService<IUser>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 列表
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public DataResult<List<WmsInPlanListViewModel>> GetListByPage(PageRequest request)
|
||||
{
|
||||
var companyId = user.GetCompanyId();
|
||||
//序列化查询条件
|
||||
var whereList = db.ConfigQuery.Context.Utilities.JsonToConditionalModels(request.QueryCondition);
|
||||
var data = db.Queryable<OP_WMS_IN_PLAN>()
|
||||
.LeftJoin<OP_YARD_COMPANY>((a, b) => a.ClientId == b.GID.ToString())
|
||||
.Select((a, b) => new WmsInPlanListViewModel()
|
||||
{
|
||||
ClientName = b.DESCRIPTION //手动指定一列在自动映射
|
||||
},
|
||||
true)
|
||||
// .Select<WmsInPlanListViewModel>()
|
||||
.Where(whereList).Where(a=>a.AuditStatus != AuditStatus.NoAudit.ToEnumInt()).ToQueryPage(request.PageCondition);
|
||||
return data;
|
||||
}
|
||||
|
||||
public DataResult<WmsInPlanInfoViewModel> GetWmsInPlanInfo(string id)
|
||||
{
|
||||
var gid = Guid.Parse(id);
|
||||
var planFiles = db.Queryable<INFO_FILES>().Where(x => x.PID == gid && x.FILETYPE == "预约入库")
|
||||
.Select(it => new fileinfo
|
||||
{
|
||||
FileName = it.FILENAME,
|
||||
FilePath = it.IMGPATH
|
||||
}).ToArray();
|
||||
var data = db.Queryable<OP_WMS_IN_PLAN>()
|
||||
.Where(a => a.WMSPLANID == gid)
|
||||
.Select<WmsInPlanInfoViewModel>()
|
||||
.Mapper(it =>
|
||||
{
|
||||
//只能写在Select后面
|
||||
it.File = planFiles;
|
||||
// it.List = db.Queryable<OP_WMS_IN_PLAN_GOODS>().Select<WmsInPlanGoodsListViewModel>()
|
||||
// .Where(x => x.WMSPLANID == gid).ToList();
|
||||
})
|
||||
.First();
|
||||
return DataResult<WmsInPlanInfoViewModel>.Success(data);
|
||||
}
|
||||
|
||||
public DataResult EditWmsInPlanInfo(WmsInPlanInput model)
|
||||
{
|
||||
var companyId = user.GetCompanyId();
|
||||
if (model.WMSPLANID.ToString().IsNullOrEmpty())
|
||||
{
|
||||
return DataResult.Failed("已审核通过,不能修改!");
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
var plan = model.MapTo<WmsInPlanInput, OP_WMS_IN_PLAN>();
|
||||
var gid = plan.WMSPLANID;
|
||||
var exitInfo = db.Queryable<OP_WMS_IN_PLAN>().First(x => x.WMSPLANID == gid);
|
||||
if (exitInfo.AuditStatus == (short)AuditStatus.Auditing)
|
||||
{
|
||||
return DataResult.Failed("已提交审核,不能修改!");
|
||||
}
|
||||
|
||||
if (exitInfo.AuditStatus == (short)AuditStatus.Approve)
|
||||
{
|
||||
return DataResult.Failed("已审核通过,不能修改!");
|
||||
}
|
||||
|
||||
//开启事务
|
||||
db.Ado.BeginTran();
|
||||
|
||||
if (model.List.Count() > 0)
|
||||
{
|
||||
var record = model.List.First();
|
||||
plan.GOODSNAME = record.GOODSNAME;
|
||||
plan.TRUCKNO = record.TRUCKNO;
|
||||
plan.GOODSMODEL = record.GOODSMODEL;
|
||||
}
|
||||
|
||||
db.Updateable(plan).IgnoreColumns(ignoreAllNullColumns: true)
|
||||
.IgnoreColumns(x => new { x.AuditStatus, x.AuditNote }).ExecuteCommand();
|
||||
|
||||
#region 处理文件
|
||||
|
||||
var infoList = new List<INFO_FILES>();
|
||||
if (model.File.IsNotNull())
|
||||
{
|
||||
#region
|
||||
|
||||
//先删除
|
||||
var existFiles = db.Queryable<INFO_FILES>().Where(x => x.PID == gid && x.FILETYPE == "预约入库")
|
||||
.Select(n => n.IMGPATH).ToArray();
|
||||
var planFiles = model.File.Select(x => x.FilePath).ToArray();
|
||||
IEnumerable<string> delFiles = existFiles.AsQueryable().Except(planFiles);
|
||||
if (delFiles.Count() > 0)
|
||||
{
|
||||
foreach (var item in delFiles)
|
||||
{
|
||||
var existInfo = db.Queryable<INFO_FILES>()
|
||||
.Where(x => x.PID == gid && x.IMGPATH == item).First();
|
||||
db.Deleteable(existInfo).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
//2.添加新的
|
||||
IEnumerable<string> addFiles = planFiles.AsQueryable().Except(existFiles);
|
||||
if (addFiles.Count() > 0)
|
||||
{
|
||||
foreach (var item in addFiles)
|
||||
{
|
||||
var infoFile = new INFO_FILES
|
||||
{
|
||||
GID = Guid.NewGuid(),
|
||||
PID = gid,
|
||||
FILENAME = model.File.Where(x => x.FilePath == item).Select(x => x.FileName).First(),
|
||||
IMGPATH = item,
|
||||
FILETYPE = "预约入库",
|
||||
CORPID = user.CompanyId.ToString(),
|
||||
CreateDate = DateTime.Now,
|
||||
ModifyDate = DateTime.Now,
|
||||
UPLOADEMPLY = ""
|
||||
};
|
||||
db.Insertable(infoFile).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 处理计划明细
|
||||
|
||||
if (model.List.Count() > 0)
|
||||
{
|
||||
//先删除 计划明细
|
||||
var existGoods = db.Queryable<OP_WMS_IN_PLAN_GOODS>().Where(x => x.WMSPLANID == gid)
|
||||
.Select(n => n.GID.ToString()).ToArray();
|
||||
var inGoods = model.List.Select(x => x.GID.ToString().ToUpper()).ToArray();
|
||||
IEnumerable<string> delGoods = existGoods.AsQueryable().Except(inGoods);
|
||||
if (delGoods.Count() > 0)
|
||||
{
|
||||
foreach (var item in delGoods)
|
||||
{
|
||||
var existInfo = db.Queryable<OP_WMS_IN_PLAN_GOODS>()
|
||||
.Where(x => x.WMSPLANID == gid && x.GID == Guid.Parse(item)).First();
|
||||
db.Deleteable(existInfo).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
//更新 计划明细
|
||||
var updateList = model.List.Where(x => x.GID != null && !delGoods.Contains(x.GID.ToString()))
|
||||
.ToList();
|
||||
|
||||
foreach (var item in updateList)
|
||||
{
|
||||
var detail = item.Adapt<OP_WMS_IN_PLAN_GOODS>();
|
||||
|
||||
db.Updateable(detail).ExecuteCommand();
|
||||
}
|
||||
|
||||
//追加 计划明细
|
||||
var addList = model.List.Where(x => x.GID == null).ToList();
|
||||
|
||||
foreach (var item in addList)
|
||||
{
|
||||
item.GID = Guid.NewGuid();
|
||||
item.WMSPLANID = gid;
|
||||
var detail = item.Adapt<OP_WMS_IN_PLAN_GOODS>();
|
||||
|
||||
db.Insertable(detail).ExecuteCommand();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
db.Ado.CommitTran();
|
||||
return DataResult.Successed("更新成功!");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
db.Ado.RollbackTran();
|
||||
return DataResult.Failed("更新失败!" + ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DataResult SubmitWmsInPlan(string id)
|
||||
{
|
||||
var gid = Guid.Parse(id);
|
||||
var inPlan = db.Queryable<OP_WMS_IN_PLAN>().First(x => x.WMSPLANID == gid);
|
||||
|
||||
if (inPlan.AuditStatus == AuditStatus.Approve.ToEnumInt() ||
|
||||
inPlan.AuditStatus == AuditStatus.Auditing.ToEnumInt())
|
||||
{
|
||||
return DataResult.Failed("审核通过或待审批状态不能提交!");
|
||||
}
|
||||
|
||||
if (inPlan.BILLTYPE == "1")
|
||||
{
|
||||
var files = db.Queryable<INFO_FILES>().Where(x => x.PID == gid && x.FILETYPE == "预约入库").ToList();
|
||||
if (files.Count() == 0)
|
||||
{
|
||||
return DataResult.Failed("保税单未上传,不能提交!");
|
||||
}
|
||||
}
|
||||
|
||||
var goods = db.Queryable<OP_WMS_IN_PLAN_GOODS>().Where(x => x.WMSPLANID == gid).ToList();
|
||||
if (goods.Count() == 0)
|
||||
{
|
||||
return DataResult.Failed("入库计划明细为空,不能提交!");
|
||||
}
|
||||
|
||||
//更新状态为待审批
|
||||
inPlan.AuditStatus = AuditStatus.Auditing.ToEnumInt();
|
||||
db.Updateable(inPlan).ExecuteCommand();
|
||||
|
||||
return DataResult.Successed("提交成功");
|
||||
}
|
||||
|
||||
public DataResult GetWmsInPlanGoodsList(string id)
|
||||
{
|
||||
var data = db.Queryable<OP_WMS_IN_PLAN_GOODS>()
|
||||
.Select<WmsInPlanGoodsListViewModel>()
|
||||
.Mapper(it =>
|
||||
{
|
||||
//只能写在Select后面
|
||||
it.EDITABLE = true;
|
||||
})
|
||||
.Where(a => a.WMSPLANID == Guid.Parse(id)).ToList();
|
||||
return DataResult.Successed("查询成功!", data);
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
using DS.Module.Core;
|
||||
using DS.WMS.Core.WmsModule.Dtos;
|
||||
using DS.WMS.Core.WmsModule.Interface;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace DS.WMS.WebApi.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// 预约入库
|
||||
/// </summary>
|
||||
public class WmsInPlanController : ApiController
|
||||
{
|
||||
private readonly IWmsInPlanService _invokeService;
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
/// <param name="invokeService"></param>
|
||||
public WmsInPlanController(IWmsInPlanService invokeService)
|
||||
{
|
||||
_invokeService = invokeService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 预约入库列表
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[Route("GetWmsInPlanList")]
|
||||
public DataResult<List<WmsInPlanListViewModel>> GetWmsInPlanList([FromBody] PageRequest request)
|
||||
{
|
||||
var res = _invokeService.GetListByPage(request);
|
||||
return res;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取预约入库信息
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Route("GetWmsInPlanInfo")]
|
||||
public DataResult<WmsInPlanInfoViewModel> GetWmsInPlanInfo([FromQuery]string id)
|
||||
{
|
||||
var res = _invokeService.GetWmsInPlanInfo(id);
|
||||
return res;
|
||||
}
|
||||
/// <summary>
|
||||
/// 维护预约入库信息
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[Route("EditWmsInPlanInfo")]
|
||||
public DataResult EditWmsInPlanInfo([FromBody] WmsInPlanInput model)
|
||||
{
|
||||
var res = _invokeService.EditWmsInPlanInfo(model);
|
||||
return res;
|
||||
}
|
||||
|
||||
// /// <summary>
|
||||
// /// 提交审核
|
||||
// /// </summary>
|
||||
// /// <param name="id"></param>
|
||||
// /// <returns></returns>
|
||||
// [HttpGet]
|
||||
// [Route("SubmitWmsInPlan")]
|
||||
// public DataResult SubmitWmsInPlan([FromQuery]string id)
|
||||
// {
|
||||
// var res = _invokeService.SubmitWmsInPlan(id);
|
||||
// return res;
|
||||
// }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[Route("GetWmsInPlanGoodsList")]
|
||||
public DataResult GetWmsInPlanGoodsList([FromQuery]string id)
|
||||
{
|
||||
var res = _invokeService.GetWmsInPlanGoodsList(id);
|
||||
return res;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue