- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
<template>
. c2 X# t S, Z: @) N, z <el-dialog5 K( _% j% {4 P6 X
title="上传"
/ g, m4 j) `6 e, ~; _ :visible.sync="dialogVisible" c* T, K; ~: `( q4 c/ S# v- o
width="40%"
1 W4 k" G% i( L- x( l7 V; i :before-close="handleClose"
2 n# S4 o2 e# L% y% c3 ^ >
+ I) D% n1 z l7 z; f6 M. b <el-form ref="form" :model="form" size="small" label-width="80px">
# @ O2 c0 q: D4 u k <el-form-item label="文件名称:">2 C3 V# Y. [% b3 T0 {6 l+ S
<el-input v-model="form.contitle" disabled></el-input>
! `0 ~; n- c/ s' Q7 |5 b/ [ </el-form-item>
" U, `/ f2 j0 x' Q; U4 v; S <el-form-item label="文件上传:">
% j' ^8 R J) j! f <div class="uppicture">& T2 N* G$ m# E5 R0 p
<input type="file" class="upinput" ref="file" @change="showimg" />
4 g# r2 A0 W) G: z5 [ <i class="el-icon-plus" id="changes" @click="changeimg"></i>; e% V1 c7 t, R, v j. j
<p>上传文件图片附件</p>
( m0 V$ q; Q4 U& a5 b6 p </div>7 l/ E0 I( b/ W: S3 C# ^5 k
<el-button type="primary" class="uploadbutton" @click="addupload">2 G D. V% C0 ?, a* e
上传附件/ R9 b! }$ R( v7 E
</el-button>$ M( S3 \' t. ? S' {" `* q
</el-form-item> }- x7 m% `' v
</el-form>
& l" z }5 i& _2 n9 @ <span slot="footer" class="dialog-footer">4 r# l$ P" Z: U3 c
<el-button @click="handleClose"
& G" w; D* E2 D. N: Z style="background: #f7f7f7". B: O- X# R" M6 ~
size="small">取消</el-button>
5 g7 h3 g+ y6 ]& @ I& E7 c& X </span>: i# g: Y7 Z7 }# K0 Y- c% T& s* C
</el-dialog>, Z# K. ^$ X% C/ Z1 p( `+ Z
</template>$ L8 E! k8 c c# R: D/ ~# ~" f
+ |9 j# U0 |2 E2 u, P<script>4 k* R/ ~$ p6 x% L
// 从API中引入uploadvideo组件! [5 Z& i. {' ~( i
import { uploadvideo } from '@/utils/apis'
2 O" x5 e5 h" I8 x: j. o3 u5 m// 引入遮罩层组件; f) c' i& m. l- @$ ]
import { Loading } from 'element-ui'& m0 k% ^' {, k
export default {
B6 P$ D6 w3 G9 b name: 'fileUpload',7 Q0 G6 p* ~5 j# {7 g# G. t
data () {
- @: H+ J+ w7 M# x return {0 M$ w9 `7 K" T: B$ r
form: {, J6 {3 `. T2 `1 }9 T) U* |
// 文件名称8 S8 W; z* d, _4 I- z
contitle: ''- e( }* u5 Z3 U( H
},
. u# o0 a2 j4 C: G) B' I" C formdata: {}! a, t- J' N3 W4 L) @ r
}
/ c) t* {0 z8 a5 p5 R, M* o! g }," f7 O1 Q6 F5 H$ q' q
props: {
6 S9 Y7 ` ~( a+ x# v. B // 显示隐藏, v2 J- d- Z% ^" b" T
dialogVisible: {
# J' a2 t) k2 L type: Boolean,
: i" A4 H$ C" a) v- J, @/ t* i) n, X // 必传& C& }/ A( h" a! K u
required: true V" g7 J' ]1 S$ ^2 w& S8 S0 j
}1 N% h5 { m1 J( a
},- I' o" A7 \2 Y# T
methods: { e% `: ?2 C# N9 G. \
// 关闭之前
- x% t! P4 M" l5 E handleClose () {
1 K: J/ G' M7 j. p1 [* S: d console.log('关闭之前')
% c8 t, G! W5 |2 A/ Z& s$ Y# Z6 k" R // .sync语法糖,单向数据流问题," L$ i4 V% \" j
// 父组件传递给子组件的数据,子组件直接修改会报错,需要传递给父组件修改
$ h0 } J4 o' Z# S# M+ G this.$emit('update:dialogVisible', false)
3 r- y6 B E f' H },
6 f) P) K6 B$ A4 ^0 ^' Y2 @3 K3 |, ? // 输入获取事件
Q4 r8 [) A8 M; l showimg () {$ C7 a9 ?% q$ W% S
const that = this
( j8 s- g" ~/ ^8 ^ console.log(that.$refs.file)- j. r; X; R9 q" z' ]9 v6 `- _ w
console.log(that.$refs.file.files[0])! U- X1 `# n- P, v3 a* [
// 文件名复制) i5 }7 W8 k' k5 @6 B
that.form.contitle = that.$refs.file.files[0].name
' g r: E6 v" ^ // 声明一个formdata对象- T/ Y, b. u1 L \9 w. ~
this.formdata = new FormData()
% t# ?/ ?3 D s+ B0 [. Z! P& N6 i // 赋值需要传递的文件
0 B, Z; ?5 D) P+ T( J0 y/ k) H this.formdata.append('multipartFile', that.$refs.file.files[0])
4 ~; L; D8 c3 i2 @/ c& M8 X, q/ p2 m },) o/ _# N& H. t1 Q/ W
changeimg () {
$ V( U. K$ z8 ~ // 点击图标时候,触发input选择文件按钮
1 X! N( [7 l0 h$ Y2 i- J$ N3 {1 e this.$refs.file.dispatchEvent(new MouseEvent('click'))
0 }( T$ A% U( y, a1 l% c6 n; k },) E: P+ o. X' n3 E3 w2 D! I. `+ f
// 上传附件
8 q2 X x, ~( }* E async addupload () {7 s" l4 E) O2 U" n+ g. m
// 上传文件提示,未选择文件提示用户
5 p: ~$ z0 c; ? if (!this.form.contitle) {
3 Z4 l( ~4 _& B& c% b3 H5 } return this.$message.warning('请先在左侧上传文件')/ X$ G: w; b3 j2 ?1 ~. [( I! a
}! A1 C& }' Q2 ?2 H
// 开启遮罩层% D! L; F! s( S
let loadingInstance = Loading.service({: T( A" ^. b' x+ S- Y
lock: true, // lockde 修改符---默认是false1 y% Z+ x# ^ A( K
text: '正在上传文件,请耐心等待', // 显示在加载图标下方的加载文件, W* W c- w3 q( b
spinner: 'el-icon-loading', // 自定义加载图标类名/ Q8 T _! a/ N9 o
background: 'rgba(0, 0, 0, 0.7)', // 遮罩层的颜色
% s) S3 m) f/ Y7 O8 Z: p( R target: document.querySelector('#futureTransferDialog') // loading覆盖的dom元素节点
+ _5 R% f" l" J1 w8 s( ` })* Q5 Z! G+ I- a x( b& j4 H2 ?. U
const res = await uploadvideo(this.formdata)
6 `! M' P" I5 Z; {- q) R5 h3 R console.log('文档服务器上传文件', res)/ c' `7 u# v3 e3 G( S: G5 R
// 传递文件存储id
+ o- w" F% M2 _3 n$ T1 K this.$emit('updataurl', res.data.url)
: @& Q- m L) y6 j1 Z* B6 u // 回显文件名称给父组件的form 表单9 p5 a y7 l1 ]6 U
this.$emit('updata', this.form.contitle)
1 l7 o5 d# d# Z1 Z* S // 清空表单
. l( {8 |, C% U' f this.form.contitle = ''
: H/ z" Q+ \& B: H$ N0 T this.formdata = {}
7 X$ V9 n& q, m) T" ]* T! }- G1 n // 关闭弹框
% ?- g$ H! H! Y) |/ f. [ this.handleClose()6 A3 Z% N, r+ l |9 b7 v1 _+ C
// 关闭遮罩层
$ W8 h8 n- q5 ^- q1 t e( g loadingInstance.close()5 y$ G7 f& r" y* ^
}1 D- J$ [% _2 `8 m( a
}( t; d2 e( s# X: D+ t
}: U4 Q5 D; u& _+ c
</script>
a) U' C% C& T1 A8 Y. G: t. C<style lang="less" scoped># p2 h0 ~! Z! n6 e" r, l
.v-deep .el-dialog {
5 v g4 J: Z3 f- w border-radius: 10px;( ?# f* i m! m! t9 Z
.el-dialog__header {
" S! _6 ]; u( ?* b+ P0 j% U border-radius: 9px 9px 0 0;
1 d. r4 a5 z0 ~# p background-color: #1488c6;
2 Y/ `; V0 f. Y$ O( @0 q4 Z4 x* { padding: 8px 20px;
' U- B. A7 ]4 t .el-dialog__title {" m# I- q9 k: P& s& w8 q/ |
color: white; E$ ^3 ^- r0 }! o ?
font-size: 16px;
, i3 N1 e2 V$ t3 Y( |9 ?( W4 X$ F7 { }
$ E/ W& s8 _. r7 L7 R" M* @9 Q, M3 e, E0 s0 v/ d, _8 h# A
.el-dialog__headerbtn {
3 ]* w' t" g, G2 K9 `$ s top: 12px;
M( y" K; W8 b) G9 ]+ C2 @1 i9 s i {
5 R2 F0 ^, L2 h: T$ V$ H/ N' ^ color: white;3 j f( I! Z, a+ @$ `
}
* g5 k5 R6 \) B( t( f& }2 c }0 B0 }4 N3 ~7 R2 g r- h0 r1 F
}
# j- @" b; ^* O6 \. D1 p .el-dialog__footer {- i( j* B) ?9 D+ N/ \5 `5 |
text-align: center;
. n- a! o4 b* j; i }
1 A: c) u5 U1 |' M0 R .el-dialog__body {
# A$ w' @& B( F# N padding: 12px;, x( K7 f; h: S5 w
}
# m9 N1 h7 ^; c8 r* o4 l4 k! ? .uppicture {
) K' |' I9 M6 H2 o6 V width: 120px;5 [% Z) d7 ?4 h% `3 m6 C# }0 p1 \4 b
height: 120px;7 ~7 _ D9 c: X# x8 [" r1 G
border: 1px solid #717376;6 ~0 e4 J$ t/ z; k$ q% E
position: relative;6 d8 y& x( N, T8 E3 I& M# |
cursor: pointer;6 X3 K5 f! g! V0 o/ l% ]- l
input {% c' k7 |5 t+ k7 q4 @
width: 100%;
y. X p) a: k* @$ s, ^" D; h8 g height: 100%;# O- V9 p1 s, P. |$ Q
vertical-align: middle;) {* r) h" p0 R. L# }* _+ o; c
opacity: 0;7 y" V& U2 v+ h, `' h! g/ G" O
}
& S. r) h) a) q9 ~0 n( M i {+ `% z# f: w% W+ w( V) H' y
position: absolute;* E0 p. j L* w j
top: 50%;
- G9 y/ a6 \- G* y) L9 l6 w left: 50%;' W& ?5 s# x" v+ @
transform: translate(-50%, -50%);
7 l( v7 C5 h# w9 c5 | font-size: 30px;
" o7 ?* h0 {9 `3 `5 @% h4 v" o // background-color: skyblue;9 i: d3 D2 [8 f1 {
}
! @( k* C/ s: J, W/ L p {
, @; _) {( ~1 ^- V5 t, s position: absolute;! f: L7 a) l1 s: V5 x& e
bottom: -2px;6 T2 l. Z% U( }5 x, X- \
left: 50%;- c' T* F1 u8 U, ]0 ~0 ^! m; S! z. }! {
word-break: keep-all;
( X! D, p1 m+ d& S transform: translate(-50%);# |( O C' L2 p. ]7 S
}5 w+ g9 C9 q& w% ^/ W: ?# u7 |
.uploadbutton {: Z m4 T5 \6 |# Q
position: absolute;
+ B5 ~: \ z1 W+ E, D bottom: 0;' l" t+ J3 o8 A" n3 g
margin-left: 20px;# W7 L+ R! Y: P' b. Z* c6 C6 j
position: relative;8 j+ u$ P6 q H( x0 a. q3 L- g: Z6 e* G
}/ j. b" W! ~9 K. Q$ ]. Q! x
&:hover {
+ b6 T3 a3 M+ v7 }/ Y, `* w& T4 t color: #2da9fa;1 U7 g" M G4 A
border: 1px solid #2da9fa;
' w4 n q8 T1 I& l; l8 p4 ] p {
8 V) s- ~6 q8 y4 v color: #2da9fa;
$ V$ k' [& C) Q: D! d! B* @" Y }
* A* n( j% l- x8 x& {$ i$ j }
' D7 n+ ^7 Z P8 j+ c$ c5 b- f! l }
8 D+ }1 F0 z8 v8 p; d0 i. N( L' v .uploadbutton {
5 {6 I, ^8 Q! M" y4 e& B; b position: absolute;
) B; @; W: \9 j! S top: 70%;
$ Z4 i0 o# |6 \0 P) s3 Z left: 150px;% r3 c; _0 O: L2 f. X& v
}) ?' p( K; t N/ J/ Y2 h
}1 W% O" C* I3 D3 {
</style>6 J" {' G) F8 p5 m4 \
|
|