update code

prv
haha 2024-01-19 23:39:23 +08:00
parent 837f3fe9e1
commit bea8384839
9 changed files with 1034 additions and 55 deletions

View File

@ -20,6 +20,7 @@
"less": "^4.1.3",
"less-loader": "^11.1.3",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
"logt": "^1.4.1",
"nprogress": "0.2.0",
"vue": "^2.6.14",

View File

@ -13,7 +13,33 @@ const getProjectCheckingList=(deptId,projectId)=> {
method: 'get'
})
}
const getProjectCheckingGroupFoChart=(deptId,projectId)=> {
return request({
url: `bgscreen/projectChecking/getProjectCheckingGroupFoChart?deptId=${deptId||0}&projectId=${projectId||0}`,
method: 'get'
})
}
const groupCheckingByProjectId=(lvl,deptId,projectId)=> {
return request({
url: `bgscreen/projectChecking/groupCheckingByProjectId?lvl=${lvl}&deptId=${deptId||0}&projectId=${projectId||0}`,
method: 'get'
})
}
const queryProjectCheckingList=(pageNum,pageSize,data)=> {
return request({
url: `bgscreen/projectChecking/queryProjectCheckingList??pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'post',
data:data
})
}
export default{
getProjectCheckingList,
getProjectCheckingView
getProjectCheckingView,
getProjectCheckingGroupFoChart,
groupCheckingByProjectId,
queryProjectCheckingList
}

View File

@ -13,7 +13,16 @@ const getGroupByDataType=(deptId,projectId)=> {
})
}
const queryWorkTrainList=(pageNum,pageSize,data)=> {
return request({
url: `bgscreen/workTrain/queryWorkTrainList?pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'post',
data:data
})
}
export default{
getWorkTrainList,
getGroupByDataType
getGroupByDataType,
queryWorkTrainList
}

View File

@ -46,7 +46,7 @@
:color="scope.$index < 3 && +scope.row.id > 0 ? '#f05e35' : '#6ab9fe'"></idle-list-chart>
</template>
</el-table-column>
<el-table-column prop="id" label="隐患数" width="60" align="center">
<el-table-column prop="id" label="隐患数" width="70" align="center">
<template slot-scope="scope">
<div>{{ scope.row.id }} </div>
</template>
@ -155,8 +155,10 @@
:typedata="measuredData" :text="measuredText" :height="230"></project-overview-chart>
</module-one-1-1>
</el-col>
<el-col :span="6">
<module-one-3-1 label="举牌验收" class="scroll">
<el-col :span="6">
<projectChecking></projectChecking>
<!--
<div class="nav-info" style="padding:20px 20px 10px">
<span>
<span class="nav-label">首次验收:</span>
@ -193,8 +195,8 @@
<div class="row-5" @click="doShowChecking(it)">
验收描述:{{it.intro}}
</div>
</div>
</module-one-3-1>
</div>-->
</el-col>
</el-row>
</div>
@ -220,10 +222,11 @@ import checkDetectionDlg from './quality/checkDetectionDlg.vue'
import measuredDlg from './quality/measuredDlg.vue'
import materialSealChart from './quality/materialSealChart.vue'
import materialSealListDlg from './quality/materialSealListDlg.vue'
import projectChecking from './quality/projectChecking.vue'
import debounce from 'lodash.debounce'
export default {
components:{
materialSealListDlg, materialSealChart, ProblemmodifyDetail,showCheckingDlg,materialSealDetialDlg,checkDetectionDlg,measuredDlg
materialSealListDlg, materialSealChart, ProblemmodifyDetail,showCheckingDlg,materialSealDetialDlg,checkDetectionDlg,measuredDlg,projectChecking
},
data() {
return {
@ -483,8 +486,8 @@ export default {
})
this.elSummaryPrjKey++;
});
this.doProjectChecking();
},
//this.doProjectChecking();
},
doMeasuredNav(n,t){
this.measuredNav=n;
this.measuredText=t;
@ -523,10 +526,10 @@ export default {
this.acceptanceData=d.rows;
});
//
this.$api.projectChecking.getProjectCheckingView(this.dept?.id||0,this.projectInfo?.id||0).then(d=>{
this.acceptanceDataView.sum=d.data.sum;
this.acceptanceDataView.okSum=d.data.okSum;
});
// this.$api.projectChecking.getProjectCheckingView(this.dept?.id||0,this.projectInfo?.id||0).then(d=>{
// this.acceptanceDataView.sum=d.data.sum;
// this.acceptanceDataView.okSum=d.data.okSum;
// });
},
init(){
this.localStorage = JSON.parse(localStorage.getItem("data1"))
@ -753,37 +756,6 @@ export default {
padding:0px 5px;
}
}
.material-seal-list{
.material-seal-item{
padding:8px;
display: flex;
border-bottom: solid 1px #fff;
box-shadow: inset 7px 0px 11px 5px rgb(36 131 167 / 70%);
&:last-child{
border-bottom: none;
}
.material-seal-left{
width:40%;
}
.material-seal-right{
width:60%;
padding-left:12px;
line-height: 24px;
img{
width: 8px;
position: relative;;
top:3px;
}
.sp-lbl{
color: aquamarine;
white-space: nowrap;
}
.div-text{
margin-left:24px;
}
}
}
}
}
</style>

