feat: 出库类型贯穿申请→扫码出库——申请单加 outbound_type,申请时选类型、扫码出库自动带出
This commit is contained in:
@ -412,7 +412,8 @@ def create_outbound_request():
|
|||||||
items=items,
|
items=items,
|
||||||
allowed_approvers=allowed_approvers,
|
allowed_approvers=allowed_approvers,
|
||||||
remark=data.get('remark'),
|
remark=data.get('remark'),
|
||||||
approver_id=approver_id
|
approver_id=approver_id,
|
||||||
|
outbound_type=data.get('outbound_type') # 出库类型(申请时确定)
|
||||||
)
|
)
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
|
|||||||
@ -18,6 +18,8 @@ class OutboundApproval(db.Model):
|
|||||||
applicant_id = db.Column(db.Integer, nullable=False, index=True)
|
applicant_id = db.Column(db.Integer, nullable=False, index=True)
|
||||||
# 申请说明
|
# 申请说明
|
||||||
remark = db.Column(db.Text)
|
remark = db.Column(db.Text)
|
||||||
|
# 出库类型:SALES/USE/PRODUCTION/LOSS/REPAIR(申请时确定,扫码出库自动带出)
|
||||||
|
outbound_type = db.Column(db.String(50))
|
||||||
# 状态: 0-待审批, 1-已通过, 2-已驳回, 3-已完成(已出库)
|
# 状态: 0-待审批, 1-已通过, 2-已驳回, 3-已完成(已出库)
|
||||||
status = db.Column(db.Integer, default=0, nullable=False)
|
status = db.Column(db.Integer, default=0, nullable=False)
|
||||||
# 允许审批的人员列表 (JSON格式: [{"type": "role", "value": "admin"}, {"type": "user", "value": "123"}])
|
# 允许审批的人员列表 (JSON格式: [{"type": "role", "value": "admin"}, {"type": "user", "value": "123"}])
|
||||||
@ -81,6 +83,7 @@ class OutboundApproval(db.Model):
|
|||||||
'applicant_id': self.applicant_id,
|
'applicant_id': self.applicant_id,
|
||||||
'applicant_name': self._get_user_name(self.applicant_id),
|
'applicant_name': self._get_user_name(self.applicant_id),
|
||||||
'remark': self.remark,
|
'remark': self.remark,
|
||||||
|
'outbound_type': self.outbound_type or '',
|
||||||
'status': self.status,
|
'status': self.status,
|
||||||
'status_text': ['待审批', '已通过', '已驳回', '已完成', '已完结'][self.status] if self.status in [0, 1, 2, 3, 4] else '未知',
|
'status_text': ['待审批', '已通过', '已驳回', '已完成', '已完结'][self.status] if self.status in [0, 1, 2, 3, 4] else '未知',
|
||||||
'allowed_approvers': self.get_allowed_approvers(),
|
'allowed_approvers': self.get_allowed_approvers(),
|
||||||
|
|||||||
@ -701,7 +701,7 @@ class OutboundApprovalService:
|
|||||||
return f"APR-OUT-{date_str}-{time_str}-{sequence:04d}"
|
return f"APR-OUT-{date_str}-{time_str}-{sequence:04d}"
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_request(applicant_id, items, allowed_approvers, remark=None, approver_id=None):
|
def create_request(applicant_id, items, allowed_approvers, remark=None, approver_id=None, outbound_type=None):
|
||||||
"""
|
"""
|
||||||
创建出库审批单(申请阶段,直接存储前端传来的物料信息快照,不关联具体库存记录)
|
创建出库审批单(申请阶段,直接存储前端传来的物料信息快照,不关联具体库存记录)
|
||||||
|
|
||||||
@ -759,6 +759,7 @@ class OutboundApprovalService:
|
|||||||
request_no=request_no,
|
request_no=request_no,
|
||||||
applicant_id=applicant_id,
|
applicant_id=applicant_id,
|
||||||
remark=remark,
|
remark=remark,
|
||||||
|
outbound_type=outbound_type, # 申请时确定的出库类型,扫码出库时带出
|
||||||
status=0, # 待审批
|
status=0, # 待审批
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -395,6 +395,15 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<el-form label-width="80px">
|
<el-form label-width="80px">
|
||||||
|
<el-form-item label="出库类型" required>
|
||||||
|
<el-select v-model="requestOutboundType" placeholder="请选择类型" style="width: 100%">
|
||||||
|
<el-option label="销售出库" value="SALES" />
|
||||||
|
<el-option label="内部领用" value="USE" />
|
||||||
|
<el-option label="生产出库" value="PRODUCTION" />
|
||||||
|
<el-option label="盘亏出库" value="LOSS" />
|
||||||
|
<el-option label="维修出库" value="REPAIR" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="* 指定审批人" required>
|
<el-form-item label="* 指定审批人" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="requestApproverId"
|
v-model="requestApproverId"
|
||||||
@ -533,6 +542,7 @@ const printLoading = ref(false)
|
|||||||
// ★ 出库申请相关
|
// ★ 出库申请相关
|
||||||
const requestDialogVisible = ref(false)
|
const requestDialogVisible = ref(false)
|
||||||
const requestRemark = ref('')
|
const requestRemark = ref('')
|
||||||
|
const requestOutboundType = ref('SALES') // 申请时确定出库类型,扫码出库自动带出
|
||||||
const requestApproverId = ref<number | null>(null)
|
const requestApproverId = ref<number | null>(null)
|
||||||
const approvers = ref<any[]>([])
|
const approvers = ref<any[]>([])
|
||||||
const requestSubmitting = ref(false)
|
const requestSubmitting = ref(false)
|
||||||
@ -1088,6 +1098,7 @@ const confirmSubmitRequest = async () => {
|
|||||||
quantity: item.export_quantity || 0
|
quantity: item.export_quantity || 0
|
||||||
})),
|
})),
|
||||||
remark: buildRemarkWithShortage(trimmed),
|
remark: buildRemarkWithShortage(trimmed),
|
||||||
|
outbound_type: requestOutboundType.value,
|
||||||
approver_id: requestApproverId.value
|
approver_id: requestApproverId.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -462,6 +462,10 @@ const handleRequestChange = (val: number | null) => {
|
|||||||
if (selectedRequest.value?.remark) {
|
if (selectedRequest.value?.remark) {
|
||||||
form.remark = selectedRequest.value.remark
|
form.remark = selectedRequest.value.remark
|
||||||
}
|
}
|
||||||
|
// ★ 自动带出申请时确定的出库类型(库管无需再选);旧单无类型则留待手动选择
|
||||||
|
if (selectedRequest.value?.outbound_type) {
|
||||||
|
form.outbound_type = selectedRequest.value.outbound_type
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 切换申请单时清空购物车,防止已扫物品与新单据混淆
|
// 切换申请单时清空购物车,防止已扫物品与新单据混淆
|
||||||
cartItems.value = []
|
cartItems.value = []
|
||||||
|
|||||||
Reference in New Issue
Block a user