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.
182 lines
5.4 KiB
182 lines
5.4 KiB
<template>
|
|
<Dialog title="发起采购" v-model="dialogVisible" width="800px">
|
|
<el-form :model="form" ref="formRef" :rules="rules" label-width="100px">
|
|
<el-row :gutter="20">
|
|
<el-col :span="12" :offset="0">
|
|
<el-form-item label="产品" prop="productId">
|
|
<el-select v-model="form.productId" placeholder="请选择" filterable style="width: 100%">
|
|
<el-option
|
|
v-for="item in props.opts.product"
|
|
:key="item.productId"
|
|
:label="item.productName"
|
|
:value="item.productId"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12" :offset="0">
|
|
<el-form-item label="规格" prop="specsId">
|
|
<el-select v-model="form.specsId" placeholder="请选择" filterable style="width: 100%">
|
|
<el-option
|
|
v-for="item in specOptions"
|
|
:key="item.specsId"
|
|
:label="item.specsName"
|
|
:value="item.specsId"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
<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 opts.supplier"
|
|
:key="item.value"
|
|
:label="item.label"
|
|
:value="item.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="12" :offset="0">
|
|
<el-form-item label="采购数量" prop="num">
|
|
<el-input-number :min="1" v-model="form.num" 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"
|
|
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>
|
|
<el-row :gutter="20">
|
|
<el-col :span="24" :offset="0">
|
|
<el-form-item label="备注" prop="remark">
|
|
<Editor v-model:modelValue="form.remark" />
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<template #footer>
|
|
<span>
|
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
|
<el-button type="primary" @click="handleSave">保 存</el-button>
|
|
</span>
|
|
</template>
|
|
</Dialog>
|
|
</template>
|
|
|
|
<script setup>
|
|
import * as PurchaseApi from '@/api/mall/purchase'
|
|
import * as WarehouseApi from '@/api/mall/warehouse'
|
|
|
|
const { t } = useI18n() // 国际化
|
|
const message = useMessage() // 消息弹窗
|
|
|
|
const props = defineProps({
|
|
opts: {
|
|
type: Object,
|
|
default: () => {
|
|
return {
|
|
product: [],
|
|
spec: [],
|
|
supplier: [],
|
|
warehouse: []
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
const specOptions = computed(() => {
|
|
if (form.value.productId) {
|
|
return (
|
|
props.opts.product.find((it) => it.productId == form.value.productId)?.productSpecList || []
|
|
)
|
|
} else {
|
|
return []
|
|
}
|
|
})
|
|
|
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
|
|
|
const form = ref({})
|
|
const rules = {
|
|
productId: { required: true, message: '产品不可为空', trigger: 'change' },
|
|
specsId: { required: true, message: '规格不可为空', trigger: 'change' },
|
|
supplier: { required: true, message: '供应商不可为空', trigger: 'change' },
|
|
warehouseId: { required: true, message: '仓库不可为空', trigger: 'change' },
|
|
num: { required: true, message: '采购数量不可为空', trigger: 'change,blur' },
|
|
unitPrice: { required: true, message: '采购单价不可为空', trigger: 'change,blur' }
|
|
}
|
|
|
|
const warehouseOptions = ref([])
|
|
function getOptions() {
|
|
WarehouseApi.getSimpleWarehouseList().then((data) => {
|
|
warehouseOptions.value = data
|
|
})
|
|
}
|
|
|
|
const open = (val) => {
|
|
dialogVisible.value = true
|
|
getOptions()
|
|
form.value = { ...val } || {
|
|
productId: undefined,
|
|
specsId: undefined,
|
|
supplier: undefined,
|
|
num: undefined,
|
|
unitPrice: undefined,
|
|
warehouseId: undefined,
|
|
remark: undefined
|
|
}
|
|
}
|
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
|
|
const formRef = ref()
|
|
const formLoading = ref(false)
|
|
|
|
async function handleSave() {
|
|
// 校验表单
|
|
if (!formRef.value) return
|
|
const valid = await formRef.value.validate()
|
|
if (!valid) return
|
|
// 提交请求
|
|
formLoading.value = true
|
|
try {
|
|
await PurchaseApi.createPurchase(form.value)
|
|
message.success(t('common.createSuccess'))
|
|
dialogVisible.value = false
|
|
// 发送操作成功的事件
|
|
emit('success')
|
|
} finally {
|
|
formLoading.value = false
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped></style>
|
|
|