View File

@ -72,7 +72,10 @@
</module-one-3-1>
</el-col>
<el-col :span="6">
<module-one-1-1 :label="'专项培训('+WorkTrainCnt1+')'">
<module-one-1-1 :label="'专项培训('+WorkTrainCnt1+')'" style="position: relative;">
<img src="images/icon2001.png"
style="position: absolute;cursor: pointer;right: 20px;top: 13px;z-index: 9;"
@click="doShowWorkTrain(0)">
<enginChart ref="chart3" :height="300"></enginChart>
<!--
<div style="padding:10px" class="train-list scroll">
@ -106,7 +109,10 @@
</div>
</div>-->
</module-one-1-1>
<module-one-1-1 :label="'应急演练('+WorkTrainCnt2+')'">
<module-one-1-1 :label="'应急演练('+WorkTrainCnt2+')'" style="position: relative;">
<img src="images/icon2001.png"
style="position: absolute;cursor: pointer;right: 20px;top: 13px;z-index: 9;"
@click="doShowWorkTrain(1)">
<enginChart ref="chart4" :height="300"></enginChart>
<!--
<div style="padding:10px" class="train-list scroll">
@ -287,6 +293,7 @@
<AttendanceDetailDialog ref="attDetailDlg"></AttendanceDetailDialog>
<projectInsuranceDlg ref="insDlg"></projectInsuranceDlg>
<JobWorkerDialog ref="jobWorkerdlg"></JobWorkerDialog>
<workTrainListDlg ref="workTrainListDlg"></workTrainListDlg>
</div>
</template>
@ -306,15 +313,17 @@ import AttendanceDetailDialog from './components/AttendanceDetailDialog.vue'
import JobWorkerDialog from './components/JobWorkerDialog.vue'
import debounce from 'lodash.debounce'
import enginChart from './engin/enginChart.vue'
import workTrainListDlg from './safe/workTrainListDlg.vue'
export default {
components: {
worktrainDlg,
projectSpecialDlg,
ProblemmodifyDetail,AttendanceDetailDialog,
projectInsuranceDlg,JobWorkerDialog,enginChart
projectInsuranceDlg,JobWorkerDialog,enginChart,workTrainListDlg
},
data() {
return {
dictWorkTrainDataType:[],
selDate:'',
elSummaryKey:0,
elSummaryPrjKey:0,
@ -399,6 +408,9 @@ export default {
},
created() {
this.init();
this.$api.dict('work_train_data_type').then(d => {
this.dictWorkTrainDataType = d || [];
});
},
mounted() {
this.$bus.$on("projectChange", debounce(res => {
@ -432,10 +444,19 @@ export default {
},
methods: {
doShowWorkTrain(type){
this.$refs.workTrainListDlg.showDialog({
type:type,
deptId:this.dept.id||0,
projectId:this.projectInfo?.id||0,
prj:this.projectInfo||{},
dicts:this.dictWorkTrainDataType.filter(d=>d.cssClass==(type==0?'a':'b'))
});
},
doShowAttendanceDetail(){
let data={
deptId:this.dept.id||0,
projectId:this.project.id||0,
projectId:this.projectInfo?.id||0,
attendanceTime: this.$dt(new Date()).format("YYYY-MM-DD")
}
if(this.infoNav == 1){
@ -510,13 +531,12 @@ export default {
type: 'pie',
radius: '60%',
data: this.WorkTrainChart1,
label: {
label: {
alignTo:'edge',
edgeDistance: "10%",
color: "#fff",
formatter: '{name|{b}}\n{cnt|{c}}',
rich: {
name:{
},
rich: {
cnt: {
fontSize: 10,
color: '#eee'

View File

@ -0,0 +1,524 @@
<template>
<div class="project-quality-checking">
<module-one-1-1 label="举牌验收">
<div class="checking-row1" style="position: relative;height: 310px;overflow: hidden;">
<div class="checking-chart-nav">
<span class="chart-nv-item" @click="showChart1 = true" :class="showChart1 ? 'active' : ''">常规验收</span>
<span class="chart-nv-item" @click="showChart1 = false" :class="!showChart1 ? 'active' : ''">隐蔽验收</span>
</div>
<div v-if="chart">
<enginChart :class="showChart1 ? 'show-chart' : 'hide-chart'" ref="chart1" :height="300"></enginChart>
<enginChart :class="!showChart1 ? 'show-chart' : 'hide-chart'" ref="chart2" :height="300"></enginChart>
</div>
</div>
</module-one-1-1>
<module-one-1-1 label="常规验收" class="scroll checking-row2" style="position: relative;">
<img src="images/icon2001.png" style="position: absolute;cursor: pointer;right: 12px;top: 12px;"
@click="doShowCheckingListDlg(1)">
<div class="checking-group-nav warning-info-title" style="padding-left: 20px;">
<div class="nav-item" :class="nav1 == it.dictValue ? 'active' : ''" @click="doQueryGroup(it.dictValue, 'a')"
v-for="(it, idx) in dict1" :key="it.dictValue">{{ it.dictLabel }}</div>
</div>
<div v-if="!projectInfo || projectInfo.id == 0">
<div class="idle-list problemmodify_list" style="padding:0px 10px">
<el-table style="width: 100%" ref="wgzp" :row-style="rowStyle" :data="dataList1" height="233"
class="el-table">
<el-table-column type="index" width="40">
<template slot-scope="scope">
<div :class="scope.$index < 3 && +scope.row.value > 0 ? 'idle-list-color' : ''">
{{ scope.$index + 1 }} </div>
</template></el-table-column>
<el-table-column prop="name" label="项目名称" class-name="text-left" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="id" label="验收数量" width="80" align="center">
<template slot-scope="scope">
<div>{{ scope.row.count }} </div>
</template>
</el-table-column>
<el-table-column prop="id" label="占比" width="100" align="center">
<template slot-scope="scope">
<div>{{ scope.row.percent?scope.row.percent.toFixed(2)+'%':'' }} </div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div v-else style="padding:0px 2px;">
<div v-if="dataList1.length == 0" style="text-align: center;padding-top:20px" class="div-no-data">
<img src="images/nodata.png" style="width: 120px;">
<div style="text-align: center;font-size: 12px;color:#888;">暂无数据</div>
</div>
<div v-else class="acceptance-list scroll" >
<div class="acceptance-item" v-for="(it, idx) in dataList1" :key="idx" style="cursor: pointer;">
<div class="row-1">
<div class="div-img">
<el-image :src="getProfileImage(it.mainImage)" :preview-src-list="getBigProfileImage(it)" />
</div>
<div class="div-text" style="width: 65%;" @click="doShowChecking(it)">
<div class="row-3">
<div v-if="it.checkResult == '1'" class="sp-lbl"></div>
<div v-if="it.checkResult == '2'" class="sp-err"></div>
<div class="sp-date">{{ it.checkingDate }}</div>
</div>
<div class="row-3">
<span class="sp-label">项目:</span>
<span class="sp-text">{{ it.projectName }}</span>
</div>
<div class="row-3">
<span class="sp-label">区域:</span>
<span class="sp-text">{{ it.checkWorkingPosition }}</span>
</div>
</div>
</div>
<div class="row-5" @click="doShowChecking(it)">
验收描述:{{ it.intro }}
</div>
</div>
</div>
</div>
</module-one-1-1>
<module-one-1-1 label="隐蔽验收" class="scroll checking-row3" style="position: relative;">
<img src="images/icon2001.png" style="position: absolute;cursor: pointer;right: 12px;top: 12px;"
@click="doShowCheckingListDlg(2)">
<div class="checking-group-nav warning-info-title" style="padding-left: 20px;">
<div class="nav-item" :class="nav2 == it.dictValue ? 'active' : ''" @click="doQueryGroup(it.dictValue, 'b')"
v-for="(it, idx) in dict2" :key="it.dictValue">{{ it.dictLabel }}</div>
</div>
<div v-if="!projectInfo || projectInfo.id == 0">
<div class="idle-list problemmodify_list" style="padding:0px 10px">
<el-table style="width: 100%" ref="wgzp" :row-style="rowStyle" :data="dataList2" height="233"
class="el-table">
<el-table-column type="index" width="40">
<template slot-scope="scope">
<div :class="scope.$index < 3 && +scope.row.value > 0 ? 'idle-list-color' : ''">
{{ scope.$index + 1 }} </div>
</template></el-table-column>
<el-table-column prop="name" label="项目名称" class-name="text-left" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="id" label="验收数量" width="80" align="center">
<template slot-scope="scope">
<div>{{ scope.row.count }} </div>
</template>
</el-table-column>
<el-table-column prop="id" label="占比" width="100" align="center">
<template slot-scope="scope">
<div>{{ scope.row.percent?scope.row.percent.toFixed(2)+'%':'' }} </div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div v-else style="padding:0px 2px;">
<div v-if="dataList2.length == 0" style="text-align: center;padding-top:20px" class="div-no-data">
<img src="images/nodata.png" style="width: 120px;">
<div style="text-align: center;font-size: 12px;color:#888;">暂无数据</div>
</div>
<div v-else class="acceptance-list scroll" >
<div class="acceptance-item" v-for="(it, idx) in dataList2" :key="idx" style="cursor: pointer;">
<div class="row-1">
<div class="div-img">
<el-image :src="getProfileImage(it.mainImage)" :preview-src-list="getBigProfileImage(it)" />
</div>
<div class="div-text" style="width: 65%;" @click="doShowChecking(it)">
<div class="row-3">
<div v-if="it.checkResult == '1'" class="sp-lbl"></div>
<div v-if="it.checkResult == '2'" class="sp-err"></div>
<div class="sp-date">{{ it.checkingDate }}</div>
</div>
<div class="row-3">
<span class="sp-label">项目:</span>
<span class="sp-text">{{ it.projectName }}</span>
</div>
<div class="row-3">
<span class="sp-label">区域:</span>
<span class="sp-text">{{ it.checkWorkingPosition }}</span>
</div>
</div>
</div>
<div class="row-5" @click="doShowChecking(it)">
验收描述:{{ it.intro }}
</div>
</div>
</div>
</div>
</module-one-1-1>
<showCheckingDlg ref="checkDlg"></showCheckingDlg>
<listDlg ref="listDlg"></listDlg>
</div>
</template>
<script>
import throttle from 'lodash.throttle'
import enginChart from '../engin/enginChart.vue'
import showCheckingDlg from './showCheckingDlg.vue'
import listDlg from './projectCheckingListDlg.vue'
export default {
name: 'JhbigscreenProjectChecking',
components: {
enginChart, showCheckingDlg,listDlg
},
data() {
return {
rowStyle: {
color: '#B6CFEF',
fontSize: '12px',
height: '32px'
},
showChart1: true,
dept: null,
projectInfo: null,
dict1: [],
dict2: [],
nav1: 1,
nav2: 1,
chart: true,
dataList1: [],
dataList2: [],
};
},
created() {
this.$api.dict('project_checking_data_type_lvl2').then(d => {
let tmps = d || [];
this.dict1 = tmps.filter(it => it.cssClass == 'a');
this.dict2 = tmps.filter(it => it.cssClass == 'b');
if (this.dict1.length > 0) {
this.nav1 = this.dict1[0].dictValue;
this.doQueryGroup(this.nav1, "a");
}
if (this.dict2.length > 0) {
this.nav2 = this.dict2[0].dictValue;
this.doQueryGroup(this.nav2, "b");
}
});
},
mounted() {
this.$bus.$on("projectChange", throttle((res) => {
this.projectInfo = res;
this.loadData();
}));
this.$bus.$on("deptChange", throttle((dept) => {
this.dept = dept;
this.loadData();
}));
if (this.$root.hasInitHeader) {
this.initMe();
}
},
methods: {
doShowCheckingListDlg(lvl1){
this.$refs.listDlg.showDialog({
lvl1:lvl1,
deptId:this.dept?.id || 0,
projectInfo:this.projectInfo,
dicts:lvl1==1?this.dict1:this.dict2
});
},
doShowChecking(it) {
this.$refs.checkDlg.showDialog(it);
},
//
getProfileImage(url) {
if (url) {
return '/jhapi' + url + ".min.jpg";
}
return url;
},
getBigProfileImage(it) {
if (it.imageUrls) {
let tmps = it.imageUrls.split(",").filter(d => d).map(it => {
return '/jhapi' + it;
})
if (tmps.length > 0) {
return tmps;
}
}
if (it.mainImage && it.mainImage.trim()) {
return ['/jhapi' + it.mainImage];
}
return [];
},
doQueryGroup(nav, t) {
if (t == 'a') {
this.nav1 = nav;
} else {
this.nav2 = nav;
}
if (!this.projectInfo || this.projectInfo.id == 0) {
this.loadGroupData(nav, t);
} else {
this.queryDataList(nav, t);
}
},
queryDataList(nav, t) {
let postData = {
projectId: this.projectInfo.id,
dataTypeLvl2: nav
}
this.$api.projectChecking.queryProjectCheckingList(1, 20, postData).then(d => {
if (t == "a") {
this.dataList1 = d.rows || [];
} else {
this.dataList2 = d.rows || [];
}
});
},
loadGroupData(nav, t) {
this.$api.projectChecking.groupCheckingByProjectId(nav, this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
let tmps = (d.data || []).map(it => {
return {
name: it.projectName,
count: it.id || 0,
percent: 0
}
});
let sum = 0;
tmps.forEach(it => {
sum += it.count;
})
if (sum > 0) {
tmps.forEach(it => {
it.percent = it.count * 100.0 / sum
})
}
if (t == "a") {
this.dataList1 = tmps;
} else {
this.dataList2 = tmps;
}
});
},
initMe() {
this.projectInfo = this.$root.project || {};
this.dept = this.$root.dept || {};
this.loadData();
},
loadData: throttle(function () {
this.doGetProjectCheckingChart();
if (this.dict1.length > 0) {
this.nav1 = this.dict1[0].dictValue;
this.doQueryGroup(this.nav1, "a");
}
if (this.dict2.length > 0) {
this.nav2 = this.dict2[0].dictValue;
this.doQueryGroup(this.nav2, "b");
}
}),
initChartData(d) {
let tmp1 = (d.data || []).filter(it => it.checkType == 'a').map(it => {
return { name: it.mainImage, value: it.id || 0 };
});
let tmp2 = (d.data || []).filter(it => it.checkType == 'b').map(it => {
return { name: it.mainImage, value: it.id || 0 };
});
let opt = {
tooltip: {
trigger: 'item'
},
series: [{
top: 10,
type: 'pie',
radius: '60%',
data: tmp1,
label: {
alignTo: 'edge',
edgeDistance: "10%",
color: "#fff",
formatter: '{name|{b}}\n{cnt|{c}}',
rich: {
cnt: {
fontSize: 10,
color: '#eee',
}
}
},
}
]
};
if (this.$refs.chart1 && this.$refs.chart1.init) {
this.$refs.chart1.init(opt);
}
let opt2 = {
tooltip: {
trigger: 'item'
},
series: [{
top: 10,
type: 'pie',
radius: '60%',
data: tmp2,
label: {
alignTo: 'edge',
edgeDistance: "10%",
color: "#fff",
formatter: '{name|{b}}\n{cnt|{c}}',
rich: {
cnt: {
fontSize: 10,
color: '#eee'
}
}
},
}
]
};
if (this.$refs.chart2 && this.$refs.chart2.init) {
this.$refs.chart2.init(opt2);
}
},
doGetProjectCheckingChart() {
this.chart = false;
this.$api.projectChecking.getProjectCheckingGroupFoChart(this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
this.chart = true;
setTimeout(() => {
this.initChartData(d);
}, 400);
});
},
},
};
</script>
<style lang="less">
.project-quality-checking {
.checking-row1 {
position: relative;
.checking-chart-nav {
position: absolute;
width: 100%;
top: 12px;
text-align: center;
z-index: 10;
.chart-nv-item {
cursor: pointer;
display: inline-block;
padding: 4px 10px;
font-size: 12px;
background-color: #fff;
color: #000;
&.active {
background-color: #68BBC4;
color: #fff;
}
&:first-child {
border-radius: 4px 0px 0px 4px;
}
&:last-child {
border-radius: 0px 4px 4px 0px;
}
}
}
.engin-chart1 {
&.hide-chart {
left: -100000px;
top: -100000px;
}
&.show-chart {
position: relative;
left: unset;
}
&:last-child {
&.show-chart {
top: -300px;
}
}
}
}
.problemmodify_list {
&.idle-list{
.el-table__body .el-table__row {
line-height: 36px;
height: 36px !important;
}
.el-table td{
height: 36px;
}
}
.el-table__body-wrapper {
&::-webkit-scrollbar {
width: 8px;
height: 8px;
}
&::-webkit-scrollbar-thumb {
background-color: rgb(1, 169, 255);
border-radius: 4px;
}
tr {
cursor: pointer;
}
}
}
.material-seal-list {
.material-seal-item {
padding: 8px;
display: flex;
border-bottom: solid 1px #fff;
box-shadow: inset 7px 0px 11px 5px rgb(36 131 167 / 70%);
&:last-child {
border-bottom: none;
}
.material-seal-left {
width: 40%;
}
.material-seal-right {
width: 60%;
padding-left: 12px;
line-height: 24px;
img {
width: 8px;
position: relative;
;
top: 3px;
}
.sp-lbl {
color: aquamarine;
white-space: nowrap;
}
.div-text {
margin-left: 24px;
}
}
}
}
.acceptance-list{
margin-top: 0px;
max-height: 230px;
overflow-y: auto;
.acceptance-item{
&:first-child{
margin-top:0px;
}
.row-3{
display: flex;
}
}
}
}
</style>

View File

@ -0,0 +1,222 @@
<template>
<MyDialog v-if="show" v-model="show" width="1600px" height="800px" class="project-checking-list-dialog">
<template slot="title">{{ lvl1 == 1 ? '常规验收' : '隐蔽验收' }}{{ prjName ? ' - ' + prjName : '' }}</template>
<div class="head-title-tab" style="padding: 10px 0px;max-width: unset;">
<div v-for="(it, idx) in dicts" :key="idx" :class="nav == it.dictValue ? 'head-nav active' : 'head-nav'" @click="doNav(it.dictValue)"
>{{ it.dictLabel }}</div>
</div>
<div class="data-list">
<div v-if="tableData.length == 0" style="text-align: center;padding-top:200px" class="div-no-data">
<img src="images/nodata.png" style="width: 120px;">
<div style="text-align: center;font-size: 12px;color:#888;">暂无数据</div>
</div>
<div v-else class="acceptance-list" >
<div class="acceptance-item" v-for="(it, idx) in tableData" :key="idx" style="cursor: pointer;">
<div class="row-1">
<div class="div-img">
<el-image :src="getProfileImage(it.mainImage,true)" :preview-src-list="getBigProfileImage(it)" />
</div>
<div class="div-text" style="width: 65%;" @click="doShowChecking(it)">
<div class="row-3">
<div v-if="it.checkResult == '1'" class="sp-lbl"></div>
<div v-if="it.checkResult == '2'" class="sp-err"></div>
<div class="sp-date">{{ it.checkingDate }}</div>
</div>
<div class="row-3">
<span class="sp-label">项目:</span>
<span class="sp-text" :title="it.projectName">
<span class="span-text">{{ it.projectName }}</span>
</span>
</div>
<div class="row-3">
<span class="sp-label">区域:</span>
<span class="sp-text" :title="it.checkWorkingPosition">
<span class="span-text">{{ it.checkWorkingPosition }}</span>
</span>
</div>
</div>
</div>
<div class="row-5" @click="doShowChecking(it)">
<div class="row-5-txt"> 验收描述:{{ it.intro }}</div>
</div>
</div>
</div>
</div>
<el-pagination layout="total,prev, pager, next" :hide-on-single-page="true" @current-change="handleCurrentChange"
:total="total" :page-size="size" :current-page.sync="index" class="bg-pagination"></el-pagination>
<showCheckingDlg ref="checkDlg"></showCheckingDlg>
</MyDialog>
</template>
<script>
import showCheckingDlg from './showCheckingDlg.vue'
import MyDialog from '../components/MyDialog'
export default {
name: 'JhbigscreenProjectCheckingListDlg',
components: {
MyDialog,showCheckingDlg
},
data() {
return {
show:false,
tableData: [],
nav: 1,
index: 1,
size: 9,
deptId: 0,
projectId: 0,
total: 0,
prjName: '',
lvl1:1,
dicts: [],
};
},
mounted() {
},
methods: {
doShowChecking(it) {
this.$refs.checkDlg.showDialog(it);
},
getBigProfileImage(it) {
if (it.imageUrls) {
let tmps = it.imageUrls.split(",").filter(d => d).map(it => {
return '/jhapi' + it;
})
if (tmps.length > 0) {
return tmps;
}
}
if (it.mainImage && it.mainImage.trim()) {
return ['/jhapi' + it.mainImage];
}
return [];
},
//
getProfileImage(url, min) {
if (url) {
return '/jhapi' + url + (min ? ".min.jpg" : "");
}
return url;
},
handleCurrentChange(n) {
this.index = n;
this.loadData();
},
doNav(n) {
this.nav = n;
this.index = 1;
this.loadData();
},
showDialog(data) {
this.lvl1=data.lvl1;
this.dicts=data.dicts||[];
this.deptId=data.deptId;
this.projectId=data.projectInfo?.id||0;
if(data.projectInfo){
this.prjName=data.projectInfo.projectName||'';
}else{
this.projectName="";
}
this.nav = this.dicts.length > 0 ? this.dicts[0].dictValue : 0;
this.index = 1;
this.loadData();
this.show = true
},
loadData(){
let postData = {
dataTypeLvl2: this.nav
};
if(this.deptId>0){
postData.deptId=this.deptId;
}
if(this.projectId>0){
postData.projectId=this.projectId;
}
this.$api.projectChecking.queryProjectCheckingList(this.index, 9, postData).then(d => {
this.tableData=d.rows||[];
this.total=d.total;
});
}
},
};
</script>
<style lang="less">
.project-checking-list-dialog{
.popup-project-introduction-min {
transform: translateY(10vh);
.data-list{
margin-bottom: 8px;
.acceptance-list{
margin-top:12px;
display: grid;
grid-template-columns: 33% 33% 33%;
grid-row-gap: 30px;
margin-left: -80px;
width: calc(100% + 100px);
max-height: 630px;
.acceptance-item{
display: inline-block;
height: 155px;
border: solid 1px #ccc;
border-radius: 5px;
margin-left: 80px;
.row-1{
.div-img{
div.el-image {
display: flex;
height: 120px;
width: 160px;
justify-items: center;
align-items: center;
.el-image__inner {
height: unset;
width: 160px;
}
}
}
}
.row-5{
display: flex;
align-items: center;
height: 48px;
.row-5-txt{
line-height: 24px;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
}
.sp-label{
display: inline-block;
width: 40px;
}
.sp-text{
display: inline-block;
max-width: calc(100% - 40px);
height: 24px;
.span-text{
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
display: block;
white-space: nowrap;
}
}
}
}
}
}
.head-nav {
width: 150px;
}
}
</style>

View File

@ -0,0 +1,200 @@
<template>
<MyDialog v-if="show" v-model="show" width="1600px" height="740px" class="work-train-dialog">
<template slot="title">{{ trainType == 0 ? '专项培训' : '应急演练' }}{{ prjName ? ' - ' + prjName : '' }}</template>
<div class="head-title-tab" style="padding: 10px 0px;max-width: unset;">
<div v-for="(it, idx) in dicts" :key="idx" :class="nav == it.dictValue ? 'head-nav active' : 'head-nav'" @click="doNav(it.dictValue)"
>{{ it.dictLabel }}</div>
</div>
<div class="data-list">
<div class="data-item" v-for="(it, idx) in tableData" :key="idx" >
<div class="data-item-row1">
<div class="data-item-img">
<el-image :src="getProfileImage(it.mainImage, true)" style="width:100%;"
:preview-src-list="[getProfileImage(it.mainImage)]" />
</div>
<div class="data-item-row-right" style="cursor: pointer;" @click="doShowDlgTrain(it)">
<div class="bottom-line2" style="line-height: 24px;margin-top: 8px;">
<span style="color:#59A0DC;display: inline-block;margin-right: 8px;">{{ idx < 9 ? '0' + (idx +
1) : '' + (idx + 1) }}</span>
<span style="font-weight: bold;color:#59A0DC;">{{ it.trainTitle }}</span>
</div>
<div style="display: flex;align-items: center;">
<div style="line-height: 24px;color:#aaa;font-size: 12px;margin-top:12px;">
<div><span>参与人数</span><span style="color:#436CE9">{{ it.trainParticipants }}</span><span>
</span>
</div>
<div>
<span>培训时间:</span><span>{{ it.beginDate }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="data-item-row2" style="cursor: pointer;" @click="doShowDlgTrain(it)">
<div style="margin-top: -6px;color:#b8beef;font-size: 12px;">
<span>协作队伍:</span><span class="txt-over" :title="it.trainDeptNames">{{ it.trainDeptNames }}</span></div>
</div>
</div>
</div>
<el-pagination layout="total,prev, pager, next" :hide-on-single-page="true" @current-change="handleCurrentChange"
:total="total" :page-size="size" :current-page.sync="index" class="bg-pagination"></el-pagination>
<worktrainDlg ref="workTrainDlg"></worktrainDlg>
</MyDialog>
</template>
<script>
import MyDialog from '../components/MyDialog'
import worktrainDlg from '../dlg/workTrainDlg.vue'
export default {
components: {
MyDialog,worktrainDlg
},
name: 'JhbigscreenIndexDlg1',
data() {
return {
show: false,
tableData: [],
nav: 1,
index: 1,
size: 9,
deptId: 0,
projectId: 0,
total: 0,
prjName: '',
trainType: 0,
dicts: [],
};
},
mounted() {
},
methods: {
doShowDlgTrain(it) {
if (this.trainType == 0) {
it.title = "专项培训";
it.typeTitle = "培训";
} else {
it.title = "应急演练";
it.typeTitle = "演练";
}
this.$refs.workTrainDlg.showDialog(it)
},
//
getProfileImage(url, min) {
if (url) {
return '/jhapi' + url + (min ? ".min.jpg" : "");
}
return url;
},
handleCurrentChange(n) {
this.index = n;
this.loadData();
},
doNav(n) {
this.nav = n;
this.index = 1;
this.loadData();
},
showDialog(data) {
this.dicts = data.dicts || [];
this.trainType = data.type;
this.deptId = data.deptId;
this.projectId = data.projectId;
if (data.prj) {
this.prjName = data.prj.projectName || '';
} else {
this.prjName = "";
}
this.nav = this.dicts.length > 0 ? this.dicts[0].dictValue : 0;
this.index = 1;
this.loadData();
this.show = true
},
loadData() {
let data = {
deptId: this.deptId,
projectId: this.projectId,
trainType: this.trainType,
dataType: this.nav
};
this.$api.workTrain.queryWorkTrainList(this.index, 9, data).then(d => {
this.tableData = d.rows || [];
this.total = d.total;
})
}
},
};
</script>
<style lang="less" scoped>
.mytable {
/deep/ th .cell {
color: aquamarine;
}
}
</style>
<style lang="less">
.work-train-dialog {
.popup-project-introduction-min {
transform: translateY(10vh);
}
.head-nav {
width: 150px;
}
.bg-pagination {
margin-top: 20px;
}
.data-list {
margin-top:12px;
display: grid;
grid-template-columns: 33% 33% 33%;
grid-row-gap: 30px;
margin-left: -80px;
width: calc(100% + 100px);
.data-item {
display: inline-block;
height: 155px;
border: solid 1px #ccc;
border-radius: 5px;
margin-left: 80px;
&.col-1 {
margin-left: 0px;
}
.data-item-row1 {
display: grid;
grid-template-columns: 50% 50%;
.data-item-img {
padding: 10px;
div.el-image {
display: flex;
height: 100px;
justify-items: center;
align-items: center;
.el-image__inner {
height: unset;
}
}
}
}
.data-item-row2 {
padding:0px 10px;
display: flex;
align-items: center;
height: 30px;
}
}
}
}</style>

View File

@ -4107,6 +4107,11 @@ lodash.merge@^4.6.2:
resolved "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==
lodash.truncate@^4.4.2:
version "4.4.2"
resolved "https://registry.npmmirror.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz"