admin-vue3/src/views/erp/bdorderprequote/BdOrderPreQuoteForm.vue

219 lines
7.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="供应商id" prop="sypplierId">
<el-input v-model="formData.sypplierId" placeholder="请输入供应商id" />
</el-form-item>
<el-form-item label="工单状态" prop="orderStatusId">
<el-select v-model="formData.orderStatusId" placeholder="请选择工单状态">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.ERP_ORDER_PRE_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="分配时间" prop="fpTime">
<el-date-picker
v-model="formData.fpTime"
type="date"
value-format="x"
placeholder="选择分配时间"
/>
</el-form-item>
<el-form-item label="接单时间" prop="pickOrderTime">
<el-date-picker
v-model="formData.pickOrderTime"
type="date"
value-format="x"
placeholder="选择接单时间"
/>
</el-form-item>
<el-form-item label="开始报价时间" prop="startPriceTime">
<el-date-picker
v-model="formData.startPriceTime"
type="date"
value-format="x"
placeholder="选择开始报价时间"
/>
</el-form-item>
<el-form-item label="最晚报价时间" prop="needEndTime">
<el-date-picker
v-model="formData.needEndTime"
type="date"
value-format="x"
placeholder="选择最晚报价时间"
/>
</el-form-item>
<el-form-item label="结束报价时间" prop="endPriceTime">
<el-date-picker
v-model="formData.endPriceTime"
type="date"
value-format="x"
placeholder="选择结束报价时间"
/>
</el-form-item>
<el-form-item label="关单时间" prop="closeOrderTime">
<el-date-picker
v-model="formData.closeOrderTime"
type="date"
value-format="x"
placeholder="选择关单时间"
/>
</el-form-item>
<el-form-item label="取消工单原因" prop="cancelRemark">
<el-input v-model="formData.cancelRemark" type="textarea" placeholder="请输入取消工单原因" />
</el-form-item>
<el-form-item label="报价者备注" prop="priceUserRemark">
<el-input v-model="formData.priceUserRemark" type="textarea" placeholder="请输入报价者备注" />
</el-form-item>
<el-form-item label="派单者id" prop="dispUserId">
<el-input v-model="formData.dispUserId" placeholder="请输入派单者id" />
</el-form-item>
<el-form-item label="接单者id" prop="pickUserId">
<el-input v-model="formData.pickUserId" placeholder="请输入接单者id" />
</el-form-item>
<el-form-item label="报价者id" prop="priceUserId">
<el-input v-model="formData.priceUserId" placeholder="请输入报价者id" />
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input v-model="formData.address" placeholder="请输入地址" />
</el-form-item>
<el-form-item label="加急" prop="expedited">
<el-input v-model="formData.expedited" placeholder="请输入加急" />
</el-form-item>
</el-form>
<!-- 子表的表单 -->
<el-tabs v-model="subTabsName">
<el-tab-pane label="Erp单据文件" name="orderFile">
<OrderFileForm ref="orderFileFormRef" :order-id="formData.id" />
</el-tab-pane>
</el-tabs>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { BdOrderPreQuoteApi, BdOrderPreQuoteVO } from '@/api/erp/bdorderprequote'
import OrderFileForm from './components/OrderFileForm.vue'
/** erp商务预报价 表单 */
defineOptions({ name: 'BdOrderPreQuoteForm' })
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中1修改时的数据加载2提交的按钮禁用
const formType = ref('') // 表单的类型create - 新增update - 修改
const formData = ref({
orderId: undefined,
sypplierId: undefined,
orderStatusId: undefined,
fpTime: undefined,
pickOrderTime: undefined,
startPriceTime: undefined,
needEndTime: undefined,
endPriceTime: undefined,
closeOrderTime: undefined,
cancelRemark: undefined,
priceUserRemark: undefined,
dispUserId: undefined,
pickUserId: undefined,
priceUserId: undefined,
address: undefined,
expedited: undefined
})
const formRules = reactive({
})
const formRef = ref() // 表单 Ref
/** 子表的表单 */
const subTabsName = ref('orderFile')
const orderFileFormRef = ref()
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
// 修改时,设置数据
if (id) {
formLoading.value = true
try {
formData.value = await BdOrderPreQuoteApi.getBdOrderPreQuote(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
const submitForm = async () => {
// 校验表单
await formRef.value.validate()
// 校验子表单
try {
await orderFileFormRef.value.validate()
} catch (e) {
subTabsName.value = 'orderFile'
return
}
// 提交请求
formLoading.value = true
try {
const data = formData.value as unknown as BdOrderPreQuoteVO
// 拼接子表的数据
data.orderFiles = orderFileFormRef.value.getData()
if (formType.value === 'create') {
await BdOrderPreQuoteApi.createBdOrderPreQuote(data)
message.success(t('common.createSuccess'))
} else {
await BdOrderPreQuoteApi.updateBdOrderPreQuote(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
// 发送操作成功的事件
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
orderId: undefined,
sypplierId: undefined,
orderStatusId: undefined,
fpTime: undefined,
pickOrderTime: undefined,
startPriceTime: undefined,
needEndTime: undefined,
endPriceTime: undefined,
closeOrderTime: undefined,
cancelRemark: undefined,
priceUserRemark: undefined,
dispUserId: undefined,
pickUserId: undefined,
priceUserId: undefined,
address: undefined,
expedited: undefined
}
formRef.value?.resetFields()
}
</script>