Files
ss-crm-manage-web/src/views/Clue/Order/Comp/DialogDelivery.vue

288 lines
9.1 KiB
Vue
Raw Normal View History

2024-06-20 19:43:07 +08:00
<template>
2024-06-27 15:09:53 +08:00
<el-dialog title="发货" v-model="show" width="700px">
<el-form :model="form" ref="formRef" :rules="rules" label-width="85px">
<el-row :gutter="20">
<el-col :span="8" :offset="0">
<el-form-item label="待发数量">
<span class="font-bold">{{ form.sendTotalNum }}</span>
</el-form-item>
</el-col>
2024-06-27 15:29:54 +08:00
<el-col :span="16" :offset="0">
2024-06-27 15:09:53 +08:00
<el-form-item label="发货方式">
2024-06-27 15:29:54 +08:00
<el-radio-group v-model="form.sendType" :disabled="autoAuditPurchase == 'false'">
2024-06-27 17:25:35 +08:00
<el-radio :label="1">
<Tooltip
message="必须在进销存的“通用配置-常规配置”中,将 ’采购申请自动通过‘ 设置为“是”"
/>
立即采购发货
</el-radio>
2024-06-27 15:09:53 +08:00
<el-radio :label="2"> 使用库存发货 </el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<template v-if="form.sendType == 1">
<el-row :gutter="20">
<el-col :span="12" :offset="0">
<el-form-item label="供应商" prop="supplier">
<el-select v-model="form.supplier" placeholder="选择供应商" filterable>
<el-option
v-for="item in supplierOptions"
2024-11-01 18:13:44 +08:00
:key="item.id"
:label="item.supplierName"
:value="item.id"
2024-06-27 15:09:53 +08:00
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
2024-06-28 11:24:27 +08:00
<el-form-item label="采购数量" prop="num">
2024-06-27 15:09:53 +08:00
<el-input-number
:min="form.sendTotalNum"
2024-06-28 11:24:27 +08:00
v-model="form.num"
2024-06-27 15:09:53 +08:00
:controls="false"
placeholder="请输入"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12" :offset="0">
<el-form-item label="采购单价" prop="unitPrice">
<el-input-number
:min="0"
:controls="false"
v-model="form.unitPrice"
placeholder="请输入"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
<el-form-item label="存放仓库" prop="warehouseId">
<el-select
v-model="form.warehouseId"
placeholder="请选择"
filterable
style="width: 100%"
>
<el-option
v-for="item in warehouseOptions"
:key="item.warehouseId"
:label="item.warehouseName"
:value="item.warehouseId"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
2024-08-27 14:19:18 +08:00
<el-row :gutter="20">
<el-col :span="12" :offset="0">
<el-form-item label="其他支出">
<el-select v-model="extraPay.extraPayType" placeholder="其他支出类型" filterable>
<el-option
v-for="item in extraPayOptions"
:key="item.id"
:label="item.extraPayName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
<el-form-item label="支出金额">
<el-input-number v-model="extraPay.extraPayMoney" :controls="false" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24" :offset="0">
<el-form-item label="支出备注">
<el-input v-model="extraPay.remark" placeholder="备注信息" />
</el-form-item>
</el-col>
</el-row>
2024-06-27 15:09:53 +08:00
</template>
<template v-else>
<el-table :data="inventoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
2024-06-28 11:24:27 +08:00
<el-table-column prop="batchNo" label="入库批次号" width="150px" />
2024-06-27 15:09:53 +08:00
<el-table-column prop="warehouseName" label="存放仓库" width="120px" />
2024-06-28 11:24:27 +08:00
<el-table-column prop="price" label="采购价" width="90px" />
<el-table-column prop="num" label="剩余库存" width="90px" />
2024-06-27 15:09:53 +08:00
<el-table-column label="发货数量">
<template #default="{ row }">
2024-06-27 15:29:54 +08:00
<el-input-number
v-model="row.sendNum"
size="small"
:min="1"
2024-06-28 11:24:27 +08:00
:max="row.num"
2024-06-27 15:29:54 +08:00
:controls="false"
/>
2024-06-27 15:09:53 +08:00
</template>
</el-table-column>
</el-table>
</template>
2024-08-27 14:19:18 +08:00
<el-form-item label="发货备注">
2024-06-20 19:43:07 +08:00
<Editor v-model:modelValue="form.remark" />
</el-form-item>
</el-form>
<template #footer>
<span>
<el-button @click="show = false"> </el-button>
<el-button :disabled="formLoading" type="primary" @click="onSubmit"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script setup name="DialogDelivery">
2024-06-28 11:24:27 +08:00
import { getSimpleWarehouseList, getRemainInventoryList } from '@/api/mall/warehouse'
2024-06-20 19:43:07 +08:00
import { createDelivery } from '@/api/clue/delivery'
2024-06-27 15:09:53 +08:00
import { getConfigList } from '@/api/system/set'
2024-11-01 18:13:44 +08:00
import { getSupplierSimpleList } from '@/api/school/setting/supplier'
2024-08-27 14:19:18 +08:00
import { getExtraFeeSimpleList } from '@/api/clue/extraFee'
2024-06-20 19:43:07 +08:00
2024-06-21 16:09:34 +08:00
const message = useMessage() // 消息弹窗
2024-06-20 19:43:07 +08:00
const warehouseOptions = ref([])
2024-08-27 14:19:18 +08:00
const extraPayOptions = ref([])
2024-11-01 18:13:44 +08:00
const supplierOptions = ref([])
2024-06-20 19:43:07 +08:00
function getOptions() {
2024-11-01 18:13:44 +08:00
getSupplierSimpleList().then((data) => {
supplierOptions.value = data
})
2024-06-20 19:43:07 +08:00
getSimpleWarehouseList().then((data) => {
warehouseOptions.value = data
})
2024-08-27 14:19:18 +08:00
getExtraFeeSimpleList().then((data) => {
extraPayOptions.value = data
})
2024-06-20 19:43:07 +08:00
}
2024-06-28 11:24:27 +08:00
function getRemainInventory(signProductId) {
getRemainInventoryList({ signProductId }).then((data) => {
inventoryList.value = data
})
}
2024-06-20 19:43:07 +08:00
const show = ref(false)
2024-06-28 11:24:27 +08:00
function open(row) {
2024-06-20 19:43:07 +08:00
show.value = true
2024-06-28 11:24:27 +08:00
resetForm(row)
getRemainInventory(row.id)
2024-06-20 19:43:07 +08:00
}
defineExpose({
open
})
const form = ref({})
2024-08-27 14:19:18 +08:00
const extraPay = ref({})
2024-06-20 19:43:07 +08:00
const rules = ref({
2024-06-27 15:09:53 +08:00
supplier: { required: true, message: '供应商不可为空', trigger: 'change' },
warehouseId: { required: true, message: '仓库不可为空', trigger: 'change' },
2024-06-28 11:24:27 +08:00
num: { required: true, message: '采购数量不可为空', trigger: 'change,blur' },
2024-06-27 15:09:53 +08:00
unitPrice: { required: true, message: '采购单价不可为空', trigger: 'change,blur' },
2024-06-20 19:43:07 +08:00
warehouseId: { required: true, message: '仓库不可为空', trigger: 'change' }
})
2024-06-28 11:24:27 +08:00
function resetForm(row) {
2024-06-20 19:43:07 +08:00
form.value = {
2024-06-27 15:09:53 +08:00
sendType: 2,
2024-06-28 11:24:27 +08:00
sendTotalNum: row.signNum,
signProductId: row.id,
productId: row.productId,
specsId: row.specsId,
2024-06-20 19:43:07 +08:00
warehouseId: undefined,
2024-06-27 15:09:53 +08:00
supplier: undefined,
2024-06-28 11:24:27 +08:00
num: row.signNum,
2024-06-27 15:09:53 +08:00
unitPrice: undefined,
2024-06-20 19:43:07 +08:00
remark: undefined
}
2024-08-27 14:19:18 +08:00
extraPay.value = {
extraPayType: undefined,
extraPayMoney: undefined,
remark: undefined
}
2024-06-20 19:43:07 +08:00
}
const emit = defineEmits(['success'])
const formLoading = ref(false)
2024-06-21 16:09:34 +08:00
const formRef = ref()
2024-06-20 19:43:07 +08:00
async function onSubmit() {
// 校验表单
if (!formRef.value) return
2024-06-27 15:09:53 +08:00
if (form.value.sendType == 1) {
const valid = await formRef.value.validate()
if (!valid) return
} else {
if (!deliveryArr.value.length) {
message.info('请选择库存发货!')
return
} else {
const deliveryCount = deliveryArr.value.reduce((pre, cur) => pre + cur.sendNum, 0)
if (deliveryCount < form.value.sendTotalNum) {
message.info('所选发货库存少于待发货数量,请重新选择后再发货!')
return
} else if (deliveryCount > form.value.sendTotalNum) {
message.info('所选发货库存多于待发货数量,请重新选择后再发货!')
return
}
}
}
2024-06-20 19:43:07 +08:00
// 提交请求
formLoading.value = true
try {
2024-06-28 11:24:27 +08:00
let params = {
signProductId: form.value.signProductId,
sendType: form.value.sendType,
remark: form.value.remark
}
if (params.sendType == 1) {
params.purchaseOrder = {
productId: form.value.productId,
specsId: form.value.specsId,
supplier: form.value.supplier,
num: form.value.num,
unitPrice: form.value.unitPrice,
warehouseId: form.value.warehouseId
}
2024-08-27 14:19:18 +08:00
if (extraPay.value.extraPayMoney) {
params.purchaseOrder.extraPay = [extraPay.value]
}
2024-06-28 11:24:27 +08:00
} else {
2024-07-12 17:25:32 +08:00
params.detailList = deliveryArr.value
2024-06-28 11:24:27 +08:00
}
await createDelivery(params)
2024-06-20 19:43:07 +08:00
message.success('发货成功!')
show.value = false
emit('success')
} finally {
formLoading.value = false
}
}
2024-06-28 11:24:27 +08:00
const inventoryList = ref([])
2024-06-27 15:09:53 +08:00
const deliveryArr = ref([])
function handleSelectionChange(val) {
deliveryArr.value = val
}
const autoAuditPurchase = ref('false')
2024-06-20 19:43:07 +08:00
onMounted(() => {
getOptions()
2024-06-27 15:09:53 +08:00
getConfigList({ module: 3 }).then((data) => {
// 获取所有配置项
autoAuditPurchase.value = data.find(
(it) => it.configKey == 'purchaseAuditAutoCompleteConfig'
).configValue
})
2024-06-20 19:43:07 +08:00
})
</script>
<style lang="scss" scoped></style>