From d00d85e54ff65750f0c9a097ec4b644866ad1ffa Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期五, 27 六月 2025 17:29:43 +0800 Subject: [PATCH] 静安夜施管理功能(待完成) --- src/components/FYImageSelectDialog.vue | 129 +++++++++++++++++------------------------- 1 files changed, 52 insertions(+), 77 deletions(-) diff --git a/src/components/FYImageSelectDialog.vue b/src/components/FYImageSelectDialog.vue index 04bc1b3..7a10793 100644 --- a/src/components/FYImageSelectDialog.vue +++ b/src/components/FYImageSelectDialog.vue @@ -8,21 +8,34 @@ destroy-on-close :close-on-press-escape="false" > - <!-- <div class="main"> --> - <el-row justify="end" v-if="!readonly"> - <el-text size="small" type="info" class="m-r-8" - >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text - > - <el-button - size="small" - type="primary" - @click="handleSubmit" - :disabled="selectedImgUrlList.length == 0" - >纭畾</el-button - > - <el-button size="small" type="primary" @click="handleCancel" - >鍙栨秷</el-button - > + <el-row justify="end"> + <el-space v-if="onContextMenu != undefined"> + <el-switch + v-model="useContextMenu" + inline-prompt + active-text="寮�" + inactive-text="鍏�" + /> + <el-text size="small" type="info"> + {{ `锛�${contextMenuStr}锛塦 }} + </el-text> + </el-space> + + <div v-if="!readonly"> + <el-text size="small" type="info" class="m-r-8" + >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text + > + <el-button + size="small" + type="primary" + @click="handleSubmit" + :disabled="selectedImgUrlList.length == 0" + >纭畾</el-button + > + <el-button size="small" type="primary" @click="handleCancel" + >鍙栨秷</el-button + > + </div> </el-row> <div class="center"> @@ -49,8 +62,12 @@ :class="[img.isSelect ? 'selected' : 'noActive', 'image']" fit="cover" :src="img.url" - :preview-src-list="readonly ? typeImgMap.get(activeId).map((v) => v.url) : []" + :preview-src-list=" + readonly ? typeImgMap.get(activeId).map((v) => v.url) : [] + " + crossOrigin="Anonymous" :initial-index="i" + @contextmenu="(e) => showContextMenu(e, i)" @click="onSelect(img, i)" @load="onOneImgLoadSuccess(img)" @error="onOneImgLoadError(img)" @@ -61,7 +78,6 @@ </el-row> </el-scrollbar> </div> - <!-- </div> --> </el-dialog> </template> <script setup> @@ -86,22 +102,28 @@ type: Boolean, default: false }, - defaultFile: { - type: Array, - default: () => [] - }, // 鍥剧墖鍙�夋暟閲忥紝褰撲紶鍏ユ暟瀛楁椂锛屼唬琛ㄥ浘鐗囨暟閲� maxSelect: { type: Number, default: 3 + }, + // 鍥剧墖鍙抽敭鐐瑰嚮浜嬩欢 + onContextMenu: { + type: Function + }, + contextMenuStr: { + type: String, + default: '鍙抽敭鐐瑰嚮鍥剧墖绉诲姩' } }); const emit = defineEmits(['submit', 'cancel', 'update:dialogVisible']); const activeId = ref(''); -// const typeImgMap = ref(new Map()); + const selectedImgUrlList = ref([]); + +const useContextMenu = ref(false); let loadedImgCount = ref(0); // 鍔犺浇鐘舵�� @@ -158,20 +180,6 @@ } } function handleOpen() { - // if (props.typeImgMap.get(activeId.value) == undefined) { - // return; - // } - // props.typeImgMap.get(activeId.value).forEach((i) => { - // if (i.isSelect == true) { - // return; - // } - // props.defaultFile.forEach((imgItem) => { - // if (imgItem.url == i.url) { - // i.isSelect = true; - // selectedImgUrlList.value.push(i); - // } - // }); - // }); emit('update:dialogVisible', true); } function handleClose() { @@ -189,6 +197,14 @@ emit('update:dialogVisible', false); } +// 鍥剧墖鍙抽敭鐐瑰嚮浜嬩欢 +function showContextMenu(event, index) { + if (props.onContextMenu && useContextMenu.value) { + event.preventDefault(); + props.onContextMenu(event, activeId.value, index); + } +} + watch( () => props.typeList, (nV, oV) => { @@ -198,47 +214,6 @@ }, { immediate: true } ); -// watch( -// () => props.defaultFile, -// (nV, oV) => { -// if (props.typeImgMap.get(activeId.value) == undefined) { -// return; -// } -// props.typeImgMap.get(activeId.value).forEach((i) => { -// if (i.isSelect == true) { -// return; -// } -// nV.forEach((imgItem) => { -// if (imgItem.url == i.url) { -// i.isSelect = true; -// selectedImgUrlList.value.push(i); -// } -// }); -// }); -// }, -// { deep: true, immediate: true } -// ); - -// watch( -// () => props.typeImgMap, -// (newMap, oldMap) => { -// if (newMap.get(activeId.value) == undefined) { -// return; -// } -// newMap.get(activeId.value).forEach((i) => { -// if (i.isSelect == true) { -// return; -// } -// props.defaultFile.forEach((imgItem) => { -// if (imgItem.url == i.url) { -// i.isSelect = true; -// selectedImgUrlList.value.push(i); -// } -// }); -// }); -// }, -// { immediate: true } -// ); </script> <style scoped> .center { -- Gitblit v1.9.3