Files
number_zj/20220330_Vote/Ewide.Web.Entry/wwwroot/html/yjbvote20251222/index.html
路 范 513c40a4f3 fix(vote): 修复投票页面淘汰数据显示问题
- 将变量声明从 var 改为 let 以修复数据过滤逻辑
- 修改电力工程的淘汰条件判断逻辑,只在符合条件时显示消息
- 优化淘汰数量显示格式,添加"目前:"前缀以提高可读性
- 修复确认对话框中的 HTML 格式显示问题
- 添加 dangerouslyUseHTMLString 选项以正确渲染 HTML 内容
2025-12-23 09:52:16 +08:00

307 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0,
maximum-scale=1.0, user-scalable=no"/>
<link rel="stylesheet" href="../../lib/element-ui/theme-chalk/index.css">
<script src="../../lib/vue2/vue.min.js"></script>
<script src="../../lib/element-ui/theme-chalk/index.js"></script>
<script src="../../lib/axios/axios.min.js"></script>
<script src="../../lib/qs/qs.min.js"></script>
</head>
<body>
<div id="app" v-loading="loading">
<h3 style="text-align:center;"><p>2025年度浙江省建筑施工安全生产标准化优良工地宁波地区水平认定项目汇总表</p>(按总分从高到低排序)</h3>
<el-collapse>
<el-collapse-item v-for="(prolist,idx) in projects" :title="prolist.name" :name="idx" v-show="prolist.data.length>0" :key="idx">
<el-descriptions class="margin-top" title="" :column="1" border v-for="project in prolist.data" :key="project.id">
<el-descriptions-item label-class-name="buhuanhang" label="项目名称"><b>{{project.serial_number}}:{{project.name}}</b></el-descriptions-item>
<el-descriptions-item label-class-name="buhuanhang" label="备注"><i>{{project.remark}}</i></el-descriptions-item>
<el-descriptions-item label="请投票">
<template>
<el-radio-group v-model="project.vote">
<el-radio label="true">同意</el-radio>
<el-radio label="false">淘汰</el-radio>
</el-radio-group>
</template>
</el-descriptions-item>
</el-descriptions>
</el-collapse-item>
</el-collapse>
<h3 style="text-align:center;">
<el-input v-model="logincode" placeholder="请输入提交码"></el-input>
</h3>
<h3 style="text-align:center;">
<el-button @click="alltrue">重置</el-button>
<el-button type="primary" @click="submit">提交</el-button>
</h3>
</div>
</body>
<style scoped>
.buhuanhang {
white-space: nowrap;
width: 21%;
}
.el-message-box {
width: 300px !important;
}
</style>
<script>
new Vue({
el: '#app',
data: function () {
return {
projects: [],
projects0: [],
projects1: [],
projects2: [],
projects3: [],
projects4: [],
projects5: [],
confirm_title: '',
loading: false,
logincode: ''
}
},
created: function () {
this.loading = true;
this.load_projects();
},
methods: {
alltrue() {
this.projects.map(a => {
a.data.map(b => {
b.vote = "true";
return b;
})
});
//this.projects0 = this.projects0.map(a => { a.vote = "true"; return a; });
//this.projects1 = this.projects1.map(a => { a.vote = "true"; return a; });
//this.projects2 = this.projects2.map(a => { a.vote = "true"; return a; });
//this.projects3 = this.projects3.map(a => { a.vote = "true"; return a; });
//this.projects4 = this.projects4.map(a => { a.vote = "true"; return a; });
//this.projects5 = this.projects5.map(a => { a.vote = "true"; return a; });
},
async checkcode() {
let _this = this;
//检验码
if (this.logincode.length < 6) {
//this.$alert(`<div>提交码输入错误</div>`, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
//}).then(a => { }).catch(err => { console.log(err) });
alert("提交码输入错误");
return false;
}
return new Promise((resolve, reject) => {
axios({
headers: {'Content-Type': 'application/json;charset=UTF-8'},
method: 'post',
url: '/gb/yjb/api/projects/check-submit-code',
data: {'code': this.logincode},
responseType: "json",
}).then(async response => {
if (response.data.data != true) {
//_this.$alert(`<div>提交码输入错误</div>`, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
//}).then(a => { }).catch(err => { console.log(err) });
alert("提交码输入错误");
reject();
} else {
resolve(true)
}
_this.loading = false;
}).catch(async error => {
console.log(error)
_this.$message({
type: 'error',
message: error.message
})
_this.loading = false;
})
})
},
async submit() {
let _this = this;
await this.checkcode().then(a => {
if (a === false)
return;
let msg1 = "";
let msg2 = "";
let all_no_select_num = 0;
let select_false_list = [];
let all_select_false_num = 0;
let all_select_true_num = 0;
let allselects = [];
for (let i = 0; i < _this.projects.length; i++) {
let _p = _this.projects[i];
if (_p.data.length > 0) {
// let no_select = _p.data.filter(a => { return !a.vote }).length;
// all_no_select_num += no_select;
// if (no_select > 0) {
// msg1 += `<p>目前[` + _p.name + `]未选择的有` + no_select + `个</p>`;
// }
let select_false = _p.data.filter(a => {
return a.vote == "false"
}).length;
select_false_list.push(select_false);
// if (select_false < 1) {
if (_p.name === "电力工程" && select_false === 0) {
} else {
msg2 += `[` + _p.name + `]淘汰的有 ` + select_false + ` 个; \n`;
}
// }
all_select_false_num += select_false;
all_select_true_num += _p.data.filter(a => {
return a.vote == "true"
}).length;
allselects = allselects.concat(_p.data)
}
}
if (all_no_select_num > 0) {
//this.$alert(`<div>请全部选择完毕后再次提交!</div>` + msg1, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
//}).then(a => { }).catch(err => { console.log(err) });
alert("请全部选择完毕后再次提交");
return;
}
debugger
//if (select_false_list.filter(a => a < 1).length > 0) {
// this.$alert(`<div>每个专业必须有一个淘汰!</div>` + msg2, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
// }).then(a => { }).catch(err => { console.log(err) });
// return;
//}
//房建不少于5个
if (select_false_list[0] < 10) {
// this.$alert(`<div>房屋建筑工程不少于10个淘汰</div>` + msg2, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
// }).then(a => {
// }).catch(err => {
// console.log(err)
// });
alert("房屋建筑工程不少于 10 个淘汰!\n目前\n" + msg2);
return;
}
//市政不少于4个
if (select_false_list[1] < 5) {
// this.$alert(`<div>市政基础设施工程不少于5个淘汰</div>` + msg2, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
// }).then(a => {
// }).catch(err => {
// console.log(err)
// });
alert("市政基础设施工程不少于 5 个淘汰!\n目前\n" + msg2);
return;
}
//交通不少于1个
if (select_false_list[2] < 2) {
// this.$alert(`<div>轨道交通工程不少于2个淘汰</div>` + msg2, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
// }).then(a => {
// }).catch(err => {
// console.log(err)
// });
alert("轨道交通工程不少于 2 个淘汰!\n目前\n" + msg2);
return;
}
////水利不少于1个
//if (select_false_list[4] < 1) {
// this.$alert(`<div>水利工程不少于1个淘汰</div>` + msg2, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
// }).then(a => { }).catch(err => { console.log(err) });
// return;
//}
if (all_select_false_num < 17) {
//this.$alert(`<div>淘汰总数必须大于20个</div>` + msg2, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
//}).then(a => { }).catch(err => { console.log(err) });
alert("淘汰总数必须大于17个");
return;
}
this.$confirm(`您此次选择了同意` + all_select_true_num + `个,淘汰` + all_select_false_num + `个,是否继续提交? <br>目前:<br> ` +
msg2.replaceAll('\n', '<br>'), '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
dangerouslyUseHTMLString: true
}).then(() => {
_this.loading = true;
axios({
headers: {'Content-Type': 'application/json;charset=UTF-8'},
method: 'post',
url: '/gb/yjb/api/projects/submit-vote',
data: {'code': this.logincode, 'projects': allselects},
responseType: "json",
}).then(async response => {
if (response.data.data != true) {
//_this.$alert(`<div>` + response.data.message + `</div>`, '错误', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
//}).then(a => { }).catch(err => { console.log(err) });
alert(response.data.message);
} else {
//_this.$alert(`<div>提交成功</div>`, '成功', {
// confirmButtonText: '确定', dangerouslyUseHTMLString: true, center: true, closeOnClickModal: true
//}).then(a => { }).catch(err => { console.log(err) });
alert("提交成功");
}
_this.loading = false;
}).catch(async error => {
console.log(error)
_this.$message({
type: 'error',
message: error.message
})
_this.loading = false;
})
}).catch(() => {
});
})
},
load_projects() {
let _this = this;
axios({
headers: {'Content-Type': 'application/json;charset=UTF-8'},
method: 'post',
url: '/gb/yjb/api/projects/list',
data: {},
responseType: "json",
}).then(function (response) {
//console.log(response)
let _data = response.data.data.data
let typeList = response.data.data.typeList
_data.map(a => {
a.vote = !a.vote ? '' : a.vote.toString();
return a;
});
for (let i = 0; i < typeList.length; i++) {
let _p = _data.filter(a => {
return a.type == i;
});
_this.projects.push({name: typeList[i], data: _p})
}
_this.alltrue();
_this.loading = false;
}).catch(function (error) {
console.log(error)
_this.$message({
type: 'error',
message: error.message
})
_this.loading = false;
})
},
loading_false() {
this.loading = false
},
}
})
</script>
</html>