feat(mes): 添加生成检验单编号功能,重构质检方案选择组件,优化表单逻辑和注释

pull/871/MERGE
YunaiV 2026-02-21 21:17:28 +08:00
parent 298ad41d5b
commit 79bc5c6ea0
1 changed files with 33 additions and 36 deletions

View File

@ -12,8 +12,13 @@
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="检验单编号" prop="code"> <el-form-item label="检验单编号" prop="code">
<!-- TODO @AI参考别的模块搞一下有个生成按钮 --> <el-input v-model="formData.code" placeholder="请输入检验单编号">
<el-input v-model="formData.code" placeholder="请输入检验单编号" /> <template #append>
<el-button @click="generateCode" :disabled="formType === 'update'">
生成
</el-button>
</template>
</el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -23,20 +28,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="质检方案" prop="templateId"> <el-form-item label="质检方案" prop="templateId">
<!-- TODO @AI质检方案有个 select 组件 --> <QcTemplateSelect v-model="formData.templateId" class="!w-1/1" />
<el-select
v-model="formData.templateId"
placeholder="质检方案"
filterable
class="!w-1/1"
>
<el-option
v-for="item in templateList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -117,7 +109,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- TODO @AI应该不用填写 --> <!-- TODO 暂时不要删除@芋艿应该不用填写 -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="检测人员" prop="inspectorUserId"> <el-form-item label="检测人员" prop="inspectorUserId">
<UserSelect <UserSelect
@ -200,7 +192,9 @@
<el-tab-pane label="检验项" name="line"> <el-tab-pane label="检验项" name="line">
<IqcLineList :iqc-id="formData.id" /> <IqcLineList :iqc-id="formData.id" />
</el-tab-pane> </el-tab-pane>
<!-- TODO @芋艿检测结果缺少一个 tab-pane --> <el-tab-pane label="检测结果" name="result">
<IqcResultList :iqc-id="formData.id" />
</el-tab-pane>
</el-tabs> </el-tabs>
</template> </template>
@ -213,28 +207,25 @@
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { generateRandomStr } from '@/utils'
import { QcIqcApi, QcIqcVO } from '@/api/mes/qc/iqc' import { QcIqcApi, QcIqcVO } from '@/api/mes/qc/iqc'
import { QcTemplateApi } from '@/api/mes/qc/template'
import MdVendorSelect from '@/views/mes/md/vendor/components/MdVendorSelect.vue' import MdVendorSelect from '@/views/mes/md/vendor/components/MdVendorSelect.vue'
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue' import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
import UserSelect from '@/views/system/user/components/UserSelect.vue' import UserSelect from '@/views/system/user/components/UserSelect.vue'
import QcTemplateSelect from '@/views/mes/qc/template/components/QcTemplateSelect.vue'
import IqcLineList from './IqcLineList.vue' import IqcLineList from './IqcLineList.vue'
import IqcResultList from './IqcResultList.vue'
// TODO @AI /Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/system/user/UserForm.vue
defineOptions({ name: 'IqcForm' }) defineOptions({ name: 'IqcForm' })
const { t } = useI18n() const { t } = useI18n() //
const message = useMessage() const message = useMessage() //
const dialogVisible = ref(false) const dialogVisible = ref(false) //
const dialogTitle = ref('') const dialogTitle = ref('') //
const formLoading = ref(false) const formLoading = ref(false) // 12
const formType = ref('') const formType = ref('') // create - update -
const activeTab = ref('line') const activeTab = ref('line') //
//
// TODO @AI/Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/mes/qc/template components select
const templateList = ref<any[]>([])
const formData = ref({ const formData = ref({
id: undefined as number | undefined, id: undefined as number | undefined,
@ -275,7 +266,12 @@ const formRules = reactive({
itemId: [{ required: true, message: '产品物料不能为空', trigger: 'change' }], itemId: [{ required: true, message: '产品物料不能为空', trigger: 'change' }],
receivedQuantity: [{ required: true, message: '接收数量不能为空', trigger: 'blur' }] receivedQuantity: [{ required: true, message: '接收数量不能为空', trigger: 'blur' }]
}) })
const formRef = ref() const formRef = ref() // Ref
/** 生成检验单编号 */
const generateCode = () => {
formData.value.code = 'IQC' + generateRandomStr(10)
}
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
@ -284,8 +280,6 @@ const open = async (type: string, id?: number) => {
formType.value = type formType.value = type
activeTab.value = 'line' activeTab.value = 'line'
resetForm() resetForm()
//
templateList.value = await QcTemplateApi.getTemplateSimpleList()
// //
if (id) { if (id) {
formLoading.value = true formLoading.value = true
@ -296,14 +290,16 @@ const open = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ open }) defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) const emit = defineEmits(['success']) // success
const submitForm = async () => { const submitForm = async () => {
//
if (!formRef) return if (!formRef) return
const valid = await formRef.value.validate() const valid = await formRef.value.validate()
if (!valid) return if (!valid) return
//
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value as unknown as QcIqcVO const data = formData.value as unknown as QcIqcVO
@ -315,6 +311,7 @@ const submitForm = async () => {
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
dialogVisible.value = false dialogVisible.value = false
//
emit('success') emit('success')
} finally { } finally {
formLoading.value = false formLoading.value = false