Newer
Older
xc-business-system / src / views / equipement / monitor / task / detail.vue
dutingting on 7 Oct 2023 11 KB 任务监测、现场问题修改
<!-- 任务监测详情 -->
<script lang="ts" setup name="EquipementMonitorTaskDetail">
import { ref } from 'vue'
import { ElLoading, ElMessage } from 'element-plus'
import type { IForm } from './task-interface'
import { getUserList } from '@/api/system/user'
import useUserStore from '@/store/modules/user'
import { getDictByCode } from '@/api/system/dict'
import type { deptType, dictType } from '@/global'
import countries from '@/components/AddressSelect/country-code.json'
import { getDeptTreeList } from '@/api/system/dept'
import { toTreeList } from '@/utils/structure'
import { UploadFile } from '@/api/file'
import { addMonitorTaskList, getInfo, updateMonitorTaskList } from '@/api/equipment/monitor/task'
const user = useUserStore() // 用户信息
const textMap: { [key: string]: string } = {
  edit: '编辑',
  add: '新建',
  detail: '详情',
}// 字典
const $router = useRouter() // 关闭页面使用
const $route = useRoute() // 路由参数
const pageType = ref('add') // 页面类型: add, edit, detail
const infoId = ref('') // 列表id
const countryList = ref(countries) // 国家列表
const ruleFormRef = ref() // 表单ref
const form = ref<IForm>({
  exceptionReport: '', // 异常情况报告
  monitorPlan: '', // 监测方案
  monitorReport: '', // 监测报告
  monitorStaff: '', // 监测人员
  remark: '', // 备注
  taskDate: '', // 任务时间
  taskName: '', // 任务名称
  taskNo: '', // 任务编号
})
// 校验规则
const formRules = ref({
  taskName: [{ required: true, message: '任务名称不能为空', trigger: ['blur', 'change'] }],
  taskDate: [{ required: true, message: '任务时间不能为空', trigger: ['blur', 'change'] }],
  monitorStaff: [{ required: true, message: '监测人员不能为空', trigger: ['blur', 'change'] }],
})
// ----------------------------------路由参数--------------------------------------------
if ($route.params && $route.params.type) {
  pageType.value = $route.params.type as string
  console.log(pageType.value)

  if ($route.params.id) {
    infoId.value = $route.params.id as string
  }
}
// -------------------------------------------按钮----------------------------------------------
// 关闭新增页面的回调
const close = () => {
  $router.back()
}

// 点击编辑按钮
const edit = () => {
  pageType.value = 'edit'
}

// 保存
const save = () => {
  ruleFormRef.value!.validate((valid: boolean) => {
    if (valid) {
      const loading = ElLoading.service({
        lock: true,
        background: 'rgba(255, 255, 255, 0.8)',
      })
      // 新建
      if (pageType.value === 'add') { // 新建
        addMonitorTaskList(form.value).then((res) => {
          ElMessage.success('保存成功')
          form.value.taskNo = res.data.taskNo // 统一编号
          pageType.value = 'detail'
          loading.close()
        }).catch(() => {
          loading.close()
        })
      }
      // 保存
      else if (pageType.value === 'edit') { // 编辑
        updateMonitorTaskList(form.value).then((res) => {
          ElMessage.success('保存成功')
          pageType.value = 'detail'
          loading.close()
        }).catch(() => {
          loading.close()
        })
      }
    }
    else {
      console.log('表单校验不通过')
    }
  })
}

// ---------------------------------文件上传-------------------------------------------
const fileRefMonitorPlan = ref()
const fileRefMonitorReport = ref()
const fileRefExceptionReport = ref()
const onFileChangeMonitorPlan = (event: any) => {
  // 原生上传
  if (event.target.files?.length !== 0) {
    // 创建formdata对象
    const fd = new FormData()
    fd.append('multipartFile', event.target.files[0])
    UploadFile(fd).then((res) => {
      if (res.code === 200) {
        form.value.monitorPlan = res.data[0]
        // 重置当前验证
        ElMessage.success('文件上传成功')
      }
      else {
        ElMessage.error(res.message)
      }
    })
  }
}
const uploadMonitorPlan = () => {
  fileRefMonitorPlan.value.click()
}

const onFileChangeMonitorReport = (event: any) => {
  // 原生上传
  if (event.target.files?.length !== 0) {
    // 创建formdata对象
    const fd = new FormData()
    fd.append('multipartFile', event.target.files[0])
    const loading = ElLoading.service({
      lock: true,
      background: 'rgba(255, 255, 255, 0.8)',
    })
    UploadFile(fd).then((res) => {
      if (res.code === 200) {
        form.value.monitorReport = res.data[0]
        // 重置当前验证
        ElMessage.success('文件上传成功')
        loading.close()
      }
      else {
        ElMessage.error(res.message)
        loading.close()
      }
    })
  }
}
const uploadMonitorReport = () => {
  fileRefMonitorReport.value.click()
}

