Newer
Older
xc-metering-front / src / views / tested / subpackage / certificate / components / edit.vue
liyaguang on 23 Dec 8 KB 需求修改完成
<!-- 分包方证书-编辑 -->
<script lang="ts" setup name="SubpackageCertificiateEdit">
import type { FormInstance, FormRules, UploadUserFile } from 'element-plus'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import dayjs from 'dayjs'
import orderDialog from './orderDialog.vue'
import deviceTable from './deviceTable.vue'
import { uploadApi } from '@/api/system/notice'
import showPhoto from '@/views/tested/device/info/components/showPhotoSinge.vue'
import { getDictByCode } from '@/api/system/dict'
import useUserStore from '@/store/modules/user'
import { getUserDept } from '@/api/system/user'
import { batchEditCertificate, getLastSubcontractor } from '@/api/eqpt/subpackage/certificate'
import subpackageDialog from '@/views/tested/subpackage/task/components/subpackageDialog.vue'
import { getDetail } from '@/api/eqpt/subpackage/task'
const $route = useRoute()
const $router = useRouter()
const userStore = useUserStore()
const ruleFormRef = ref<FormInstance>() // from组件
// 显示标题
const textMap: { [key: string]: string } = {
  update: '编辑',
  create: '新增',
  detail: '详情',
}
// 对话框类型:create,update
const dialogStatus = ref('create')
const ruleForm = ref<{ [key: string]: string }>({
  orderId: '',
  orderNo: '',
}) // 表单
const deviceList = ref<any[]>([])
const rules = ref<FormRules>({
  orderNo: [{ required: true, message: '外送申请单必选', trigger: ['blur', 'change'] }],
}) // 表单验证规则
// 弹窗初始化
const initDialog = () => {
  dialogStatus.value = $route.params.type as string
  ruleFormRef.value?.resetFields()
  if ($route.params.type !== 'create') {
    const data = JSON.parse($route.query.row as string)
    ruleForm.value = data
    ruleForm.value.helpInstruction = ruleForm.value.helpInstruction ? ruleForm.value.helpInstruction : '/'
  }
  if ($route.params.type === 'create' || $route.params.type === 'update') {
    ruleForm.value.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 创建时间
    ruleForm.value.createUserId = userStore.id
    ruleForm.value.createUserName = userStore.name
    ruleForm.value.createDeptId = userStore.deptId
    ruleForm.value.createDeptName = userStore.deptName
  }
}
onMounted(() => {
  initDialog()
})
// 关闭弹窗
const close = () => {
  $router.back()
}
// 新增
const add = () => {
  batchEditCertificate(deviceList.value).then((res) => {
    ElMessage.success('新增成功')
    close()
  })
}
// 编辑
const update = () => {
  batchEditCertificate(deviceList.value).then((res) => {
    ElMessage.success('修改成功')
    close()
  })
}
// 保存
const deviceRef = ref()
const saveForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) { return }
  await formEl.validate((valid: boolean) => {
    if (valid && deviceRef.value.checkCertificateList()) {
      ElMessageBox.confirm(
        '确认保存吗?',
        '提示',
        {
          confirmButtonText: '确认',
          cancelButtonText: '取消',
          type: 'warning',
        },
      ).then(() => {
        if (dialogStatus.value === 'create') {
          add()
        }
        else {
          update()
        }
      })
    }
  })
}
// 取消
const resetForm = (formEl: FormInstance | undefined) => {
  formEl?.resetFields()
  close()
}
const fileRef = ref() // 文件上传input
const uploadFlag = ref('')
const onFileChange = (event: any) => {
  if (event.target.files?.length !== 0) {
    // 创建formdata对象
    const fd = new FormData()
    const loading = ElLoading.service({
      lock: true,
      background: 'rgba(255, 255, 255, 0.8)',
    })
    fd.append('multipartFile', event.target.files[0])
    uploadApi(fd).then((res) => {
      if (res.code === 200) {
        //  certificateReport  originalRecord
        ruleForm.value[uploadFlag.value] = res.data[0]
        // 重置当前验证
        if (uploadFlag.value === 'certificateReport') {
          ruleFormRef.value?.clearValidate('certificateReport')
        }

        ElMessage.success('文件上传成功')
        fileRef.value.value = ''
        loading.close()
      }
      else {
        fileRef.value.value = ''
        ElMessage.error(res.message)
        loading.close()
      }
    }).catch(() => {
      fileRef.value.value = ''
      loading.close()
    })
  }
}
const upload = (type: string) => {
  uploadFlag.value = type
  fileRef.value.click()
}
// 选择分包方
const subcontractorsRef = ref()
const selectSubcontractors = () => {
  subcontractorsRef.value.initDialog()
}
// 确认分包方
const confirmSubcontractors = (subcontractors: any) => {
  ruleForm.value.subcontractorNo = subcontractors.subcontractorNo
  ruleForm.value.subcontractorName = subcontractors.companyName
  ruleForm.value.subcontractorId = subcontractors.id
}
// 选择外送申请单
const orderRef = ref()
const selectOrder = () => {
  orderRef.value.initDialog()
}
// 确认任务单
const confirmOrder = (data: any) => {
  console.log(data, '确认的任务单')
  ruleForm.value.orderId = data.id
  ruleForm.value.orderNo = data.orderNo
  // 获取任务单详情,加载设备列表
  getDetail({ id: data.id }).then((res) => {
    console.log(res.data, '任务单详情')
    // deviceList.value = []
    deviceList.value = (res.data.equipmentList || []).map((item: any) => ({
      orderId: data.id,
      editable: true,
      equipmentName: item.equipmentName,
      equipmentId: item.equipmentId,
      manufactureNo: item.manufactureNo,
      manufacturer: item.manufacturer,
      equipmentModel: item.model,
      helpInstruction: item.helpInstruction ? item.helpInstruction : '/',
      meterIdentify: item.meterIdentify,
      meterIdentifyName: item.meterIdentifyName,
      certificateNo: '',
      certificateName: '',
      checkDate: '',
      certificateValid: '',
      subcontractorNo: '',
      subcontractorName: '',
      createTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), // 创建时间
      createUserId: userStore.id,
      createUserName: userStore.name,
      createDeptId: userStore.deptId,
      createDeptName: userStore.deptName,
      certificateReport: '',
    }))
    deviceList.value.forEach((item: any) => {
      getLastSubcontractor(item.equipmentId).then((res) => {
        item.checkOrganization = res.data
      })
    })
  })
}
</script>

