|
|
@@ -0,0 +1,181 @@
|
|
|
+<template>
|
|
|
+ <div class="iqc-edit-page" v-loading="loading">
|
|
|
+ <div class="page-header">
|
|
|
+ <div>
|
|
|
+ <h2>来料检验单编辑</h2>
|
|
|
+ <div class="sub-title">任务编号:{{ taskId }}</div>
|
|
|
+ </div>
|
|
|
+ <div class="header-actions">
|
|
|
+ <el-button @click="handleBack">返回</el-button>
|
|
|
+ <el-button type="primary" @click="handleSave" :loading="saving">保存</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-card class="section-card" shadow="never">
|
|
|
+ <template #header>
|
|
|
+ <div class="section-title">主表信息(A/B/C/D 占位)</div>
|
|
|
+ </template>
|
|
|
+ <el-form label-width="100px">
|
|
|
+ <el-row :gutter="16">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="A">
|
|
|
+ <el-input v-model="mainForm.mainA" placeholder="请输入 A" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="B">
|
|
|
+ <el-input v-model="mainForm.mainB" placeholder="请输入 B" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="C">
|
|
|
+ <el-input v-model="mainForm.mainC" placeholder="请输入 C" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="D">
|
|
|
+ <el-input v-model="mainForm.mainD" placeholder="请输入 D" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ </el-card>
|
|
|
+
|
|
|
+ <el-card class="section-card" shadow="never">
|
|
|
+ <template #header>
|
|
|
+ <div class="section-title">
|
|
|
+ 检验明细(A/B/C/D 占位)
|
|
|
+ <div class="section-actions">
|
|
|
+ <el-button type="primary" size="small" @click="handleAddRow">新增行</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <el-table :data="detailRows" border>
|
|
|
+ <el-table-column label="A" width="220">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-input v-model="row.a" placeholder="请输入 A" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="B" width="220">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-input v-model="row.b" placeholder="请输入 B" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="C" width="180">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-input v-model="row.c" placeholder="请输入 C" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="D" width="180">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-input v-model="row.d" placeholder="请输入 D" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="100">
|
|
|
+ <template #default="{ $index }">
|
|
|
+ <el-button link type="danger" size="small" @click="handleDeleteRow($index)">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+defineOptions({ name: 'IqcInspectBillEdit' })
|
|
|
+
|
|
|
+import { computed, ref, watch } from 'vue'
|
|
|
+import { useRoute, useRouter } from 'vue-router'
|
|
|
+import { useIqcInspectBillStore } from '@/store/modules/qms/inspectBill'
|
|
|
+
|
|
|
+const route = useRoute()
|
|
|
+const router = useRouter()
|
|
|
+const inspectBillStore = useIqcInspectBillStore()
|
|
|
+
|
|
|
+const loading = ref(false)
|
|
|
+const saving = ref(false)
|
|
|
+
|
|
|
+const taskId = computed(() => String(route.params.taskId || ''))
|
|
|
+
|
|
|
+const mainForm = computed(() => {
|
|
|
+ if (!taskId.value) return inspectBillStore.ensureDraft('temp').main
|
|
|
+ return inspectBillStore.ensureDraft(taskId.value).main
|
|
|
+})
|
|
|
+
|
|
|
+const detailRows = computed(() => {
|
|
|
+ if (!taskId.value) return []
|
|
|
+ return inspectBillStore.ensureDraft(taskId.value).details
|
|
|
+})
|
|
|
+
|
|
|
+const fetchData = async () => {
|
|
|
+ if (!taskId.value) return
|
|
|
+ loading.value = true
|
|
|
+ try {
|
|
|
+ await inspectBillStore.load(taskId.value)
|
|
|
+ } finally {
|
|
|
+ loading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const handleAddRow = () => {
|
|
|
+ if (!taskId.value) return
|
|
|
+ inspectBillStore.addDetailRow(taskId.value)
|
|
|
+}
|
|
|
+
|
|
|
+const handleDeleteRow = (index: number) => {
|
|
|
+ if (!taskId.value) return
|
|
|
+ inspectBillStore.deleteDetailRow(taskId.value, index)
|
|
|
+}
|
|
|
+
|
|
|
+const handleSave = async () => {
|
|
|
+ if (!taskId.value) return
|
|
|
+ saving.value = true
|
|
|
+ try {
|
|
|
+ await inspectBillStore.save(taskId.value)
|
|
|
+ ElMessage.success('保存成功')
|
|
|
+ } catch {
|
|
|
+ ElMessage.error('保存失败')
|
|
|
+ } finally {
|
|
|
+ saving.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const handleBack = () => {
|
|
|
+ router.back()
|
|
|
+}
|
|
|
+
|
|
|
+watch(taskId, () => { fetchData() }, { immediate: true })
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+.iqc-edit-page {
|
|
|
+ padding: 20px;
|
|
|
+}
|
|
|
+.page-header {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 16px;
|
|
|
+ h2 {
|
|
|
+ margin: 0;
|
|
|
+ font-size: 20px;
|
|
|
+ }
|
|
|
+ .sub-title {
|
|
|
+ font-size: 12px;
|
|
|
+ color: var(--el-text-color-secondary);
|
|
|
+ margin-top: 4px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.section-card {
|
|
|
+ margin-bottom: 16px;
|
|
|
+}
|
|
|
+.section-title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ font-weight: 600;
|
|
|
+ .section-actions {
|
|
|
+ margin-left: auto;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|