fix(repair): add edit action, mandatory validations, default date, and fix outbound SN mapping
This commit is contained in:
@ -49,12 +49,15 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="arrival_date" label="接收时间" width="120" />
|
||||
<el-table-column prop="fault_description" label="故障描述" min-width="150" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="220" fixed="right" align="center">
|
||||
<el-table-column label="操作" width="280" fixed="right" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button v-if="userStore.hasPermission('inbound_repair:edit')" type="warning" link size="small" @click="handlePrint(row)">
|
||||
<el-icon><Printer /></el-icon> 打印
|
||||
</el-button>
|
||||
<el-button v-if="userStore.hasPermission('inbound_repair:edit')" type="primary" link size="small" @click="handleUpdateStatus(row)">
|
||||
<el-button v-if="userStore.hasPermission('inbound_repair:edit')" type="primary" link size="small" @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-if="userStore.hasPermission('inbound_repair:edit')" type="success" link size="small" @click="handleUpdateStatus(row)">
|
||||
更新状态
|
||||
</el-button>
|
||||
<el-button v-if="userStore.hasPermission('inbound_repair:delete')" type="danger" link size="small" @click="handleDelete(row)">
|
||||
@ -77,8 +80,8 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 新增维修单弹窗 -->
|
||||
<el-dialog v-model="dialogVisible" title="新增维修单" width="650px" destroy-on-close :close-on-click-modal="false">
|
||||
<!-- 新增/编辑维修单弹窗 -->
|
||||
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="650px" destroy-on-close :close-on-click-modal="false">
|
||||
<el-form ref="formRef" :model="form" :rules="formRules" label-width="100px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
@ -213,11 +216,12 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { Plus, Search, Refresh, Printer, Camera } from '@element-plus/icons-vue'
|
||||
import { ref, reactive, onMounted, computed } from 'vue'
|
||||
import dayjs from 'dayjs'
|
||||
import { Plus, Search, Refresh, Printer, Camera, Edit } from '@element-plus/icons-vue'
|
||||
import { ElMessage, ElMessageBox, ElFormRules } from 'element-plus'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import { getRepairList, createRepair, updateRepairStatus, deleteRepair } from '@/api/inbound/repair'
|
||||
import { getRepairList, createRepair, updateRepair, updateRepairStatus, deleteRepair } from '@/api/inbound/repair'
|
||||
import { getLabelPreview, executePrint } from '@/api/common/print'
|
||||
import SmartScannerDialog from '@/components/SmartScannerDialog.vue'
|
||||
|
||||
@ -240,11 +244,15 @@ const pagination = reactive({
|
||||
total: 0
|
||||
})
|
||||
|
||||
// 新增弹窗
|
||||
// 弹窗标题
|
||||
const dialogTitle = computed(() => form.id ? '编辑维修单' : '新增维修单')
|
||||
|
||||
// 新增/编辑弹窗
|
||||
const dialogVisible = ref(false)
|
||||
const submitLoading = ref(false)
|
||||
const formRef = ref()
|
||||
const form = reactive({
|
||||
id: undefined as number | undefined,
|
||||
material_name: '',
|
||||
serial_number: '',
|
||||
source_table: 'independent',
|
||||
@ -257,10 +265,11 @@ const form = reactive({
|
||||
sale_price: undefined as number | undefined
|
||||
})
|
||||
|
||||
// 表单校验
|
||||
// 表单校验规则
|
||||
const formRules: ElFormRules = [
|
||||
{ required: true, message: '请输入物料名称', trigger: 'blur', field: 'material_name' },
|
||||
{ required: true, message: '请输入序列号', trigger: 'blur', field: 'serial_number' }
|
||||
{ required: true, message: '请输入序列号', trigger: 'blur', field: 'serial_number' },
|
||||
{ required: true, message: '请输入客户名称', trigger: 'blur', field: 'customer_name' }
|
||||
]
|
||||
|
||||
// 状态更新弹窗
|
||||
@ -346,13 +355,19 @@ const handleReset = () => {
|
||||
handleSearch()
|
||||
}
|
||||
|
||||
// 新增
|
||||
// 获取默认时间
|
||||
const getDefaultDate = () => {
|
||||
return dayjs().format('YYYY-MM-DD')
|
||||
}
|
||||
|
||||
// 新增 - 打开弹窗
|
||||
const handleCreate = () => {
|
||||
// 重置表单
|
||||
form.id = undefined
|
||||
form.material_name = ''
|
||||
form.serial_number = ''
|
||||
form.source_table = 'independent'
|
||||
form.arrival_date = ''
|
||||
form.arrival_date = getDefaultDate()
|
||||
form.fault_description = ''
|
||||
form.customer_name = ''
|
||||
form.customer_location = ''
|
||||
@ -362,20 +377,49 @@ const handleCreate = () => {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
// 提交新增
|
||||
// 编辑 - 打开弹窗
|
||||
const handleEdit = (row: any) => {
|
||||
form.id = row.id
|
||||
form.material_name = row.material_name || ''
|
||||
form.serial_number = row.serial_number || ''
|
||||
form.source_table = row.source_table || 'independent'
|
||||
form.arrival_date = row.arrival_date || getDefaultDate()
|
||||
form.fault_description = row.fault_description || ''
|
||||
form.customer_name = row.customer_name || ''
|
||||
form.customer_location = row.customer_location || ''
|
||||
form.repair_manager = row.repair_manager || ''
|
||||
form.cost_price = row.cost_price ?? undefined
|
||||
form.sale_price = row.sale_price ?? undefined
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
// 提交新增/编辑
|
||||
const handleSubmit = async () => {
|
||||
if (!formRef.value) return
|
||||
await formRef.value.validate()
|
||||
|
||||
submitLoading.value = true
|
||||
try {
|
||||
const res = await createRepair(form)
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('新增成功')
|
||||
dialogVisible.value = false
|
||||
fetchData()
|
||||
if (form.id) {
|
||||
// 编辑
|
||||
const res = await updateRepair(form.id, form)
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('编辑成功')
|
||||
dialogVisible.value = false
|
||||
fetchData()
|
||||
} else {
|
||||
ElMessage.error(res.msg || '编辑失败')
|
||||
}
|
||||
} else {
|
||||
ElMessage.error(res.msg || '新增失败')
|
||||
// 新增
|
||||
const res = await createRepair(form)
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('新增成功')
|
||||
dialogVisible.value = false
|
||||
fetchData()
|
||||
} else {
|
||||
ElMessage.error(res.msg || '新增失败')
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
submitLoading.value = false
|
||||
|
||||
Reference in New Issue
Block a user