From f2138817fdd6e9141c5911514280b8d0b6ca08f1 Mon Sep 17 00:00:00 2001 From: hcong <1050828145@qq.com> Date: 星期三, 20 十一月 2024 14:48:49 +0800 Subject: [PATCH] 子组件刷新父组件不刷新页面,表单验证,upload组件预览图片,弹窗放在组件内部,bug修复 --- src/views/fysp/check/components/ArbitraryPhoto.vue | 386 ++++-------------------------------------------------- 1 files changed, 31 insertions(+), 355 deletions(-) diff --git a/src/views/fysp/check/components/ArbitraryPhoto.vue b/src/views/fysp/check/components/ArbitraryPhoto.vue index bd24994..4593d21 100644 --- a/src/views/fysp/check/components/ArbitraryPhoto.vue +++ b/src/views/fysp/check/components/ArbitraryPhoto.vue @@ -1,384 +1,60 @@ <template> - <div class="main"> - <el-row justify="end" class="btns" v-if="!readonly"> - <el-text size="small" type="info" class="m-r-8" - >鏈�澶氶�夋嫨{{ maxSelect }}寮犲浘鐗�</el-text - > - <el-button - size="small" - type="primary" - @click="sendSelectedImg(true)" - :disabled="selectedImgUrlList.length == 0" - >纭畾</el-button - > - <el-button size="small" type="primary" @click="sendSelectedImg(false)" - >鍙栨秷</el-button - > - </el-row> - - <div class="center"> - <!-- <el-descriptions> - <el-descriptions-item label="鎬绘暟"> - <span>{{ this.imgUrlList.length }}</span> - </el-descriptions-item> - </el-descriptions> --> - <el-tabs v-model="activeId" type="card"> - <el-tab-pane - v-for="item in typeList" - :key="item.businesstypeid" - :label=" - item.businesstype + ' (' + typeImgMap.get(activeId).length + ')' - " - :name="item.businesstypeid" - > - </el-tab-pane> - </el-tabs> - <el-empty v-if="isEmpty" description="鏆傛棤璁板綍" /> - <el-scrollbar class="imgs"> - <el-image - v-for="(img, i) in typeImgMap.get(activeId)" - :key="i" - :class="[Boolean(img.isSelect) ? 'selected' : 'noActive', 'image']" - fit="cover" - :src="img.url" - lazy - @click="onSelect(img, i)" - /> - </el-scrollbar> - </div> - </div> + <FYImageSelectDialog + title="鍦烘櫙鍥剧墖" + :typeList="typesList" + :typeImgMap="typesMap" + ></FYImageSelectDialog> </template> <script> -import problemApi from '@/api/fysp/problemApi.js'; import mediafileApi from '@/api/fysp/mediafileApi.js'; import { $fysp } from '@/api/index.js'; export default { props: { - filters: Map, - // 鏄惁浠ュ彧璇荤殑褰㈠紡鏌ョ湅褰撳墠椤甸潰 - readonly: { - type: Boolean, - default: false - }, subtask: { type: Object, efault: {} - }, - inspectionGuid: { - type: String, - default: '' - }, - defaultFile: { - type: Array, - default: () => [] - }, - // 鍥剧墖鍙�夋暟閲忥紝褰撲紶鍏ユ暟瀛楁椂锛屼唬琛ㄥ浘鐗囨暟閲� - maxSelect: { - type: Number, - default: 3 } }, data() { return { // 鏃犳暟鎹� - isEmpty: false, - isClose: false, - isAll: false, - activeId: '', - typeList: [ - // { businesstypeid: 5, businesstype: '甯歌璁板綍' }, - // { businesstypeid: 3, businesstype: '鐩戞祴璁惧' }, - // { businesstypeid: 7, businesstype: '閾墝' }, - // { businesstypeid: 51, businesstype: '鎵╁睍绫讳竴' }, - // { businesstypeid: 52, businesstype: '鎵╁睍绫讳簩' }, - // { businesstypeid: 53, businesstype: '鎵╁睍绫讳笁' }, - // { businesstypeid: 54, businesstype: '鎵╁睍绫诲洓' }, - // { businesstypeid: 55, businesstype: '鎵╁睍绫讳簲' }, - // { businesstypeid: 56, businesstype: '鎵╁睍绫诲叚' }, - // { businesstypeid: 57, businesstype: '鎵╁睍绫讳竷' }, - // { businesstypeid: 58, businesstype: '鎵╁睍绫诲叓' }, - // { businesstypeid: 59, businesstype: '鎵╁睍绫讳節' }, - // { businesstypeid: 60, businesstype: '鎵╁睍绫诲崄' } - ], - typeImgMap: new Map(), - imgUrlList: [], - selectedImgUrlList: [] + typesList: [], + typesMap: new Map() }; }, - watch: { - subtask: { - handler(nV, oV) { - if (nV != oV && nV) { - this.getAllImgList(); - } - }, - immediate: true - }, - defaultFile: { - handler(newFileList, oldFileList) { - if (this.isClose) { - return; - } - }, - deep: true - }, - typeImgMap: { - handler(newMap, oldMap) { - if (this.isClose || newMap.get(this.activeId) == undefined) { - return; - } - newMap.get(this.activeId).forEach((i) => { - if (i.isSelect == true) { - return; - } - this.defaultFile.forEach((imgItem) => { - if (imgItem.url == i.url) { - i.isSelect = true; - } - }); - }); - }, - - deep: true - } - }, mounted() { - // if (this.subtask) { - // this.getAllImgList(); - // } + this.getGroupImgs(); }, methods: { - // 鍒濆鍖栧垰寮�濮嬮�変腑鐨勬爣绛� - initSelectedTab() { - if (this.typeList.length > 0) { - this.activeId = this.typeList[0].businesstypeid; - } - }, - getAllImgList() { - // for(var k of this.typeImgMap.keys()) { - // this.typeImgMap.set(k, []) - // } - this.typeImgMap.clear(); - this.typeList = []; + // 鍥剧墖鍒嗙被 + getGroupImgs() { mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => { - this.isEmpty = false; - let data = res.data; - if (data.length == 0) { - this.isEmpty = true; - } + let typeList = []; + let typeMap = new Map(); + const data = res.data; for (const e of data) { - let list; - let businesstypeid = e.businesstypeid; - let businesstype = e.businesstype; - let hasThisType = false; - this.typeImgMap.forEach((v, k, m) => { - if (k == businesstypeid) { - hasThisType = true; - var isAlreadyHas = false; - if (v != undefined && v != null) { - for (let index = 0; index < v.length; index++) { - const element = v[index]; - if (element.guid == e.guid) { - isAlreadyHas = true; - break; - } - } - } - if (!isAlreadyHas) { - v.push(e); - } - } - }); - if (!hasThisType) { - this.typeImgMap.set(businesstypeid, Array.of(e)); - this.typeList.push(e); - } - this.imgUrlList.push(e); - // TODO imgUrl鍏ㄥ眬閰嶇疆 - e.url = $fysp.imgUrl + e.extension1 + e.guid + '.jpg'; - e.isSelect = false; - } - this.initSelectedTab(); - }); - }, - getInitImgList() { - mediafileApi.getRoutineByStGuid(this.subtask.stGuid).then((res) => { - let data = res.data; - for (const e of data) { - let list; - let businesstypeid = e.businesstypeid; - let businesstype = e.businesstype; - let hasThisType = false; - this.typeImgMap.forEach((v, k, m) => { - if (k == businesstypeid) { - hasThisType = true; - if (v.length < 3) { - v.push(e); - } - } - }); - if (!hasThisType) { - this.typeImgMap.set(businesstypeid, Array.of(e)); - this.typeList.push(e); - } - this.imgUrlList.push(e); - // TODO imgUrl鍏ㄥ眬閰嶇疆 - e.url = $fysp.imgUrl + e.extension1 + e.guid + '.jpg'; - // e.url = "http://47.100.191.150:9005/images/" + e.extension1 + e.guid + '.jpg' - e.isSelect = false; - } - if (this.typeList.length > 0) { - this.activeId = this.typeList[0].businesstypeid; - } - }); - }, - onSelect(img, i) { - if (this.readonly) { - return; - } - const index = this.selectedImgUrlList.indexOf(img); - if (index == -1) { - if (this.maxSelect == 1) { - img.isSelect = true; - this.selectedImgUrlList.push(img); - if (this.selectedImgUrlList.length > 1) { - this.selectedImgUrlList.splice(0, 1).forEach((e) => { - e.isSelect = false; + let img = { + url: $fysp.imgUrl + e.extension1 + e.guid + '.jpg' + }; + const businesstype = e.businesstype; + const businesstypeid = e.businesstypeid; + if ( + typeList.find((item) => item.typeName == businesstype) != undefined + ) { + typeMap.get(businesstypeid).push(img); + } else { + typeList.push({ + typeId: businesstypeid, + typeName: businesstype }); - } - } else if (this.maxSelect > 1) { - if (this.selectedImgUrlList.length < this.maxSelect) { - img.isSelect = true; - this.selectedImgUrlList.push(img); + typeMap.set(businesstypeid, [img]); } } - } else { - this.selectedImgUrlList.splice(index, 1); - img.isSelect = false; - } - - // img.isSelect = !img.isSelect; - }, - sendSelectedImg(isOk) { - let result = []; - if (!isOk) { - this.$emit('selectByAnyPhonoEvent', result); - } - for (const item of this.imgUrlList) { - if (item.isSelect == true) { - result.push(item); - } - } - this.isClose = true; - this.$emit('selectByAnyPhonoEvent', result); + this.typesList = typeList; + this.typesMap = typeMap; + }); } } }; </script> -<style scoped> -.center { - display: flex; - flex-direction: column; - align-items: center; -} -.text { - padding: 20px; -} - -.main { - margin: 0 auto; /* 浣跨埗鍏冪礌灞呬腑 */ - height: 100%; - width: 100%; -} - -.btns { - /* height: 10%; */ -} -/* -.img_types { - margin: 0 auto; - height: 440px; - width: 900px; - flex-grow: 1; - overflow-y: hidden ; - padding: 3%; - flex-wrap: wrap; - overflow: hidden; -} */ - -.imgs { - height: 50vh; - width: 90%; - min-height: 100px !important; - /* border-style:solid; - border-radius: 1px; */ - /* height: 100%; */ - flex-grow: 1 !important; - overflow-y: auto !important; - /* 鍐呭鐨勫唴杈硅窛 */ - display: flex !important; - flex-wrap: wrap !important; - /* overflow: hidden; */ -} - -.image { - margin: 5px; - height: 210px; - width: 200px; - border-radius: 4px; -} - -.active { - padding: 5px; - width: 20%; - height: 200px; - border: 0.5rem outset rgb(52, 155, 4); -} - -.selected { - margin: 3px; - color: #4abe84; - box-shadow: 0 2px 7px 0 rgba(85, 110, 97, 0.35); - border: 2px solid rgba(74, 190, 132, 1); -} - -.selected:before { - content: ''; - position: absolute; - right: 0; - bottom: 0; - border: 17px solid #4abe84; - border-top-color: transparent; - border-left-color: transparent; -} - -.selected:after { - content: ''; - width: 5px; - height: 12px; - position: absolute; - right: 6px; - bottom: 6px; - border: 2px solid #fff; - border-top-color: transparent; - border-left-color: transparent; - transform: rotate(45deg); -} - -.noActive { - /* padding: 5px; */ -} - -.blurry { - filter: blur(3px); -} -.filters { - display: flex; - padding: 5px; -} - -::v-deep .el-dialog__body { - height: 60vh; - padding: 10px calc(var(--el-dialog-padding-primary) + 10px) !important; -} -</style> +<style scoped></style> -- Gitblit v1.9.3