<template>
  <app-container style="overflow: hidden;">
    <!-- 分包方弹窗 -->
    <subpackage-dialog ref="subcontractorsRef" @add="confirmSubcontractors" />
    <!-- 任务单弹窗 -->
    <order-dialog ref="orderRef" @confirm="confirmOrder" />
    <detail-page :title="`外送证书管理-${textMap[dialogStatus]}`">
      <template #btns>
        <el-button v-if="!$route.path.includes('detail')" type="primary" @click="saveForm(ruleFormRef)">
          保存
        </el-button>
        <el-button type="info" @click="resetForm(ruleFormRef)">
          关闭
        </el-button>
      </template>
    </detail-page>
    <detail-block-com>
      <el-form
        ref="ruleFormRef" :model="ruleForm" :class="$route.path.includes('detail') ? 'isDetail' : ''"
        :rules="rules" label-position="right" label-width="120px" class="form"
        :disabled="$route.path.includes('detail')"
      >
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="外送申请单" prop="orderNo">
              <el-input
                v-model.trim="ruleForm.orderNo" placeholder="外送申请单" :disabled="!$route.path.includes('create')"
                @focus="selectOrder"
              >
                <template v-if="!$route.path.includes('detail') && !$route.path.includes('update')" #append>
                  <span @click="selectOrder">选择</span>
                </template>
              </el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <device-table ref="deviceRef" :data="deviceList" />
      </el-form>
    </detail-block-com>
  </app-container>
</template>

<style lang="scss" scoped>
// 详情页面隐藏小红点
.isDetail {
  ::v-deep {
    .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap > .el-form-item__label::before,
    .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label::before {
      content: "";
      display: none;
    }
  }
}
</style>