莳松crm管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ss-crm-manage-web/src/views/Clue/Order/Comp/DialogDelivery.vue

288 lines
9.1 KiB

1 year ago
<template>
1 year ago
<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>
1 year ago
<el-col :span="16" :offset="0">
1 year ago
<el-form-item label="发货方式">
1 year ago
<el-radio-group v-model="form.sendType" :disabled="autoAuditPurchase == 'false'">
1 year ago
<el-radio :label="1">
<Tooltip
message="必须在进销存的“通用配置-常规配置”中,将 ’采购申请自动通过‘ 设置为“是”"
/>
立即采购发货
</el-radio>
1 year ago
<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"
11 months ago
:key="item.id"
:label="item.supplierName"
:value="item.id"
1 year ago
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" :offset="0">
1 year ago
<el-form-item label="采购数量" prop="num">
1 year ago
<el-input-number
:min="form.sendTotalNum"
1 year ago
v-model="form.num"
1 year ago
: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>
1 year ago
<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>
1 year ago
</template>
<template v-else>
<el-table :data="inventoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
1 year ago
<el-table-column prop="batchNo" label="入库批次号" width="150px" />
1 year ago
<el-table-column prop="warehouseName" label="存放仓库" width="120px" />
1 year ago
<el-table-column prop="price" label="采购价" width="90px" />
<el-table-column prop="num" label="剩余库存" width="90px" />
1 year ago
<el-table-column label="发货数量">
<template #default="{ row }">
1 year ago
<el-input-number
v-model="row.sendNum"
size="small"
:min="1"
1 year ago
:max="row.num"
1 year ago
:controls="false"
/>
1 year ago
</template>
</el-table-column>
</el-table>
</template>
1 year ago
<el-form-item label="发货备注">
1 year ago
<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">
1 year ago
import { getSimpleWarehouseList, getRemainInventoryList } from '@/api/mall/warehouse'
1 year ago
import { createDelivery } from '@/api/clue/delivery'
1 year ago
import { getConfigList } from '@/api/system/set'
11 months ago
import { getSupplierSimpleList } from '@/api/school/setting/supplier'
1 year ago
import { getExtraFeeSimpleList } from '@/api/clue/extraFee'
1 year ago
1 year ago
const message = useMessage() // 消息弹窗
1 year ago
const warehouseOptions = ref([])
1 year ago
const extraPayOptions = ref([])
11 months ago
const supplierOptions = ref([])
1 year ago
function getOptions() {
11 months ago
getSupplierSimpleList().then((data) => {
supplierOptions.value = data
})
1 year ago
getSimpleWarehouseList().then((data) => {
warehouseOptions.value = data
})
1 year ago
getExtraFeeSimpleList().then((data) => {
extraPayOptions.value = data
})
1 year ago
}
1 year ago
function getRemainInventory(signProductId) {
getRemainInventoryList({ signProductId }).then((data) => {
inventoryList.value = data
})
}
1 year ago
const show = ref(false)
1 year ago
function open(row) {
1 year ago
show.value = true
1 year ago
resetForm(row)
getRemainInventory(row.id)
1 year ago
}
defineExpose({
open
})
const form = ref({})
1 year ago
const extraPay = ref({})
1 year ago
const rules = ref({
1 year ago
supplier: { required: true, message: '供应商不可为空', trigger: 'change' },
warehouseId: { required: true, message: '仓库不可为空', trigger: 'change' },
1 year ago
num: { required: true, message: '采购数量不可为空', trigger: 'change,blur' },
1 year ago
unitPrice: { required: true, message: '采购单价不可为空', trigger: 'change,blur' },
1 year ago
warehouseId: { required: true, message: '仓库不可为空', trigger: 'change' }
})
1 year ago
function resetForm(row) {
1 year ago
form.value = {
1 year ago
sendType: 2,
1 year ago
sendTotalNum: row.signNum,
signProductId: row.id,
productId: row.productId,
specsId: row.specsId,
1 year ago
warehouseId: undefined,
1 year ago
supplier: undefined,
1 year ago
num: row.signNum,
1 year ago
unitPrice: undefined,
1 year ago
remark: undefined
}
1 year ago
extraPay.value = {
extraPayType: undefined,
extraPayMoney: undefined,
remark: undefined
}
1 year ago
}
const emit = defineEmits(['success'])
const formLoading = ref(false)
1 year ago
const formRef = ref()
1 year ago
async function onSubmit() {
// 校验表单
if (!formRef.value) return
1 year ago
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
}
}
}
1 year ago
// 提交请求
formLoading.value = true
try {
1 year ago
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
}
1 year ago
if (extraPay.value.extraPayMoney) {
params.purchaseOrder.extraPay = [extraPay.value]
}
1 year ago
} else {
1 year ago
params.detailList = deliveryArr.value
1 year ago
}
await createDelivery(params)
1 year ago
message.success('发货成功!')
show.value = false
emit('success')
} finally {
formLoading.value = false
}
}
1 year ago
const inventoryList = ref([])
1 year ago
const deliveryArr = ref([])
function handleSelectionChange(val) {
deliveryArr.value = val
}
const autoAuditPurchase = ref('false')
1 year ago
onMounted(() => {
getOptions()
1 year ago
getConfigList({ module: 3 }).then((data) => {
// 获取所有配置项
autoAuditPurchase.value = data.find(
(it) => it.configKey == 'purchaseAuditAutoCompleteConfig'
).configValue
})
1 year ago
})
</script>
<style lang="scss" scoped></style>