Compare commits

..

No commits in common. "main" and "dev" have entirely different histories.
main ... dev

33 changed files with 11533 additions and 87160 deletions

55
.gitignore vendored
View File

@ -1,54 +1 @@
# Compiled class file prd/
*.class
target
classes
prd
# Log file
*.log
log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.war
*.ear
*.zip
*.tar.gz
*.rar
*.iml
.idea
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
/.settings/
.classpath
.factorypath
.project
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
/test/unit/coverage/
/test/e2e/reports/
selenium-debug.log
debug.log
ewm.png
# Editor directories and files
.idea
.settings
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

View File

@ -1196,6 +1196,18 @@
"@types/conventional-commits-parser" "^5.0.0" "@types/conventional-commits-parser" "^5.0.0"
chalk "^5.3.0" chalk "^5.3.0"
"@cssyq/ggzc-web@^1.0.7":
version "1.0.8"
resolved "http://10.23.10.90:4873/@cssyq%2fggzc-web/-/ggzc-web-1.0.8.tgz#aa73093ae02914fda1b283809eac031b09046d2e"
integrity sha512-ERk8chEGrvMqMAn/ObYzenAQUeEWL5RRHBYDH+ueIKPl9g8mIMMcrwJNuK+OvNbvNti18RxkAURy6uaHoqnGSQ==
dependencies:
vue-cli-service "^5.0.10"
"@fortawesome/fontawesome-free@^7.0.1":
version "7.2.0"
resolved "https://registry.npmmirror.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d"
integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg==
"@gar/promisify@^1.0.1": "@gar/promisify@^1.0.1":
version "1.1.3" version "1.1.3"
resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
@ -13237,6 +13249,11 @@ vue-cli-plugin-style-resources-loader@~0.1.5:
resolved "http://10.23.10.90:4873/vue-cli-plugin-style-resources-loader/-/vue-cli-plugin-style-resources-loader-0.1.5.tgz#3e95f4df41f5408e1255664690698c0533648109" resolved "http://10.23.10.90:4873/vue-cli-plugin-style-resources-loader/-/vue-cli-plugin-style-resources-loader-0.1.5.tgz#3e95f4df41f5408e1255664690698c0533648109"
integrity sha512-LluhjWTZmpGl3tiXg51EciF+T70IN/9t6UvfmgluJBqxbrb6OV9i7L5lTd+OKtcTeghDkhcBmYhtTxxU4w/8sQ== integrity sha512-LluhjWTZmpGl3tiXg51EciF+T70IN/9t6UvfmgluJBqxbrb6OV9i7L5lTd+OKtcTeghDkhcBmYhtTxxU4w/8sQ==
vue-cli-service@^5.0.10:
version "5.0.10"
resolved "http://10.23.10.90:4873/vue-cli-service/-/vue-cli-service-5.0.10.tgz#1ae10365dec4539358cb4860cd5876f93faf16e3"
integrity sha512-j4+wxqjaHsgphWsQsDs0ET1TWSu+dW5syxk5MloTp6BsQ9dpN+SB0nq253thS6konMC+YiQLHxbf73ytrTHoRA==
vue-demi@^0.13.11: vue-demi@^0.13.11:
version "0.13.11" version "0.13.11"
resolved "http://10.23.10.90:4873/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99" resolved "http://10.23.10.90:4873/vue-demi/-/vue-demi-0.13.11.tgz#7d90369bdae8974d87b1973564ad390182410d99"

View File

@ -1196,6 +1196,11 @@
"@types/conventional-commits-parser" "^5.0.0" "@types/conventional-commits-parser" "^5.0.0"
chalk "^5.3.0" chalk "^5.3.0"
"@fortawesome/fontawesome-free@^7.0.1":
version "7.2.0"
resolved "https://registry.npmmirror.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d"
integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg==
"@gar/promisify@^1.0.1": "@gar/promisify@^1.0.1":
version "1.1.3" version "1.1.3"
resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"

View File

@ -1,13 +1,18 @@
module.exports = { const eslintConfig = require('@gtff/tdesign-gt-vue/.eslintrc.js');
root: true,
extends: [], const projectRules = {
rules: { 'no-shadow': 0,
// 关闭所有校验 'import/no-cycle': 0,
"prettier/prettier": "off", 'prettier/prettier': [
"all": "off", 'error',
"no-undef": "off", {
"no-unused-vars": "off", endOfLine: 'auto',
"stylelint/no-unknown-property": "off", },
"declaration-property-value-disallowed-list": "off" ],
} };
}; eslintConfig.rules = {
...eslintConfig.rules,
...projectRules,
};
module.exports = eslintConfig;

View File

@ -1,2 +0,0 @@
registry=http://10.23.10.90:4873/
strict-ssl=false

View File

@ -1,4 +0,0 @@
{
"defaultSeverity": "off",
"rules":[]
}

File diff suppressed because it is too large Load Diff

View File

