fix(repair): add edit action, mandatory validations, default date, and fix outbound SN mapping
This commit is contained in:
@ -94,7 +94,8 @@ class OutboundService:
|
|||||||
'source_table': 'trans_repair',
|
'source_table': 'trans_repair',
|
||||||
'stock_quantity': 1,
|
'stock_quantity': 1,
|
||||||
'available_quantity': 1,
|
'available_quantity': 1,
|
||||||
'batch_number': '',
|
'batch_number': repair.serial_number or '',
|
||||||
|
'serial_number': repair.serial_number or '',
|
||||||
'warehouse_location': repair.customer_location or '',
|
'warehouse_location': repair.customer_location or '',
|
||||||
'barcode': repair.sku,
|
'barcode': repair.sku,
|
||||||
'price': float(repair.sale_price) if repair.sale_price else 0
|
'price': float(repair.sale_price) if repair.sale_price else 0
|
||||||
|
|||||||
@ -49,12 +49,15 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="arrival_date" label="接收时间" width="120" />
|
<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 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 }">
|
<template #default="{ row }">
|
||||||
<el-button v-if="userStore.hasPermission('inbound_repair:edit')" type="warning" link size="small" @click="handlePrint(row)">
|
<el-button v-if="userStore.hasPermission('inbound_repair:edit')" type="warning" link size="small" @click="handlePrint(row)">
|
||||||
<el-icon><Printer /></el-icon> 打印
|
<el-icon><Printer /></el-icon> 打印
|
||||||
</el-button>
|
</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>
|
||||||
<el-button v-if="userStore.hasPermission('inbound_repair:delete')" type="danger" link size="small" @click="handleDelete(row)">
|
<el-button v-if="userStore.hasPermission('inbound_repair:delete')" type="danger" link size="small" @click="handleDelete(row)">
|
||||||
@ -77,8 +80,8 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</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-form ref="formRef" :model="form" :rules="formRules" label-width="100px">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@ -213,11 +216,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, onMounted } from 'vue'
|
import { ref, reactive, onMounted, computed } from 'vue'
|
||||||
import { Plus, Search, Refresh, Printer, Camera } from '@element-plus/icons-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 { ElMessage, ElMessageBox, ElFormRules } from 'element-plus'
|
||||||
import { useUserStore } from '@/stores/user'
|
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 { getLabelPreview, executePrint } from '@/api/common/print'
|
||||||
import SmartScannerDialog from '@/components/SmartScannerDialog.vue'
|
import SmartScannerDialog from '@/components/SmartScannerDialog.vue'
|
||||||
|
|
||||||
@ -240,11 +244,15 @@ const pagination = reactive({
|
|||||||
total: 0
|
total: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
// 新增弹窗
|
// 弹窗标题
|
||||||
|
const dialogTitle = computed(() => form.id ? '编辑维修单' : '新增维修单')
|
||||||
|
|
||||||
|
// 新增/编辑弹窗
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
const submitLoading = ref(false)
|
const submitLoading = ref(false)
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
|
id: undefined as number | undefined,
|
||||||
material_name: '',
|
material_name: '',
|
||||||
serial_number: '',
|
serial_number: '',
|
||||||
source_table: 'independent',
|
source_table: 'independent',
|
||||||
@ -257,10 +265,11 @@ const form = reactive({
|
|||||||
sale_price: undefined as number | undefined
|
sale_price: undefined as number | undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
// 表单校验
|
// 表单校验规则
|
||||||
const formRules: ElFormRules = [
|
const formRules: ElFormRules = [
|
||||||
{ required: true, message: '请输入物料名称', trigger: 'blur', field: 'material_name' },
|
{ 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()
|
handleSearch()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增
|
// 获取默认时间
|
||||||
|
const getDefaultDate = () => {
|
||||||
|
return dayjs().format('YYYY-MM-DD')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增 - 打开弹窗
|
||||||
const handleCreate = () => {
|
const handleCreate = () => {
|
||||||
// 重置表单
|
// 重置表单
|
||||||
|
form.id = undefined
|
||||||
form.material_name = ''
|
form.material_name = ''
|
||||||
form.serial_number = ''
|
form.serial_number = ''
|
||||||
form.source_table = 'independent'
|
form.source_table = 'independent'
|
||||||
form.arrival_date = ''
|
form.arrival_date = getDefaultDate()
|
||||||
form.fault_description = ''
|
form.fault_description = ''
|
||||||
form.customer_name = ''
|
form.customer_name = ''
|
||||||
form.customer_location = ''
|
form.customer_location = ''
|
||||||
@ -362,20 +377,49 @@ const handleCreate = () => {
|
|||||||
dialogVisible.value = true
|
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 () => {
|
const handleSubmit = async () => {
|
||||||
if (!formRef.value) return
|
if (!formRef.value) return
|
||||||
await formRef.value.validate()
|
await formRef.value.validate()
|
||||||
|
|
||||||
submitLoading.value = true
|
submitLoading.value = true
|
||||||
try {
|
try {
|
||||||
const res = await createRepair(form)
|
if (form.id) {
|
||||||
if (res.code === 200) {
|
// 编辑
|
||||||
ElMessage.success('新增成功')
|
const res = await updateRepair(form.id, form)
|
||||||
dialogVisible.value = false
|
if (res.code === 200) {
|
||||||
fetchData()
|
ElMessage.success('编辑成功')
|
||||||
|
dialogVisible.value = false
|
||||||
|
fetchData()
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.msg || '编辑失败')
|
||||||
|
}
|
||||||
} else {
|
} 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 {
|
} finally {
|
||||||
submitLoading.value = false
|
submitLoading.value = false
|
||||||
|
|||||||
Reference in New Issue
Block a user