|
|
@@ -332,20 +332,21 @@ const handleCheckerSelectChange = (selectedCheckers: CheckerItem[], row: Schedul
|
|
|
}
|
|
|
})
|
|
|
row.teamList = Array.from(teamMap.values())
|
|
|
- // 标记为已修改
|
|
|
+ // 标记为已修改并自动保存
|
|
|
row.modified = true
|
|
|
+ autoSaveRow(row)
|
|
|
}
|
|
|
|
|
|
// 处理日期变更
|
|
|
const handleDateChange = (row: ScheduleRow) => {
|
|
|
if (!row.date) {
|
|
|
- ElMessage.warning('请选择日期')
|
|
|
return
|
|
|
}
|
|
|
// 更新星期
|
|
|
row.week = calculateWeek(row.date)
|
|
|
- // 标记为已修改
|
|
|
+ // 标记为已修改并自动保存
|
|
|
row.modified = true
|
|
|
+ autoSaveRow(row)
|
|
|
}
|
|
|
|
|
|
// 通过日期计算星期
|
|
|
@@ -401,11 +402,6 @@ const canEdit = (row: ScheduleRow): boolean => {
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
-// 是否有复制的行
|
|
|
-const hasCopiedRows = computed(() => {
|
|
|
- return tableData.value.some(row => row.isCopied && !row.submitted)
|
|
|
-})
|
|
|
-
|
|
|
// 获取行类名
|
|
|
const getRowClassName = ({ row }: { row: ScheduleRow }): string => {
|
|
|
if (row.isCopied && !row.submitted) {
|
|
|
@@ -542,103 +538,58 @@ const handleQuery = async () => {
|
|
|
})
|
|
|
loading.value = false
|
|
|
}
|
|
|
-// 提交 - 提交全部修改和复制的行
|
|
|
-const handleSubmit = async () => {
|
|
|
- // 获取所有需要提交的行:复制的行和修改的行
|
|
|
- const copiedRows = tableData.value.filter(row => row.isCopied && !row.submitted)
|
|
|
- const modifiedRows = tableData.value.filter(row => row.modified && !row.isCopied)
|
|
|
-
|
|
|
- if (copiedRows.length === 0 && modifiedRows.length === 0) {
|
|
|
- ElMessage.warning('没有需要提交的行')
|
|
|
+// 自动保存单行:修改日期或检验员后实时保存
|
|
|
+// 前提:日期不重复 + 检验员不为空
|
|
|
+const autoSaveRow = async (row: ScheduleRow) => {
|
|
|
+ // 校验:日期不能为空
|
|
|
+ if (!row.date || row.date.trim() === '') {
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- // 校验复制的行
|
|
|
- if (copiedRows.length > 0) {
|
|
|
- const rowsWithoutDate = copiedRows.filter(row => !row.date || row.date.trim() === '')
|
|
|
- if (rowsWithoutDate.length > 0) {
|
|
|
- ElMessage.warning('请为所有复制的行选择日期')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- let isDuplicate = false
|
|
|
- copiedRows.forEach(row => {
|
|
|
- let confirmOrderId = row.confirmOrderId
|
|
|
- let rows = tableData.value.filter(r => r.confirmOrderId === confirmOrderId)
|
|
|
- rows.forEach(item => {
|
|
|
- if (item.date === row.date && row !== item) {
|
|
|
- isDuplicate = true
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- if (isDuplicate) {
|
|
|
- ElMessage.warning('请为所有复制的行选择不同的日期')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- const rowsWithoutCheckers = copiedRows.filter(row => !row.checkers || row.checkers.length === 0)
|
|
|
- if (rowsWithoutCheckers.length > 0) {
|
|
|
- ElMessage.warning('请为所有复制的行选择检验员')
|
|
|
- return
|
|
|
- }
|
|
|
+ // 校验:检验员不能为空
|
|
|
+ if (!row.checkers || row.checkers.length === 0) {
|
|
|
+ return
|
|
|
}
|
|
|
-
|
|
|
- // 校验修改的行
|
|
|
- if (modifiedRows.length > 0) {
|
|
|
- const rowsWithoutDate = modifiedRows.filter(row => !row.date || row.date.trim() === '')
|
|
|
- if (rowsWithoutDate.length > 0) {
|
|
|
- ElMessage.warning('请为所有修改的行选择日期')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- const rowsWithoutCheckers = modifiedRows.filter(row => !row.checkers || row.checkers.length === 0)
|
|
|
- if (rowsWithoutCheckers.length > 0) {
|
|
|
- ElMessage.warning('请为所有修改的行选择检验员')
|
|
|
+ // 校验:同 confirmOrderId 日期不能重复
|
|
|
+ if (row.confirmOrderId) {
|
|
|
+ const sameGroup = tableData.value.filter(r => r.confirmOrderId === row.confirmOrderId)
|
|
|
+ const duplicate = sameGroup.some(item => item.date === row.date && item !== row)
|
|
|
+ if (duplicate) {
|
|
|
+ ElMessage.warning('同一个约检确认单下日期不能重复')
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
- const allSubmitData: any[] = []
|
|
|
-
|
|
|
- copiedRows.forEach(row => {
|
|
|
- const teamList = (row.teamList || []).map(team => ({
|
|
|
- groupTeamId: team.groupTeamId,
|
|
|
- leaderId: team.leaders?.[0]?.id || '',
|
|
|
- memberIdList: team.members?.map(member => member.id) || []
|
|
|
- }))
|
|
|
- allSubmitData.push({
|
|
|
+ const teamList = (row.teamList || []).map(team => ({
|
|
|
+ groupTeamId: team.groupTeamId,
|
|
|
+ leaderId: team.leaders?.[0]?.id || '',
|
|
|
+ memberIdList: team.members?.map(member => member.id) || []
|
|
|
+ }))
|
|
|
+
|
|
|
+ if (row.isCopied && !row.submitted) {
|
|
|
+ // 复制行
|
|
|
+ await EquipPipeSchedulingApi.setShiftSchedule([{
|
|
|
isCopy: true,
|
|
|
sourceId: row.id,
|
|
|
date: row.date,
|
|
|
teamList: teamList
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
- modifiedRows.forEach(row => {
|
|
|
- const teamList = (row.teamList || []).map(team => ({
|
|
|
- groupTeamId: team.groupTeamId,
|
|
|
- leaderId: team.leaders?.[0]?.id || '',
|
|
|
- memberIdList: team.members?.map(member => member.id) || []
|
|
|
- }))
|
|
|
- allSubmitData.push({
|
|
|
+ }])
|
|
|
+ row.submitted = true
|
|
|
+ row.modified = false
|
|
|
+ } else {
|
|
|
+ // 修改行
|
|
|
+ await EquipPipeSchedulingApi.setShiftSchedule([{
|
|
|
isCopy: false,
|
|
|
id: row.id,
|
|
|
date: row.date,
|
|
|
teamList: teamList
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
- console.log('提交数据:', allSubmitData)
|
|
|
- await EquipPipeSchedulingApi.setShiftSchedule(allSubmitData)
|
|
|
-
|
|
|
- const totalCount = copiedRows.length + modifiedRows.length
|
|
|
- ElMessage.success(`成功提交 ${totalCount} 条数据`)
|
|
|
-
|
|
|
- await handleQuery()
|
|
|
+ }])
|
|
|
+ row.modified = false
|
|
|
+ }
|
|
|
+ ElMessage.success('保存成功')
|
|
|
} catch (error) {
|
|
|
- console.error('提交失败:', error)
|
|
|
- ElMessage.error('提交失败')
|
|
|
+ console.error('自动保存失败:', error)
|
|
|
+ ElMessage.error('保存失败')
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -732,7 +683,6 @@ const handleExport = async () => {
|
|
|
// 暴露方法给父组件
|
|
|
defineExpose({
|
|
|
handleQuery,
|
|
|
- handleSubmit,
|
|
|
handleSubmitSelected,
|
|
|
handleExport
|
|
|
})
|