|
|
<template>. _0 Q+ p( b5 W0 B
<el-dialog
4 |& j ~: a5 ] title="上传"
, ~" T: [& ]% T- V% C$ d/ e :visible.sync="dialogVisible"
2 `! l8 C4 k7 s$ W$ }* X& j width="40%"
5 ~ K; D8 S9 n) r :before-close="handleClose"
7 w2 G1 B! @: {# } >
" h/ a$ ]2 U4 i/ Y0 f, m <el-form ref="form" :model="form" size="small" label-width="80px">
+ m `! R8 [& \1 v2 D5 |- u8 e <el-form-item label="文件名称:">
0 s' V8 ^8 u& C8 [ <el-input v-model="form.contitle" disabled></el-input>
& R* M: Q- ?( O1 {; O/ F </el-form-item>
2 n2 Q4 F7 U" ~; Q7 l; E/ A <el-form-item label="文件上传:">% \/ h/ n- O* a& r. k
<div class="uppicture">
, G3 w- Q8 j1 i/ {/ V1 I- E7 a <input type="file" class="upinput" ref="file" @change="showimg" />
# D, a* J# c6 k( I- m <i class="el-icon-plus" id="changes" @click="changeimg"></i>
) F3 U- W5 ]" V& W# k1 f0 i5 R' i! G <p>上传文件图片附件</p>; v4 L6 I) m; _
</div>
( u0 {( @) v' S <el-button type="primary" class="uploadbutton" @click="addupload">
# j9 n( y8 [& ~! Z3 u6 s 上传附件
% G8 @9 p( C4 @! Q3 i4 [( y8 J </el-button>
0 w) Q! b5 |! o6 ~. k9 s/ e! ` </el-form-item>8 w( I, Y U& ?8 \ @
</el-form>
9 |' m6 `6 \+ K x! J, S3 S <span slot="footer" class="dialog-footer">4 n0 s, v$ K$ b( n: d; Z; o. u
<el-button @click="handleClose"
& I% v$ e- V) J7 O style="background: #f7f7f7"" g+ ?3 J, ]! l8 R
size="small">取消</el-button>
' Y/ E* o# F0 r </span>- F/ F& k# e1 ~/ F, U# L/ ~
</el-dialog>: o& q$ u N5 [! R6 y* ^' Q
</template>1 ~0 D: ], A3 ]
# h0 S/ k P7 A5 j( k
<script>: D8 s$ N' Y# q2 z
// 从API中引入uploadvideo组件
& k, \& [) V# r% @import { uploadvideo } from '@/utils/apis'
1 x g- B: p# a3 k# @- X// 引入遮罩层组件
0 t# O* l( l& P vimport { Loading } from 'element-ui'2 N; J5 `0 ~- p+ Q! ? P+ c3 H6 R
export default {" Y) Y! z1 K1 V) W
name: 'fileUpload',& D6 h+ n5 ` P7 k$ t9 V, f
data () {
- O7 C$ l7 Y1 X+ t$ f; |" a5 O; W return {
: n7 o' Y: M( v form: {$ ~9 z5 j& C/ @2 Q4 P1 e, _
// 文件名称/ g8 g e, B) ~/ d1 ]5 h
contitle: ''/ B& t& _, V, o! R1 S7 _/ `; k) E* c
},
8 X! ?6 W* t' R' H( {- R0 `9 { formdata: {}! p s* t3 R$ g* f
}& X& d% G4 o# Q/ S3 ^3 i3 u
},5 s7 ?- l8 d9 A2 P- }# Y5 F8 A
props: {
% D b0 R; b+ a5 {' x4 ~ // 显示隐藏
" }" x. L( t) |$ r2 B" P dialogVisible: {: O4 b, f6 p& ]) B8 f
type: Boolean,
, e( J. p" Z7 g( e* s! u; S% S // 必传
7 [9 I& H2 Y, g0 O. u required: true8 Q, j+ H& F: n& I) U% }
}7 }% b+ Z x4 C( a0 e
},$ K4 a# K; D. [; Z$ E
methods: {
6 ?# w* f1 v+ E // 关闭之前# L9 _0 @" v, [* O" i& L. Q
handleClose () {
/ [4 v; Q7 B- t0 ^ console.log('关闭之前')
5 \5 r- |4 }' _ // .sync语法糖,单向数据流问题,0 U0 \2 T$ t- k; k9 f) `
// 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改( c; p, L6 j6 N B" b
this.$emit('update:dialogVisible', false)/ {' P( @" A, l$ M! Q% Z
},, j2 i9 ^; G6 y7 m6 T- C6 ]
// 输入获取事件
0 Z; b9 n4 y1 L showimg () {0 K; m0 O/ d: N$ q8 H
const that = this4 T4 N, \& S" o; j6 u' @! b/ z
console.log(that.$refs.file)2 @) ?+ u4 O8 J
console.log(that.$refs.file.files[0])' G0 R6 T7 N& z
// 文件名复制
( z9 o7 S5 N. T that.form.contitle = that.$refs.file.files[0].name
_/ C/ f% u7 a! m, \6 o4 h1 T2 ] // 声明一个formdata对象( n/ m) [: w5 ?! Z; k
this.formdata = new FormData()
4 @% d- v* A: e! Y // 赋值需要传递的文件/ H0 {' K, H- Y. R6 y( ?; y" F3 {0 t
this.formdata.append('multipartFile', that.$refs.file.files[0])
! t: K* A" O' U, y3 ]! ` o* V },
3 ]3 T8 b7 N+ o changeimg () {
- o# h( [" I. u% U. l' D6 S( { // 点击图标时候,触发input选择文件按钮
5 z: U3 f0 A6 ] this.$refs.file.dispatchEvent(new MouseEvent('click'))/ n7 W5 F3 h. V( N3 ?6 p
},' x' V% l6 ?) W8 c; e n5 }$ @0 p
// 上传附件3 W5 C7 q0 k D5 T% ^' e) Q
async addupload () {/ C+ H F$ d. c: o: ?, J
// 上传文件提示,未选择文件提示用户
" K# j- n% s+ o, j) W+ k if (!this.form.contitle) {2 ^4 ~' C7 U2 a. I
return this.$message.warning('请先在左侧上传文件')! Z& P# |% l' z) _2 C
}) z q! A) s R- y# ]% \7 M
// 开启遮罩层
1 [) I7 g: T6 P6 w ?/ m let loadingInstance = Loading.service({9 w: e4 ?/ R5 C5 n
lock: true, // lockde 修改符---默认是false
2 m9 A, W2 t: z4 F( G2 n# | text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件4 H3 Q8 K1 ?0 h: i- D V6 B# u
spinner: 'el-icon-loading', // 自定义加载图标类名1 E$ L7 K; V+ p8 r0 O& H
background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色8 R0 B, H" R2 ~3 K, Z* ^
target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点% T- p% p. a. `+ \2 W& V' @7 T7 U
})' ~1 y. V+ M. a; H6 P
const res = await uploadvideo(this.formdata)8 k1 E. k: ~5 y* X
console.log('文档服务器上传文件', res)
7 X% h4 D5 R9 B* C // 传递文件存储id* c. D0 Q* f. y% p. v% g. a
this.$emit('updataurl', res.data.url)* H- j! G" ~7 x# Y, Z& o
// 回显文件名称给父组件的form 表单' L' E0 z* j4 T8 U: ^5 S# b% M# C9 P3 z
this.$emit('updata', this.form.contitle)7 `; _: A# T: P5 ^2 |. D7 z: N
// 清空表单
/ Q( b5 Y1 J& W4 b& h' s9 L* y; T this.form.contitle = ''1 @/ ~! o t V
this.formdata = {}
$ q' A( v6 `( h. O- j5 X // 关闭弹框/ T5 g# J* h! x( Y1 }. @
this.handleClose()5 `: T9 y7 h1 s+ D1 _5 h5 l4 D) _
// 关闭遮罩层2 p- D! ]! @3 u( a9 r2 R+ W6 s2 d
loadingInstance.close()
+ \, c% O, B7 f9 E, |. U7 u# v }( |" y7 w0 z5 p" @/ n
}8 J" s8 D* G* e ?/ @2 |. W
}7 P X/ X5 z7 q) u
</script>
: R4 ]/ u: h1 j3 g<style lang="less" scoped>
) ~( T* g' K' `1 N" f2 w& G W( I.v-deep .el-dialog {
/ |( ?7 ^: ^" j, ] border-radius: 10px;$ P* d- q! g$ u, p1 e
.el-dialog__header {# O) Q" B. o2 ~$ x2 _5 e9 I- B
border-radius: 9px 9px 0 0;
$ |) m- G, s) \9 W; Z- V background-color: #1488c6;, V2 g) n3 } H+ D; ~1 _
padding: 8px 20px;
% s P7 d- I3 j .el-dialog__title {
( Q5 t+ F3 V" d* w0 [ color: white;
$ _2 T) N0 l: Q: y+ I6 t font-size: 16px;' d' D8 h0 o( A0 D/ h- q
}
- u1 L T7 o' Z, r% K$ n' K; m, `8 ]- P' z, Z1 c, u* a& S
.el-dialog__headerbtn {
( D R9 a2 X- T! m top: 12px;
% z. h! n- d. M( ]5 i i {9 _( A5 u! m$ {5 h- x( a
color: white;3 a$ M' U, E" c& F; q
}" t! j6 [* z8 |: G
}* P6 F% R M; M% D$ g
}6 }# t6 y! O. E/ y, @
.el-dialog__footer {( D3 h; a3 x- r$ W+ ^# r3 P) A, E
text-align: center;
+ `: B! M9 ~. m4 F( } }' V$ o0 J, N6 F! @2 t ~( q
.el-dialog__body {
3 @& z- r* r, ^; n padding: 12px;% L, Y" X- ^# n
}/ i5 Q8 G$ Y3 q- N( V L' E% m
.uppicture {
E& E# D2 Y' `. w2 l width: 120px;
$ [3 k X% L$ q; |" ^ { m, N/ C height: 120px;4 w. U$ e( Z: g9 _7 V4 W0 g' }
border: 1px solid #717376;
# |6 O. _% R5 Q* n# `8 r% R& [ position: relative;
* @: h- P% [: U+ K# _' L cursor: pointer;8 s( _9 _5 D. R
input {
$ o7 J) w- S6 s1 b2 y width: 100%;& q7 f) v& Q) ~. M- T7 }
height: 100%;
) U4 N( R q* l) p6 b% \ vertical-align: middle;
; a6 x4 }, Y# q$ K J% d opacity: 0;* R2 y4 J2 d" J- |
}( J2 C% E1 {3 Q% d) n& k& A) G
i {! ~# _; f% m% M$ |0 k4 @
position: absolute;
6 _5 R. n5 p5 ?6 J8 v; j ?8 @- p' ~ top: 50%;$ g- h2 b8 x( u* x6 S
left: 50%;
; d3 ^: R% W5 R( Y$ l transform: translate(-50%, -50%);
) `' j3 Z& u |$ M font-size: 30px;
5 v3 `; E# U+ U& D" C) Y // background-color: skyblue;
! v/ ^% H/ E2 l1 j+ p% x% O }
" U* w! o7 n) u+ m& r) ]8 g p {0 \2 G7 h, ~# X4 h: c( B) \: {1 V
position: absolute;
) o% V1 a# P! r bottom: -2px;
; U. | I L8 |) c# W E* s left: 50%;7 i5 D5 ~) H0 o
word-break: keep-all;
2 Z9 @( c% k/ J& V4 Z0 L( y transform: translate(-50%);
2 P6 L' a, y: o$ X0 Q }- i' k0 ^. L2 `* _- y) C
.uploadbutton {. {) m/ j9 }* n7 t' p& ^9 w
position: absolute;; y' [# A/ [( l9 U
bottom: 0;$ q! N4 F& V7 x/ I5 i
margin-left: 20px;
7 B) C' R+ A1 v* P( p2 E/ g position: relative;& p4 c# r. H: z8 S
}- ?7 V M1 F1 r4 e4 W0 k2 C% N2 v) U
&:hover {: x, R1 M3 G6 r, W$ N+ i6 Y
color: #2da9fa;
) c& X( F) Z' A border: 1px solid #2da9fa;% z2 o$ p0 o) U6 m
p {
! [' p/ P( @4 k0 K, c, N5 `7 X color: #2da9fa;+ z4 V. t- J8 g: F
}. W/ G( B( l4 k% |# h6 [/ x
}
7 }: ~5 B( ]! j9 B0 w }
- E$ Q9 n# d" m6 F9 _$ Z0 t( Z, m+ X .uploadbutton {
, o; ^$ r# b. J3 K4 p position: absolute;) @. K/ J' ?8 u, z: Y
top: 70%;
3 I2 q( d) w! P5 ` left: 150px;
, R7 @9 U+ j! {8 I6 Z: s# `% X }
1 ~( V! Y# B# \! Y# I}
$ m" | ^" x# r: ^7 f0 `5 A: X& h</style>" z1 D7 b; {( b: P' \6 l
|
|