• wangxl's avatar
    1111 · b358ed6c
    wangxl authored
    b358ed6c
taskFileEdit.vue 7.56 KB
<template>
  <div class="from-table font-line-space">
    <a-spin :spinning="loading" style="width: 100%;height: 100%;">
    <a-row type="flex">
      <a-col :span="4" class="bg-gray">
        <div class="special-middle">
          <div>项目编号</div>
        </div>
      </a-col>
      <a-col :span="8">
        <div class="special-middle">
          <div>{{projectInfo.projNo}}</div>
        </div>
      </a-col>
      <a-col :span="4" class="bg-gray">
        <div class="special-middle">
          <div>项目名称</div>
        </div>
      </a-col>
      <a-col :span="8">
        <div class="special-middle">
          <div>{{projectInfo.projName}}</div>
        </div>
      </a-col>
    </a-row>
    <a-row type="flex">
      <a-col :span="4" class="bg-gray">
        <div class="special-middle">
          <div>申报人</div>
        </div>
      </a-col>
      <a-col :span="8">
        <div class="special-middle">
          <div>{{projectInfo.personName}}</div>
        </div>
      </a-col>
      <a-col :span="4" class="bg-gray">
        <div class="special-middle">
          <div>申报单位</div>
        </div>
      </a-col>
      <a-col :span="8">
        <div class="special-middle">
          <div>{{projectInfo.appUnitName}}</div>
        </div>
      </a-col>
    </a-row>
    <a-row type="flex">
        <a-col :span="4" class="bg-gray">
        <div class="special-middle">
          <div>申报年度</div>
        </div>
      </a-col>
      <a-col :span="8">
        <div class="special-middle">
          <div>{{projectInfo.reportYear}}</div>
        </div>
      </a-col>
      <a-col :span="4" class="bg-gray">
        <div class="special-middle">
          <div>项目开始结束时间</div>
        </div>
      </a-col>
      <a-col :span="8">
        <div class="special-middle">
          <div>{{moment(projectInfo.startDate).format('YYYY-MM-DD')}}{{moment(projectInfo.endDate).format('YYYY-MM-DD')}}</div>
        </div>
      </a-col>
    </a-row>
    <a-row>
      <a-col :span="24">
        <div class="tb-title">
          附件上传
        </div>
      </a-col>
    </a-row>
    <a-row type="flex" class="row_center">
      <a-col :span="8" class="bg-gray">
        <div class="special-middle">
          <div>附件名称</div>
        </div>
      </a-col>
      <a-col :span="10" class="bg-gray">
        <div class="special-middle">
          <div>附件上传</div>
        </div>
      </a-col>
      <a-col :span="6" class="bg-gray">
        <div class="special-middle">
          <div>说明</div>
        </div>
      </a-col>
    </a-row>
    <a-row v-for="(item, index) in projectInfo.fileList" :key="'fileList' + index" type="flex">
      <a-col :span="8" style="text-align: center; margin-top: 10px;">
        <span class="required"></span>{{ item.fileExplain }}
        <!-- <a-form-model-item :prop="'fileList.' + index + '.fileExplain'" :rules="{required: true, message: '*',trigger: 'blur',}">
          <a-input v-model="item.fileExplain" :maxLength="100" style="width: 80%" :disabled="item.required" />
        </a-form-model-item> -->
      </a-col>
      <a-col :span="10">
        <div class="special-middle">
          <div v-if="item.downloadUrl" class="file-box">
            <div>
              <!-- <a-icon type="file" style="margin-right: 8px" />
              <span class="hover-pointer" @click="downloadfile(item)">{{item.fileName}}</span> -->
              <document-view :fileUrl="item.downloadUrl" :fileName="item.fileName" :imageArray="[item.downloadUrl]"></document-view>
            </div>
            <a-icon type="delete" class="hover-pointer d-icon" @click="deleteTaskFile(item, index)" />
          </div>
          <div v-else>
            <a-form-model-item :prop="'fileList.' + index + '.downloadUrl'" :rules="{required: true, message: '请上传附件',trigger: 'blur',}">
              <input type="file" :ref="'fileElem' + index" class="visually-hidden" @change="handleFiles(item, index)" />
              <a-button @click="fileSelect(item, index)"><a-icon type="upload" />选择文件</a-button>
            </a-form-model-item>
          </div>
        </div>
      </a-col>
      <a-col :span="6">
        <div class="special-middle">
            <span style="margin-left: 10px; font-size: 10pt; color:red; font-weight: bold;">请上传项目任务书附件(文件类型必须为:pdf),文件大小不能超过{{fileSize}}M!</span>
        </div>
      </a-col>
    </a-row>
  </a-spin>
  </div>
