Newer
Older
xc-business-system / src / views / business / taskMeasure / myTask / batchEdit.vue
<!-- 我的任务-批量编辑/新建 -->
<script lang="ts" setup name="MeasureDataBatchEdit">
import { ElLoading, ElMessage } from 'element-plus'
import MeasureDataItem from '../measureData/detail.vue'
import { addMeasureData, updateMeasureData } from '@/api/business/taskMeasure/measureData'
const $router = useRouter()
const $route = useRoute()
const close = () => {
  $router.go(-1)
}
const batchEditRow = ref([]) as any // 批量编辑数据
onMounted(async () => {
  console.log('批量编辑从前一页获取的数据', JSON.parse($route.query.batchEditRow as string))
  batchEditRow.value = JSON.parse($route.query.batchEditRow as string)
})
// 保存
const measureRef = ref()
const save = async () => {
  // 1.先判断所有的表单验证
  let formValidate = true
  for (let i = 0; i < measureRef.value.length; i++) {
    try {
      const res = await measureRef.value[i].getFormRef().validate()
      if (!res) {
        formValidate = false
        ElMessage.error(`第${i + 1}个检定数据未通过校验`)
      }
    }
    catch (error) {
      console.log(error)
      formValidate = false
      ElMessage.error(`第${i + 1}个检定数据未通过校验`)
    }
    if (!formValidate) {
      break
    }
  }
  // 表单验证未通过
  if (!formValidate) {
    return
  }
  // 2.保存数据
  const loading = ElLoading.service({
    lock: true,
    background: 'rgba(255, 255, 255, 0.8)',
  })
  Promise.all(measureRef.value.map(async (item: any, index: number) => {
    try {
      const res = await batchEditRow.value[index].pageType === 'edit' ? updateMeasureData(item.solveSaveParams()) : addMeasureData(item.solveSaveParams())
      // 保存成功后页面编辑状态置为detail
      item.setDetail()
      return Promise.resolve(res)
    }
    catch (error) {
      ElMessage.error(`第${index + 1}检定数据未保存成功`)
      return Promise.reject(error)
    }
  })).then((res) => {
    loading.close()
    ElMessage.success('保存成功')
  }).catch(() => {
    loading.close()
    console.log('未全部成功')
  })
}
</script>

<template>
  <app-container>
    <detail-page title="我的任务-批量编辑/新建">
      <template #btns>
        <el-button type="primary" @click="save">
          保存
        </el-button>
        <el-button type="info" @click="close">
          关闭
        </el-button>
      </template>
    </detail-page>
    <div v-for="(item, index) in batchEditRow" :key="index" :style="`height: ${batchEditRow.length > 1 ? 400 : undefined}px;`" style="overflow-y: scroll;overflow-x: hidden;margin: 10px 0;background-color: transparent;border-radius: 8px;">
      <measure-data-item ref="measureRef" class="item" :batch-index="index" />
    </div>
  </app-container>
</template>

<style lang="scss" scoped>
// .item {
::v-deep(.app-container) {
  padding: 0 !important;
  overflow-x: hidden;
}
// }
</style>