前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ant Design Upload 组件封装

Ant Design Upload 组件封装

作者头像
lyudev
发布2022-08-04 10:58:04
3910
发布2022-08-04 10:58:04
举报
文章被收录于专栏:代码即数据代码即数据
代码语言:javascript
复制
<template>
  <j-modal
    width="80%"
    :onclick="clickrow"
    :title="title"
    :maskClosable="false"
    switchFullscreen
    :visible.sync="editModalVisible"
    @cancel="handleCancleDbSync"
  >
    <template slot="footer">
      <a-button @click="handleCancleDbSync">
        关闭
      </a-button>
      <a-button type="primary" v-if="!disableSubmit" :loading="syncLoading" @click="handleDbSync">确认</a-button>
    </template>
    <vxe-grid
      ref="xTable"
      border
      resizable
      keep-source
      show-overflow
      height="600px"
      :customRow="rowClick"
      mode="row"
      align="center"
      :edit-rules="validRules"
      :edit-config="{trigger: 'click', mode: 'row',activeMethod: activeRowMethod}"
      :columns="tableColumn"
      :data="dataSource"
      @edit-closed="handle"
    >
    
      <template v-slot:operate="{ row }">
        <a-button type="primary" style="margin:0px 8px 0px 0px;" @click="handleResults(row)">查看文件</a-button>
      </template>
    </vxe-grid>
    <AssessmentFile ref="assessmentFile"  @ok="modalFormOk" @handleChange="changeName"></AssessmentFile>
  </j-modal>
</template>
<script>
import {  putAction, getAction, postAction } from '@/api/manage'
import { filterDictTextByCache } from '@/components/dict/JDictSelectUtil'
import JSelectMultiUser from '@/components/jeecgbiz/JSelectMultiUser'
import AssessmentFile from './AssessmentFile'
import { downFile } from '../../../../api/manage'
import {ACCESS_TOKEN} from "@/store/mutation-types"
import Vue from 'vue'
import { Modal } from 'ant-design-vue'
import eventBus from '@/utils/eventBus'
export default {
  name: 'AssessmentTaskModalUser',
  components: {
    JSelectMultiUser,
    AssessmentFile
  },

  data() {
    let ellipsis = (v,a=20) => (<j-ellipsis value={v} length={a}/>)
    return {
      Headertoken: {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)},
      editModalVisible: false,
      disableSubmit: false,
      title: '考核评分',
      id:'',
      //taskCode:'',
      //ifleaderuser:true,
      syncLoading: false,
      url: {
        completeUserTask: '/hr/assessment/task/completeUserTask',
        completeTask: '/hr/assessment/task/completeTask',
        taskresultquery: '/hr/assessment/taskresult/queryResult',
        uploadpdffile:'standlib/file/upload',
        update: '/hr/assessment/taskresult/updateFileIntoResult',
        list:'/hr/assessment/taskresult/listfile',
        exportXlsUrl: "/hr/maturity/task/exportXls",
        importExcelUrl: '/hr/maturity/task/importExcel',
        getDataSectionByPlanCode: '/hr/assessment/map/getDataSectionByPlanCode'
      },
      tableColumn: [
        { type: 'seq', width: 60 },
        ],
      validRules: {
        enterpriseWeight: [
          { validator: this.enterpriseWeight },
          { min: 0, type: 'number', message: '请填写大于0的数字' }
        ],
      },
      dataSource: [],
      formData: {},
      name:''
    }
  },
  methods: {
    handleResults(row) {
      this.id = row.id
      console.log(row)
      this.$refs.assessmentFile.loadData(row,'taskUser')
      this.$refs.assessmentFile.disableCheck = true
      this.$refs.assessmentFile.disableSubmit = true
      this.$refs.assessmentFile.title = '查看文件'
      this.$refs.assessmentFile.editModalHidden = true
    },

  }
}
</script>
代码语言:javascript
复制
<template>
  <j-modal
    width='60%'
    :onclick='clickrow'
    :title='title'
    :maskClosable='false'
    switchFullscreen
    :visible.sync='editModalHidden'
    @cancel='handleCancleDbSync'
  >
    <template>
      <a-upload
        accept='.pdf'
        :multiple='false'
        :action='uploadpdffile'
        :headers='Headertoken'
        :default-file-list='defaultFileList'
        :file-list='fileList'
        @change='handleChange'
      >
        <a-button type='primary' icon='upload'> 上传</a-button>
      </a-upload>
    </template>
    <template slot='footer'>
      <a-button @click='handleCancleDbSync'>
        关闭
      </a-button>
    </template>
  </j-modal>
