commonAttachmentModal.vue 5.28 KB
<template>
  <a-modal :title="title" :width="800" :centered="true" :visible="visible" :loading="confirmLoading" @ok="handleSubmit" @cancel="handleCancel" cancelText="关闭" style="top:20px;" class="scoped-attachment">
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-form-item label="资料名称" :labelCol="{span:4}" :wrapperCol="{span:12}">
          <a-input placeholder="请输入资料名称" v-decorator="[ 'name', validatorRules.name]" :readOnly="onlyread && disableSubmit" />
        </a-form-item>
        <a-form-item label="上传文件" extra="仅支持上传jpg\png\jpeg\bmp\pdf\excel文件格式" :labelCol="{span:4}" :wrapperCol="{span:12}">
          <a-upload
            name="file" 
            :action="url.upload" 
            v-decorator="[ 'fileList', {'initialValue':fileList,rules:[{required: true,message: '请上传文件'}]}]" 
            @change="handleChange"
            :disabled="(onlyread && disableSubmit )|| fileList.length >= 1"
          >
            <a-button v-if="fileList.length < 1"> <a-icon type="upload"/> 选择 </a-button>
            <div class="hoverEvent" v-else style="position:relative;">
              <span @click="clickProject">{{fileUrl}}</span>
              <a-popconfirm title="确定删除吗?" @confirm="handleDelete">
                <a class="hoverShow">x</a>
              </a-popconfirm>
            </div>
          </a-upload>
        </a-form-item>
        <a-form-item label="备注" :labelCol="{span:4}" :wrapperCol="{span:12}">
          <a-textarea rows="4" placeholder="备注" v-decorator="['remark']" :readOnly="onlyread && disableSubmit"/>
        </a-form-item>
      </a-form>
    </a-spin>
  </a-modal>
</template>

<script>
import { saveOrUpdateCusExtAttachment } from '@/api/configApi'
import pick from 'lodash.pick'

export default {
  name: 'commonAttachmentModal',
  data () {
    return {
      visible: false,
      confirmLoading: false,
      onlyread: false,
      disableSubmit:false,
      title: '',
      status: '',
      fileUrl:'',
      responseName:'',
      validatorRules: {
        name: {
          rules: [
            {
              required: true,
              message: '请输入资料名称'
            }
          ]
        },
      },

      model: {},
      fileList:[],
      form: this.$form.createForm(this),
      url:{
          upload:  window._CONFIG['uploadUrl'],
      }
    }
  },
  created () {
    console.log('created')
  },

  methods: {
    edit (record) {
      this.form.resetFields()
      this.model = Object.assign({}, record);
      console.log(this.model)
      this.fileList = this.model.fileUrl?this.model.fileUrl.split():''
      console.log(this.fileList)
      this.fileUrl = this.model.fileUrl
      this.visible = true
      this.$nextTick(() => {
        this.form.setFieldsValue(pick(this.model,'name','remark'))
      })
    },

    add (applyNo) {
      let data = {'applyNo':applyNo}
      this.model = Object.assign({}, data);
      this.fileList = [];
      this.form.resetFields()
      this.visible = true
    },

    close () {
      this.$emit('close')
      this.visible = false
      this.disableSubmit = false
      this.selectedRole = []
    },
    handleChange(info) {
      this.confirmLoading = true;
      let fileList = [...info.fileList];
      fileList = fileList.slice(-2);
        if(info.file.status==='done'){
          if(info.file.response.code==200){
            this.confirmLoading = false;
            fileList = this.fileList.map((file) => {
              if (file.response) {
                file.url = file.response.url;
                this.fileUrl = file.response.data.fileURL;
              }
              return file;
            });
          }
          this.$message.success(`${info.file.name} 上传成功!`);
        }else if (info.file.status === 'error') {
          this.$message.error(`${info.file.name} 上传失败.`);
        }
        this.fileList = fileList;
    },
    handleSubmit () {
      // 触发表单验证
      this.form.validateFields((err, values) => {
        console.log(err, values)
        if (!err) {
          this.confirmLoading = true
          values.fileUrl = this.fileUrl
          values.tempType = 'CUSTOMIZE'
          delete values.fileList;
          let formData = [Object.assign(this.model, values)];
          saveOrUpdateCusExtAttachment(formData)
            .then(res => {
              if (res.status.statusCode == 0) {
                this.fileList = [];
                this.$message.success(res.status.statusReason)
                this.$emit('ok')
              } else {
                this.$message.warning(res.status.statusReason)
              }
            })
            .finally(() => {
              this.confirmLoading = false
              this.close()
            })
        }
      })
    },
    handleCancel () {
      this.fileList = [];
      this.close()
    },
    clickProject(){
      alert('点击下载文件')
    },
    handleDelete(){
      this.fileList = [];
      this.fileUrl = ''
    }
  }
}
</script>
  
  
 
<style>
.hoverShow{
  position:absolute;
  top:-5px;
  right:0;
  display:none;
}
.hoverEvent{
  cursor:pointer;
}
.hoverEvent:hover .hoverShow{
  display:block;
}
.scoped-attachment .ant-upload-list{
  display:none;
}
.scoped-attachment .ant-modal-footer .ant-btn-primary{
  display: none;
}
</style>