Compare commits

..

No commits in common. "6adedec1702dbe44cdc7756ef630f675085b3f98" and "f0894ff15424e309b779f6bf5808ddd7a77bbeb3" have entirely different histories.

29 changed files with 1957 additions and 2602 deletions

View File

@ -8,9 +8,9 @@ const groupByCheckType=(data)=> {
})
}
const getList=(data,pageSize,pageNum)=>{
const getList=data=>{
return request({
url: `bgscreen/checkDetection/getList?pageNum=${pageNum}&pageSize=${pageSize}`,
url: `bgscreen/checkDetection/getList`,
method: 'post',
data:data
})

View File

@ -91,7 +91,7 @@ const sumForBsEnginAuditing=data=>{
data5:getValue(5),
data6:getValue(6),
};
obj.percent=obj.data2==0?0:obj.data3*100.0/obj.data2;
obj.percent=obj.data1==0?0:obj.data3*100.0/obj.data1;
if(obj.percent>100){
obj.percent=100;
}
@ -137,17 +137,10 @@ const selectForBigEnginList=data=>{
});
});
};
const groupBYProject=data=>{
return request({
url:'/project/costOutput/groupBYProject',
method: 'post',
data:data
})
}
export default{
selectYearAndMonth,
sumByDeptId,
sumForBsEnginAuditing,
selectForBigEnginList,
groupBYProject
selectForBigEnginList
}

View File

