This commit is contained in:
2026-03-18 10:22:52 +08:00
parent 9eb1aa0568
commit 2b0a2a9926
3 changed files with 727 additions and 694 deletions
@@ -102,26 +102,26 @@
<script nonce="${cspNonce!}">
// 在加载 lodash 后、使用前插入
const originalDefaultsDeep = window._.defaultsDeep;
const originalDefaultsDeep = window._.defaultsDeep
window._.defaultsDeep = function(...args) {
// 先对所有参数做原型污染清洗
const cleanArgs = args.map(arg => sanitizeForPrototypePollution(arg));
return originalDefaultsDeep.apply(window._, cleanArgs);
};
const cleanArgs = args.map(arg => sanitizeForPrototypePollution(arg))
return originalDefaultsDeep.apply(window._, cleanArgs)
}
function sanitizeForPrototypePollution(obj) {
if (obj === null || typeof obj !== 'object') return obj;
if (Array.isArray(obj)) return obj.map(sanitizeForPrototypePollution);
if (obj === null || typeof obj !== "object") return obj
if (Array.isArray(obj)) return obj.map(sanitizeForPrototypePollution)
const clean = {};
const clean = {}
for (const key in obj) {
if (!Object.hasOwn(obj, key)) continue;
if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
continue;
if (!Object.hasOwn(obj, key)) continue
if (key === "__proto__" || key === "constructor" || key === "prototype") {
continue
}
clean[key] = sanitizeForPrototypePollution(obj[key]);
clean[key] = sanitizeForPrototypePollution(obj[key])
}
return clean;
return clean
}
</script>
@@ -131,8 +131,8 @@
ELEMENT.Dialog.props.closeOnClickModal.default = false
ELEMENT.Dialog.props.top.default = "50px"
ELEMENT.Table.props.border.default = true
ELEMENT.TableColumn.props.headerAlign.default = 'center'
ELEMENT.TableColumn.props.align.default = 'center'
ELEMENT.TableColumn.props.headerAlign.default = "center"
ELEMENT.TableColumn.props.align.default = "center"
ELEMENT.TableColumn.props.showOverflowTooltip = { type: Boolean, default: true }
Vue.use(ELEMENT, {
zIndex: 20000
@@ -221,7 +221,7 @@
// )
// 连接建立时不立即发送 join,等待订阅完成
this.ping()
console.info('websocket open success')
console.info("websocket open success")
}
}
@@ -529,7 +529,7 @@
display: flex;
align-items: center;
gap: 12px;
padding: 0 12px;
/*padding: 0 12px;*/
height: 100%;
border-radius: 0;
cursor: pointer;
@@ -559,6 +559,12 @@
white-space: nowrap;
}
.v4-about-name {
font-weight: 500;
color: #ffffff;
white-space: nowrap;
}
.v4-logout {
color: #ffffff;
cursor: pointer;
@@ -680,6 +686,11 @@
<span class="v4-user-name">${@auth.getPrincipalProperty('username')} (${@auth.getPrincipalProperty('loginname')})</span>
<!-- <i class="fa fa-angle-down"></i> -->
</div>
<div id="aboutNameApp">
<a class="v4-about-name" href="javascript:;" @click="showAbout">
关于
</a>
</div>
<a class="v4-logout" href="/platform/login/logout">
<i class="fa fa-sign-out"></i>
退出
@@ -697,8 +708,8 @@
<footer class="v4-footer" id="v4-footer" style="display: none;">
<div class="v4-footer-bottom">
<div class="v4-footer-copyright">
<p>&copy; 2025 武汉地大三思科技有限公司. 保留所有权利.</p>
<p>ICP备案号:のICP备12345678号-1 | 版本v4.0.0</p>
<p>&copy; 2026 武汉地大三思科技有限公司. 保留所有权利.</p>
<p>软件版本:v2.0</p>
</div>
<div class="v4-footer-tech">
<span>技术支持:</span>
@@ -707,6 +718,23 @@
</div>
</footer>
<script>
new Vue({
el: "#aboutNameApp", // ✅ 挂载到外层
methods: {
showAbout() {
this.$alert("系统名称:智慧工会<br>软件版本:V2.0<br>技术支持:武汉地大三思科技有限公司", "关于系统", {
confirmButtonText: "确定",
dangerouslyUseHTMLString: true,
callback: action => {
}
})
}
}
})
</script>
<script nonce="${cspNonce!}">
// 处理导航项的active状态
@@ -327,9 +327,14 @@ layout("/layouts/platform.html"){
</div>
<!-- 人员类型图表 -->
<div class="card">
<!-- <div class="card">
<div class="card-title">人员类型统计</div>
<div class="chart-container" id="personTypeMemberChart" v-loading="loading.personTypeMember"></div>
</div>-->
<!-- 在职类型图表 -->
<div class="card">
<div class="card-title">人员类型统计</div>
<div class="chart-container" id="userStateMemberChart" v-loading="loading.userStateMember"></div>
</div>
</div>
@@ -887,8 +892,8 @@ layout("/layouts/platform.html"){
this.getMemberPercentage()
this.getMemberSexPercentage()
this.getUnionMember()
this.getPersonTypeMember()
// this.getUserStateMember()
// this.getPersonTypeMember()
this.getUserStateMember()
}
},
mounted() {
@@ -159,8 +159,8 @@ layout("/layouts/platform_h5.html"){
<div class="col-title">在职状态</div>
<div id="userStateMemberChart" style="width: 100%; height: 240px; box-sizing: border-box"></div>
<div class="col-title">人员类型</div>
<div id="personTypeMemberChart" style="width: 100%; height: 240px; box-sizing: border-box"></div>
<!-- <div class="col-title">人员类型</div>
<div id="personTypeMemberChart" style="width: 100%; height: 240px; box-sizing: border-box"></div>-->
</van-col>
</van-row>