zhouwx
2024-11-18 a886764374c7ee326bd632110fc6f518c5343e52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<template>
  <div class="archive">
    <el-form style="display: flex;flex-direction: column" :model="state.dataForm" ref="dataForm" :inline="true" :rules="state.rules" label-width="130px" >
      <el-form-item prop="deptName" label="结束日期:">
        <el-date-picker
            v-model="state.dataForm.endTime"
            type="date"
            placeholder="请选择结束日期"
        />
      </el-form-item>
      <el-form-item prop="deptName" label="总结描述:">
        <el-input
            type="textarea"
            :rows="8"
            v-model.trim="state.dataForm.summarize"
            size="large"
            placeholder="请输入总结描述"
        >
        </el-input>
      </el-form-item>
      <el-form-item label="附件上传:">
        <el-upload  :disabled="projectType==='view'" accept=".pdf" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,5)">
          <el-button type="primary">上传附件PDF</el-button>
          <template #tip>
            <div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div>
          </template>
        </el-upload>
      </el-form-item>
    </el-form>
  </div>
</template>
 
<script setup>
import {reactive, ref} from "vue";
import {getToken} from "@/utils/auth";
import {ElMessage, ElMessageBox} from "element-plus";
import axios from "axios";
 
const emit = defineEmits(["getNextStatus"]);
const projectType = ref('')
const state = reactive({
  dataForm: {
    endTime: '',
    summarize:''
  },
  rules: {},
  uploadUrl: import.meta.env.VITE_APP_BASE_API + '',
  header: {
    Authorization: getToken()
  },
  fileList: []
});
const riskOpen = async (type,val) => {
  console.log("type",type,val)
  //完结按钮
  if(type === 'confirm'){
    //成功后自动到下一步 项目id
    emit('getNextStatus', 4);
 
  }else if(type === 'detail' || type === 'view'){
    if(type === 'view'){
      projectType.value = type
    }
    console.log("view333333",type,val)
  }
}
 
const handleAvatarSuccess = (res, uploadFile) => {
  if(res.code == 200){
    state.fileList = res.data.map(i=>{
      return {
        name: i.originName,
        url: import.meta.env.VITE_APP_BASE_API + '/' + i.path,
        id: i.id,
        projectId: i.projectId,
      }
    })
  }else{
    state.fileList = []
    ElMessage({
      type: 'warning',
      message: res.message
    })
  }
}
 
const showTip =()=>{
  ElMessage({
    type: 'warning',
    message: '超出文件上传数量'
  });
}
 
const picSize = async (rawFile) => {
  if(rawFile.size / 1024 / 1024 > 5){
    ElMessage({
      type: 'warning',
      message: '文件大小不能超过5M'
    });
    return false
  }
};
 
const handlePictureCardPreview = (uploadFile) => {
  axios.get(uploadFile.url,{headers:{'Content-Type': 'application/json','Authorization': `${getToken()}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
    if (res) {
      const link = document.createElement('a')
      let blob = new Blob([res.data],{type: res.data.type})
      link.style.display = "none";
      link.href = URL.createObjectURL(blob); // 创建URL
      window.open(link.href)
    } else {
      ElMessage({
        type: 'warning',
        message: '文件读取失败'
      });
    }
  })
};
 
const handleRemove = async (file, uploadFile) => {
  if(file && file.status == 'success') {
    ElMessageBox.confirm(
        '确定删除该附件?',
        '提示',
        {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
        .then(async () => {
          state.fileList = []
          // const res = await delFile(file.id)
          // if (res.code == 200) {
          //   ElMessage({
          //     type: 'success',
          //     message: '文件已删除'
          //   })
          // } else {
          //   ElMessage({
          //     type: 'warning',
          //     message: res.message
          //   })
          // }
        })
        .catch(() => {
        })
  }
}
 
 
defineExpose({
  riskOpen
});
</script>
 
 
<style scoped lang="scss">
.archive{
 
}
</style>