const onFileChangeExceptionReport = (event: any) => {
  // 原生上传
  if (event.target.files?.length !== 0) {
    // 创建formdata对象
    const fd = new FormData()
    fd.append('multipartFile', event.target.files[0])
    const loading = ElLoading.service({
      lock: true,
      background: 'rgba(255, 255, 255, 0.8)',
    })
    UploadFile(fd).then((res) => {
      if (res.code === 200) {
        form.value.exceptionReport = res.data[0]
        // 重置当前验证
        ElMessage.success('文件上传成功')
        loading.close()
      }
      else {
        ElMessage.error(res.message)
        loading.close()
      }
    })
  }
}
const uploadExceptionReport = () => {
  fileRefExceptionReport.value.click()
}

// -------------------------------------------获取详情信息--------------------------------------------------
// 获取详情信息
const fetchInfo = () => {
  const loading = ElLoading.service({
    lock: true,
    background: 'rgba(255, 255, 255, 0.8)',
  })
  getInfo({ id: infoId.value }).then((res) => {
    form.value = res.data
    loading.close()
  })
}

onMounted(async () => {
  if (pageType.value !== 'add') {
    fetchInfo()
  }
})
</script>

<template>
  <app-container>
    <detail-page :title="`任务监测-${textMap[pageType]}`">
      <template #btns>
        <el-button v-if="pageType !== 'detail'" type="primary" @click="save">
          保存
        </el-button>
        <el-button v-if="pageType === 'detail'" type="primary" @click="edit">
          编辑
        </el-button>
        <el-button type="info" @click="close">
          关闭
        </el-button>
      </template>
      <el-form
        ref="ruleFormRef"
        :model="form"
        label-width="120"
        label-position="right"
        :rules="formRules"
      >
        <el-row :gutter="24">
          <el-col :span="6">
            <el-form-item label="任务代号:" prop="taskNo">
              <el-input v-model="form.taskNo" disabled placeholder="系统自动生成" />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="任务名称:" prop="taskName">
              <el-input
                v-model.trim="form.taskName"
                :placeholder="pageType === 'detail' ? '' : '请输入任务名称'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="任务时间:" prop="taskDate">
              <el-date-picker
                v-model="form.taskDate"
                type="date"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
                :placeholder="pageType === 'detail' ? ' ' : '请选择任务时间'"
                :disabled="pageType === 'detail'"
                class="full-width-input"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="监测人员:" prop="monitorStaff">
              <el-input
                v-model.trim="form.monitorStaff"
                :placeholder="pageType === 'detail' ? '' : '请输入监测人员'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24">
          <el-col :span="12">
            <el-form-item label="备注:" prop="remark">
              <el-input
                v-model="form.remark"
                class="full-width-input"
                :placeholder="pageType === 'detail' ? ' ' : '请输入备注'"
                autosize
                type="textarea"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="24">
            <el-form-item label="监测方案:" prop="monitorPlan">
              <show-photo v-if="form.monitorPlan" :minio-file-name="form.monitorPlan" />
              <span v-else-if="pageType === 'detail'">无</span>
              <input v-show="pageType === ''" ref="fileRefMonitorPlan" type="file" @change="onFileChangeMonitorPlan">
              <el-button v-if="pageType !== 'detail'" id="file" type="primary" :disabled="pageType === 'detail'" :style="{ 'margin-left': form.monitorPlan === '' ? '0px' : '20px' }" @click="uploadMonitorPlan">
                {{ form.monitorPlan === '' ? '上传' : '更换附件' }}
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="24">
            <el-form-item label="监测报告:" prop="monitorReport">
              <show-photo v-if="form.monitorReport" :minio-file-name="form.monitorReport" />
              <span v-else-if="pageType === 'detail'">无</span>
              <input v-show="pageType === ''" ref="fileRefMonitorReport" type="file" @change="onFileChangeMonitorReport">
              <el-button v-if="pageType !== 'detail'" id="file" type="primary" :disabled="pageType === 'detail'" :style="{ 'margin-left': form.monitorReport === '' ? '0px' : '20px' }" @click="uploadMonitorReport">
                {{ form.monitorReport === '' ? '上传' : '更换附件' }}
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="24">
            <el-form-item label="异常情况报告:" prop="exceptionReport">
              <show-photo v-if="form.exceptionReport" :minio-file-name="form.exceptionReport" />
              <span v-else-if="pageType === 'detail'">无</span>
              <input v-show="pageType === ''" ref="fileRefExceptionReport" type="file" @change="onFileChangeExceptionReport">
              <el-button v-if="pageType !== 'detail'" id="file" type="primary" :disabled="pageType === 'detail'" :style="{ 'margin-left': form.exceptionReport === '' ? '0px' : '20px' }" @click="uploadExceptionReport">
                {{ form.exceptionReport === '' ? '上传' : '更换附件' }}
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </detail-page>
  </app-container>
</template>

<style lang="scss" scoped>
.step {
  line-height: 28px;
  font-size: 20px;
  color: #3d7eff;
  font-weight: bold;
  margin-bottom: 5px;
  width: fit-content;
}
</style>

<style lang="scss">
.fieldtest-record-detail {
  .el-table thead.is-group th.el-table__cell {
    background: #f2f6ff;
  }
}
</style>