3838-->
3939
4040<template >
41- <div class =" imgs- upload-container" v-loading =" loading" >
41+ <div class =" upload-imgs -container" v-loading =" loading" >
4242 <template v-for =" (item , i ) in itemList " >
4343 <template v-if =" item .display " >
44- <div class =" thumb-item" :key =" item.id" :style =" boxStyle" v-loading =" item.loading" >
44+ <div
45+ class =" thumb-item"
46+ :key =" item.id"
47+ :style =" boxStyle"
48+ v-loading =" item.loading" >
4549 <el-image
4650 class =" thumb-item-img"
4751 :src =" item.display"
4852 :fit =" fit"
4953 style =" width : 100% ; height : 100% ;" ></el-image >
5054 <div class =" control" >
51- <i v-if =" !disabled" class =" el-icon-close del" @click.prevent.stop =" delItem(item.id)" title =" 删除" ></i >
52- <div v-if =" !disabled" class =" preview" title =" 更换图片" @click.prevent.stop =" handleClick(item.id)" >
55+ <i
56+ v-if =" !disabled"
57+ class =" el-icon-close del"
58+ @click.prevent.stop =" delItem(item.id)"
59+ title =" 删除" ></i >
60+ <div
61+ v-if =" !disabled"
62+ class =" preview"
63+ title =" 更换图片"
64+ @click.prevent.stop =" handleClick(item.id)" >
5365 <i class =" el-icon-edit" ></i >
5466 </div >
5567 <div class =" control-bottom" v-if =" sortable || preview" >
89101 </template >
90102 </template >
91103 <input
92- class =" item__input "
104+ class =" upload-imgs__input "
93105 type =" file"
94106 ref =" input"
95107 @change =" handleChange"
96- :multiple =" !isStable && multiple"
108+ :multiple =" multiple"
97109 :accept =" accept" />
98110 </div >
99111</template >
@@ -111,7 +123,7 @@ function createId() {
111123 * 创建项, 如不传入参数则创建空项
112124 * @returns {Item}
113125 */
114- function createItem (data = null , oldData = null ) {
126+ function createItem (data = null , oldData = {} ) {
115127 let item = {
116128 loading: false ,
117129 id: createId (),
@@ -487,9 +499,10 @@ export default {
487499 }
488500 // 释放内存
489501 window .URL .revokeObjectURL (blobUrl)
502+ this .initAll (this .itemList )
490503 },
491504 /**
492- * 预览图像, 后续预览组件制作后替换
505+ * 预览图像
493506 */
494507 previewImg (data , index ) {
495508 const images = []
@@ -498,13 +511,16 @@ export default {
498511 images .push (element .src )
499512 }
500513 })
501- this .$imagePreview ({
502- images,
503- index,
504- })
505- // this.$confirm(`<img src="${data.display}" style="width: 100%; height: 100%" />`, '预览', {
506- // dangerouslyUseHTMLString: true,
507- // })
514+ if (this .$imagePreview ) {
515+ this .$imagePreview ({
516+ images,
517+ index,
518+ })
519+ } else {
520+ this .$confirm (` <img src="${ data .display } " style="width: 100%; height: 100%" />` , ' 预览' , {
521+ dangerouslyUseHTMLString: true ,
522+ })
523+ }
508524 },
509525 /**
510526 * 移动图像位置
@@ -627,6 +643,7 @@ export default {
627643 }
628644 try {
629645 imgInfoList = await Promise .all (asyncList)
646+ console .log (imgInfoList)
630647 // 设置图片信息
631648 await this .setImgInfo (imgInfoList, currentId)
632649 } catch (err) {
@@ -643,7 +660,7 @@ export default {
643660 * 用户选择图片, 图片通过验证后设置图像数据
644661 */
645662 async setImgInfo (imgInfoList = [], currentId ) {
646- const { max } = this
663+ const { max , itemList } = this
647664 // 找到特定图像位置
648665 const index = this .itemList .findIndex (item => (item .id === currentId))
649666 // 释放内存
@@ -653,12 +670,24 @@ export default {
653670 // 追加图片
654671 // 最大图片数量限制
655672 let l = imgInfoList .length
656- if (max && l > max) {
657- l = max
658- }
659- for (let i = 1 ; i < l; i += 1 ) {
660- this .itemList .push (createItem (imgInfoList[i]))
673+ if (this .isStable ) {
674+ // 固定数量模式, 按次序插入空项
675+ for (let i = 0 , k = 1 ; (i < max || k < l); i += 1 ) {
676+ if (itemList[i].status === ' input' ) {
677+ this .itemList [i] = createItem (imgInfoList[k])
678+ k += 1
679+ }
680+ }
681+ } else {
682+ const empty = max - itemList .length + 1
683+ if (max && l > empty) {
684+ l = empty
685+ }
686+ for (let i = 1 ; i < l; i += 1 ) {
687+ this .itemList .push (createItem (imgInfoList[i]))
688+ }
661689 }
690+
662691 // 初始化图片
663692 this .initAll (this .itemList )
664693 },
@@ -716,24 +745,12 @@ export default {
716745 }
717746 this .itemList = result
718747 },
719- /**
720- * TODO: 预览初始化方法
721- */
722- initPreview () {
723- // 清除预览实例
724- if (! this .preview ) {
725- return
726- }
727- // 初始化新预览实例
728- console .log (' 图像预览功能等待上线' )
729- },
730748 /**
731749 * 初始化
732750 * @param {object} val 初始化数据
733751 */
734752 initAll (val ) {
735753 this .initItemList (val)
736- this .initPreview ()
737754 },
738755 /**
739756 * 获取图像信息
@@ -771,7 +788,7 @@ export default {
771788 </script >
772789
773790<style lang="scss" scoped>
774- .imgs- upload-container {
791+ .upload-imgs -container {
775792 display : flex ;
776793 flex-wrap : wrap ;
777794
@@ -886,7 +903,6 @@ export default {
886903
887904 .del {
888905 opacity : 1 ;
889-
890906 }
891907
892908 .control-bottom {
@@ -895,7 +911,7 @@ export default {
895911 }
896912 }
897913
898- .item__input {
914+ .upload-imgs__input {
899915 display : none ;
900916 }
901917}
0 commit comments