|
@@ -23,6 +23,7 @@ interface EquipmentReportForm {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
interface ImproveReportDetail {
|
|
interface ImproveReportDetail {
|
|
|
|
|
+ detailKey?: string
|
|
|
projectName: string
|
|
projectName: string
|
|
|
constructionDetail: string
|
|
constructionDetail: string
|
|
|
nextPlan: string
|
|
nextPlan: string
|
|
@@ -70,6 +71,8 @@ const auditStatusMap = {
|
|
|
40: { label: '已取消', type: 'info' }
|
|
40: { label: '已取消', type: 'info' }
|
|
|
} as const
|
|
} as const
|
|
|
|
|
|
|
|
|
|
+let detailKeySeed = 0
|
|
|
|
|
+
|
|
|
const rules: FormRules = {
|
|
const rules: FormRules = {
|
|
|
title: [{ required: true, message: '请输入标题', trigger: ['blur', 'change'] }],
|
|
title: [{ required: true, message: '请输入标题', trigger: ['blur', 'change'] }],
|
|
|
createTime: [{ required: true, message: '请选择汇报时间', trigger: ['blur', 'change'] }],
|
|
createTime: [{ required: true, message: '请选择汇报时间', trigger: ['blur', 'change'] }],
|
|
@@ -103,12 +106,18 @@ function getAuditStatus(status?: number) {
|
|
|
|
|
|
|
|
function createDefaultDetail(): ImproveReportDetail {
|
|
function createDefaultDetail(): ImproveReportDetail {
|
|
|
return {
|
|
return {
|
|
|
|
|
+ detailKey: createDetailKey(),
|
|
|
projectName: '',
|
|
projectName: '',
|
|
|
constructionDetail: '',
|
|
constructionDetail: '',
|
|
|
nextPlan: ''
|
|
nextPlan: ''
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function createDetailKey() {
|
|
|
|
|
+ detailKeySeed += 1
|
|
|
|
|
+ return `detail-${Date.now()}-${detailKeySeed}`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function getDefaultDetails() {
|
|
function getDefaultDetails() {
|
|
|
return [createDefaultDetail()]
|
|
return [createDefaultDetail()]
|
|
|
}
|
|
}
|
|
@@ -119,12 +128,32 @@ function normalizeDetails(details?: ImproveReportDetail[]) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return details.map((item) => ({
|
|
return details.map((item) => ({
|
|
|
|
|
+ detailKey: item.detailKey || createDetailKey(),
|
|
|
projectName: item.projectName || '',
|
|
projectName: item.projectName || '',
|
|
|
constructionDetail: item.constructionDetail || '',
|
|
constructionDetail: item.constructionDetail || '',
|
|
|
nextPlan: item.nextPlan || ''
|
|
nextPlan: item.nextPlan || ''
|
|
|
}))
|
|
}))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function resolveDetailIndex(row: ImproveReportDetail) {
|
|
|
|
|
+ const index = form.value.improveReportDetails.findIndex(
|
|
|
|
|
+ (item) => item.detailKey === row.detailKey
|
|
|
|
|
+ )
|
|
|
|
|
+ return index >= 0 ? index : 0
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function getDetailFieldProp(row: ImproveReportDetail, field: keyof ImproveReportDetail) {
|
|
|
|
|
+ return `improveReportDetails.${resolveDetailIndex(row)}.${field}`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function getDetailRowKey(row: ImproveReportDetail) {
|
|
|
|
|
+ return row.detailKey || ''
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function getSubmitDetails(details: ImproveReportDetail[]) {
|
|
|
|
|
+ return details.map(({ detailKey: _detailKey, ...item }) => item)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function toFormData(row?: any): EquipmentReportForm {
|
|
function toFormData(row?: any): EquipmentReportForm {
|
|
|
if (!row) return { ...defaultForm, improveReportDetails: getDefaultDetails() }
|
|
if (!row) return { ...defaultForm, improveReportDetails: getDefaultDetails() }
|
|
|
|
|
|
|
@@ -173,12 +202,12 @@ function addImproveReportDetail() {
|
|
|
form.value.improveReportDetails.push(createDefaultDetail())
|
|
form.value.improveReportDetails.push(createDefaultDetail())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-function removeImproveReportDetail(index: number) {
|
|
|
|
|
|
|
+function removeImproveReportDetail(row: ImproveReportDetail) {
|
|
|
if (form.value.improveReportDetails.length <= 1) {
|
|
if (form.value.improveReportDetails.length <= 1) {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- form.value.improveReportDetails.splice(index, 1)
|
|
|
|
|
|
|
+ form.value.improveReportDetails.splice(resolveDetailIndex(row), 1)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
async function submitForm() {
|
|
async function submitForm() {
|
|
@@ -188,7 +217,11 @@ async function submitForm() {
|
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
|
await formRef.value.validate()
|
|
await formRef.value.validate()
|
|
|
|
|
|
|
|
- const data = { ...form.value, createTime: Number(form.value.createTime) }
|
|
|
|
|
|
|
+ const data = {
|
|
|
|
|
+ ...form.value,
|
|
|
|
|
+ createTime: Number(form.value.createTime),
|
|
|
|
|
+ improveReportDetails: getSubmitDetails(form.value.improveReportDetails)
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if (data.id) {
|
|
if (data.id) {
|
|
|
await IotRyImproveDailyReportApi.updateIotRyImproveDailyReport({
|
|
await IotRyImproveDailyReportApi.updateIotRyImproveDailyReport({
|
|
@@ -355,14 +388,15 @@ defineExpose({ handleOpenForm })
|
|
|
:data="form.improveReportDetails"
|
|
:data="form.improveReportDetails"
|
|
|
:loading="false"
|
|
:loading="false"
|
|
|
class="detail-table"
|
|
class="detail-table"
|
|
|
|
|
+ :row-key="getDetailRowKey"
|
|
|
:show-border="true"
|
|
:show-border="true"
|
|
|
:show-overflow-tooltip="false">
|
|
:show-overflow-tooltip="false">
|
|
|
<ZmTableColumn label="项目名称" prop="projectName" :width="220">
|
|
<ZmTableColumn label="项目名称" prop="projectName" :width="220">
|
|
|
- <template #default="{ row, $index }">
|
|
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
class="mb-0!"
|
|
class="mb-0!"
|
|
|
:show-message="false"
|
|
:show-message="false"
|
|
|
- :prop="`improveReportDetails.${$index}.projectName`"
|
|
|
|
|
|
|
+ :prop="getDetailFieldProp(row, 'projectName')"
|
|
|
:rules="{
|
|
:rules="{
|
|
|
required: true,
|
|
required: true,
|
|
|
message: '请输入项目名称',
|
|
message: '请输入项目名称',
|
|
@@ -378,11 +412,11 @@ defineExpose({ handleOpenForm })
|
|
|
</ZmTableColumn>
|
|
</ZmTableColumn>
|
|
|
|
|
|
|
|
<ZmTableColumn label="施工动态" min-width="280">
|
|
<ZmTableColumn label="施工动态" min-width="280">
|
|
|
- <template #default="{ row, $index }">
|
|
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
class="mb-0!"
|
|
class="mb-0!"
|
|
|
:show-message="false"
|
|
:show-message="false"
|
|
|
- :prop="`improveReportDetails.${$index}.constructionDetail`"
|
|
|
|
|
|
|
+ :prop="getDetailFieldProp(row, 'constructionDetail')"
|
|
|
:rules="{
|
|
:rules="{
|
|
|
required: true,
|
|
required: true,
|
|
|
message: '请输入施工动态',
|
|
message: '请输入施工动态',
|
|
@@ -401,11 +435,11 @@ defineExpose({ handleOpenForm })
|
|
|
</ZmTableColumn>
|
|
</ZmTableColumn>
|
|
|
|
|
|
|
|
<ZmTableColumn label="下步计划" min-width="240">
|
|
<ZmTableColumn label="下步计划" min-width="240">
|
|
|
- <template #default="{ row, $index }">
|
|
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
class="mb-0!"
|
|
class="mb-0!"
|
|
|
:show-message="false"
|
|
:show-message="false"
|
|
|
- :prop="`improveReportDetails.${$index}.nextPlan`"
|
|
|
|
|
|
|
+ :prop="getDetailFieldProp(row, 'nextPlan')"
|
|
|
:rules="{
|
|
:rules="{
|
|
|
required: true,
|
|
required: true,
|
|
|
message: '请输入下步计划',
|
|
message: '请输入下步计划',
|
|
@@ -424,12 +458,12 @@ defineExpose({ handleOpenForm })
|
|
|
</ZmTableColumn>
|
|
</ZmTableColumn>
|
|
|
|
|
|
|
|
<ZmTableColumn label="操作" width="90" fixed="right">
|
|
<ZmTableColumn label="操作" width="90" fixed="right">
|
|
|
- <template #default="{ $index }">
|
|
|
|
|
|
|
+ <template #default="{ row }">
|
|
|
<el-button
|
|
<el-button
|
|
|
link
|
|
link
|
|
|
type="danger"
|
|
type="danger"
|
|
|
:icon="Delete"
|
|
:icon="Delete"
|
|
|
- @click="removeImproveReportDetail($index)"
|
|
|
|
|
|
|
+ @click="removeImproveReportDetail(row)"
|
|
|
:disabled="mainFieldDisabled || form.improveReportDetails.length <= 1">
|
|
:disabled="mainFieldDisabled || form.improveReportDetails.length <= 1">
|
|
|
删除
|
|
删除
|
|
|
</el-button>
|
|
</el-button>
|