add:增加倒扣回传

This commit is contained in:
zhangzq
2026-07-18 09:25:50 +08:00
parent 42534bd22e
commit 1cb246ca92
36 changed files with 1131 additions and 316 deletions

View File

@@ -0,0 +1,259 @@
<template>
<div class="app-container">
<div class="head-container">
<div v-if="crud.props.searchToggle">
<el-form :inline="true" label-width="90px" label-suffix=":" size="mini">
<el-form-item label="单据编号">
<el-input v-model="query.billno" clearable placeholder="请输入单据编号" @keyup.enter.native="crud.toQuery" />
</el-form-item>
<el-form-item label="机构编号">
<el-input v-model="query.orgno" clearable placeholder="请输入机构编号" @keyup.enter.native="crud.toQuery" />
</el-form-item>
<el-form-item label="请求ID">
<el-input v-model="query.requestId" clearable placeholder="请输入请求ID" @keyup.enter.native="crud.toQuery" />
</el-form-item>
<el-form-item label="回传状态">
<el-select v-model="query.status" clearable placeholder="全部" @change="crud.toQuery">
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="query.dateRange"
type="daterange"
value-format="yyyy-MM-dd HH:mm:ss"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
@change="crud.toQuery"
/>
</el-form-item>
<rrOperation />
</el-form>
</div>
<crudOperation :permission="permission">
<el-button
slot="right"
class="filter-item"
type="primary"
icon="el-icon-position"
size="mini"
@click="upload"
>
回传
</el-button>
</crudOperation>
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column v-permission="['admin','receiveOutReturn:edit','receiveOutReturn:del']" label="操作" width="115" align="center" fixed="right">
<template slot-scope="scope">
<udOperation :data="scope.row" :permission="permission" />
</template>
</el-table-column>
<el-table-column prop="billno" label="单据编号" min-width="140">
<template slot-scope="scope">
<el-link type="primary" @click="toView(scope.row)">{{ scope.row.billno }}</el-link>
</template>
</el-table-column>
<el-table-column prop="orgno" label="机构编号" min-width="120" />
<el-table-column prop="biztype" label="业务类型" min-width="100" />
<el-table-column prop="invscheme" label="库存方案" min-width="100" />
<el-table-column prop="transtype" label="交易类型" min-width="100" />
<el-table-column prop="biztime" label="业务时间" min-width="160" />
<el-table-column prop="requsername" label="请求人" min-width="100" />
<el-table-column prop="status" label="回传状态" width="100" :formatter="statusFormat" />
<el-table-column prop="remark" label="回传备注" min-width="180" show-overflow-tooltip />
<el-table-column prop="requestId" label="请求ID" min-width="140" />
<el-table-column prop="createdBy" label="创建人" min-width="100" />
<el-table-column prop="createTime" label="创建时间" min-width="160" />
</el-table>
<pagination />
</div>
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="1000px">
<el-form ref="form" :model="form" :rules="rules" size="mini" label-width="110px" label-suffix=":" style="border: 1px solid #cfe0df;margin-top: 10px;padding: 10px;">
<el-row>
<el-col :span="12"><el-form-item label="机构编号" prop="orgno"><el-input v-model.trim="form.orgno" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="单据编号" prop="billno"><el-input v-model.trim="form.billno" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="业务类型" prop="biztype"><el-input v-model.trim="form.biztype" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="库存方案" prop="invscheme"><el-input v-model.trim="form.invscheme" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="交易类型" prop="transtype"><el-input v-model.trim="form.transtype" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="业务时间" prop="biztime"><el-date-picker v-model="form.biztime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="部门编号" prop="deptno"><el-input v-model.trim="form.deptno" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="请求人编号" prop="requserno"><el-input v-model.trim="form.requserno" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="请求人姓名" prop="requsername"><el-input v-model.trim="form.requsername" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="操作类型" prop="cztype"><el-input v-model.trim="form.cztype" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="请求ID" prop="requestId"><el-input v-model.trim="form.requestId" style="width: 300px;" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="回传状态" prop="status"><el-select v-model="form.status" style="width: 300px;"><el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" /></el-select></el-form-item></el-col>
<el-col :span="24"><el-form-item label="备注" prop="comment"><el-input v-model.trim="form.comment" type="textarea" :rows="2" style="width: 740px;" /></el-form-item></el-col>
<el-col :span="24"><el-form-item label="回传备注" prop="remark"><el-input v-model.trim="form.remark" type="textarea" :rows="2" style="width: 740px;" /></el-form-item></el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer"><el-button type="text" @click="crud.cancelCU">取消</el-button><el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button></div>
</el-dialog>
<el-dialog :visible.sync="viewShow" title="倒扣回传详情" width="1200px" :close-on-click-modal="false">
<el-descriptions :column="2" border size="mini">
<el-descriptions-item label="机构编号">{{ currentRow.orgno }}</el-descriptions-item>
<el-descriptions-item label="单据编号">{{ currentRow.billno }}</el-descriptions-item>
<el-descriptions-item label="业务类型">{{ currentRow.biztype }}</el-descriptions-item>
<el-descriptions-item label="库存方案">{{ currentRow.invscheme }}</el-descriptions-item>
<el-descriptions-item label="交易类型">{{ currentRow.transtype }}</el-descriptions-item>
<el-descriptions-item label="业务时间">{{ currentRow.biztime }}</el-descriptions-item>
<el-descriptions-item label="请求人编号">{{ currentRow.requserno }}</el-descriptions-item>
<el-descriptions-item label="请求人姓名">{{ currentRow.requsername }}</el-descriptions-item>
<el-descriptions-item label="回传状态">{{ statusLabel(currentRow.status) }}</el-descriptions-item>
<el-descriptions-item label="请求ID">{{ currentRow.requestId }}</el-descriptions-item>
<el-descriptions-item label="创建人">{{ currentRow.createdBy }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ currentRow.createTime }}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{ currentRow.comment }}</el-descriptions-item>
<el-descriptions-item label="回传备注" :span="2">{{ currentRow.remark }}</el-descriptions-item>
</el-descriptions>
<el-table :data="currentRow.details || []" size="mini" style="width: 100%; margin-top: 12px;">
<el-table-column prop="seq" label="行序号" width="80" />
<el-table-column prop="materialno" label="物料编号" min-width="120" />
<el-table-column prop="unitno" label="单位编号" min-width="100" />
<el-table-column prop="qty" label="数量" min-width="100" />
<el-table-column prop="baseqty" label="基础数量" min-width="100" />
<el-table-column prop="warehouseno" label="仓库编号" min-width="120" />
<el-table-column prop="srcbillno" label="源单据编号" min-width="140" />
<el-table-column prop="lotnumber" label="批号" min-width="100" />
<el-table-column prop="tracknumber" label="追踪号" min-width="120" />
</el-table>
<div slot="footer" class="dialog-footer"><el-button type="primary" @click="viewShow = false">关闭</el-button></div>
</el-dialog>
</div>
</template>
<script>
import crudReceiveOutReturn from './receiveOutReturn'
import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation.vue'
import crudOperation from '@crud/CRUD.operation.vue'
import udOperation from '@crud/UD.operation.vue'
import pagination from '@crud/Pagination.vue'
import { get } from './receiveOutReturn'
import { uploadReceiveOut } from '@/views/wms/st/inAndOutReturn/inandoutreturn'
const createDefaultForm = () => ({
id: null,
orgno: '',
billno: '',
biztype: '',
invscheme: '',
transtype: '',
biztime: '',
deptno: '',
requserno: '',
requsername: '',
comment: '',
cztype: '',
createTime: '',
remark: '',
status: '0',
requestId: '',
createdBy: '',
updatedTime: '',
details: []
})
export default {
name: 'ReceiveOutReturn',
components: { crudOperation, rrOperation, udOperation, pagination },
mixins: [presenter(), header(), form(createDefaultForm()), crud()],
cruds() {
return CRUD({
title: '倒扣回传',
url: 'api/receiveOutReturn',
idField: 'id',
sort: 'create_time,desc',
crudMethod: { ...crudReceiveOutReturn },
optShow: { add: true, reset: true }
})
},
data() {
return {
viewShow: false,
currentRow: {},
permission: {
add: ['admin', 'receiveOutReturn:add'],
edit: ['admin', 'receiveOutReturn:edit'],
del: ['admin', 'receiveOutReturn:del']
},
statusOptions: [
{ value: '0', label: '待回传' },
{ value: '1', label: '回传成功' },
{ value: '2', label: '回传失败' }
],
rules: {
orgno: [{ required: true, message: '请输入机构编号', trigger: 'blur' }],
billno: [{ required: true, message: '请输入单据编号', trigger: 'blur' }],
status: [{ required: true, message: '请选择回传状态', trigger: 'change' }]
}
}
},
methods: {
[CRUD.HOOK.beforeRefresh]() {
if (this.query.dateRange) {
this.query.beginTime = this.query.dateRange[0]
this.query.endTime = this.query.dateRange[1] || this.query.dateRange[0]
} else {
this.query.beginTime = ''
this.query.endTime = ''
}
},
upload() {
const rows = this.crud.selections || []
if (rows.length < 1) {
this.crud.notify('请选择一条记录', CRUD.NOTIFICATION_TYPE.INFO)
return
}
if (rows.length > 1) {
this.crud.notify('只能选择一条记录', CRUD.NOTIFICATION_TYPE.INFO)
return
}
const row = rows[0]
const doUpload = () => {
this.fullscreenLoading = true
uploadReceiveOut({ id: row.id }).then(() => {
this.crud.notify('单据回传成功!', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.crud.toQuery()
}).finally(() => {
this.fullscreenLoading = false
})
}
if (String(row.status) === '1') {
this.$confirm('该单据已回传成功,是否继续回传?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(doUpload).catch(() => {
this.$message({ type: 'info', message: '已取消回传' })
})
return
}
doUpload()
},
statusLabel(status) {
const target = this.statusOptions.find(item => String(item.value) === String(status))
return target ? target.label : status
},
statusFormat(row) {
return this.statusLabel(row.status)
},
detailStatusFormat(row) {
return this.statusLabel(row.returnStatus)
},
toView(row) {
get(row.id).then(res => {
this.currentRow = res.data
this.viewShow = true
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,34 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/receiveOutReturn',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/receiveOutReturn',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/receiveOutReturn',
method: 'put',
data
})
}
export function get(id) {
return request({
url: 'api/receiveOutReturn/' + id,
method: 'get'
})
}
export default { add, edit, del, get }

View File

@@ -32,4 +32,12 @@ export function upload(data) {
})
}
export default { add, edit, del, upload }
export function uploadReceiveOut(data) {
return request({
url: '/api/receiveOutReturn/upload',
method: 'post',
data
})
}
export default { add, edit, del, upload, uploadReceiveOut }