|
|
<template>$ u/ a) ^+ G$ h4 z# g
<el-dialog, B( w: r6 z0 W- m" ^4 C
title="上传"8 _/ X8 J+ T8 v+ ]
:visible.sync="dialogVisible"
0 B2 q" b/ V" h$ m, e width="40%"
- o; f' C. p5 p+ i :before-close="handleClose"
- ~" [3 o2 Z7 W8 |+ K$ g3 ^) w >
- R$ [5 Q$ ?6 c( ^, _5 y <el-form ref="form" :model="form" size="small" label-width="80px">
7 s% a9 S% X4 u5 ` <el-form-item label="文件名称:">7 _/ x/ H% O4 s! r* B
<el-input v-model="form.contitle" disabled></el-input>9 J7 i- Q/ E7 b! n
</el-form-item>$ D5 H3 E# A0 R2 p6 X, m. C
<el-form-item label="文件上传:"> |) n/ v' {9 q1 F3 G# [
<div class="uppicture">
9 y& v4 M' l5 ]/ J- g3 m2 m <input type="file" class="upinput" ref="file" @change="showimg" />
7 v& T/ u9 P3 Q) O5 n$ V' q <i class="el-icon-plus" id="changes" @click="changeimg"></i>
/ m3 G) g& Q# W# U, f <p>上传文件图片附件</p>
7 v/ L3 p7 c- D8 } </div>
; w4 p/ g% e6 c5 ^3 s <el-button type="primary" class="uploadbutton" @click="addupload">
' I" U5 ?2 f( m: V, T 上传附件* T) b5 {% G- F( r m3 {0 k
</el-button>
9 f* Y. G) N; V! G6 B3 d </el-form-item>
$ x& n5 J9 [- x3 ]/ s </el-form>( R. b$ f3 W: I; S: q
<span slot="footer" class="dialog-footer"> l' Y( |/ t2 q1 A+ |6 V4 E
<el-button @click="handleClose"* ~" K: M, y) `* i$ R
style="background: #f7f7f7"2 x) r3 _) R1 M' e
size="small">取消</el-button>
" ~; V1 V& T m, `# \0 T! L </span>$ i( U* C) l) a) ~8 |+ N
</el-dialog>7 E' E* r8 ^' S0 a/ B% ]
</template>
, C0 J; W# g& O% \" s
8 {, a& G. ]( h$ Q: z; q' Z<script>
0 a ~: \4 J6 n5 p- R6 y6 n// 从API中引入uploadvideo组件0 F- U' b4 v/ t
import { uploadvideo } from '@/utils/apis') i+ [; h& X! D9 i+ {& w
// 引入遮罩层组件
) C0 y' k& {1 Iimport { Loading } from 'element-ui'' B& P4 t% R" L+ P" ]0 |/ k
export default {
# {, g2 |+ T2 A( x, D G) E0 { name: 'fileUpload',
: u' @3 y# [2 H( p+ g# e }& g2 @ data () {4 e" _& G2 W8 c# w
return {
# H, Q) ~" K: x! m# {* Z form: {
' }4 _" i) l) V // 文件名称4 a8 [: n8 ^- R7 v
contitle: '') K$ n( ?7 z @/ x+ f
},0 D5 I9 ]( f7 x9 j5 V
formdata: {}( n) A3 x& c6 [5 {& A4 Y
}
% p! H/ E$ ~1 C" F },9 _5 f0 L, _/ F4 o& \! y- O
props: {
% f" `* S7 J. W5 s8 ^ ^! A4 U% { // 显示隐藏. w4 |0 ]8 Z5 R
dialogVisible: {2 K4 u" F) v7 g. Z
type: Boolean,5 s4 e6 @+ n( H
// 必传1 N0 b. B8 f7 c7 n
required: true
. V! j4 n1 i# @$ x }
" k6 f' n0 Z0 D! |( T2 M9 Y },/ l4 Z8 a2 Q% }1 y. L. Z% G
methods: {) T; d: d* p6 I( p
// 关闭之前( z7 Z5 [/ e0 t+ X
handleClose () {
( E ^) @3 S: C5 y: k console.log('关闭之前')
5 f9 _! g5 ~7 t% Z0 f0 d // .sync语法糖,单向数据流问题,
. p$ b7 M @* T8 i0 e3 x0 J% t // 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改
9 m; G6 v- N+ N3 U) z8 T) d this.$emit('update:dialogVisible', false)
8 ]3 ^, r4 F3 R# E+ i" a },
7 J% A+ |6 z2 D: U, \$ ?* h // 输入获取事件
# Q/ e) l' v: v2 [: i: y: ]9 N showimg () {, G2 w6 X) N, U. Q5 F: L
const that = this
T {. f- N: P console.log(that.$refs.file)
, L% T4 L3 A! `2 L console.log(that.$refs.file.files[0])
2 T3 c4 G' M/ ~ x! L a& i0 Z // 文件名复制" e$ w0 Z7 W" K( I+ x# `* I4 W% P/ e
that.form.contitle = that.$refs.file.files[0].name; k7 E8 O; _. i" \
// 声明一个formdata对象
* C) x) b. [ M this.formdata = new FormData()/ T. G+ l9 y& w+ R4 U8 K! g2 v
// 赋值需要传递的文件
3 C/ b2 U7 A/ k1 t this.formdata.append('multipartFile', that.$refs.file.files[0])1 x: S6 ?) O. \
},
% `7 F3 E% r4 z8 H3 I$ U( ~4 c1 j( C changeimg () {
0 Z+ h& j7 e( N$ h3 H // 点击图标时候,触发input选择文件按钮
) ^- |0 f1 J1 I4 p/ q; s this.$refs.file.dispatchEvent(new MouseEvent('click'))" t- B( T* d) [, z' Z4 m
},
9 h4 P* D' `( F // 上传附件
3 O- f1 l3 { j- P. l) f# a' k async addupload () {0 u4 H- Z/ Q8 O* e
// 上传文件提示,未选择文件提示用户
1 ^% y b' b" [3 a5 K- a if (!this.form.contitle) {, m- z4 u9 q8 C4 j) z) E
return this.$message.warning('请先在左侧上传文件')$ C/ I0 a/ Y; D! t
}
+ x9 J$ `' Y2 j1 `6 |- p2 ~ // 开启遮罩层' q% L. x2 q6 A3 q8 b
let loadingInstance = Loading.service({
1 R9 {6 p+ k$ K5 H! U( ^ lock: true, // lockde 修改符---默认是false
5 f. N5 M3 q0 P" @9 K- X text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件& H, h, |/ t/ J% I
spinner: 'el-icon-loading', // 自定义加载图标类名) ^" |- z8 i) K/ s6 q
background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色
8 z. L2 a" k/ S4 K8 f target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点
) [& D2 Q" B) H2 S) ]# }2 g$ G- _; Y })
2 X3 U, C- X2 D b; a9 D7 Y+ J const res = await uploadvideo(this.formdata)' K* f: L7 ~& M
console.log('文档服务器上传文件', res)1 O4 V! ]9 i2 e' c. x& x3 b
// 传递文件存储id0 l; M. Y/ \. i
this.$emit('updataurl', res.data.url)" m# _9 I2 G7 j& u8 |
// 回显文件名称给父组件的form 表单
- T/ s4 _# r7 P. k this.$emit('updata', this.form.contitle)
) ]2 e, j# B, t: `$ j+ W# Y // 清空表单
; H9 X3 }3 j @5 L G this.form.contitle = ''
1 X5 b, t$ c1 G, o7 R1 ]4 H M this.formdata = {}
9 Z8 N% Z1 q4 b9 l" M5 l // 关闭弹框
n% x5 m) N j) w this.handleClose()
+ {( k5 w, {" f' Z+ {2 F // 关闭遮罩层. J$ ^2 ]8 z6 \: f6 K: f4 o
loadingInstance.close()% Z0 l# s# z# ^; w
}
, Z. @/ P; W1 ~ }! y7 a. S5 S# t" l
}
l' F/ H" w7 e) |- q$ ~3 U</script>
) u. O9 ?- v w% @, }& C<style lang="less" scoped>
) z7 {, v" f1 Z' K) @0 X.v-deep .el-dialog {
% {$ i' [" s; M6 f/ k) a border-radius: 10px;$ m3 J0 v: x2 a+ F
.el-dialog__header {
7 s- K# ^9 N1 @( d5 y/ Z! Y border-radius: 9px 9px 0 0;5 h. j5 g; E( r0 A
background-color: #1488c6;1 M1 n3 d9 m( h# m/ V1 P/ c
padding: 8px 20px;! B8 X/ I' p- ?5 D
.el-dialog__title {
( a; |- S$ i- A color: white;
. e$ T! B/ q0 f/ R font-size: 16px;, n" J# l0 b/ i, V2 S
}
5 A" Q! Y: z6 A9 y- M
$ k5 h' W4 a; t H9 x% R .el-dialog__headerbtn {
. Y* z* ?; o( w/ f top: 12px;
1 ]3 |6 X+ b4 \+ M. R i {7 _9 z( A5 O5 `" L
color: white;, c# t* U3 J, r# E4 ~8 ]1 R# u: Q, D
}
4 w- e( C" v/ G9 r+ A }+ Q/ @: |/ O* L5 l6 K
}2 }, u; C) ?, H" q! M- v
.el-dialog__footer {
) T8 j3 b K6 o& y0 G text-align: center;
, h5 E+ p9 p- S }
4 R2 ~8 g! l- J" u, V .el-dialog__body {
7 y, U3 K% g S+ v, B! ^6 v padding: 12px;) [9 k K: S M r
}) b2 M7 P8 U. R( w
.uppicture {
" U2 N# A% M( G" |; y width: 120px;6 G) M2 V S3 Q2 v v4 l) i
height: 120px;$ g) }" d( y, H6 j ?) h
border: 1px solid #717376;
/ o# V( C9 @& I, D' q3 ]2 U1 { position: relative;& T* D u' r# }
cursor: pointer;5 k) ^/ ^$ V& d( X, Q7 A0 Y+ j
input {' z" e( d0 E/ L1 Q% l
width: 100%;
7 [* Q2 X; `0 ]- \& E4 i+ l0 G& i7 s height: 100%;
& j6 R8 V; A ?/ U vertical-align: middle;
/ x( O" v! Y( D* |6 r6 J* ~! e opacity: 0;
% P _+ r2 C1 K/ k }
% [1 G2 i3 i% c" @ i {
+ k& U, E5 k" X- N0 `. e position: absolute;. |$ ^( C+ x! a' z, S' Y5 \/ d
top: 50%;
4 a9 Z6 D Z" g" X( a- o5 j6 t left: 50%;# o0 G8 k, X8 G; `" N/ D
transform: translate(-50%, -50%);
0 x I, u) l, c font-size: 30px;
3 p6 Z l9 C$ w) ~; f // background-color: skyblue;
5 a+ C* `0 _* H6 F/ b0 T/ i$ s }4 a, s `+ C2 o8 Q4 ]+ ?! Z
p {6 v4 A$ P2 r3 f4 p: I, O7 ^
position: absolute;
0 P3 U7 J U5 B- B, O" p) z bottom: -2px; m7 M+ A# l5 G @" M) V6 ^
left: 50%;
7 }8 ~0 A, t' [5 P. L0 ~ word-break: keep-all;# m( r6 {" G, Z" R
transform: translate(-50%);' {5 }7 c1 Q1 Q$ ]/ W4 A
}0 g2 W6 g: R' j( A3 U! z
.uploadbutton {! r# \5 C; {- V! j
position: absolute;
. J3 Q' ^+ G: s u" _ bottom: 0;: ^& t3 L! I% D6 b" O9 K
margin-left: 20px;* `. H6 q* k: c7 K4 Q' z
position: relative;
! p6 D8 x: |/ k3 t }
7 K0 e* { ^; T &:hover {
5 P J; f# P1 ]; ]# u6 J* ?! G& q color: #2da9fa;
3 @( J: K6 ?0 G; z$ G% e border: 1px solid #2da9fa;
L; y* h6 z+ O4 q4 T p {
' N6 Z3 q4 o4 M5 M color: #2da9fa;( y0 }) |8 b, b4 x4 U. |4 t
}5 ?2 o1 _. z5 Y9 ~
}+ N% v$ i3 J* g3 }
}
6 W- M( g( O4 C* l .uploadbutton {( ^( d/ M- }3 v3 \
position: absolute;& I$ V9 f( f' w" v
top: 70%;: d, n3 w! L2 A
left: 150px;- |( z, y1 J1 P5 v; C0 q7 A
}# k' b8 D0 C- h) G: X
}( t+ A" L* U B9 ]
</style>
1 L2 ]( R9 @* h! Y' \: N |
|