Skip to content

Commit cf09277

Browse files
committed
feat(upload-imgs): 梳理创建项时状态变化
1 parent c8214d3 commit cf09277

1 file changed

Lines changed: 31 additions & 20 deletions

File tree

src/components/base/upload-imgs/index.vue

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -111,35 +111,46 @@ function createId() {
111111
* 创建项, 如不传入参数则创建空项
112112
* @returns {Item}
113113
*/
114-
function createItem(data = null) {
115-
const item = {
114+
function createItem(data = null, oldData = null) {
115+
let item = {
116116
loading: false,
117117
id: createId(),
118118
status: 'input', // new/edit/del/init/input
119119
display: '',
120120
src: '',
121-
imgInfo: null,
122121
}
122+
// 未传入data, 说明是单纯新建, 单纯新建的值是输入框状态
123123
if (!data) {
124124
return item
125125
}
126-
if (data.id) {
127-
return data
128-
}
126+
// 没有id, 说明是用户点击选择的本地图片
127+
if (!data.id) {
128+
if (oldData) {
129+
// 如果旧数据状态是输入框, 则为新图片
130+
if (oldData.status === 'input') {
131+
item.status = 'new'
132+
}
133+
// 如果旧数据状态是初始化 init, 则为修改
134+
if (oldData.status === 'init' || oldData.status === 'edit') {
135+
item.status = 'edit'
136+
}
137+
} else {
138+
item.status = 'new'
139+
}
129140
130-
// 新传入图片信息
131-
if (data.localSrc) {
132-
item.id = data.id || item.id
133-
item.src = data.src || item.src
141+
item.id = oldData.id || item.id
142+
item.src = ''
134143
item.display = data.localSrc || item.display
135-
item.status = 'new'
136-
} else {
137-
item.id = data.id || item.id
138-
item.src = data.src || item.src
139-
item.display = data.display || item.display
140-
item.status = 'init'
144+
item = Object.assign({}, data, item)
145+
return item
141146
}
142147
148+
// 存在id, 说明是传入已存在数据
149+
item.id = data.id
150+
item.src = data.src || item.src
151+
item.display = data.display || item.display
152+
item.status = data.status || 'init'
153+
item = Object.assign({}, data, item)
143154
return item
144155
}
145156
@@ -165,7 +176,7 @@ function getRangeTip(prx, min, max, unit = '') {
165176
}
166177
167178
export default {
168-
name: 'UploadPicture',
179+
name: 'UploadImgs',
169180
data() {
170181
return {
171182
itemList: [],
@@ -555,7 +566,7 @@ export default {
555566
// 找到特定图像位置
556567
const index = this.itemList.findIndex(item => (item.id === currentId))
557568
// 替换图片
558-
this.itemList[index] = createItem(imgInfoList[0])
569+
this.itemList[index] = createItem(imgInfoList[0], this.itemList[index])
559570
// 追加图片
560571
// 最大图片数量限制
561572
let l = imgInfoList.length
@@ -615,8 +626,8 @@ export default {
615626
for (let i = 0; i < val.length; i += 1) {
616627
result.push(createItem(val[i]))
617628
}
618-
// 初始项小于最大数量限制, 并且处于可编辑状态
619-
if ((max === 0 || val.length < max) && !disabled) {
629+
// 初始项小于最大数量限制, 并且处于可编辑状态, 并且最后一项不是input
630+
if ((max === 0 || val.length < max) && !disabled && val[val.length - 1].status !== 'input') {
620631
// 后面添加空项
621632
result.push(createItem())
622633
}

0 commit comments

Comments
 (0)