From 8775f9f881574e8cd22e9b44a14c30711097d1fe Mon Sep 17 00:00:00 2001 From: tanghaolin <1723298894@qq.com> Date: 星期五, 14 二月 2025 14:00:56 +0800 Subject: [PATCH] 修改查看证书 --- src/views/IndustrialSoftware.vue | 388 +++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 273 insertions(+), 115 deletions(-) diff --git a/src/views/IndustrialSoftware.vue b/src/views/IndustrialSoftware.vue index 79df8d8..ecb0b68 100644 --- a/src/views/IndustrialSoftware.vue +++ b/src/views/IndustrialSoftware.vue @@ -1,7 +1,10 @@ <template> - <div class="container mx-auto px-4 py-8 bg-white industrial-soft-style" v-loading="m_PageLoading" - style="margin-top: 20px;padding-top:15px ;"> - <div class=" w-100 h-100" style="background-color: #fff;"> + <div + class="container mx-auto px-4 py-8 bg-white industrial-soft-style" + v-loading="m_PageLoading" + style="margin-top: 20px; padding-top: 15px" + > + <div class="w-100 h-100" style="background-color: #fff"> <!-- 椤堕儴鍒嗙被鑿滃崟 --> <div class="rounded-lg shadow" style="background-color: #f6f7f9; margin-bottom: 10px"> <!-- 绫诲瀷 --> @@ -9,10 +12,15 @@ <div class="flex items-center"> <span class="text-gray-500">绫诲瀷锛�</span> <div class="flex flex-1"> - <span v-for="item in type" class="ant-tag !px-4" - :class="typeSelect === item.tag ? 'ant-tag-checked' : ''" :key="item.tag" + <span + v-for="item in type" + class="ant-tag !px-4" + :class="typeSelect === item.tag ? 'ant-tag-checked' : ''" + :key="item.tag" @click="changeSelectType(item.tag)" - :type="typeSelect === item.tag ? 'primary' : 'default'" size="small"> + :type="typeSelect === item.tag ? 'primary' : 'default'" + size="small" + > {{ item.name }} </span> </div> @@ -24,11 +32,14 @@ <div class="flex items-center"> <span class="text-gray-500">鍘傚晢锛�</span> <div class="flex flex-1"> - <span v-for="item in factory" :key="item.tag" class="ant-tag !px-4" - :class="factorySelect === item.tag ? 'ant-tag-checked' : ''" - :type="factorySelect === item.tag ? 'primary' : 'default'" - @click="factorySelect = item.tag" size="small"> - {{ item.name }} + <span + v-for="item in factory" + :key="item.CompanyId" + class="ant-tag !px-4" + :class="factorySelect === item.CompanyId ? 'ant-tag-checked' : ''" + @click="clickFactory(item)" + > + {{ item.CompanyAbbName }} </span> </div> </div> @@ -37,35 +48,43 @@ <!-- 鑳芥晥绛夌骇 --> <div class="flex eec-filter-sortbar" style="background-color: #ecedee"> <ul> - <li v-for="sort in EecClass" :key="sort.tag" size="small" @click="handleEecLevel(sort.tag)" + <li + v-for="sort in EecClass" + :key="sort.tag" + size="small" + @click="handleEecLevel(sort.tag)" :type="EecSelect === sort.tag ? 'primary' : 'default'" - :class="EecSelect == sort.tag ? 'eec-filter-currentOrder' : ''" class="!px-6"> + :class="EecSelect == sort.tag ? 'eec-filter-currentOrder' : ''" + class="!px-6" + > {{ sort.name }} </li> </ul> </div> </div> <!-- 杞欢鍒楄〃 --> - <div class="grid grid-cols-4 gap-4" style="padding: 0 10px;min-height: 417px;"> + <div class="grid grid-cols-4 gap-4" style="padding: 0 10px; min-height: 417px"> <div v-for="(app, index) in dispEecProduct" :key="index" class="goods-warp-item software-card"> <el-tooltip class="box-item" effect="dark" :offset="20" placement="top"> - <div class="flex flex-col h-full" style="cursor: pointer;"> - <div style="position: relative;display: flex;"> - <img :src="app.PhysicalPicturePath" :alt="app.Model" - class=" object-contain mx-auto goods-img" /> + <div class="flex flex-col h-full" style="cursor: pointer"> + <div style="position: relative; display: flex"> + <img :src="app.PhysicalPicturePath" :alt="app.Model" class="object-contain mx-auto goods-img" /> <div class="goods-company">{{ app.CompanyName }}</div> </div> <div class="goods-name" :title="app.Model">{{ app.ModelType }}</div> - <div class="metertitle mb-2"><span>鍨嬪彿锛歿{ app.Model }}</span></div> + <div class="metertitle mb-2"> + <span>鍨嬪彿锛歿{ app.Model }}</span> + </div> <!-- <p class="text-gray-500 text-sm mb-4 flex-1">{{ app.description }}</p> --> - <div class="flex gap-2" style="justify-content: space-between;align-items: center;"> + <div class="flex gap-2" style="justify-content: space-between; align-items: center"> <!-- <el-tag size="small" type="success">{{ app.CompanyName }}</el-tag> --> - <div class="goods-price"><span class="goods-price-selling"> 楼{{ app.Price }}</span> </div> + <div class="goods-price"> + <span class="goods-price-selling"> 楼{{ app.Price }}</span> + </div> <div class="flex items-center eec-level-div"> - <img :src="EecLevelEnum[app.EnergyEfficiencyClass].icon"> + <img :src="EecLevelEnum[app.EnergyEfficiencyClass].icon" /> <span class="eec-numb">{{ app.EnergyEfficiencyClass }}</span> - <span class="eec-level-name">{{ EecLevelEnum[app.EnergyEfficiencyClass].name - }}</span> + <span class="eec-level-name">{{ EecLevelEnum[app.EnergyEfficiencyClass].name }}</span> </div> </div> @@ -73,11 +92,88 @@ <el-rate v-model="app.rating" disabled /> <span class="text-gray-400 text-sm">{{ app.date }}</span> </div> --> - - <div class="link-btn" @click="handleBuyClick(app.id)">绔嬪嵆璐叆</div> + <div class="flex justify-between gap-4"> + <div class="link-btn" @click="handleBuyClick(app.id)"> + <svg + t="1739504206748" + class="svg-size-style" + viewBox="0 0 1024 1024" + version="1.1" + xmlns="http://www.w3.org/2000/svg" + p-id="35851" + width="128" + height="128" + > + <path + d="M96.6656 1013.76a88.064 88.064 0 0 1-88.064-88.064V607.1296a38.4 38.4 0 0 1 47.7184-37.2736L502.6816 744.448a40.96 40.96 0 0 0 18.6368 0L967.68 569.856a38.2976 38.2976 0 0 1 46.08 27.8528 36.5568 36.5568 0 0 1 1.2288 9.4208v320.512A86.1184 86.1184 0 0 1 929.28 1013.76z" + fill="#C2E3FF" + opacity=".64" + p-id="35852" + class="icon-path" + ></path> + <path + d="M815.104 14.2336H197.632A88.3712 88.3712 0 0 0 109.3632 102.4v347.3408a72.9088 72.9088 0 0 0 46.6944 68.096L480.1536 643.072a73.728 73.728 0 0 0 52.5312 0l324.096-125.2352a72.9088 72.9088 0 0 0 46.6944-68.096V102.4a88.3712 88.3712 0 0 0-88.3712-88.1664z m-469.4016 387.072a24.3712 24.3712 0 0 1-24.3712 24.3712h-38.8096a25.088 25.088 0 0 1-25.088-25.088v-38.7072A24.4736 24.4736 0 0 1 281.9072 337.92h39.424a24.4736 24.4736 0 0 1 24.3712 24.4736z m0-175.104a24.4736 24.4736 0 0 1-24.3712 24.4736h-39.424a24.4736 24.4736 0 0 1-24.4736-24.4736v-39.424a24.4736 24.4736 0 0 1 24.4736-24.3712h39.424a24.4736 24.4736 0 0 1 24.3712 24.3712z m421.4784 175.104a24.2688 24.2688 0 0 1-24.3712 24.3712H434.8928a20.48 20.48 0 0 1-20.48-20.48v-43.3152A24.4736 24.4736 0 0 1 438.6816 337.92h304.128a24.3712 24.3712 0 0 1 24.3712 24.4736z m0-175.104a24.3712 24.3712 0 0 1-24.3712 24.4736h-304.128a24.4736 24.4736 0 0 1-24.3712-24.4736v-39.424a24.4736 24.4736 0 0 1 24.3712-24.3712h304.128a24.3712 24.3712 0 0 1 24.3712 24.3712z" + fill="#43ADFF" + p-id="35853" + class="icon-path" + ></path> + </svg> + 璇︾粏 + </div> + <div class="link-btn" @click="handleCertificateClick(app)"> + <svg + t="1739503834540" + class="svg-size-style" + viewBox="0 0 1024 1024" + version="1.1" + xmlns="http://www.w3.org/2000/svg" + p-id="34740" + width="128" + height="128" + > + <path + d="M0 115.2m76.8 0l870.4 0q76.8 0 76.8 76.8l0 640q0 76.8-76.8 76.8l-870.4 0q-76.8 0-76.8-76.8l0-640q0-76.8 76.8-76.8Z" + fill="#1989FA" + opacity=".3" + p-id="34741" + class="icon-path" + ></path> + <path + d="M563.2 396.8m25.6 0l281.6 0q25.6 0 25.6 25.6l0 0q0 25.6-25.6 25.6l-281.6 0q-25.6 0-25.6-25.6l0 0q0-25.6 25.6-25.6Z" + fill="#1989FA" + p-id="34742" + class="icon-path" + ></path> + <path + d="M563.2 512m25.6 0l281.6 0q25.6 0 25.6 25.6l0 0q0 25.6-25.6 25.6l-281.6 0q-25.6 0-25.6-25.6l0 0q0-25.6 25.6-25.6Z" + fill="#1989FA" + p-id="34743" + class="icon-path" + ></path> + <path + d="M563.2 640m25.6 0l140.8 0q25.6 0 25.6 25.6l0 0q0 25.6-25.6 25.6l-140.8 0q-25.6 0-25.6-25.6l0 0q0-25.6 25.6-25.6Z" + fill="#1989FA" + p-id="34744" + class="icon-path" + ></path> + <path + d="M294.4 422.4m-140.8 0a140.8 140.8 0 1 0 281.6 0 140.8 140.8 0 1 0-281.6 0Z" + fill="#1989FA" + p-id="34745" + class="icon-path" + ></path> + <path + d="M261.1584 611.5328l-73.0624 126.5536-88.6912-51.2 69.0432-119.5776a191.3088 191.3088 0 0 0 92.7104 44.224z m162.816-47.4496l66.9696 116.0064-88.6784 51.2-69.6832-120.6912a191.4496 191.4496 0 0 0 91.392-46.5152z" + fill="#1989FA" + p-id="34746" + class="icon-path" + ></path></svg + >璇佷功 + </div> + </div> </div> <template #content> - <div class="goods-tip-content" style="white-space: pre-wrap;">{{ app.Tip }}</div> + <div class="goods-tip-content" style="white-space: pre-wrap">{{ app.Tip }}</div> </template> </el-tooltip> </div> @@ -85,12 +181,31 @@ <!-- 鍒嗛〉 --> <div class="flex justify-center mt-8"> - <el-pagination v-model:current-page="m_paginationConfig.currentPage" - v-model:page-size="m_paginationConfig.pageSize" :page-sizes="[10, 50, 100, 200]" :background="true" - layout="total, sizes, prev, pager, next, jumper" :total="filterProductData.length" - @size-change="handleSizeChange" @current-change="handleCurrentChange" /> + <el-pagination + v-model:current-page="m_paginationConfig.currentPage" + :page-size="12" + :background="true" + layout="total, prev, pager, next, jumper" + :total="filterProductData.length" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> </div> </div> + + <el-dialog v-model="dialogVisibleCertifcate" title="" :show-close="false" align-center fullscreen> + <div class="h-full flex justify-center"> + <div style="position: relative"> + <img :src="m_curCertificatePath" /> + <span @click="dialogVisibleCertifcate = false" class="close-icon-style"> 脳 </span> + </div> + </div> + <template #footer> + <div class="dialog-footer"> + <!-- <el-button type="primary" @click="dialogVisible = false"> 纭畾 </el-button> --> + </div> + </template> + </el-dialog> </div> </template> @@ -104,27 +219,31 @@ // 鍒嗙被閫夐」 const type = [ - { name: "娉�", tag: 1 }, + { name: '娉�', tag: 1 }, { name: '瀹圭Н寮忕┖鍘嬫満', tag: 2 }, - { name: "閫氶鏈�", tag: 3 }, - { name: "鍐锋按鏈虹粍", tag: 4 }, - { name: "鐢靛姏鍙樺帇鍣�", tag: 5 }, - { name: "宸ヤ笟閿呯倝", tag: 6 }, - { name: "鐢垫満", tag: 7 }, + { name: '閫氶鏈�', tag: 3 }, + { name: '鍐锋按鏈虹粍', tag: 4 }, + { name: '鐢靛姏鍙樺帇鍣�', tag: 5 }, + { name: '宸ヤ笟閿呯倝', tag: 6 }, + { name: '鐢垫満', tag: 7 }, ]; const factory = ref([]); const EecClass = [ - { name: "鍏ㄩ儴", tag: 0 }, - { name: "涓�绾ц兘鏁�", tag: 1 }, - { name: "浜岀骇鑳芥晥", tag: 2 } + { name: '鍏ㄩ儴', tag: 0 }, + { name: '涓�绾ц兘鏁�', tag: 1 }, + { name: '浜岀骇鑳芥晥', tag: 2 }, ]; -const m_PageLoading = ref(false) +const m_PageLoading = ref(false); +const dialogVisibleCertifcate = ref(false); // 閫変腑鐘舵�� const typeSelect = ref(1); -const factorySelect = ref('鍏ㄩ儴'); +const factorySelect = ref('-99'); +const factoryIncludeType = ref(null); const EecSelect = ref(0); + +const m_curCertificatePath = ref(''); const EecLevelEnum = { 1: { name: '涓�绾ц兘鏁�', icon: EecLevel1 }, @@ -132,112 +251,114 @@ }; const m_RequestDataObj = { - 1: { requestPath: "static/EecProductData/Pump.json" }, - 2: { requestPath: "static/EecProductData/AirCompressor.json" }, - 3: { requestPath: "static/EecProductData/Fan.json" }, - 4: { requestPath: "static/EecProductData/WaterChiller.json" }, - 5: { requestPath: "static/EecProductData/PowerTransformer.json" }, - 6: { requestPath: "static/EecProductData/IndustrialBoiler.json" }, - 7: { requestPath: "static/EecProductData/ElectricMachinery.json" }, -} - + 1: { requestPath: 'static/EecProductData/Pump.json' }, + 2: { requestPath: 'static/EecProductData/AirCompressor.json' }, + 3: { requestPath: 'static/EecProductData/Fan.json' }, + 4: { requestPath: 'static/EecProductData/WaterChiller.json' }, + 5: { requestPath: 'static/EecProductData/PowerTransformer.json' }, + 6: { requestPath: 'static/EecProductData/IndustrialBoiler.json' }, + 7: { requestPath: 'static/EecProductData/ElectricMachinery.json' }, +}; // 婧愭暟鎹� const allEecProduct = ref([]); // 杩囨护鍚庣殑鏁版嵁 -const filterProductData = ref([]) +const filterProductData = ref([]); //鏄剧ず鐨勬暟鎹� -const dispEecProduct = ref([]) +const dispEecProduct = ref([]); const m_paginationConfig = ref({ currentPage: 1, pageSize: 12, -}) +}); onMounted(() => { initComanyData(); initData(); // filterProduct(); -}) +}); const initComanyData = () => { axios({ method: 'get', - url: m_RequestDataObj[typeSelect.value].requestPath, - }).then((res) => { - let result = res.data; - factory.value = result.map((item: any) => { - return { - CompanyId: item.CompanyId, - CompanyAllName: item.CompanyAllName, - CompanyAbbName: item.CompanyAbbName, - Type: item.Type, - } + url: 'static/EecProductData/CompanyData.json', + }) + .then((res) => { + let result = res.data; + factory.value = result.map((item: any) => { + return { + CompanyId: item.CompanyId, + CompanyAllName: item.CompanyAllName, + CompanyAbbName: item.CompanyAbbName, + Type: item.Type, + }; + }); + factory.value.unshift({ CompanyId: '-99', CompanyAllName: '鍏ㄩ儴', CompanyAbbName: '鍏ㄩ儴', Type: null }); }) - factory.value.unshift({ CompanyId: "-99", CompanyAllName: '鍏ㄩ儴', CompanyAbbName: '鍏ㄩ儴', Type: null }) - }).catch((err) => { }) -} + .catch((err) => {}); +}; const initData = () => { m_PageLoading.value = true; axios({ method: 'get', url: m_RequestDataObj[typeSelect.value].requestPath, - }).then((res) => { - m_PageLoading.value = false; - let result = res.data; - let arr = []; - result.forEach((item: any) => { - let node = { - Id: item.Id, - Type: item.Type, - ModelType: item.ModelType, - Model: item.Model, - CompanyName: item.CompanyName, - RecordNumber: item.RecordNumber, - EnergyEfficiencyClass: item.EnergyEfficiencyClass, - RecordTime: item.RecordTime, - Price: item.Price, - PhysicalPicturePath: "/static/EecProductData/" + item.PhysicalPicturePath, - CertificatePath: `/static/EecProductData/${item.CertificatePath}`, - Tip: `澶囨鏃堕棿锛�${item.RecordTime} \n 澶囨鍙凤細${item.RecordNumber}`, - } - arr.push(node) - }) - allEecProduct.value = arr; - filterProduct(); - }).catch((err) => { - m_PageLoading.value = false; }) -} + .then((res) => { + m_PageLoading.value = false; + let result = res.data; + let arr = []; + result.forEach((item: any) => { + let node = { + Id: item.Id, + Type: item.Type, + ModelType: item.ModelType, + Model: item.Model, + CompanyName: item.CompanyName, + RecordNumber: item.RecordNumber, + EnergyEfficiencyClass: item.EnergyEfficiencyClass, + RecordTime: item.RecordTime, + Price: item.Price, + PhysicalPicturePath: 'static/EecProductData/' + item.PhysicalPicturePath, + CertificatePath: `static/EecProductData/${item.CertificatePath}`, + Tip: `澶囨鏃堕棿锛�${item.RecordTime} \n 澶囨鍙凤細${item.RecordNumber}`, + }; + arr.push(node); + }); + allEecProduct.value = arr; + filterProduct(); + }) + .catch((err) => { + m_PageLoading.value = false; + }); +}; const filterProduct = () => { filterProductData.value = allEecProduct.value.filter((item) => { - return item.Type === typeSelect.value - }) + return item.Type === typeSelect.value; + }); if (EecSelect.value !== 0) { filterProductData.value = filterProductData.value.filter((item) => { - return item.EnergyEfficiencyClass === EecSelect.value - }) + return item.EnergyEfficiencyClass === EecSelect.value; + }); } - if (factorySelect.value !== '鍏ㄩ儴') { + if (factorySelect.value !== '-99') { filterProductData.value = filterProductData.value.filter((item) => { - return item.CompanyName === factorySelect.value - }) + return factoryIncludeType.value.includes(item.Type); + }); } dispEecProduct.value = getSelectPageData(filterProductData.value); - -} +}; const handleCurrentChange = (val: number) => { m_paginationConfig.value.currentPage = val; let allTableData = filterProductData.value; let pagingData = getSelectPageData(allTableData); dispEecProduct.value = pagingData; -} +}; const handleSizeChange = (val: number) => { m_paginationConfig.value.currentPage = val; let allTableData = filterProductData.value; let pagingData = getSelectPageData(allTableData); dispEecProduct.value = pagingData; -} +}; //鑾峰彇鍒嗛〉鏁版嵁 const getSelectPageData = (list: any) => { let filterList = list.slice( @@ -247,7 +368,11 @@ //褰撳墠椤� return filterList; }; - +const clickFactory = (item: any) => { + factorySelect.value = item.CompanyId; + factoryIncludeType.value = item.Type; + filterProduct(); +}; //鐩戝惉绫诲瀷閫夋嫨绛涢�� const changeSelectType = (tag: number) => { typeSelect.value = tag; @@ -258,19 +383,22 @@ // 鎵惧埌褰撳墠鐐瑰嚮鐨勪骇鍝� const currentProduct = dispEecProduct.value.find((item) => item.id === productId); if (currentProduct) { - console.log("馃殌 ~ currentProduct:", currentProduct) // 淇濆瓨浜у搧淇℃伅鍒發ocalStorage localStorage.setItem('currentProduct', JSON.stringify(currentProduct)); } - router.push(`/product/${productId}`); + router.push(`/product/${currentProduct.Id}`); +}; +const handleCertificateClick = (row: any) => { + dialogVisibleCertifcate.value = true; + m_curCertificatePath.value = row.CertificatePath; }; const handleEecLevel = (tag: number) => { EecSelect.value = tag; filterProduct(); -} +}; </script> -<style scoped> +<style lang="scss" scoped> .w-100 { width: 100%; } @@ -333,8 +461,8 @@ } .goods-img { - max-width: 180px; - max-height: 180px; + width: 180px; + height: 180px; vertical-align: top; border: 0; padding-bottom: 20px; @@ -367,24 +495,31 @@ } .link-btn { - display: inline-block; + display: inline-flex; width: 100%; height: 32px; font-size: 14px; line-height: 30px; background: #fff; - color: #e65650; + color: #1592fc; border: 1px solid #e2e2e2; border-radius: 20px; text-align: center; margin-top: 3px; box-sizing: border-box; + padding: 0 25px; + align-items: center; + gap: 15px; } .link-btn:hover { - background: #e65650; + background: #1592fc; color: #fff; cursor: pointer; + + .icon-path { + fill: #fff; + } } .goods-price { @@ -507,7 +642,30 @@ color: #fff; font-size: 12px; } +.svg-size-style { + width: 16px; + height: 16px; +} +.close-icon-style { + position: absolute; + right: -15px; + top: -15px; + font-size: 30px; + background-color: #196dd938; + width: 30px; + height: 30px; + border-radius: 50%; + display: inline-flex; + justify-content: center; + align-items: center; + cursor: pointer; + color: #196dd9; + &:hover { + color: #fff; + background-color: #196dd9; + } +} :deep(.el-button--default) { --el-button-bg-color: transparent; --el-button-border-color: transparent; -- Gitblit v1.9.3