@ -92,6 +92,10 @@
"path": "cz-customizable" "path": "cz-customizable"
} }
}, },
"lint-staged": {
"src/**/*.{js,vue}": "yarn lint",
"src/**/*.{vue,js,scss,less,css,html}": "yarn lint:style"
},
"changelog": { "changelog": {
"emojis": true, "emojis": true,
"authorName": true, "authorName": true,

View File

@ -28,7 +28,7 @@ export default {
return fetchSso({ return fetchSso({
url: `${basurl}/gxzx/gxdt/gxxxList`, url: `${basurl}/gxzx/gxdt/gxxxList`,
method: 'post', method: 'post',
// loading: true, // 组件自己管理 loading 状态 loading: true,
data: JSON.stringify(params), data: JSON.stringify(params),
}); });
}, },
@ -52,7 +52,7 @@ export default {
}); });
}, },
// 代码表查询tableName: fwlx/xqlx/sshy/ysfw/xzqh/bq/dw // 代码表查询tableName: fwlx/xqlx/sshy/ysfw/XZQH/bq/dw
dms2mc(tableName, params) { dms2mc(tableName, params) {
return fetchSso({ return fetchSso({
url: `${basurl}/yygl/cache/v1/list/${tableName}`, url: `${basurl}/yygl/cache/v1/list/${tableName}`,

View File

@ -13,13 +13,13 @@
</div> </div>
<!-- 主办单位 --> <!-- 主办单位 -->
<!-- <div class="footer-column"> <div class="footer-column">
<div class="footer-title">主办单位</div> <div class="footer-title">主办单位</div>
<div class="footer-links"> <div class="footer-links">
<div class="footer-link-item">宝山区数据局</div> <div class="footer-link-item">宝山区数据局</div>
<div class="footer-link-item">宝山区发改委</div> <div class="footer-link-item">宝山区发改委</div>
</div> </div>
</div> --> </div>
<!-- 运营单位 --> <!-- 运营单位 -->
<div class="footer-column"> <div class="footer-column">
@ -58,10 +58,8 @@
<!-- 下部版权信息 --> <!-- 下部版权信息 -->
<div class="footer-bottom"> <div class="footer-bottom">
<!-- <p class="copyright">{{ copyright }}</p> --> <p class="copyright">{{ copyright }}</p>
<p class="copyright">© 2025 可信碳信息网 版权所有</p> <p class="infrastructure">基础设施国家区块链网络基础底座上海枢纽</p>
<p class="infrastructure">技术支持上海市宝山区大数据中心</p>
<p class="infrastructure">基础设施国家区块链网络基础底座</p>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -90,7 +90,7 @@
</template> </template>
<script> <script>
import { logout, authorize, init } from '@/pages/index/api/login'; import { logout, authorize } from '@/pages/index/api/login';
import api from '@/pages/index/api/gxzx/index.js'; import api from '@/pages/index/api/gxzx/index.js';
export default { export default {
@ -139,8 +139,8 @@ export default {
divider: true, //线 divider: true, //线
needLogin: true, //访 needLogin: true, //访
clientId: 'client_id_tfwzx', clientId: 'client_id_tfwzx',
iframeUrl: 'https://ctn-web-pre.lingshu.net/trustedCarbonQuery/index', // // iframeUrl: 'https://ctn-web-pre.lingshu.net/trustedCarbonQuery/index', //
// iframeUrl: 'https://ctn-web-pre.lingshu.net/trustedCarbonQuery/list?type=carbon-query', // iframeUrl: 'https://ctn-web-pre.lingshu.net/trustedCarbonQuery/list?type=carbon-query', //
}, },
{ {
name: 'tsjfcg', name: 'tsjfcg',
@ -194,6 +194,7 @@ export default {
value: 'tfwsc', value: 'tfwsc',
content: '碳服务市场', content: '碳服务市场',
divider: true, divider: true,
parentName: 'fwsc',
}, },
{ {
name: 'tjrsc', name: 'tjrsc',
@ -209,6 +210,7 @@ export default {
value: 'txqsc', value: 'txqsc',
content: '碳需求市场', content: '碳需求市场',
divider: true, divider: true,
parentName: 'fwsc',
}, },
{ {
name: 'tsjsc', name: 'tsjsc',
@ -216,14 +218,8 @@ export default {
value: 'tsjsc', value: 'tsjsc',
content: '碳数据市场', content: '碳数据市场',
divider: true, divider: true,
}, parentName: 'fwsc',
// { }
// name: 'fwscsjlbc',
// title: '',
// value: 'fwscsjlbc',
// content: '',
// divider: true,
// }
] ]
}, },
{ {
@ -263,10 +259,22 @@ export default {
const sfdl = window.sessionStorage.getItem('sfdl'); const sfdl = window.sessionStorage.getItem('sfdl');
if (sfdl) { if (sfdl) {
this.loginFlag = true; this.loginFlag = true;
// this.getWdxxCount(); this.getWdxxCount();
} else { } else {
this.loginFlag = false; this.loginFlag = false;
} }
//
this.updateCurPageByRoute();
},
watch: {
//
$route: {
handler(newRoute) {
this.updateCurPageByRoute();
},
immediate: true,
},
}, },
beforeUnmount() { }, beforeUnmount() { },
methods: { methods: {
@ -312,6 +320,12 @@ export default {
}, },
// //
handleDropdownClick(menu) { handleDropdownClick(menu) {
// parentName使curPage
if (menu.parentName) {
this.curPage = menu.parentName;
} else {
this.curPage = menu.name;
}
this.gotoIfreamPage(menu); // this.gotoIfreamPage(menu); //
}, },
@ -343,7 +357,8 @@ export default {
this.closeMobileMenu(); this.closeMobileMenu();
let iframeUrl = menu.iframeUrl; let iframeUrl = menu.iframeUrl;
if (iframeUrl) { if (iframeUrl) {
//login.jsauthorize //login.jsauthorize
//使iframeUrlSSO Cookie
this.$emit('gotoIfreamPage', iframeUrl); this.$emit('gotoIfreamPage', iframeUrl);
} else { } else {
this.$emit('gotoPage', this.curPage); this.$emit('gotoPage', this.curPage);
@ -381,7 +396,6 @@ export default {
}, },
goyhzx() { goyhzx() {
this.curPage = ""; //navactive
this.closeMobileMenu(); this.closeMobileMenu();
this.$router.push("/yhzx/gzt") this.$router.push("/yhzx/gzt")
// window.location.href = `/view/mhzc/yhzx`; // window.location.href = `/view/mhzc/yhzx`;
@ -463,18 +477,18 @@ export default {
<style lang="css" scoped> <style lang="css" scoped>
.nav-box { .nav-box {
position: fixed; position: fixed;
top: 0px; top: 0;
width: 100%;
background: #009a29;
margin: 0 auto;
display: grid;
grid-template-columns: 1fr 2fr 1fr;
place-items: center;
color: #fff;
z-index: 9999; z-index: 9999;
display: grid;
width: 100%;
margin: 0 auto;
color: #fff;
background: #009a29;
grid-template-columns: 1fr 2fr 1fr;
place-items: center;
} }
.logo-box { .logo-box {
text-align: center; text-align: center;
@ -487,55 +501,55 @@ export default {
.option-box { .option-box {
display: flex; display: flex;
justify-content: center;
align-items: center;
text-align: center;
gap: 10px;
height: 64px; height: 64px;
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 400;
font-style: Regular;
font-size: 16px; font-size: 16px;
leading-trim: NONE; font-style: regular;
font-weight: 400;
letter-spacing: 0%; letter-spacing: 0%;
text-align: center;
justify-content: center;
align-items: center;
gap: 10px;
leading-trim: none;
} }
.option-box .gzt { .option-box .gzt {
display: flex;
padding: 10px; padding: 10px;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
background: rgba(255, 255, 255, 0.3); background: rgba(255, 255, 255, 0.3);
display: flex; border-radius: 6px;
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
border-radius: 6px;
} }
.menu-box { .menu-box {
width: 100%;
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); width: 100%;
height: 64px; height: 64px;
font-size: 16px; font-size: 16px;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
gap: 10px; gap: 10px;
} }
.menu-title { .menu-title {
width: 96px;
height: 64px;
text-align: center;
line-height: 24px;
display: flex; display: flex;
width: 96px;
height: 64px;
line-height: 24px;
text-align: center;
cursor: pointer;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
cursor: pointer;
} }
.meun-title-active { .meun-title-active {
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%); background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.15) 100%);
border-bottom: 2px solid #ffffff; border-bottom: 2px solid #fff;
} }
.meun-title-disable { .meun-title-disable {

View File

@ -20,7 +20,7 @@ const baseRoutes = [
}, },
]; ];
routes.push(...baseRoutes);
const mainRoutes = { const mainRoutes = {
path: '/', path: '/',

View File

@ -185,7 +185,7 @@ export default {
}, },
async fwfwoptionsSearch() { async fwfwoptionsSearch() {
try { try {
const res = await api.dms2mc('xzqh', {}); const res = await api.dms2mc('XZQH', {});
this.fwfwOptions = res.data || []; this.fwfwOptions = res.data || [];
} catch (error) { } catch (error) {
this.fwfwOptions = []; this.fwfwOptions = [];

View File

@ -191,7 +191,7 @@ export default {
}, },
async fwfwoptionsSearch() { async fwfwoptionsSearch() {
try { try {
const res = await api.dms2mc('xzqh', {}); const res = await api.dms2mc('XZQH', {});
this.fwfwOptions = res.data || []; this.fwfwOptions = res.data || [];
} catch (error) { } catch (error) {
this.fwfwOptions = []; this.fwfwOptions = [];

View File

@ -33,6 +33,8 @@
<div class="filter-section"> <div class="filter-section">
<div class="filter-title">内容搜索</div> <div class="filter-title">内容搜索</div>
<t-input v-model="filter.nr" placeholder="请输入关键词" @enter="onSearch" /> <t-input v-model="filter.nr" placeholder="请输入关键词" @enter="onSearch" />
</div>
<div class="filter-buttons"> <div class="filter-buttons">
<t-button theme="primary" @click="onSearch">查询</t-button> <t-button theme="primary" @click="onSearch">查询</t-button>
<t-button theme="default" @click="onReset">重置</t-button> <t-button theme="default" @click="onReset">重置</t-button>
@ -43,8 +45,6 @@
<div class="filter-section"> <div class="filter-section">
<t-checkbox v-model="filter.zzsscx" @change="onSearch">只展示收藏项</t-checkbox> <t-checkbox v-model="filter.zzsscx" @change="onSearch">只展示收藏项</t-checkbox>
</div> </div>
</div>
<!-- 服务类型 --> <!-- 服务类型 -->
<div class="filter-section"> <div class="filter-section">
@ -57,22 +57,8 @@
<!-- 服务企业 --> <!-- 服务企业 -->
<div class="filter-section"> <div class="filter-section">
<div class="filter-title">服务企业</div> <div class="filter-title">服务企业</div>
<t-input <div class="filter-options enterprise-options">
v-model="qySearchKeyword" <t-checkbox-group v-model="filter.qyuuids" :options="qyOptions" @change="onSearch" />
placeholder="搜索企业名称"
clearable
class="qy-search-input"
@change="filterQyOptions"
>
<template #prefix-icon>
<SearchIcon />
</template>
</t-input>
<div class="filter-options enterprise-options" v-if="qyFilteredOptions.length > 0">
<t-checkbox-group v-model="filter.qyuuids" :options="qyFilteredOptions" @change="onSearch" />
</div>
<div class="Qy-options-empty" v-else>
<span>未找到匹配企业</span>
</div> </div>
</div> </div>
</div> </div>
@ -217,7 +203,7 @@
</template> </template>
<script> <script>
import { LocationIcon, SearchIcon } from 'tdesign-icons-vue'; import { LocationIcon } from 'tdesign-icons-vue';
import NewNav from '@/pages/index/components/new-nav/index.vue'; import NewNav from '@/pages/index/components/new-nav/index.vue';
import Footer from '@/pages/index/components/footer/index.vue'; import Footer from '@/pages/index/components/footer/index.vue';
import BreadcrumbNav from '@/pages/index/components/breadcrumb/index.vue'; import BreadcrumbNav from '@/pages/index/components/breadcrumb/index.vue';
@ -232,7 +218,6 @@ export default {
BreadcrumbNav, BreadcrumbNav,
FwscPublish, FwscPublish,
LocationIcon, LocationIcon,
SearchIcon,
}, },
data() { data() {
return { return {
@ -255,10 +240,6 @@ export default {
qyOptions: [], qyOptions: [],
// //
allQyOptions: [], allQyOptions: [],
//
qySearchKeyword: '',
//
qyFilteredOptions: [],
// //
cardList: [], cardList: [],
// //
@ -327,44 +308,26 @@ export default {
}); });
this.allQyOptions = options || []; this.allQyOptions = options || [];
this.qyOptions = options || []; this.qyOptions = options || [];
this.qyFilteredOptions = options || [];
} catch (error) { } catch (error) {
this.allQyOptions = []; this.allQyOptions = [];
this.qyOptions = []; this.qyOptions = [];
this.qyFilteredOptions = [];
} }
}, },
// //
async onFwlxChange() { async onFwlxChange() {
this.qySearchKeyword = '';
if (this.filter.fwlxjh.length > 0) { if (this.filter.fwlxjh.length > 0) {
try { try {
const res = await api.getQyuuidsByBq({ fwlxjh: this.filter.fwlxjh }); const res = await api.getQyuuidsByBq({ fwlxjh: this.filter.fwlxjh });
const selectedCodes = res.data || []; const selectedCodes = res.data || [];
this.qyOptions = this.allQyOptions.filter((q) => selectedCodes.includes(q.value)); this.qyOptions = this.allQyOptions.filter((q) => selectedCodes.includes(q.value));
this.qyFilteredOptions = this.qyOptions;
} catch (error) { } catch (error) {
this.qyOptions = this.allQyOptions; this.qyOptions = this.allQyOptions;
this.qyFilteredOptions = this.allQyOptions;
} }
} else { } else {
this.qyOptions = this.allQyOptions; this.qyOptions = this.allQyOptions;
this.qyFilteredOptions = this.allQyOptions;
} }
this.onSearch(); this.onSearch();
}, },
//
filterQyOptions() {
console.log('this.qySearchKeyword', this.qySearchKeyword);
if (!this.qySearchKeyword) {
this.qyFilteredOptions = this.qyOptions;
} else {
const keyword = this.qySearchKeyword.toLowerCase();
this.qyFilteredOptions = this.qyOptions.filter((q) =>
q.label.toLowerCase().includes(keyword)
);
}
},
// //
async searchList() { async searchList() {
this.loading = true; this.loading = true;
@ -375,8 +338,9 @@ export default {
...this.filter, ...this.filter,
...this.page, ...this.page,
}; };
// Y=, N= if (prame.scbz !== undefined) {
prame.scbz = this.filter.zzsscx ? 'Y' : 'N'; prame.scbz = this.filter.zzsscx ? 'Y' : '';
}
const { data } = await api.gxxxList(prame); const { data } = await api.gxxxList(prame);
if (data.records) { if (data.records) {
data.records.map((item) => { data.records.map((item) => {
@ -408,9 +372,7 @@ export default {
nr: '', nr: '',
zzsscx: false, zzsscx: false,
}; };
this.qySearchKeyword = '';
this.qyOptions = this.allQyOptions; this.qyOptions = this.allQyOptions;
this.qyFilteredOptions = this.allQyOptions;
this.page.pageNo = 1; this.page.pageNo = 1;
this.searchList(); this.searchList();
}, },
@ -703,17 +665,6 @@ export default {
} }
} }
.qy-search-input {
margin-bottom: 12px;
}
.Qy-options-empty {
padding: 16px 0;
font-size: 14px;
color: #999;
text-align: center;
}
.filter-buttons { .filter-buttons {
display: flex; display: flex;
gap: 8px; gap: 8px;

View File

@ -112,48 +112,48 @@ export default {
{ label: '社会性数据', value: 'social' } { label: '社会性数据', value: 'social' }
], ],
cardList: [ cardList: [
{
id: 1,
name: '宝山绿色低碳数据创新实验室',
description: '汇聚全国优质第三方服务机构,提供从核算到认证的全链条专业服务。',
tags: ['公共数据', '社会性数据'],
price: '免费'
},
{ {
id: 2, id: 2,
name: 'HiQLCD数据库', name: 'HiQLCD数据库',
description: '覆盖生命周期碳足迹评估所需的基础数据,支持多种排放因子查询与自定义导入。', description: '汇聚全国优质第三方服务机构,提供从核算到认证的全链条专业服务。',
tags: ['商业数据'], tags: ['商业数据'],
price: '付费' price: '付费'
}, },
{ {
id: 3, id: 3,
name: '天工数据库', name: '天工数据库',
description: '整合工业制造全流程能耗与排放因子,支持实时监测与历史数据追溯分析。', description: '汇聚全国优质第三方服务机构,提供从核算到认证的全链条专业服务。',
tags: ['公益数据'], tags: ['公益数据'],
price: '免费' price: '免费'
}, },
{ {
id: 4, id: 4,
name: 'ecoinvent数据库', name: 'ecoinvent数据库',
description: '国际权威生命周期评价数据库收录全球超过18000种过程数据与排放因子。', description: '汇聚全国优质第三方服务机构,提供从核算到认证的全链条专业服务。',
tags: ['商业数据'], tags: ['商业数据'],
price: '付费' price: '付费'
}, },
{ {
id: 5, id: 5,
name: 'ecoinvent数据库', name: 'ecoinvent数据库',
description: '国际权威生命周期评价数据库收录全球超过18000种过程数据与排放因子。', description: '汇聚全国优质第三方服务机构,提供从核算到认证的全链条专业服务。',
tags: ['商业数据'], tags: ['商业数据'],
price: '付费' price: '付费'
}, },
{ {
id: 6, id: 6,
name: '天工数据库', name: '天工数据库',
description: '整合工业制造全流程能耗与排放因子,支持实时监测与历史数据追溯分析。', description: '汇聚全国优质第三方服务机构,提供从核算到认证的全链条专业服务。',
tags: ['公益数据'], tags: ['公益数据'],
price: '免费' price: '免费'
}, }
{
id: 1,
name: '宝山绿色低碳数据创新实验室',
description: '聚焦区域低碳发展数据汇聚与分析,提供碳排放核算模型与可视化报告。',
tags: ['公共数据', '社会性数据'],
price: '免费'
},
], ],
// //
filterCollapsed: true, filterCollapsed: true,

View File

@ -287,7 +287,7 @@ export default {
}, },
async fwfwoptionsSearch() { async fwfwoptionsSearch() {
try { try {
const res = await api.dms2mc('xzqh', {}); const res = await api.dms2mc('XZQH', {});
this.fwfwOptions = res.data || []; this.fwfwOptions = res.data || [];
} catch (error) { } catch (error) {
this.fwfwOptions = []; this.fwfwOptions = [];

View File

@ -5,7 +5,7 @@
<div style="height: 100%"> <div style="height: 100%">
<template> <template>
<div style="height: 100%" class="htglMenu"> <div style="height: 100%" class="htglMenu">
<t-menu style="width: 220px; background: #fff" v-model="activeMenuId" :collapsed="collapsed" :defaultExpanded="expanded" @change="gotoPage"> <t-menu style="width: 220px; background: #fff" :defaultValue="defaultValue" :collapsed="collapsed" :defaultExpanded="expanded" @change="gotoPage">
<div class="title">用户中心</div> <div class="title">用户中心</div>
<!-- 循环实现 --> <!-- 循环实现 -->
<template v-for="item in cdList"> <template v-for="item in cdList">
@ -121,16 +121,10 @@ export default {
title: '绿色交易', title: '绿色交易',
icon: 'user', icon: 'user',
name: 'lsjy', name: 'lsjy',
}, {
id: 'zljggl',
title: '质证结果管理',
icon: 'user',
name: 'zljggl',
iframeUrl: "https://ctn-web-pre.lingshu.net/proof-result-mgt?type=carbon-certify",
}, },
{ {
id: 'cunzhengjilu', id: 'cunzhengjilu',
title: '存证记录管理', title: '存证记录',
icon: 'user', icon: 'user',
name: 'cunzhengjilu', name: 'cunzhengjilu',
iframeUrl: "https://ctn-web-pre.lingshu.net/cert-record-mgt", iframeUrl: "https://ctn-web-pre.lingshu.net/cert-record-mgt",
@ -142,7 +136,7 @@ export default {
iframeUrl: "https://ctn-web-pre.lingshu.net/hosting-record-mgt", iframeUrl: "https://ctn-web-pre.lingshu.net/hosting-record-mgt",
}, { }, {
id: 'chazhengjilu', id: 'chazhengjilu',
title: '查证记录管理', title: '查证记录',
icon: 'user', icon: 'user',
name: 'chazhengjilu', name: 'chazhengjilu',
iframeUrl: "https://ctn-web-pre.lingshu.net/query-record-mgt", iframeUrl: "https://ctn-web-pre.lingshu.net/query-record-mgt",
@ -153,26 +147,19 @@ export default {
zljgglurl: 'https://ctn-web-pre.lingshu.net/proof-result-mgt?type=carbon-certify', zljgglurl: 'https://ctn-web-pre.lingshu.net/proof-result-mgt?type=carbon-certify',
iframeUrl: "", iframeUrl: "",
activeMenuId: "gzt",
}; };
}, },
created() { created() {
},
activated() {
console.log("glxtSy.vue,created==>", this.$route)
// this.initView(); // this.initView();
let cdId = this.cdList[0].id; // const activeCompo = this.$route.query.activeCompo;
const activeCompo = this.$route.query.activeCompo; // if (activeCompo) {
if (activeCompo) {
// this.changeHandler(activeCompo); // this.changeHandler(activeCompo);
cdId = activeCompo; // }
}
this.gotoPage(this.cdList[0].id);
this.activeMenuId = cdId;
this.gotoPage(cdId);
}, },
methods: { methods: {
gotoPage(menuId) { gotoPage(menuId) {
@ -207,12 +194,9 @@ export default {
if (iframeUrl) { if (iframeUrl) {
this.iframeUrl = iframeUrl; this.iframeUrl = iframeUrl;
} else { } else {
this.iframeUrl = "";
this.$nextTick(() => {
this.$router.push({ this.$router.push({
path: "/yhzx/" + menu.name path: "/yhzx/" + menu.name
}) })
})
} }
}, },

View File

@ -9,11 +9,11 @@
@click="handleClick(item.to)" @click="handleClick(item.to)"
> >
<div class="item-icon" :style="{ background: item.bgColor, color: item.color }"> <div class="item-icon" :style="{ background: item.bgColor, color: item.color }">
<component :is="getIconComponent(item.icon)" /> <t-icon :name="item.icon" />
</div> </div>
<span class="item-label">{{ item.label }}</span> <span class="item-label">{{ item.label }}</span>
<div class="item-arrow"> <div class="item-arrow">
<ArrowRightIcon /> <t-icon name="arrow-right" />
</div> </div>
</button> </button>
</div> </div>
@ -21,24 +21,8 @@
</template> </template>
<script> <script>
import { MailIcon, UserIcon, EditIcon, LockOnIcon, ArrowRightIcon } from 'tdesign-icons-vue';
const iconMap = {
mail: MailIcon,
user: UserIcon,
edit: EditIcon,
'lock-on': LockOnIcon,
};
export default { export default {
name: 'AccountShortcuts', name: 'AccountShortcuts',
components: {
MailIcon,
UserIcon,
EditIcon,
LockOnIcon,
ArrowRightIcon,
},
data() { data() {
return { return {
shortcuts: [ shortcuts: [
@ -50,9 +34,6 @@ export default {
}; };
}, },
methods: { methods: {
getIconComponent(name) {
return iconMap[name] || MailIcon;
},
handleClick(to) { handleClick(to) {
this.$router.push(to); this.$router.push(to);
}, },

View File

@ -2,7 +2,7 @@
<div class="enterprise-cert"> <div class="enterprise-cert">
<div class="cert-header"> <div class="cert-header">
<div class="cert-icon"> <div class="cert-icon">
<UserIcon /> <t-icon name="user" />
</div> </div>
<div class="cert-title"> <div class="cert-title">
<h3>企业认证</h3> <h3>企业认证</h3>
@ -34,7 +34,7 @@
<div class="cert-actions"> <div class="cert-actions">
<button class="cert-btn" @click="handleClick"> <button class="cert-btn" @click="handleClick">
<span>{{ certData.qymc ? '查看详情' : '立即认证' }}</span> <span>{{ certData.qymc ? '查看详情' : '立即认证' }}</span>
<ArrowRightIcon /> <t-icon name="arrow-right" />
</button> </button>
</div> </div>
</div> </div>
@ -43,14 +43,9 @@
<script> <script>
import api from '@/pages/index/api/gxzx/index.js'; import api from '@/pages/index/api/gxzx/index.js';
import { UserIcon, ArrowRightIcon } from 'tdesign-icons-vue';
export default { export default {
name: 'EnterpriseCert', name: 'EnterpriseCert',
components: {
UserIcon,
ArrowRightIcon,
},
data() { data() {
return { return {
certData: {}, certData: {},

View File

@ -2,7 +2,7 @@
<div class="policy-news"> <div class="policy-news">
<div class="panel-header"> <div class="panel-header">
<div class="header-icon"> <div class="header-icon">
<NotificationIcon /> <t-icon name="notification" />
</div> </div>
<h3 class="header-title">{{ title }}</h3> <h3 class="header-title">{{ title }}</h3>
<span class="header-tag">政策</span> <span class="header-tag">政策</span>
@ -31,21 +31,15 @@
<div class="panel-footer"> <div class="panel-footer">
<span class="more-link"> <span class="more-link">
查看全部 查看全部
<ArrowRightIcon /> <t-icon name="arrow-right" />
</span> </span>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { NotificationIcon, ArrowRightIcon } from 'tdesign-icons-vue';
export default { export default {
name: 'PolicyNews', name: 'PolicyNews',
components: {
NotificationIcon,
ArrowRightIcon,
},
props: { props: {
title: { title: {
type: String, type: String,
@ -209,15 +203,14 @@ export default {
} }
.item-title { .item-title {
display: -webkit-box; display: box;
overflow: hidden; overflow: hidden;
font-size: 13px; font-size: 13px;
line-height: 1.6; line-height: 1.6;
color: @text-dark; color: @text-dark;
-webkit-box-orient: vertical; box-orient: vertical;
-webkit-line-clamp: 2;
line-clamp: 2;
transition: color 0.25s ease; transition: color 0.25s ease;
-webkit-line-clamp: 2;
} }
.item-meta { .item-meta {

View File

@ -10,12 +10,12 @@
> >
<div class="item-icon-wrap"> <div class="item-icon-wrap">
<div class="item-icon" :style="{ background: action.bgColor, color: action.color }"> <div class="item-icon" :style="{ background: action.bgColor, color: action.color }">
<component :is="getIconComponent(action.icon)" /> <t-icon :name="action.icon" />
</div> </div>
</div> </div>
<span class="item-label">{{ action.label }}</span> <span class="item-label">{{ action.label }}</span>
<div class="item-arrow"> <div class="item-arrow">
<ArrowRightIcon /> <t-icon name="arrow-right" />
</div> </div>
</button> </button>
</div> </div>
@ -23,24 +23,8 @@
</template> </template>
<script> <script>
import { UploadIcon, CloudUploadIcon, EditIcon, BulletpointIcon, ArrowRightIcon } from 'tdesign-icons-vue';
const iconMap = {
upload: UploadIcon,
'cloud-upload': CloudUploadIcon,
edit: EditIcon,
bulletpoint: BulletpointIcon,
};
export default { export default {
name: 'QuickActions', name: 'QuickActions',
components: {
UploadIcon,
CloudUploadIcon,
EditIcon,
BulletpointIcon,
ArrowRightIcon,
},
data() { data() {
return { return {
actions: [ actions: [
@ -52,9 +36,6 @@ export default {
}; };
}, },
methods: { methods: {
getIconComponent(name) {
return iconMap[name] || UploadIcon;
},
handleClick(to) { handleClick(to) {
this.$router.push(to); this.$router.push(to);
}, },

View File

@ -4,7 +4,7 @@
<div class="card-inner"> <div class="card-inner">
<div class="card-icon-wrap" :style="iconWrapStyle"> <div class="card-icon-wrap" :style="iconWrapStyle">
<div class="icon-inner" :style="iconInnerStyle"> <div class="icon-inner" :style="iconInnerStyle">
<component :is="iconComponent" /> <t-icon :name="iconName" />
</div> </div>
</div> </div>
<div class="card-content"> <div class="card-content">
@ -20,23 +20,8 @@
</template> </template>
<script> <script>
import { UploadIcon, SearchIcon, SwapIcon, MailIcon } from 'tdesign-icons-vue';
const iconMap = {
upload: UploadIcon,
search: SearchIcon,
swap: SwapIcon,
mail: MailIcon,
};
export default { export default {
name: 'StatsCard', name: 'StatsCard',
components: {
UploadIcon,
SearchIcon,
SwapIcon,
MailIcon,
},
props: { props: {
title: String, title: String,
count: [String, Number], count: [String, Number],
@ -60,9 +45,6 @@ export default {
color: this.borderColor !== 'transparent' ? this.borderColor : '#666', color: this.borderColor !== 'transparent' ? this.borderColor : '#666',
}; };
}, },
iconComponent() {
return iconMap[this.iconName] || UploadIcon;
},
}, },
methods: { methods: {
lightenColor(hex) { lightenColor(hex) {

View File

@ -82,7 +82,7 @@
<div class="panel-card"> <div class="panel-card">
<div class="panel-header"> <div class="panel-header">
<div class="header-icon"> <div class="header-icon">
<AppIcon /> <t-icon name="app" />
</div> </div>
<div class="header-text"> <div class="header-text">
<h2 class="panel-title">常用功能</h2> <h2 class="panel-title">常用功能</h2>
@ -98,7 +98,7 @@
<div class="panel-card account-panel"> <div class="panel-card account-panel">
<div class="panel-header"> <div class="panel-header">
<div class="header-icon header-icon--account"> <div class="header-icon header-icon--account">
<SettingIcon /> <t-icon name="setting" />
</div> </div>
<div class="header-text"> <div class="header-text">
<h2 class="panel-title">账号管理</h2> <h2 class="panel-title">账号管理</h2>
@ -121,7 +121,6 @@
</template> </template>
<script> <script>
import { AppIcon, SettingIcon } from 'tdesign-icons-vue';
import StatsCard from './components/StatsCard.vue'; import StatsCard from './components/StatsCard.vue';
import QuickActions from './components/QuickActions.vue'; import QuickActions from './components/QuickActions.vue';
import PolicyNews from './components/PolicyNews.vue'; import PolicyNews from './components/PolicyNews.vue';
@ -131,8 +130,6 @@ import EnterpriseCert from './components/EnterpriseCert.vue';
export default { export default {
name: 'GztIndex', name: 'GztIndex',
components: { components: {
AppIcon,
SettingIcon,
StatsCard, StatsCard,
QuickActions, QuickActions,
PolicyNews, PolicyNews,

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<Nav @gotoIfreamPage="gotoIfreamPage" @gotoPage="gotoPage" /> <Nav @gotoIfreamPage="gotoIfreamPage" @gotoPage="gotoPage" />
<div ref="contentWrap" :style="{ 'height': documentClientHeight-65 + 'px' ,'margin-top':'64px' ,'overflow':'auto'}"> <div :style="{ 'height': documentClientHeight-64 + 'px' ,'margin-top':'64px'}">
<iframe v-if="iframeUrl" :src="iframeUrl" width="100%" height="100%" frameborder="0" scrolling="yes"> <iframe v-if="iframeUrl" :src="iframeUrl" width="100%" height="100%" frameborder="0" scrolling="yes">
</iframe> </iframe>
<keep-alive v-else> <keep-alive v-else>
@ -24,12 +24,6 @@ export default {
components: { components: {
Nav, Nav,
}, },
watch: {
$route() {
//
this.$refs.contentWrap && (this.$refs.contentWrap.scrollTop = 0);
},
},
computed: { computed: {
// documentClientHeight: { // documentClientHeight: {
// get() { // get() {
@ -55,16 +49,10 @@ export default {
}, },
methods: { methods: {
gotoPage(name) { gotoPage(name) {
this.iframeUrl = ""; this.$router.push({ name })
this.$nextTick(() => {
this.$router.push({
path: "/" + name
})
});
// this.$router.replace({ name: name, force: true })
// // this.$router.replace({ name: name, force: true })
// alert(name)
// window.location.href = name // window.location.href = name
}, },

View File

@ -33,7 +33,7 @@ export default {
// { title: '上海市宝山区发改委', href: '#' }, // { title: '上海市宝山区发改委', href: '#' },
// { title: '上海市宝山区生态环境局', href: '#' }, // { title: '上海市宝山区生态环境局', href: '#' },
], ],
copyright: '© 2025 可信碳信息网 版权所有 | 技术支持:上海市宝山区大数据中心', copyright: '© 2025 可信碳信息网 版权所有 | 主办单位:上海市宝山区大数据中心',
hyztList: [ hyztList: [
{ {
title: '钢铁行业', title: '钢铁行业',

View File

@ -244,8 +244,8 @@ module.exports = {
terserOptions: { terserOptions: {
compress: { compress: {
warnings: false, warnings: false,
drop_console: false, drop_console: true,
drop_debugger: false, drop_debugger: true,
}, },
}, },
}), }),
@ -266,8 +266,7 @@ module.exports = {
devServer: { devServer: {
port: devServerPort, port: devServerPort,
host: '0.0.0.0', host: '0.0.0.0',
// 开发时勿用 ./dist会与历史 npm run build 产物混用history 子路径刷新易命中旧 HTML/JS contentBase: './dist',
contentBase: path.resolve(__dirname, 'public'),
publicPath: process.env.VUE_APP_ROUTER_BASE, publicPath: process.env.VUE_APP_ROUTER_BASE,
https: process.env.VUE_APP_PROTOCOL_HTTPS === 'true', https: process.env.VUE_APP_PROTOCOL_HTTPS === 'true',
compress: false, compress: false,
@ -282,27 +281,21 @@ module.exports = {
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS', 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization', 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
}, },
// Vue CLI prepareProxy 用 pathname.match(代理键) 判断;键写 '/mhzc' 会变成匹配路径里任意位置的 /mhzc
// 会误伤 SPA 路由 /view/mhzc/...,刷新时整页请求被转发到后端导致 Proxy error。必须用 ^ 限定为路径前缀。
proxy: { proxy: {
'^/sso': { '/sso': {
target: 'http://carbon.liantu.tech', target: 'http://carbon.liantu.tech',
// target: 'http://10.23.20.13:94/',
changeOrigin: true, changeOrigin: true,
}, },
'^/mhzc': { '^/mhzc': {
target: 'http://carbon.liantu.tech', target: 'http://carbon.liantu.tech',
// target: 'http://10.23.20.13:94/',
changeOrigin: true, changeOrigin: true,
}, },
'^/gxzx': { '^/gxzx': {
target: 'http://carbon.liantu.tech', target: 'http://carbon.liantu.tech',
// target: 'http://10.23.20.13:94/',
changeOrigin: true, changeOrigin: true,
}, },
'^/yygl': { '^/yygl': {
target: 'http://carbon.liantu.tech', target: 'http://carbon.liantu.tech',
// target: 'http://10.23.20.13:94/',
changeOrigin: true, changeOrigin: true,
}, },
}, },

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1196,6 +1196,11 @@
"@types/conventional-commits-parser" "^5.0.0" "@types/conventional-commits-parser" "^5.0.0"
chalk "^5.3.0" chalk "^5.3.0"
"@fortawesome/fontawesome-free@^7.0.1":
version "7.2.0"
resolved "https://registry.npmmirror.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d"
integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg==
"@gar/promisify@^1.0.1": "@gar/promisify@^1.0.1":
version "1.1.3" version "1.1.3"
resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"

View File

@ -1196,6 +1196,11 @@
"@types/conventional-commits-parser" "^5.0.0" "@types/conventional-commits-parser" "^5.0.0"
chalk "^5.3.0" chalk "^5.3.0"
"@fortawesome/fontawesome-free@^7.0.1":
version "7.2.0"
resolved "https://registry.npmmirror.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d"
integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg==
"@gar/promisify@^1.0.1": "@gar/promisify@^1.0.1":
version "1.1.3" version "1.1.3"
resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"

View File

@ -1196,6 +1196,11 @@
"@types/conventional-commits-parser" "^5.0.0" "@types/conventional-commits-parser" "^5.0.0"
chalk "^5.3.0" chalk "^5.3.0"
"@fortawesome/fontawesome-free@^7.0.1":
version "7.2.0"
resolved "https://registry.npmmirror.com/@fortawesome/fontawesome-free/-/fontawesome-free-7.2.0.tgz#188c1053ce422ad1f934d7df242a973fcb89636d"
integrity sha512-3DguDv/oUE+7vjMeTSOjCSG+KeawgVQOHrKRnvUuqYh1mfArrh7s+s8hXW3e4RerBA1+Wh+hBqf8sJNpqNrBWg==
"@gar/promisify@^1.0.1": "@gar/promisify@^1.0.1":
version "1.1.3" version "1.1.3"
resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" resolved "http://10.23.10.90:4873/@gar%2fpromisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"