</template>
<script>

import { ACCESS_TOKEN } from '@/store/mutation-types'
import Vue from 'vue'
import { Modal } from 'ant-design-vue'
import { postAction, getAction, deleteAction } from '@/api/manage'

export default {
  name: 'AssessmentFile',
  components: {},
  data() {
    return {
      editModalHidden: false,
      Headertoken: { 'X-Access-Token': Vue.ls.get(ACCESS_TOKEN) },
      url: {
        uploadpdffile: 'standlib/file/upload',
        update: '/hr/assessment/taskresult/updateFileIntoResult',
        userFileAdd: '/hr/taskFile/add',
        userTaskFile: '/hr/taskFile/list',
        userTaskFileDelete: '/hr/taskFile/delete',
        leaderFileAdd: '/hr/taskSummaryFile/add',
        leaderFileList: '/hr/taskSummaryFile/list',
        leaderFileDelete: '/hr/taskSummaryFile/delete'
      },
      rowId: '',
      defaultFileList: [],
      loadType: '',
      fileList: []
    }
  },
  methods: {
    uploadpdffile(row) {
      return `${window._CONFIG['domianURL']}/${this.url.uploadpdffile}`
    },
    handleCancleDbSync() {
      this.fileList = []
      this.defaultFileList = []
      this.disableSubmit = false
      this.editModalHidden = false
      this.$emit('handleChange', 'close')
    },
    loadData(instanceCode, type) {
      this.rowId = instanceCode.id
      this.loadType = type
      getAction(this.fileUrl().fileListUrl, { taskId: this.rowId }).then(res => {
        //console.log(res,'res')
        if (res.success) {
          for (var i = 0; i < res.result.length; i++) {
            var resuit = {
              uid: res.result[i].id,
              name: res.result[i].fileName,
              status: 'done',
              response: res.result[i].fileName, // custom error message to show
              url: window._CONFIG['domianURL'] + '/' + res.result[i].fileName
            }
            this.fileList.push(resuit)
            this.defaultFileList.push(resuit)
          }
        } else {
          this.$message.warning(res.message)
        }
      })
    },
    fileUrl() {
      var fileUrl = {
        addFileUrl: '',
        fileListUrl: '',
        deleteFileUrl: ''
      }
      if (this.loadType == 'taskUser') {
        fileUrl.addFileUrl = this.url.userFileAdd
        fileUrl.fileListUrl = this.url.userTaskFile
        fileUrl.deleteFileUrl = this.url.userTaskFileDelete
      }
      if (this.loadType == 'taskLeader') {
        fileUrl.addFileUrl = this.url.leaderFileAdd
        fileUrl.fileListUrl = this.url.leaderFileList
        fileUrl.deleteFileUrl = this.url.leaderFileDelete
      }
      return fileUrl
    },
    handleChange({ file, fileList }) {
      if (file.status === 'uploading') {
        console.log('uploading', file)
      } else if (file.status === 'done') {
        postAction(this.fileUrl().addFileUrl, {
          'id': new Date().valueOf(),
          'fileName': file.response.result.fileUrl,
          //'fileName': info.file.name,
          'taskId': this.rowId
        }).then(res => {
          if (res.success) {
            this.handleCancleDbSync()
            this.$message.success(res.message)
          } else {
            this.$message.success(res.message)
          }
        })
      } else if (file.status === 'error') {
        if (info.file.response.status === 500) {
          let data = info.file.response
          const token = Vue.ls.get(ACCESS_TOKEN)
          if (token && data.message.includes('Token失效')) {
            Modal.error({
              title: '登录已过期',
              content: '很抱歉,登录已过期,请重新登录',
              okText: '重新登录',
              mask: false,
              onOk: () => {
                store.dispatch('Logout').then(() => {
                  Vue.ls.remove(ACCESS_TOKEN)
                  window.location.reload()
                })
              }
            })
          }
        } else {
          this.$message.error(`文件上传失败: ${info.file.msg} `)
        }
      } else if (file.status === 'removed') {
        deleteAction(this.fileUrl().deleteFileUrl, {
          'id': file.uid
        }).then(res => {
          if (res.success) {
            this.$message.success(res.message)
          } else {
            this.$message.success(res.message)
          }
        })
      }
      this.fileList = fileList
      this.defaultFileList = fileList
    }
  }
}
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码即数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档