</template>

<script>
import moment from 'moment'
import documentView from '@/views/components/common/documentView'

const File = { fileName: "", downloadUrl: "", fileExplain: "项目任务书", downloadId: "" };

export default {
  name: "taskFileEdit",
  props: {
    value: {
      type: String,
      default: () => {
        return null
      }
    },
  },
  components: { documentView },
  data() {
    return {
      projectInfo: {
        projNo: '',
        projName: '',
        startDate: '',
        endDate: '',
        appPersonName: '',
        appUnitName: '',
        mobile: '',
        address: '',
        fileList: [{ ...File }],
      },
      fileSize: 15,
    };
  },
  created () {
    this.getProjectBasicInfoById()
  },
  methods: {
    moment,
    getProjectBasicInfoById () {
      if (this.value != null) {
        this.loading = true
        this.$api.project.getProjectBasicInfoById({ id: this.value }).then(({ data = {} }) => {
          if (data) {
            this.projectInfo = data
            if (this.projectInfo.fileList == null || this.projectInfo.fileList.length <= 0)
              this.projectInfo.fileList = [{ ...File }]
            this.loading = false
          }
        }).catch(() => { this.$emit('close', 'close') })
      }
    },
    downloadfile() {
      
    },
    deleteTaskFile (item, index) {
      this.$api.taskReport.deleteTaskFile({ id: item.downloadId }).then(({ data = {} }) => {
        if (data) {
          item.fileName = ''
          item.downloadUrl = ''
          item.downloadId = ''
        }
      }).catch(() => {
        this.$message.error('删除失败')
      })
    },
    uploadHandle (file, fileName, projId) {
      let formData = new FormData()
      formData.append('file', file)
      formData.append('fileName', fileName)
      formData.append('projId', projId)
      return formData
    },
    handleFiles(item, index) {
        let fileElem = this.$refs['fileElem' + index][0]
      let files = fileElem.files
      if (files.length <= 0) {
        this.$message.error('未选中文件,请尝试重新选择')
        return
      }
      if (!this.fileCheck(files[0]))
        return

      this.$api.taskReport.asyncUploadTaskFile(this.uploadHandle(files[0], files[0].name, this.value)).then(({ data = {} }) => {
        if (data) {
          item.fileName = data.fileName
          item.downloadUrl = data.downloadUrl
          item.downloadId = data.id
          item.fileExplain = data.fileExplain
        } else
          this.$message.error('上传失败')
      }).catch(() => {
        this.$message.error('上传失败')
      })
    },
    fileSelect (item, index) {
      let fileElem = this.$refs['fileElem' + index][0]
      if (fileElem) {
        fileElem.click()
      }
    },
    fileCheck (file) {
      //判断是否小于1M
      let isLtSize = file.size < 1024 * 1024 * this.fileSize;
      if (!isLtSize) {
        this.$message.error('文件大小不能超过' + this.fileSize + 'M!');
        return false
      }
      if (file.type !== "application/pdf") {
        this.$message.error('项目任务书附件必须为pdf文件类型!');
        return false
      }
      return true
    },
  }
};
</script>