@ -84,36 +84,6 @@ const findFormDatasByProcInsId=(procInsId)=> {
})
}
const findFlowLabourList=(projId,nv,pageNum,pageSize)=> {
return request({
url: `bgscreen/flow/findFlowLabourList?projectId=${projId}&activeName=${nv}&pageNum=${pageNum}&pageSize=${pageSize}`,
method: 'get'
})
}
const findFlowLabourGroupCountByApprove=(deptId,projectId)=> {
return request({
url: `bgscreen/flow/findFlowLabourGroupCountByApprove?projectId=${projectId}&deptId=${deptId}`,
method: 'get'
})
}
//工程管理-分包单位占比
const groupFlowBySubDeptType=(data)=>{
return request({
url:'bgscreen/flow/groupFlowBySubDeptType',
method:'post',
data:data
})
}
const listFlowBySubDeptType=(data,pageNum,pageSize)=>{
return request({
url:`bgscreen/flow/listFlowBySubDeptType?pageNum=${pageNum}&pageSize=${pageSize}`,
method:'post',
data:data
})
}
export default{
groupByCategory,
@ -125,9 +95,5 @@ export default{
groupByProject,
findSafetyWorkList,
findFormDatasByProcInsId,
listByCategory,
findFlowLabourList,
findFlowLabourGroupCountByApprove,
groupFlowBySubDeptType,
listFlowBySubDeptType
listByCategory
}

View File

@ -6,57 +6,35 @@
<div class="head-title-tab">
<div v-if="!isTypeBuser" :class="nav == 1 ? 'head-nav active' : 'head-nav'" @click="pageJump(1, '#/')">
</div>
<div :class="(nav >=200 && nav <300) || nav==2? 'head-nav active' : 'head-nav'" style="position: relative;"
<div :class="(nav >=20 && nav <30) || nav==2? 'head-nav active' : 'head-nav'" style="position: relative;"
class="has-submenu">
<div @click="pageJump(2, '#/detail')">项目详情</div>
<div class="header-btn-list">
<div class="header-btn-list-arrow"></div>
<div class="header-btn-list-item" style="">
<div class="header-btn-list-padding" style="text-align: left;display: grid;grid-template-columns: 20% 20% 20% 20% 20%;">
<button type="button" :class="nav == 208 ? 'active' : ''" class="sub-btn"
@click="pageJump(208, '#/prjSafety')">安全管理</button>
<button type="button" :class="nav == 209 ? 'active' : ''" class="sub-btn"
@click="pageJump(209, '#/prjQuality')">质量管理</button>
<button type="button" :class="nav == 210 ? 'active' : ''" class="sub-btn"
@click="pageJump(210, '#/prjProgress')">进度管理</button>
<button type="button" :class="nav == 211 ? 'active' : ''" class="sub-btn"
@click="pageJump(211, '#/prjVideo')">视频监控</button>
<button type="button" :class="nav == 212 ? 'active' : ''" class="sub-btn"
@click="pageJump(212, '#/prjAiVideo')">AI识别监控</button>
<button type="button" :class="nav == 213 ? 'active' : ''" class="sub-btn"
@click="pageJump(213, '#/prjPhotography')">项目全景</button>
<button type="button" :class="nav == 214 ? 'active' : ''" class="sub-btn"
@click="pageJump(214, '#/prjEngin')" v-if="!isTypeBuser" >工程管理</button>
<button type="button" :class="nav == 215 ? 'active' : ''" class="sub-btn"
@click="pageJump(215, '#/prjEnginAuditing')" v-if="!isTypeBuser" >工程审核</button>
<button type="button" :class="nav == 201 ? 'active' : ''" class="sub-btn"
@click="pageJump(201, '#/towerCrane')">塔吊监控</button>
<button type="button" :class="nav == 202 ? 'active' : ''" class="sub-btn"
@click="pageJump(202, '#/excavation')">基坑监控</button>
<button type="button" :class="nav == 203 ? 'active' : ''" class="sub-btn"
@click="pageJump(203, '#/distributionBox')">配电箱监控</button>
<button type="button" :class="nav == 204 ? 'active' : ''" class="sub-btn"
@click="pageJump(204, '#/dumbwaiter')">升降机监控</button>
<button type="button" :class="nav == 205 ? 'active' : ''" class="sub-btn"
@click="pageJump(205, '#/personnelPosition')">人员定位</button>
<button type="button" :class="nav == 206 ? 'active' : ''" class="sub-btn"
@click="pageJump(206, '#/standardCuringRoom')">标养室检测</button>
<button type="button" :class="nav == 207 ? 'active' : ''" class="sub-btn"
@click="pageJump(207, '#/concreteStrength')">混泥土强度检测</button>
<div class="header-btn-list-padding" style="text-align: left;">
<button type="button" :class="nav == 21 ? 'active' : ''" class="sub-btn"
@click="pageJump(21, '#/towerCrane')">塔吊监控</button>
<button type="button" :class="nav == 22 ? 'active' : ''" class="sub-btn"
@click="pageJump(22, '#/excavation')">基坑监控</button>
<button type="button" :class="nav == 23 ? 'active' : ''" class="sub-btn"
@click="pageJump(23, '#/distributionBox')">配电箱监控</button>
<button type="button" :class="nav == 24 ? 'active' : ''" class="sub-btn"
@click="pageJump(24, '#/dumbwaiter')">升降机监控</button> <br/>
<button type="button" :class="nav == 25 ? 'active' : ''" class="sub-btn"
@click="pageJump(25, '#/personnelPosition')">人员定位</button>
<button type="button" :class="nav == 26 ? 'active' : ''" class="sub-btn"
@click="pageJump(26, '#/standardCuringRoom')">标养室检测</button>
<button type="button" :class="nav == 27 ? 'active' : ''" class="sub-btn"
@click="pageJump(27, '#/concreteStrength')">混泥土强度检测</button>
</div>
</div>
</div>
</div>
<div v-if="!isTypeBuser" :class="nav == 3 ? 'head-nav active' : 'head-nav'" @click="pageJump(3, '#/safety')"></div>
<div v-if="!isTypeBuser" :class="nav == 4 ? 'head-nav active' : 'head-nav'" @click="pageJump(4, '#/quality')"></div>
<div v-if="!isTypeBuser" :class="nav == 5 ? 'head-nav active' : 'head-nav'" @click="pageJump(5, '#/progress')"></div>
<div v-if="!isTypeBuser" :class="nav == 61 || nav == 62 || nav==63 ? 'head-nav active' : 'head-nav'" style="position: relative;"
<div :class="nav == 3 ? 'head-nav active' : 'head-nav'" @click="pageJump(3, '#/safety')">安全管理</div>
<div :class="nav == 4 ? 'head-nav active' : 'head-nav'" @click="pageJump(4, '#/quality')">质量管理</div>
<div :class="nav == 5 ? 'head-nav active' : 'head-nav'" @click="pageJump(5, '#/progress')">进度管理</div>
<div :class="nav == 61 || nav == 62 || nav==63 ? 'head-nav active' : 'head-nav'" style="position: relative;"
class="has-submenu">
<div>视频管理</div>
<div class="header-btn-list">
@ -74,7 +52,7 @@
</div>
</div>
<div v-if="!isTypeBuser" :class="(nav >=70 && nav <80) || nav==7? 'head-nav active' : 'head-nav'" style="position: relative;"
<div :class="(nav >=70 && nav <80) || nav==7? 'head-nav active' : 'head-nav'" style="position: relative;"
class="has-submenu">
<div @click="pageJump(7, '#/engin')">工程管理</div>
<div class="header-btn-list">
@ -98,7 +76,7 @@
</div>
<el-collapse-transition>
<ul class="header-screen-ul" v-show="showSel1" ref="selectUl">
<li v-for="item in depts" @click="doSetScreenLiSel1(item)" :title="item.text">{{ item.text }}</li>
<li v-for="item in depts" @click="setScreenLiSel1(item)" :title="item.text">{{ item.text }}</li>
</ul>
</el-collapse-transition>
</div>
@ -109,7 +87,7 @@
</div>
<el-collapse-transition>
<ul class="header-screen-ul" v-show="showSel3">
<li v-for="item in proTypeList" @click="doSetScreenLiSel3(item)" :title="item.text">{{ item.text }}</li>
<li v-for="item in proTypeList" @click="setScreenLiSel3(item)" :title="item.text">{{ item.text }}</li>
</ul>
</el-collapse-transition>
</div>
@ -119,7 +97,7 @@
</div>
<el-collapse-transition>
<ul class="header-screen-ul" v-show="showSel2" ref="selectUl">
<li v-for="item in data" @click="doSetScreenLiSel2(item)" :title="item.text">{{ item.text }}</li>
<li v-for="item in data" @click="setScreenLiSel2(item)" :title="item.text">{{ item.text }}</li>
</ul>
</el-collapse-transition>
</div>
@ -205,7 +183,6 @@ export default {
condCode: '',
proTypeList:[],
proType:'',
projs:[],
}
},
created(){
@ -247,17 +224,9 @@ export default {
this.isTypeBuser = true;
if (this.$route.name == "index") {
this.$router.push("/detail");
return;
}
}
let ajaxs=[
this.$api.dept.list(),
this.$api.project.findProjectByDept(0)
];
let res=await this.$api.http.all(ajaxs);
this.projs=res[1].data||[];
if ([5, 6, 7, 15, 16, 17, 99].includes(roleId)) {
let objs = (res[1]?.data || []).map(it => {
this.$api.project.findProjectByDept(-1).then(d => {
let objs = (d?.data || []).map(it => {
it.text = it.projectName;
return it;
}).filter(it => +it.progressVisible == 0);
@ -265,36 +234,40 @@ export default {
let dept={id:0,text:''};
this.$root.dept=dept;
this.$root.hasInitHeader=true;
this.$bus.$emit("deptChange", dept)
this.$root._prjIds=objs.map(it=>it.id);
Cookies.set("__ids__",objs.map(it=>it.id).join(","));
this.$bus.$emit("loadProjects", this.data);
this.$root.projects = this.data;
if (this.data.length > 0) {
this.setScreenLiSel2(this.data[0], true);
} else {
this.setScreenLiSel2(null);
}
});
} else {
this.isTypeBuser = false;
this.$api.dept.list().then(d => {
this.$root.hasInitHeader = true;
if (roleId < 4) {
this.depts = [{ text: '产发集团', id: 0 }, ...(res[0]?.data || []).map(it => {
this.depts = [{ text: '产发集团', id: 0 }, ...(d?.data || []).map(it => {
it.text = it.deptName;
it.id = it.deptId;
return it;
})]
} else {
this.depts = [...(res[0]?.data || []).map(it => {
it.text = it.deptName;
it.id = it.deptId;
return it;
})]
}
this.setScreenLiSel1(this.localStorage1);
this.deptChange();
} else {
this.depts = [...(d?.data || []).map(it => {
it.text = it.deptName;
it.id = it.deptId;
return it;
})]
}
this.setScreenLiSel1(this.localStorage1);
this.deptChange();
});
}
this.$root.isTypeBuser = this.isTypeBuser;
this.init();
this.$bus.$emit("headerChange",this);
},
methods: {
initMe() {
@ -379,6 +352,7 @@ export default {
}
let tmps = this.depts.filter(d => d.text == this.dept1);
if (tmps.length > 0) {
this.$bus.$emit("deptChange", tmps[0])
this.$root.dept = tmps[0];
}
},
@ -396,10 +370,7 @@ export default {
this.nav = n;
this.setTitle();
if (url) {
location.href="#/"
setTimeout(()=>{
location.href = url
},400);
location.href = url
} else {
this.$notify({
title: '提示',
@ -436,21 +407,10 @@ export default {
this.deptChange();
this.loadProject();
},
doSetScreenLiSel1(item){
this.setScreenLiSel1(item);
this.$bus.$emit("headerChange",this);
},
doSetScreenLiSel2(item){
this.setScreenLiSel2(item);
this.$bus.$emit("headerChange",this);
},
doSetScreenLiSel3(item){
this.setScreenLiSel3(item);
this.$bus.$emit("headerChange",this);
},
setScreenLiSel1(item) {
localStorage.setItem("data1", JSON.stringify(item))
this.localStorage1 = JSON.parse(localStorage.getItem("data1"))
this.$emit('itemdata', item);
this.showSel1 = false
this.dept1 = item.text;
this.deptChange();
@ -460,24 +420,13 @@ export default {
if (this.isTypeBuser) {
return;
}
let tmps=this.projs.filter(d=>{
let b1= true;
if(this.localStorage1.id!=0){
b1=d.deptId==this.localStorage1.id
}
let b2=true;
let tmps=this.proTypeList.filter(it=>it.text==this.proType);
if(tmps.length>0 && tmps[0].value!=0){
b2=d.projectType==tmps[0].value;
}
return b1 && b2;
});
let objs = (tmps || []).map(it => {
this.$api.project.findProjectByDept(this.localStorage1.id).then(d => {
let objs = (d?.data || []).map(it => {
it.text = it.projectName;
return it;
}).filter(it => +it.progressVisible == 0);
this.data = [{ id: 0, text: '所有项目' }, ...objs];
//this.$bus.$emit("loadProjects", this.data);
this.$bus.$emit("loadProjects", this.data);
this.$root.projects = this.data;
if(this.data.find(it=>it.id==this.localStorage2.id)){
this.setScreenLiSel2(this.localStorage2)
@ -491,7 +440,7 @@ export default {
if(cb){
cb();
}
});
},
setScreenLiSel2(item, init) {
if (item) {
@ -503,6 +452,7 @@ export default {
this.dept2 = item.text;
}
this.$root.project = this.localStorage2;
this.$bus.$emit("projectChange", this.localStorage2);
} else {
localStorage.removeItem("data2");
this.localStorage2 = {};
@ -531,7 +481,7 @@ export default {
<style lang="less">
.head-title{
z-index: 999;
z-index: 9999;
}
.main-header {
.head-title-tab {

View File

@ -6,9 +6,9 @@
ref="fbsubordinateUnit" :show-summary="tableData.length > 1">
<el-table-column label="项目名称" align="left" prop="prjName" />
<el-table-column label="部门" align="left" prop="dptName"></el-table-column>
<el-table-column label="总包人数" align="center" prop="data101" />
<el-table-column label="劳务人数" align="center" prop="data101" />
<el-table-column label="监理人数" align="center" prop="data102" />
<el-table-column label="劳务7人数" align="center" prop="data103" />
<el-table-column label="总包人数" align="center" prop="data103" />
<el-table-column label="合计" align="center" prop="total">
<template slot-scope="{row}"><span style="font-size:16px;font-weight: bold;color:#87e3fa;">{{row.total }}</span></template>
</el-table-column>

View File

@ -39,7 +39,6 @@
<div
class="glr-login-number-max analyse-num-max"
v-for="(item, idx) in warningType"
v-if="type != 'detail' || (type == 'detail' && item.name != '劳资预警')"
style="height: unset"
:key="idx"
>
@ -47,14 +46,14 @@
<div class="glr-login-number analyse-login-numbe">
<div><img src="images/text_red_spot.png" />{{ item.name }}</div>
<div class="glr-rate-value glr-rate-red-value">
<template v-if="idx == 0">
<span style="color: #c0dafb">{{ item.total }}</span>
<template v-if="idx==0">
<span style="color: #c0dafb">{{ item.total }}</span>
</template>
<template v-else>
<span>{{ item.data }}</span
>/
<span style="color: #c0dafb">{{ item.total }}</span>
<span>{{ item.data }}</span>/
<span style="color: #c0dafb">{{item.total }}</span>
</template>
</div>
</div>
</div>
@ -95,17 +94,21 @@ export default {
data: 0,
total: 0,
},
{
name: "劳资预警",
data: 0,
total: 0,
},
],
};
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
this.$bus.$on("projectChange", (res) => {
this.prjInfo = res;
if (this.deptInfo.text) {
this.getMonitAndWarning();
}
});
this.$bus.$on("deptChange", (dept) => {
this.deptInfo = dept;
if (this.prjInfo.id) {
this.getMonitAndWarning();
}
});
if (this.$root.hasInitHeader) {
this.initMe();
@ -125,71 +128,57 @@ export default {
if (this.type == "detail") {
prjId = this.prjInfo.id;
}
this.$api.problemmodify
.getMonitAndWarning(this.deptInfo.id || 0, prjId)
.then((d) => {
let tmps = d.data?.today || [];
let sum = 0;
tmps.forEach((it) => {
sum += it.total;
});
this.todayCnt = sum;
sum = 0;
tmps = d.data?.week || [];
tmps.forEach((it) => {
sum += it.total;
});
this.weekCnt = sum;
let data = 0;
sum = 0;
tmps = d.data?.group || [];
let objs = tmps.filter((it) => it.infotype == "0");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "4") {
data += it.total;
}
});
this.warningType[1].data = data;
this.warningType[1].total = sum;
data = 0;
sum = 0;
tmps = d.data?.group || [];
objs = tmps.filter((it) => it.infotype == "1");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "4") {
data += it.total;
}
});
this.warningType[2].data = data;
this.warningType[2].total = sum;
data = 0;
sum = 0;
tmps = d.data?.group || [];
objs = tmps.filter((it) => it.infotype == "96");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "4") {
data += it.total;
}
});
this.warningType[0].data = data;
this.warningType[0].total = sum;
data = 0;
sum = 0;
tmps = d.data?.group || [];
objs = tmps.filter((it) => it.infotype == "97");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "100") {
data += it.total;
}
});
this.warningType[3].data = data;
this.warningType[3].total = sum;
this.elKey++;
this.$api.problemmodify.getMonitAndWarning(this.deptInfo.id||0, prjId).then((d) => {
let tmps = d.data?.today || [];
let sum = 0;
tmps.forEach((it) => {
sum += it.total;
});
this.todayCnt = sum;
sum = 0;
tmps = d.data?.week || [];
tmps.forEach((it) => {
sum += it.total;
});
this.weekCnt = sum;
let data = 0;
sum = 0;
tmps = d.data?.group || [];
let objs = tmps.filter((it) => it.infotype == "0");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "4") {
data += it.total;
}
});
this.warningType[1].data = data;
this.warningType[1].total = sum;
data = 0;
sum = 0;
tmps = d.data?.group || [];
objs = tmps.filter((it) => it.infotype == "1");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "4") {
data += it.total;
}
});
this.warningType[2].data = data;
this.warningType[2].total = sum;
data = 0;
sum = 0;
tmps = d.data?.group || [];
objs = tmps.filter((it) => it.infotype == "96");
objs.forEach((it) => {
sum += it.total;
if (it.checkState != "4") {
data += it.total;
}
});
this.warningType[0].data = data;
this.warningType[0].total = sum;
this.elKey++;
});
},
},
};

View File

@ -36,8 +36,9 @@ export default {
mounted() {
window.mymap = this;
this.$bus.$on("headerChange",()=>{
this.initMe();
this.$bus.$on("projectChange", res => {
this.project = res;
this.reloadMap();
});
if(this.$root.hasInitHeader){
this.initMe();

View File

@ -1,259 +0,0 @@
<template>
<MyDialog
v-if="show"
v-model="show"
width="1480px"
height="850px"
class="flowLabourDlg"
>
<template slot="title">{{ title }}</template>
<div class="head-title-tab">
<div :class="nav == 'all' ? 'head-nav active' : 'head-nav'" @click="doNav('all')">
全部数据({{ tags.all }})
</div>
<div :class="nav == 'jxz' ? 'head-nav active' : 'head-nav'" @click="doNav('jxz')">
待处理({{ tags.db }})
</div>
<div :class="nav == 'ywc' ? 'head-nav active' : 'head-nav'" @click="doNav('ywc')">
已处理({{ tags.yb }})
</div>
</div>
<template>
<div class="data-list scroll" style="max-height: 712px; overflow-y: auto">
<div
v-if="dataList.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 dataList"
:key="idx"
style="cursor: pointer"
:class="it.approveStatus=='100'?'inspect_shtg':(it.approveStatus%10==0?'inspect_shz':'inspect_shbh')"
>
<el-row>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
项目名称{{ it.projectName }}
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
总包单位{{ it.deptName }}
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
劳务单位{{ it.subDeptName }}
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
投诉人{{ it.deptName }}
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
联系电话{{ it.laborPhone }}
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
身份证号{{ it.laborCardId }}
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
欠薪人数<span class="fblue">{{ it.laborNumber }}</span>
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
欠薪金额<span class="fblue">{{ it.laborAmount }}</span>
</div>
</el-col>
<el-col :span="8" class="item-data">
<div class="rank-chart-title bottom-line div-text">
处理节点
<span class="fblue" v-show="it.approveStatus == '10'">
待总包单位处理
</span>
<span class="fblue" v-show="it.approveStatus == '20'">
待甲方代表审批
</span>
<span class="fred" v-show="it.approveStatus == '21'">
甲方代表审批驳回
</span>
<span class="fblue" v-show="it.approveStatus == '30'">
待集团公司审批
</span>
<span class="fred" v-show="it.approveStatus == '31'">
集团公司审批驳回
</span>
<span class="fsuccess" v-show="it.approveStatus == '100'"></span>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="24" class="item-data">
<div class="rank-chart-title bottom-line div-text">
原因说明{{ it.laborReason }} <el-link v-if="it.files" type="primary" @click="downFiles(it.files)"></el-link>
</div>
</el-col>
</el-row>
</div>
</div>
<el-pagination
layout="total,prev, pager, next"
:hide-on-single-page="true"
@current-change="handleCurrentChange"
:total="total"
:page-size="pageSize"
:current-page.sync="pageNum"
class="bg-pagination"
></el-pagination>
</div>
</template>
</MyDialog>
</template>
<script>
import MyDialog from "../components/MyDialog";
export default {
components: {
MyDialog,
},
name: "flowLabourDlg",
data() {
return {
title: "劳资预警",
data: null,
dataList: [],
show: false,
nav: "jxz",
specialType: "0",
tags: {
all: 0,
db: 0,
yb: 0,
},
pageNum: 0,
pageSize: 3,
total: 0,
};
},
/**特种作业人员数据 */
mounted() {
this.data = null;
},
methods: {
handleCurrentChange(n) {
this.pageNum = n;
this.getList();
},
showDialog(it) {
this.data = it;
this.pageNum = 0;
this.getList();
},
doNav(nav) {
this.nav = nav;
this.getList();
},
getList() {
this.queryCount();
this.$api.flow.findFlowLabourList(this.data?.id||0,this.nav,this.pageNum,this.pageSize).then((res) => {
this.dataList = res.rows;
this.show = true;
this.total = res.total;
});
},
queryCount() {
this.$api.flow.findFlowLabourGroupCountByApprove(0, this.data.id).then((res) => {
if (res.code == 200 && res.data) {
this.tags.all = res.data.all;
this.tags.db = res.data.db;
this.tags.yb = res.data.yb;
}
});
},
downFiles(files){
if(files){
files.split(',').forEach(item => {
window.open('/jhapi' + item);
});
}
},
},
};
</script>
<style scope>
.popup-project-introduction-min {
transform: translateY(100px) !important;
}
</style>
<style lang="less" scoped>
.flowLabourDlg {
.data-list {
.acceptance-item {
margin-top: 20px;
border: 1px #dddddd solid;
padding: 12px;
border-radius: 8px;
margin-right: 12px;
}
.fblue{
color:#1879da;
}
.fred{
color:#fd6060;
font-weight:800;
}
.fsuccess{
color:green;
font-weight:800;
}
.inspect_shtg {
padding: 15px 3px;
background-size: 120px 120px !important;
background: url("https://szgcwx.jhncidg.com/staticFiles/images/shtg.png") no-repeat top
40px right 20px;
}
.inspect_shz {
padding: 15px 3px;
background-size: 120px 120px !important;
background: url("https://szgcwx.jhncidg.com/staticFiles/images/shz.png") no-repeat top
40px right 20px;
}
.inspect_shbh {
padding: 15px 3px;
background-size: 120px 120px !important;
background: url("https://szgcwx.jhncidg.com/staticFiles/images/shbh.png") no-repeat top
40px right 20px;
}
}
.bg-pagination {
margin-top: 20px;
}
.head-title-tab {
padding-top: 12px;
display: block;
width: 100%;
.head-nav {
background-size: 100% 100%;
display: inline-block;
width: auto;
padding: 0px 24px;
}
}
}
</style>

View File

@ -185,39 +185,26 @@
</enginChart>
</module-one-1-1>
<module-one-2-1 label="劳务单位资质审批明细" style="position: relative;">
<template v-if="dataList4.length > 0">
<div class="data-list3 scroll">
<table style=" border-collapse: collapse;">
<tr class="tr-header">
<th>所属项目</th>
<th style="width:95px">所属总包单位</th>
<th>申请单位</th>
<th>分包类型</th>
<th style="width:40px">申请<br />时间</th>
<th style="width:40px">状态</th>
</tr>
<tr v-for="(it, idx) in dataList4" :key="idx">
<td>{{ it.businessKeyName }}</td>
<td>{{ it.startDeptName }}</td>
<td>{{ it.deptName }}</td>
<td>{{ it.taskName }}</td>
<td>{{ it.createTime | formatDate }}</td>
<td>
<span v-if="!it.finishTime"></span>
<span v-else style="color:green">完成</span>
</td>
</tr>
</table>
</div>
<el-pagination layout="total,prev, pager, next"
@current-change="handleCurrentChange" :total="data4Page.total" :page-size="data4Page.pageSize"
:current-page.sync="data4Page.pageIndex" class="bg-pagination"></el-pagination>
</template>
<div v-else style="text-align: center;margin-top:100px;" class="div-no-data">
<img src="images/nodata.png" style="width: 120px;">
<div style="text-align: center;font-size: 12px;color:#888;">暂无数据</div>
<div class="data-list3 scroll">
<table style=" border-collapse: collapse;">
<tr class="tr-header">
<th>所属项目</th>
<th style="width:95px">所属总包单位</th>
<th>申请单位</th>
<th style="width:60px">所属时间</th>
<th style="width:30px">状态</th>
</tr>
<tr v-for="(it,idx) in dataList4" :key="idx">
<td>泾河智谷一期一标段</td>
<td>中国一冶集团有限公司</td>
<td>陕西凯德劳务建筑有限公司</td>
<td>2024-3-4</td>
<td>
<span v-if="idx<10"></span>
<span v-else style="color:green">行中</span>
</td>
</tr>
</table>
</div>
</module-one-2-1>
</el-col>
@ -251,19 +238,22 @@ export default {
chart1Data: [],
elChart2: 0,
flowList: [],
dataList4: [],
data4Page: {
total: 0,
pageSize: 10,
pageIndex: 1
}
dataList4:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
};
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("loadProjects", debounce(prjs => {
this.prjs = prjs;
}));
this.$bus.$on("projectChange", debounce(res => {
this.project = res;
this.loadData();
}));
this.$bus.$on("deptChange", debounce(dept => {
this.dept = dept;
this.loadData();
}));
if (this.$root.hasInitHeader) {
this.initMe();
}
@ -307,51 +297,16 @@ export default {
this.loadCostList();
this.loadFlow();
this.initChart2();
this.data4Page.pageIndex = 1;
this.loadFlowDataList();
},
handleCurrentChange(n) {
this.data4Page.pageIndex = n;
this.loadFlowDataList();
},
loadFlowDataList() {
let postData = {};
if (this.project && this.project.id > 0) {
postData.projectId = this.project.id;
} else {
postData.id = this.dept.id;
}
this.$api.flow.listFlowBySubDeptType(postData, this.data4Page.pageIndex, this.data4Page.pageSize).then(d => {
let data = d.rows || [];
this.dataList4 = data;
this.data4Page.total = d.total;
});
},
initChart2() {
let postData = {};
if (this.project && this.project.id > 0) {
postData.projectId = this.project.id;
} else {
postData.id = this.dept.id;
let opt = { "tooltip": { "trigger": "item" }, "series": [{ "top": 10, "type": "pie", "radius": "60%",
"data": [{ "name": "未发起", "value": 6 },
{ "name": " 审批中", "value": 4 },
{ "name": "审批通过", "value": 15 }
], "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(opt);
}
this.$api.flow.groupFlowBySubDeptType(postData).then(d => {
let data = (d.data || []).map(it => {
return {
name: it.taskName,
value: it.taskId || 0
}
});
let opt = {
"tooltip": { "trigger": "item" }, "series": [{
"top": 10, "type": "pie", "radius": "60%",
"data": data, "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(opt);
}
});
},
loadFlow() {
let ajaxs = [
@ -468,7 +423,7 @@ export default {
th {
font-size: 14px;
color: #409eff;
color:#409eff;
border: solid 1px #ffffff52;
line-height: 60px;
}
@ -481,25 +436,21 @@ export default {
}
}
}
.data-list3 {
max-height: calc(100% - 70px);
.data-list3{
max-height: calc(100% - 40px);
overflow-y: auto;
padding: 4px;
.tr-header {
th {
color: #409eff;
padding:4px;
.tr-header{
th{
color:#409eff;
}
}
td,
th {
border: solid 1px #409eff8c;
padding: 0px 8px;
font-size: 12px;
line-height: 20px;
}
td,th{
border: solid 1px #409eff8c;
padding: 0px 8px;
font-size:12px;
line-height: 20px;
}
}
.cost-sum {
@ -538,13 +489,10 @@ export default {
.sum-table {
border-collapse: collapse;
th {
color: #409eff;
th{
color:#409eff;
}
td,
th {
td,th{
line-height: 30px;
border: solid 1px #409eff8c;
padding: 0px 8px;

View File

@ -1,26 +1,16 @@
<template>
<MyDialog v-if="show" v-model="show" width="1600px" height="850px" class="mag-detail-dialog">
<template slot="title">{{ info.title }}</template>
<template slot="title">{{info.title }}</template>
<div style="text-align: center;color:dodgerblue;">
{{ info.name }} - {{ info.topicName }} - {{ info.deptName }} - {{ info.authorName }} - {{
info.createTime | formatDateTime }}
{{ info.name }} - {{ info.topicName }} - {{ info.deptName }} - {{ info.authorName }} - {{ info.createTime|formatDateTime }}
</div>
<div class="scroll" style="max-height: calc(100% - 100px);overflow: auto;">
<div v-if="info.imageUrl && info.imageUrl.length > 0" style="width:calc(100% - 16px);">
<el-image v-for="(item, idx) in info.imageUrl" :key="idx" class="info-image" :src="item + '.min.jpg'" :preview-src-list="[item]"></el-image>
</div>
<!--
<el-carousel >
<el-carousel-item v-for="(item, idx) in info.imageUrl" :key="idx">
<el-image class="info-image" :src="item + '.min.jpg'" :preview-src-list="[item]"></el-image>
</el-carousel-item>
</el-carousel>
-->
<pre v-html="info.content" style="white-space: break-spaces;"></pre>
<div style="display: flex;justify-content: center;">
<el-image v-if="info.imageUrl" class="info-image" :src="'/jhapi' + info.imageUrl + '.min.jpg'"
:preview-src-list="['/jhapi' + info.imageUrl]"></el-image>
</div>
<pre v-html="info.content" style="white-space: break-spaces;"></pre>
</div>
</MyDialog>
</template>
@ -37,7 +27,7 @@ export default {
data() {
return {
show: false,
info: {},
info:{},
};
},
@ -47,7 +37,7 @@ export default {
methods: {
showDialog(data) {
this.show = true
this.info = data;
this.info=data;
},
},
};
@ -62,18 +52,15 @@ export default {
</style>
<style lang="less">
.mag-detail-dialog {
.popup-project-introduction-con {
.popup-project-introduction-con{
height: 100%;
.popup-project-introduction-details {
.popup-project-introduction-details{
height: 100%;
.quality-table.special-table {
.quality-table.special-table{
height: 100%;
}
}
}
.popup-project-introduction-min {
transform: translateY(100px);
}
@ -90,22 +77,13 @@ export default {
}
}
.el-carousel.el-carousel--horizontal{
.el-image.info-image{
height: 300px;
width: 100%;
.el-image__inner{
width:auto !important;
}
.el-carousel__arrow i{
font-size: 40px;
}
}
.el-image.info-image {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
padding: 6px;
padding:6px;
}
}
</style>

View File

@ -11,8 +11,8 @@
<el-table-column label="作者" align="center" prop="authorName" />
<el-table-column label="期刊主图" align="center" prop="imageUrl">
<template slot-scope="{row}">
<el-image v-if="row.imageUrl && row.imageUrl.length>0" class="row-image" :src="row.imageUrl[0] + '.min.jpg'"
:preview-src-list="row.imageUrl"></el-image>
<el-image v-if="row.imageUrl" class="row-image" :src="'/jhapi' + row.imageUrl + '.min.jpg'"
:preview-src-list="['/jhapi' + row.imageUrl]"></el-image>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title">
@ -65,10 +65,7 @@ export default {
methods: {
doRowClick(row,col,e){
if(e.target.className.indexOf("el-image__inner")==-1){
//this.$refs.dlg.showDialog(row);
e.target.offsetParent.parentElement.querySelector(".el-image__inner").click();
}
this.$refs.dlg.showDialog(row);
},
handleCurrentChange(n) {
this.index = n;
@ -101,9 +98,7 @@ export default {
if (tmps && tmps.length > 0) {
tmps = tryToJson(tmps, []);
if (tmps.length > 0) {
it.imageUrl = tmps.map(it=>{
return "/jhapi"+it;
});
it.imageUrl = tmps[0];
}
}
return it;

View File

@ -50,8 +50,7 @@
@click="doShowAttendanceDetail">
<div class="warning-info-title" style="padding-left: 20px;">
<div :class="infoNav == 0 ? 'active' : ''" @click="onWarningInfoNav(0)"></div>
<div :class="infoNav == 1 ? 'active' : ''" @click="onWarningInfoNav(1)"></div>
<div :class="infoNav == 2 ? 'active' : ''" @click="onWarningInfoNav(2)"></div>
<div :class="infoNav == 1 ? 'active' : ''" @click="onWarningInfoNav(1)"></div>
</div>
<el-row>
<el-col :span="8">
@ -471,9 +470,42 @@ export default {
}
this.loading = true;
});
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("loadProjects", debounce(prjs => {
this.prjs = prjs;
if (this.prj.id == 0) {
this.prjInfo = this.prjs[1];
}
}));
this.$bus.$on("projectChange", debounce(res => {
if (res.id == 0) {
const func = () => {
if (this.prjs && this.prjs.length > 1) {
this.prjInfo = this.prjs[1];
} else {
setTimeout(func, 100);
}
}
func();
} else {
this.prjInfo = res;
}
this.prj = res;
this.investmentAmountData1[0].value = "" + res.paidAmount * 1.0;
this.investmentAmountData2[0].value = "" + res.onAccountAmount * 1.0;
this.elKey++;
this.onWarningInfoNav(0);
this.sumCostOutByDeptId();
this.groupByProjectCategory(this.deptInfo.id);
}));
this.$bus.$on("deptChange", debounce(dept => {
this.deptInfo = dept;
this.groupByProjectCategory(dept.id);
this.onClickoOverview(0)
this.qualityNavClick(0);
this.onWarningInfoNav(0);
this.sumCostOutByDeptId();
}));
if(this.$root.hasInitHeader){
this.initMe();
}
@ -517,13 +549,12 @@ export default {
//
loadAttendanceData(){
let data={
id:this.infoNav,
subDeptId:this.deptInfo.id||0,
projectId:this.prj.id||0,
attendanceTime: this.$dt(new Date()).format("YYYY-MM-DD")
}
let ajax=this.$api.attendance.groupByComany
if (this.infoNav != 2) {
if (this.infoNav == 0) {
ajax=this.$api.attendance.groupAllByComany
}
ajax(data).then(d=>{
@ -578,16 +609,12 @@ export default {
});
},
qualityNavClick(n) {
let dt1=this.$dt((+new Date())-30*24*3600*1000);
let dt2=this.$dt(new Date());
this.qualityNav = n;
if (n == 0) {
this.qualityNavTitle = "安全隐患总数";
let postData = {
deptId: this.deptInfo?.id || 0,
roleType: 0,
startDate:this.$dt(dt1).format("YYYY-MM-DD"),
endDate:this.$dt(dt2).format("YYYY-MM-DD"),
roleType: 0
};
this.$api.problemmodify.safetySummary(postData).then(d => {
let tmps= (d || []).map(it => {
@ -610,9 +637,7 @@ export default {
} else {
let postData = {
deptId: this.deptInfo?.id || 0,
roleType: 0,
startDate:this.$dt(dt1).format("YYYY-MM-DD"),
endDate:this.$dt(dt2).format("YYYY-MM-DD"),
roleType: 0
};
this.qualityNavTitle = "质量隐患总数";
this.$api.problemmodify.qualitySummary(postData).then(d => {
@ -643,7 +668,7 @@ export default {
return x;
},
doShowDlg3() {
this.$refs.dlg3.showDialog(this.deptInfo?.id || 0)
this.$refs.dlg3.showDialog()
},
doShowDlg1() {
this.$refs.dlg1.showDialog()
@ -705,8 +730,8 @@ export default {
//
onWarningInfoNav(n) {
this.infoNav = n
this.staffText = n == 0 ? '在岗人数' : n == 1?'离岗人数': '今日出勤'
if (n == 0||n==1) {
this.staffText = n == 0 ? '在岗人数' : '今日出勤'
if (n == 0) {
this.surveyUrl = 'images/survey_icon_4.png'
} else {
this.surveyUrl = 'images/survey_icon_5.png'

View File

@ -1,42 +1,84 @@
<template>
<MyDialog v-if="show" v-model="show" width="1000px" ref="dlg">
<template slot="title">
<div class="warning-info-title" style="padding-left: 20px;">
<div :class="nav == 'a1' ? 'active' : ''" class="nav-item" @click="toggleNav('a1')"></div>
<div :class="nav == 'a2' ? 'active' : ''" class="nav-item" @click="toggleNav('a2')"></div>
<div class="warning-info-title" style="padding-left: 20px;" v-if="1==2">
<div :class="nav == 0 ? 'active' : ''" class="nav-item" @click="toggleNav(0)"></div>
<div :class="nav == 1 ? 'active' : ''" class="nav-item" @click="toggleNav(1)"></div>
<div :class="nav == 2 ? 'active' : ''" class="nav-item" @click="toggleNav(2)"></div>
</div>
<el-tabs v-model="nav" class="my-tabs" @tab-click="handleClick" v-if="1==2">
<el-tab-pane label="按在建、前期、拟建、完成项目分类" name="a1"></el-tab-pane>
<el-tab-pane label="按省、市、新区、新城级分类" name="a2"></el-tab-pane>
</el-tabs>
<el-tabs v-model="nav" class="my-tabs" >
<el-tab-pane label="重点项目计划汇总" name="0"></el-tab-pane>
<el-tab-pane label="按续建、新建、前期项目分类" name="1"></el-tab-pane>
<el-tab-pane label="按省、市、新区、新城级分类" name="2"></el-tab-pane>
</el-tabs>
</template>
<el-table :data="tableData" class="mytable" height="500" style="width: 100%;background: transparent;">
<el-table-column prop="remark" label="分类项" >
<h1 v-if="1==2">20232023.4.12.xlsx</h1>
<el-table v-show="nav == 0" :data="tableData1" class="mytable" height="500" style="width: 100%;background: transparent;">
<el-table-column prop="prj" label="重点项目计划项目个数" width="200"> </el-table-column>
<el-table-column prop="node" label="总投资(亿元)" width="150">
<template slot-scope="scope">
<span style="color:#fff;font-size: 12px;">{{ scope.row.remark }}项目</span>
<span style="color:#01A9FF;font-size: 12px;">{{ scope.row.node }}</span>
</template>
</el-table-column>
<el-table-column prop="money" label="项目数" >
<el-table-column prop="days" label="年度投资(亿元)" width="120">
<template slot-scope="scope">
<span style="color:#01A9FF;font-size: 12px;">{{ scope.row.month }}</span>
<span style="color:red">{{ scope.row.days }}</span>
</template>
</el-table-column>
<el-table-column prop="money" label="总投资(亿元)" >
<el-table-column prop="date" label="备注" class-name="text-left">
</el-table-column>
</el-table>
<el-table v-show="nav == 1" :data="tableData2" class="mytable my-data2" style="width: 100%;background: transparent;"
ref="fbsubordinateUnit">
<el-table-column prop="prj" label="分类项" class-name="text-left" width="150">
<template slot-scope="scope">
<span style="color:red;font-size: 12px;">{{ scope.row.money.toFixed(2) }}</span>
<span style="font-size: 16px;font-weight: bold;">{{ scope.row.prj }}</span>
</template>
</el-table-column>
<el-table-column prop="node" label="项目数" width="150" >
<template slot-scope="scope">
<span style="color:#01A9FF;font-size: 12px;">{{ scope.row.node }}</span>
</template>
</el-table-column>
<el-table-column prop="money2" label="年度投资(亿元)" >
<el-table-column prop="days" label="总投资(亿元)">
<template slot-scope="scope">
<span style="color:#fff">{{ scope.row.money2.toFixed(2) }}</span>
<span style="color:red">{{ scope.row.days }}</span>
</template>
</el-table-column>
<el-table-column prop="date" label="年度投资(亿元)">
</el-table-column>
</el-table>
<el-table v-show="nav == 2" :data="tableData3" class="mytable my-data2" style="width: 100%;background: transparent;"
ref="fbsubordinateUnit">
<el-table-column prop="prj" label="分类项" class-name="text-left" width="150">
<template slot-scope="scope">
<span style="font-size: 16px;font-weight: bold;">{{ scope.row.prj }}</span>
</template>
</el-table-column>
<el-table-column prop="node" label="项目数" width="150" >
<template slot-scope="scope">
<span style="color:#01A9FF;font-size: 12px;">{{ scope.row.node }}</span>
</template>
</el-table-column>
<el-table-column prop="days" label="总投资(亿元)" width="150">
<template slot-scope="scope">
<span style="color:red">{{ scope.row.days }}</span>
</template>
</el-table-column>
<el-table-column prop="date" label="年度投资(亿元)" width="150">
</el-table-column>
<el-table-column prop="bak" label="备注" class-name="text-left">
</el-table-column>
</el-table>
</MyDialog>
</template>
@ -50,40 +92,52 @@ export default {
},
data() {
return {
nav: "a1",
dept:0,
activeName: 'second',
nav: 0,
show: false,
tableData: []
tableData1: [],
tableData2: [],
tableData3: [],
};
},
mounted() {},
mounted() {
window.dlg2 = this
this.tableData1 = [
{ prj: '65', node: '515.97', days: 134.86, date: '投资说明芯片项目总投26亿元年度投资20亿元置业6宗住宅用地及城投3宗娱乐用地总投33亿元协同创新基地总投5亿元。' },
]
this.tableData2 = [
{ prj: '续建项目', node: '15', days: 183.28, date: '71.32' },
{ prj: '新建项目', node: '34', days: 273.93, date: '63.54' },
{ prj: '前期项目', node: '16', days: 58.76 , date: '' },
{ prj: '合计', node: '65', days: 515.97 , date: '134.86' },
]
this.tableData3 = [
{ prj: '省级重点项目', node: '9', days: 215.26, date: '60.67' ,bak:'创维、1980泾造中心二期、智谷二期、智谷一期、锦越坊、泊创广场、城市阳台院士坊、文化艺术中心、交大医院'},
{ prj: '市级重点项目', node: '10', days: 72.29, date: '40.97' ,bak:'小动力电池一、二期、芯片产业园、创普斯二期、隆基100GW、50GW、泊跃人工智能产业园、荟锦坊一、二期、市政道路'},
{ prj: '新区重点项目', node: '7', days: 52.44 , date: '11.39' ,bak:'城市阳台公园、崇文商业、泊湾中心、云和悦、云如逸、云雨间、泊域人才中心'},
{ prj: '新城重点项目', node: '38', days: 175.98 , date: '21.83' },
{ prj: '合计', node: '64', days: 515.97 , date: '134.86' },
]
},
methods: {
toggleNav(tab){
this.nav=tab;
this.loadData();
toggleNav(n) {
this.nav = n;
},
loadData(){
let postData={
id:this.dept,
costType:this.nav=="a1"?1:2,
year:new Date().getFullYear()
};
this.$api.costOut.groupBYProject(postData).then(d=>{
this.tableData=(d.data||[]).map(it=>{
it.money=(it.money||0)/10000.0/10000.0;
it.money2=(it.money2||0)/10000.0/10000.0;
return it;
});
});
},
showDialog(dept) {
this.dept=dept;
showDialog() {
this.show = true
this.loadData();
}
},
};

View File

@ -72,9 +72,13 @@ export default {
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("loadProjects", debounce(prjs => {
this.prjs = prjs;
}));
this.$bus.$on("projectChange", debounce(res => {
this.prj = res;
this.loadData2();
}));
if (this.$root.hasInitHeader) {
this.initMe();
}

View File

@ -66,9 +66,14 @@ export default {
};
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("deptChange", debounce(dept => {
this.dept = dept;
this.loadData();
}));
this.$bus.$on("projectChange", debounce(res => {
this.prj = res;
this.loadData();
}));
this.info = this.scheduleInfo || {};
this.prj = this.prjInfo || {};
if(this.$root.hasInitHeader){

File diff suppressed because it is too large Load Diff

View File

@ -142,9 +142,17 @@ export default {
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("loadProjects", debounce(prjs => {
this.prjs = prjs;
}));
this.$bus.$on("projectChange",debounce(res => {
this.project = res;
this.loadData();
}));
this.$bus.$on("deptChange",debounce(dept => {
this.dept = dept;
this.loadData();
}));
this.loadPeriodical();
if(this.$root.hasInitHeader){
this.initMe();

View File

@ -76,7 +76,7 @@
{{ row.mag }}
</template>
</el-table-column>
<el-table-column v-for="(it, idx) in dataListTitles" :label="it" :key="idx">
<el-table-column v-for="(it, idx) in dataListTitles" :label="it">
<template slot-scope="{row}">
<span style="cursor: pointer;" @click="showMagDlg(row,idx)">{{ row.list[idx].cnt }}</span>
</template>
@ -90,7 +90,7 @@
<el-option v-for="item in magList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<div class="scroll mag-ord-list" style="max-height: calc(100% - 50px);overflow-y: auto;">
<div class="scroll mag-ord-list">
<div v-if="magOrdList.length == 0 && !loading" style="text-align: center;margin-top: 40px;">
<img src="images/nodata.png" style="width: 240px;">
<div style="text-align: center;">暂无数据</div>
@ -169,7 +169,7 @@
</el-table-column>
<el-table-column prop="remark" label="项目名称"/>
<el-table-column prop="costName" label="成本名称"/>
<el-table-column prop="money" label="申报金额(万元)">
<el-table-column prop="money" label="付款金额(万元)">
<template slot-scope="{row}">
{{ (row.money||0).toFixed(2) }}
</template>
@ -228,9 +228,17 @@ export default {
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("loadProjects", debounce(prjs => {
this.prjs = prjs;
}));
this.$bus.$on("projectChange", debounce(res => {
this.project = res;
this.loadData();
}));
this.$bus.$on("deptChange", debounce(dept => {
this.dept = dept;
this.loadData();
}));
if (this.$root.hasInitHeader) {
this.initMe();
}

View File

@ -453,9 +453,22 @@ export default {
this.loadPlan();
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("projectChange", debounce(res => {
this.prjInfo = res;
this.loadProjectConstructionProgress();
this.selectScheduledAlerts();
this.selectCompletionRate();
}));
this.$bus.$on("loadProjects", debounce(prjs => {
this.projects = prjs;
}));
this.$bus.$on("deptChange", debounce(dept => {
this.dept = dept;
this.groupByProjectCategory(dept.id);
this.deptChange();
this.selectScheduledAlerts();
this.selectCompletionRate();
}))
if(this.$root.hasInitHeader){
this.initMe();
}
@ -517,7 +530,6 @@ export default {
postData.id = this.dept.id;
prjs=this.projects||[];
} else {
postData.id = this.dept.id;
postData.projectId = this.prjInfo.id;
prjs=[this.prjInfo];
}
@ -531,7 +543,6 @@ export default {
if ((this.prjInfo?.id||0) == 0) {
postData.id = this.dept?.id||0;
} else {
postData.id = this.dept?.id||0;
postData.projectId = this.prjInfo.id;
}
this.$api.buildNode.selectScheduledAlerts(postData).then(d => {

View File

@ -321,7 +321,7 @@ export default {
data() {
return {
materialSealList: [],
selDate: [],
selDate: "",
elKey: 0,
materialSealEl: 0,
elSummaryKey: 0,
@ -420,12 +420,32 @@ export default {
this.init();
},
mounted() {
let dt1=this.$dt((+new Date())-30*24*3600*1000);
let dt2=this.$dt(new Date());
this.selDate=[dt1,dt2];
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on(
"loadProjects",
debounce((prjs) => {
this.prjs = prjs;
})
);
this.$bus.$on(
"projectChange",
debounce((res) => {
this.projectInfo = res;
this.doDeptChane();
this.checkDetection(0);
this.doMeasuredNav(0, "汇总");
this.selectTop20materialSeal();
})
);
this.$bus.$on(
"deptChange",
debounce((dept) => {
this.dept = dept;
this.doDeptChane();
this.checkDetection(0);
this.doMeasuredNav(0, "汇总");
this.selectTop20materialSeal();
})
);
if (this.$root.hasInitHeader) {
this.initMe();
}

View File

@ -397,7 +397,7 @@ export default {
data() {
return {
dictWorkTrainDataType: [],
selDate: [],
selDate: '',
elSummaryKey: 0,
elSummaryPrjKey: 0,
elKey: 0,
@ -483,44 +483,50 @@ export default {
});
},
mounted() {
let dt1=this.$dt((+new Date())-30*24*3600*1000);
let dt2=this.$dt(new Date());
this.selDate=[dt1,dt2];
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on("projectChange", debounce(res => {
this.projectInfo = res;
this.doDeptChane();
this.getWorkTrainChart();
//this.getWorkTrainList();
//this.getEmergencyDrillList();
this.getProjectSpecialView();
this.getDeptSafetyWorksList();
this.getProjectInsuranceList();
}));
this.$bus.$on("loadProjects", debounce(prjs => {
this.projects = prjs;
}))
this.$bus.$on("deptChange", debounce(dept => {
this.dept = dept;
this.doDeptChane();
//this.getWorkTrainList();
//this.getEmergencyDrillList();
this.getProjectSpecialView();
this.getDeptSafetyWorksList();
this.getProjectInsuranceList();
if (this.fileNav == 3) {
this.getWorkFileList();
}
}));
if (this.$root.hasInitHeader) {
this.initMe();
}
},
methods: {
getPrjId(cb){
let isFromPrj=(+this.$route.meta?.nav)>200;//
if(isFromPrj){
this.getProjectId(id=>{
cb(id);
});
}else{
cb(this.projectInfo?.id || 0);
}
},
doShowWorkTrain(type) {
this.getPrjId(prjId=>{
this.$refs.workTrainListDlg.showDialog({
type: type,
deptId: this.dept.id || 0,
projectId: prjId,
projectId: this.projectInfo?.id || 0,
prj: this.projectInfo || {},
dicts: this.dictWorkTrainDataType.filter(d => d.cssClass == (type == 0 ? 'a' : 'b'))
});
});
},
doShowAttendanceDetail() {
this.getPrjId(prjId=>{
let data = {
deptId: this.dept.id || 0,
projectId: prjId,
projectId: this.projectInfo?.id || 0,
attendanceTime: this.$dt(new Date()).format("YYYY-MM-DD")
}
if (this.infoNav == 1) {
@ -528,7 +534,6 @@ export default {
} else {
this.$refs.jobWorkerdlg.showDialog(data);
}
});
},
initMe() {
this.projectInfo = this.$root.project || {};
@ -579,8 +584,7 @@ export default {
});
},
getWorkTrainChart() {
this.getPrjId(prjId=>{
this.$api.workTrain.getGroupByDataType(this.dept?.id || 0, prjId).then(d => {
this.$api.workTrain.getGroupByDataType(this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
this.WorkTrainChart1 = (d.data || []).filter(it => it.trainType === 'a').map(it => { return { value: it.id || 0, name: it.trainTitle } });
this.WorkTrainChart2 = (d.data || []).filter(it => it.trainType === 'b').map(it => { return { value: it.id || 0, name: it.trainTitle } });
let cnt = 0;
@ -661,40 +665,31 @@ export default {
};
this.$refs.chart4.init(opt2);
});
});
},
//
getWorkTrainList() {
this.getPrjId(prjId=>{
this.$api.workTrain.getWorkTrainList(0, this.dept?.id || 0, prjId).then(d => {
this.$api.workTrain.getWorkTrainList(0, this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
this.workTrainList = d.rows;
});
});
},
//
getEmergencyDrillList() {
this.getPrjId(prjId=>{
this.$api.workTrain.getWorkTrainList(1, this.dept?.id || 0, prjId).then(d => {
this.$api.workTrain.getWorkTrainList(1, this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
this.emergencyDrillList = d.rows;
});
});
},
//
getProjectSpecialView() {
this.getPrjId(prjId=>{
this.$api.special.getProjectSpecialView(this.dept?.id || 0, prjId).then(d => {
this.$api.special.getProjectSpecialView(this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
this.specialDataList = d.rows;
});
});
},
//
getDeptSafetyWorksList() {
//
this.getPrjId(prjId=>{
this.$api.flow.findSafetyWorkList(this.dept?.id || 0, prjId, this.infoNav).then(d => {
this.$api.flow.findSafetyWorkList(this.dept?.id || 0, this.projectInfo?.id || 0, this.infoNav).then(d => {
this.safetyWorkFlowList = d.data || [];
});
});
},
getProjectId(cb) {
let func = () => {
@ -752,14 +747,12 @@ export default {
});
},
getProjectInsuranceList() {
this.getPrjId(prjId=>{
this.$api.insurance.getProjectInsuranceList(this.dept?.id || 0, prjId).then(d => {
this.$api.insurance.getProjectInsuranceList(this.dept?.id || 0, this.projectInfo?.id || 0).then(d => {
this.insuranceDataList = [];
if (d.rows.length > 0 && d.rows[0] != null) {
this.insuranceDataList = d.rows;
}
});
});
},
fmt(n) {
n = "" + n;

View File

@ -319,9 +319,27 @@ export default {
},
mounted() {
window.xapp = this;
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on(
"projectChange",
debounce((res) => {
this.projectInfo = res;
this.initVideoMenu();
})
);
this.$bus.$on(
"loadProjects",
debounce((prjs) => {
this.projectInfos = prjs;
//this.initVideoMenu();
})
);
this.$bus.$on(
"deptChange",
debounce((dept) => {
this.dept = dept;
//this.initVideoMenu();
})
);
if (this.$root.hasInitHeader) {
this.initMe();
}

View File

@ -34,37 +34,16 @@
</svg>
</i>
</div>
<template v-if="dataTable.length>0">
<div class="data-list scroll" style="max-height:730px;overflow-y: auto;margin:12px 0px;overflow-x: hidden;" >
<div class="data-list scroll" style="max-height:770px;overflow-y: auto;margin:12px 0px;overflow-x: hidden;" v-if="dataTable.length>0">
<div v-for="(it, idx) in dataTable" :key="idx" class="data-item"
:class="it.timeout ? 'time-out' : ''">
<div class="item-left">
<el-image ref="preview" style="width: 400px; " :preview-src-list="[it.detectionFile]" v-if="it.detectionFile"
:src="it.detectionFile + '.1000.jpg'">
</el-image>
<div v-else style="text-align: center;height:100%" class="left-imglist">
<template v-if="it.trustDeed||it.specimenPhoto">
<el-carousel>
<el-carousel-item>
<el-image ref="preview" style="width: 400px; " :preview-src-list="['/jhapi/'+it.trustDeed]" v-if="it.trustDeed"
:src="'/jhapi/'+it.trustDeed + '.1000.jpg'">
</el-image>
<div class="div-tip">委托单</div>
</el-carousel-item>
<el-carousel-item>
<el-image ref="preview" style="width: 400px; " :preview-src-list="['/jhapi/'+it.specimenPhoto]" v-if="it.specimenPhoto"
:src="'/jhapi/'+it.specimenPhoto + '.1000.jpg'">
</el-image>
<div class="div-tip">样品照片</div>
</el-carousel-item>
</el-carousel>
</template>
<template v-else>
<img src="images/nodata.png" style="width: 240px;">
<div style="text-align: center;">暂无图片</div>
</template>
<div v-else style="text-align: center;">
<img src="images/nodata.png" style="width: 240px;">
<div style="text-align: center;">暂无图片</div>
</div>
</div>
@ -83,9 +62,7 @@
</el-col>
<el-col :span="fontSize==2?12:12" class="item-data">
<img src="images/title_icon.png"><span class="sp-lbl sp-lbl2">材料名称:</span>
<div class="div-text">{{ it.materialName }}
<el-link v-if="it.attachmentFiles && it.attachmentFiles.length>0" type="primary" @click="downFiles(it.attachmentFiles)"></el-link>
</div>
<div class="div-text">{{ it.materialName }}</div>
</el-col>
<el-col :span="fontSize==2?12:12" class="item-data">
<img src="images/title_icon.png"><span class="sp-lbl sp-lbl2">使用部位:</span>
@ -143,10 +120,6 @@
</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>
</template>
<div v-else style="text-align: center;margin-top: 200px;">
<img src="images/nodata.png" style="width: 240px;">
<div style="text-align: center;">暂无数据</div>
@ -166,47 +139,23 @@ export default {
return {
fontSize: 0,
title:'',
size: 10,
index: 1,
total: 0,
show: false,
dataTable: [],
opt:{}
dataTable: []
};
},
mounted() {
},
methods: {
downFiles(files){
files.forEach(item=>{
if (item) {
this.$api.downFile("/jhapi" + item, {}, item.substring(item.lastIndexOf("/") + 1));
}
})
},
handleCurrentChange(n) {
this.index = n;
this.loadData();
},
toggleNav(n) {
this.nav = n;
},
showDialog(opt) {
this.show = true
this.opt=opt;
this.loadData();
},
loadData(){
this.$api.checkDetection.getList({
...this.opt
},this.size,this.index).then(d=>{
this.total=d.total||0;
this.dataTable=(d.rows||[]).map(it=>{
it.attachmentFiles=this.$tryToJson(it.attachment,[]);
return it;
});
this.title="材料进场取样复试-"+['汇总','钢筋原材料','钢筋试拉件','混凝土试件','其他'][this.opt.checkType||0]+`[${this.dataTable.length}]`;
this.$api.checkDetection.getList(opt).then(d=>{
this.dataTable=d.data||[];
this.title="材料进场取样复试-"+['汇总','钢筋原材料','钢筋试拉件','混凝土试件','其他'][opt.checkType||0]+`[${this.dataTable.length}]`;
});
}
},
@ -309,20 +258,6 @@ export default {
width: 400px;
min-height: 220px;
align-items: center;
.left-imglist{
width: 100%;
height:100%;
.el-carousel{
height: 100%;
.el-carousel__item{
.div-tip{
position: absolute;
width: 100%;
bottom:40px;
}
}
}
}
}
.text-state {

View File

@ -79,9 +79,8 @@
<el-col :span="fontSize==2?12:12" class="item-data">
<img src="images/title_icon.png"><span class="sp-lbl sp-lbl2">测量结果:</span>
<div class="div-text">
<el-tag v-if="it.measureResult == null " type="success"></el-tag>
<el-tag v-if="it.measureResult == '1'" type="success"></el-tag>
<el-tag v-if="it.measureResult == '2'" type="success"></el-tag>
<el-tag v-else type="danger">不合格</el-tag>
</div>
</el-col>
<el-col :span="fontSize==2?12:12" class="item-data">

View File

@ -204,9 +204,20 @@ export default {
});
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on(
"loadProjects",
debounce((prjs) => {
this.prjs = prjs;
})
);
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();
}

View File

@ -91,9 +91,6 @@
</div>
</div>
<div v-if="row.attFiles && row.attFiles.length>0">
<el-link type="primary" @click="downFiles(row.attFiles)"></el-link>
</div>
</div>
</div>
@ -123,18 +120,10 @@ export default {
},
methods: {
downFiles(files){
files.forEach(item=>{
if (item) {
this.$api.downFile("/jhapi" + item, {}, item.substring(item.lastIndexOf("/") + 1));
}
})
},
download(it) {
window.open(it.insuranceFile)
},
showDialog(row) {
row.attFiles=this.$tryToJson(row.checkingFiles,[]);
this.row = row;
this.images = this.getBigProfileImage(row);
this.show = true;

View File

@ -384,9 +384,33 @@ export default {
this.forIndex = 0;
},
mounted() {
this.$bus.$on("headerChange",()=>{
this.initMe();
});
this.$bus.$on(
"projectChange",
debounce((res) => {
this.projectInfo = res;
console.log("项目改变");
console.log(this.projectInfo);
this.init();
})
);
this.$bus.$on(
"loadProjects",
debounce((prjs) => {
this.projectInfos = prjs;
console.log("项目加载");
console.log(this.projectInfos);
this.init();
})
);
this.$bus.$on(
"deptChange",
debounce((dept) => {
this.dept = dept;
console.log("部门改变");
console.log(this.dept);
this.init();
})
);
if (this.$root.hasInitHeader) {
this.initMe();
}

View File

@ -35,59 +35,16 @@ const routes = [
meta:{nav:4,},
component: () => import(/* webpackChunkName: "quality" */ '../pages/projectQuality.vue')
} ,
{
path: '/prjQuality',
name: 'prjQuality',
meta:{nav:209,},
component: () => import(/* webpackChunkName: "quality" */ '../pages/projectQuality.vue')
} ,
{
path: '/prjProgress',
name: 'prjProgress',
meta:{nav:210,},
component: () => import(/* webpackChunkName: "progress" */ '../pages/projectProgress.vue')
}
,
{
path: '/prjVideo',
name: 'prjVideo',
meta:{nav:211,},
component: () => import(/* webpackChunkName: "video" */ '../pages/projectVideo.vue')
},
{
path: '/prjAiVideo',
name: 'prjAiVideo',
meta:{nav:212,},
component: () => import(/* webpackChunkName: "video" */ '../pages/toAIVideoProject.vue')
},
{
path: '/prjPhotography',
name: 'prjPhotography',
meta:{nav:213,},
component: () => import(/* webpackChunkName: "video" */ '../pages/photography.vue')
},
{
path: '/prjEngin',
name: 'prjEngin',
meta:{nav:214,},
component: () => import(/* webpackChunkName: "video" */ '../pages/projectEngin.vue')
},
{
path: '/prjEnginAuditing',
name: 'prjEnginAuditing',
meta:{nav:215,},
component: () => import(/* webpackChunkName: "video" */ '../pages/engin/auditingPage.vue')
},
{
path: '/concreteStrength',
name: 'concreteStrength',
meta:{nav:207,},
meta:{nav:27,},
component: () => import(/* webpackChunkName: "concreteStrength" */ '../pages/quality/concreteStrength.vue')
} ,
{
path: '/standardCuringRoom',
name: 'standardCuringRoom',
meta:{nav:206,},
meta:{nav:26,},
component: () => import(/* webpackChunkName: "standardCuringRoom" */ '../pages/quality/standardCuringRoom.vue')
}
,
@ -96,40 +53,34 @@ const routes = [
name: 'safety',
meta:{nav:3,},
component: () => import(/* webpackChunkName: "safety" */ '../pages/projectSafety.vue')
},
{
path: '/prjSafety',
name: 'prjSafety',
meta:{nav:208,},
component: () => import(/* webpackChunkName: "safety" */ '../pages/projectSafety.vue')
}
, {
path: '/distributionBox',
name: 'distributionBox',
meta:{nav:203,},
meta:{nav:23,},
component: () => import(/* webpackChunkName: "distributionBox" */ '../pages/safe/distributionBox.vue')
}
, {
path: '/dumbwaiter',
name: 'dumbwaiter',
meta:{nav:204,},
meta:{nav:24,},
component: () => import(/* webpackChunkName: "dumbwaiter" */ '../pages/safe/dumbwaiter.vue')
}, {
path: '/personnelPosition',
name: 'personnelPosition',
meta:{nav:205,},
meta:{nav:25,},
component: () => import(/* webpackChunkName: "personnelPosition" */ '../pages/safe/personnelPosition.vue')
}
, {
path: '/excavation',
name: 'excavation',
meta:{nav:202,},
meta:{nav:22,},
component: () => import(/* webpackChunkName: "excavation" */ '../pages/safe/excavation.vue')
}
, {
path: '/towerCrane',
name: 'towerCrane',
meta:{nav:201,},
meta:{nav:21,},
component: () => import(/* webpackChunkName: "towerCrane" */ '../pages/safe/towerCrane.vue')
}
,

View File

@ -46,8 +46,7 @@ module.exports = defineConfig({
}
},
'/profile':{
//target: `http://szgc.jhncidg.com/jhapi/profile`,
target: `http://62.234.3.186/profile/`,
target: `http://szgc.jhncidg.com/jhapi/profile`,
changeOrigin: true,
pathRewrite: {
'^/profile':'/'