|
|
<template>( Z5 M; a" A5 }/ p* w) a
<el-dialog
2 J. f* p1 }% c* }+ A9 B. G title="上传"
& U' Q- Z& R5 S# h; J! B, Y :visible.sync="dialogVisible"- X* l4 v" _; D' ]+ C) S
width="40%"
0 S3 Z: Y4 L v; @ @ :before-close="handleClose"
4 ^4 C' |3 t9 _( x" k >2 |+ |* {; D) e
<el-form ref="form" :model="form" size="small" label-width="80px">
5 v+ x% _5 N2 \ l! u3 J <el-form-item label="文件名称:">9 U& k! h) A$ m2 o0 C$ l& B
<el-input v-model="form.contitle" disabled></el-input>
% i8 X6 M+ A+ p; W* u </el-form-item>
9 o' A) R ~+ }3 R7 p- E0 [ <el-form-item label="文件上传:">
% Q9 t7 q$ t5 b* G <div class="uppicture">
. t6 m2 o. [+ X <input type="file" class="upinput" ref="file" @change="showimg" />9 g7 m; Q* R3 f8 K
<i class="el-icon-plus" id="changes" @click="changeimg"></i>
) E- I& h; C# s. _; K2 F: ~ <p>上传文件图片附件</p>
6 E; e0 C/ q) e4 e7 l" r' x </div>3 m( c/ ] B5 A# ]" i
<el-button type="primary" class="uploadbutton" @click="addupload">
9 p K1 r8 k/ ]5 @$ d" P* H 上传附件
2 b+ \9 n7 L( ]& m9 K% g </el-button> E& V+ q4 B# N3 j' T6 a) @
</el-form-item>
, c& `* {- }3 I! r) I </el-form>
; }+ F; L' ^& u' W: V, X! r <span slot="footer" class="dialog-footer">
3 ~8 X$ k, l t <el-button @click="handleClose"& E3 J- T3 ]4 ], g% v
style="background: #f7f7f7", K: e! v; y( v! K# h- n' y
size="small">取消</el-button>
) G& k) Q! c9 M4 Q5 t </span># g" W2 A* M" u: I- P
</el-dialog>
+ H2 n; M6 p& q</template>+ M9 Y$ z' X* m( J5 g
; w& F# l$ G! h9 Q# Y2 Y3 x<script>" u* W4 N2 a; ?
// 从API中引入uploadvideo组件8 Y' D1 S$ s# y2 B
import { uploadvideo } from '@/utils/apis'3 A; b: x: {/ N4 E
// 引入遮罩层组件% [" H" e' a% B. P
import { Loading } from 'element-ui'
6 x- ?) c$ n! [( C0 b) wexport default {/ e' B7 u5 g" `+ o
name: 'fileUpload',
- Q% c: ^. d% F7 t( V4 a* v" l data () {
: i- F9 Q. X$ k return {5 Q. K+ G" ]6 A) _+ Y
form: {
l# V N4 H8 w. \: q: w) _* w // 文件名称
, ?1 u1 c: D O: T/ j8 [ contitle: ''6 m1 R6 t# ~% ]& j& M, A! K
},4 a7 Q; A% f' [" Q& {
formdata: {}
% m" N) y' Y6 k }
: |; {4 m% V; w5 ` },
4 d# L/ I I, W$ J7 I6 a props: {
6 A0 H" r; b. m+ P0 U/ ` // 显示隐藏0 @) q& Q: c8 E
dialogVisible: {3 x: q) n, Y" g1 @% c+ L
type: Boolean,* t" }2 d9 p( n( m7 `4 B
// 必传# V0 _/ R( k8 W8 i: j$ q( a6 Q; `
required: true& N7 N; P" k. i* g+ `5 ~* J
}
( G2 e h6 p3 l },
3 ?# } R. e6 t1 ?9 B" G4 c9 H methods: {
0 y6 c! b3 B3 k% w s7 [# c // 关闭之前
* _; a+ e3 K) x4 ?. G$ _8 v& u handleClose () {
2 b8 w: g+ x: u- u; y" P0 h' F console.log('关闭之前'), f& t7 P% `: z* I5 B
// .sync语法糖,单向数据流问题,5 i" [" E1 p! R" G6 n/ C
// 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改
% s* z+ M4 }' P4 P- }# H this.$emit('update:dialogVisible', false)
5 J2 B( E/ ?$ s n& ^ },
4 |0 X" d. F! C: g // 输入获取事件
" {- C' C$ S+ o+ l2 }8 @! ~ H showimg () {
& h1 h& K/ q* m. g7 \ const that = this
' f6 d( I1 d" u" Y' f0 Y# e8 t/ a console.log(that.$refs.file)
, m9 Z8 N+ {4 L) }( C' Y* x% j console.log(that.$refs.file.files[0])
+ M; [: T; L8 M0 p // 文件名复制
G) g/ o9 E" v) a3 ^ that.form.contitle = that.$refs.file.files[0].name
$ k' `' i+ c7 D // 声明一个formdata对象
$ b9 P+ `* i$ t9 H L! _. a this.formdata = new FormData()
# q0 k/ D& N* c, R // 赋值需要传递的文件5 g/ T6 \1 @$ D& {; S$ @/ M/ I# z* L
this.formdata.append('multipartFile', that.$refs.file.files[0])
) {& y9 p0 C4 \9 L; m },: n( O* o5 v2 X; V6 x o1 j/ p% K- \
changeimg () {
' x; n' e' V5 I' F8 O3 C9 q // 点击图标时候,触发input选择文件按钮$ u& D ^& F& `0 Z2 [4 ]6 f. K. q
this.$refs.file.dispatchEvent(new MouseEvent('click'))
* q; P7 ?" J. Z5 |/ D H& V, Z },
. I) t8 L0 o# [; ]1 c- ~0 k% z2 R // 上传附件
& Y" ^, c; u1 _& S) K async addupload () {
; L+ h) R: K6 F0 t // 上传文件提示,未选择文件提示用户
3 o* f* Y) {) L0 C) J) D& }8 L9 Y if (!this.form.contitle) {
$ i0 w+ m: E' C return this.$message.warning('请先在左侧上传文件')1 |9 o- f% I' P# n3 J( S
}8 S- Z% c$ \ `) r
// 开启遮罩层/ r" I) }/ L8 l6 U' t# {4 u& s
let loadingInstance = Loading.service({
1 Q& y! k9 [5 ?# H7 G5 ?/ U9 t lock: true, // lockde 修改符---默认是false
% {) l! G; P2 D: p" E8 ?& e) R( p0 w text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件5 d. B' ]$ y6 q
spinner: 'el-icon-loading', // 自定义加载图标类名" u' p, J+ w3 v. s G
background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色, @& Q. w( L7 L# `
target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点
" D0 u3 C% o- }$ s/ u })1 _8 _+ g5 s, L' ~& O3 N/ k/ n4 }
const res = await uploadvideo(this.formdata)
* h) U: V+ P+ B P console.log('文档服务器上传文件', res)
. E6 [9 ?. y% _0 r" P& r' R // 传递文件存储id
2 B) P! G9 s/ \) Y this.$emit('updataurl', res.data.url)
: `7 ?( C# ^) E# G/ D$ P // 回显文件名称给父组件的form 表单
4 {8 o( L- e* i5 |9 d! m this.$emit('updata', this.form.contitle)
5 J6 u0 E; t n; Z6 \% n$ z0 ? // 清空表单, B+ d% P1 V' f* E) ]$ ]( s/ l( M
this.form.contitle = ''/ t( J7 p2 w7 i% S; q
this.formdata = {}
, p# G+ C1 T& K: [ // 关闭弹框
9 `7 `1 _' ^4 w7 i; s5 u: J this.handleClose()( `! X' [( k8 [1 K. @3 H
// 关闭遮罩层
% u0 x# R$ L+ D3 y7 T loadingInstance.close()5 o: W7 O& u. N9 k, g4 x
}
+ k' f$ T5 {9 ~$ I- D }! u( P9 _& j1 J
}1 S& j4 w* J5 y9 w m' ?# J
</script>
( r/ b- Y3 N5 o+ ?, h; y<style lang="less" scoped>
- N: Y- J" A. ~1 `* { L, q0 m.v-deep .el-dialog {
( F6 ~. ?! J# T border-radius: 10px;: Z6 e2 j+ @% K* K6 r0 x
.el-dialog__header {
2 R3 p7 p9 z" g' Q: h border-radius: 9px 9px 0 0;- a i6 e4 E+ l
background-color: #1488c6;$ x6 m- ~/ R$ t1 ^$ g
padding: 8px 20px;3 _9 [% ?; ?0 y% o& J$ ~2 `( b* C
.el-dialog__title {
! H+ z9 S) h5 R5 [7 G color: white;3 H" [' I# X6 M2 I
font-size: 16px;8 R3 F$ i* o4 { _- V' D. \7 q" R
}
) F* D# o& T- w: ~" m+ K, x$ a8 }
' z* c! l) B, y" O* q+ x .el-dialog__headerbtn {! j. A' w, K3 g" u) M6 @
top: 12px;9 A3 E9 T7 L. K( u2 R, @7 g
i {
7 ]0 d: l2 P& q' u4 X2 ~ color: white;
! a: h" Y* v) h8 x6 j }, H g, Y9 S4 A/ T. N
}
0 M" [4 e9 L, x* K }; o9 r8 A. q p
.el-dialog__footer {
) b& l. ]% R# T text-align: center;
4 O) H6 T6 n% R N) s6 }. `9 G }# Q3 U) @8 q' | @
.el-dialog__body {
+ t8 _3 I$ M i; u+ A; l& K$ t padding: 12px;
; M6 |% h9 {9 [2 ~ }
0 s" Z1 u- Z0 h$ m- S( U .uppicture {
% D) l: a9 ]' x8 B! j; s width: 120px;
L. q2 ~. W" B9 j height: 120px;6 A9 k% L* q* [
border: 1px solid #717376;6 j. f; G n3 u& `* x
position: relative;& k# n7 b: b- G. \1 f# q
cursor: pointer;# Y2 }! g1 m3 a8 [+ { b3 w
input {
0 q% T* I+ U# A' C) y4 t+ S4 o width: 100%;8 M2 }. E1 y8 ^' Q; I6 o) H
height: 100%;
1 z/ I( D- R$ L) b vertical-align: middle;
' k1 N$ W: t, }: ^& B opacity: 0;8 l/ B/ |: N2 h- `8 m! R2 X4 `
}0 J+ g# D4 `, Y6 ]3 H" D8 H+ \
i {
# N. `$ @$ t; {" S9 G X position: absolute;$ x a! R% g! @ a( o1 J
top: 50%;" b) \. P/ h6 v7 |2 v/ E
left: 50%;
: Q9 B; P9 b* o c0 } transform: translate(-50%, -50%);& b; j i/ m* w) |* I' H
font-size: 30px;
' U1 m B' j# b2 x% w4 T // background-color: skyblue;/ I. H+ @+ C+ v6 y7 p* z' x' \* V8 F
}
, o8 C- G/ d' a: S7 r# c2 |6 e; R6 h p {
' \# a; \$ }) G P8 J position: absolute;
0 |6 @" a& X1 |: \8 F8 O' p1 ^ bottom: -2px;( {: D' |1 y$ \1 d) M
left: 50%;+ g; r: T* E6 R* I; F% G) d5 t
word-break: keep-all;
3 R8 @( L9 c; V4 J& ~! P6 e/ T transform: translate(-50%);
2 e4 x0 Z6 a4 v3 [0 H6 O) i }! a z- j3 m: q* n% w7 Q+ ^9 j
.uploadbutton {6 S8 f9 w8 R7 p3 r- Y' H6 K" r
position: absolute;
+ ^) H7 _- f9 c4 |" ?, J" }7 _ bottom: 0;- D7 e) g* N' ~! I8 K
margin-left: 20px;& w7 K' l) t& |
position: relative;, g( ^$ B A. C# |* G
}
, A: A; P8 h; f6 F &:hover {
5 u' F% F/ G* T8 J+ n color: #2da9fa;
- f. m8 q: d7 L9 C L* X border: 1px solid #2da9fa;
( b3 A$ N s: S8 e1 Q3 e+ |' d p {
% y+ l# v! I& W/ L color: #2da9fa;
. c7 G7 f$ f: u) S. H0 D }4 v% ]; E: |& U3 _* {6 a. v
}
8 d! f$ ~/ s" q' F8 r& k }
$ M; P8 K1 O1 T5 V+ x! H .uploadbutton {
' b9 P5 s& f \, w position: absolute;- \3 L9 H8 B( t) [+ m/ Y) w; H# S3 h2 e& n
top: 70%;- _, F9 _: D+ v9 M8 b$ D
left: 150px;# Z6 ]( a3 X; V5 q0 ?. z: o: J8 _
}3 F" a# V6 I" j2 s9 X- c
}8 X3 e f' l% x' N' M
</style>
& G; M$ r# m1 {( K7 Q |
|