flx:冲突 修改现场大屏bug

This commit is contained in:
X_Rian 2024-07-05 18:58:53 +08:00
commit b4140dd6a4
16 changed files with 425 additions and 312 deletions

View File

@ -4,7 +4,7 @@ NODE_ENV = 'development'
# 本地环境接口地址(/api/index.ts文件中使用)
# 后端本地
# VITE_API_URL = 'http://192.168.34.155:19111'
# VITE_API_URL = 'http://192.168.34.221:9111' #雄哥本地
VITE_API_URL = 'http://192.168.34.221:9111' #雄哥本地
# VITE_API_URL = 'http://182.90.224.237:51234' #雄哥远程
# VITE_API_URL = 'http://192.168.34.221:28889'
# VITE_API_URL = 'http://121.196.214.246/api'
@ -33,7 +33,9 @@ NODE_ENV = 'development'
# 中科安信
# VITE_API_URL = 'http://8.136.222.164:8808'
# 中科佳成
VITE_API_URL = 'http://1.13.185.209:8089'
# VITE_API_URL = 'http://1.13.185.209:8089'
# 九柱
# VITE_API_URL = 'http://jxjzw.zhgdyun.com:11111'
# 上传
VITE_ULD_API_URL = 'http://192.168.34.155:8012/onlinePreview?url='

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -28,8 +28,8 @@ export const BASE_IMAGE_URL = import.meta.env.VITE_BASE_IMAGE_URL;
// export const COMPANY: string = "zsbf"; //中水北方
// export const COMPANY: string = "as"; //鞍山项目
// export const COMPANY: string = "agjt"; //鞍钢集团
// export const COMPANY: string = "agjtLive"; //鞍钢集团现场大屏
export const COMPANY: string = "agjtCommand"; //鞍钢集团指挥部大屏
export const COMPANY: string = "agjtLive"; //鞍钢集团现场大屏
// export const COMPANY: string = "agjtCommand"; //鞍钢集团指挥部大屏
// export const COMPANY: string = "agjtProjectKanban"; //鞍钢集团项目看板大屏
// export const COMPANY: string = "agjtOverviewScreen"; //鞍钢集团项目总览
// export const COMPANY: string = "zkjc"; //中科佳成项目

View File

@ -25,8 +25,8 @@ export const staticRouter: RouteRecordRaw[] = [
path: "/large",
name: "大屏",
// component: () => import("@/views/sevenLargeScreen/indexL.vue"), //七参数标准版
component: () => import("@/views/commandScreen/indexCommand.vue"), //指挥部大屏
// component: () => import("@/views/agjtLiveScreen/indexLive.vue"), //鞍钢现场大屏
// component: () => import("@/views/commandScreen/indexCommand.vue"), //指挥部大屏
component: () => import("@/views/agjtLiveScreen/indexLive.vue"), //鞍钢现场大屏
// component: () => import("@/views/overviewScreen/indexCommand.vue"), //总览大屏
// component: () => import("@/views/agjtProjectKanban/indexL.vue"), //鞍钢集团项目看板大屏
// component: () => import("@/views/sevenLargeScreen/indexL_syhy.vue"), // 只有一级路由(盘锦、嘉兴、鄱湖美湾医疗项目需切换至该首页)

View File

@ -191,7 +191,7 @@ function drawPie(pieNum: number, pieInfo: any) {
name: "pieCircle",
type: "pie",
radius: ["45%", "60%"],
minAngle: 45,
minAngle: 50,
labelLine: {
length: 1
},
@ -199,9 +199,11 @@ function drawPie(pieNum: number, pieInfo: any) {
// formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}}{c} {per|{d}%} ',
formatter: function (params: any) {
let done = "已完成:" + pieInfo.outPie[params.dataIndex].complete + " ";
const oldName = pieInfo.outPie[params.dataIndex].name;
const newName = oldName.length > 7 ? oldName.substring(0, 7) + "..." : oldName;
return (
"{name|" +
pieInfo.outPie[params.dataIndex].name +
newName +
"}{abg|} {per|" +
pieInfo.outPie[params.dataIndex].ratio +
"%}\n{hr|}\n{done|" +

View File

@ -96,7 +96,7 @@
<span>承包商名称</span>
<span>{{ item.name || "--" }}</span>
</div>
<el-scroll v-if="item.processList.length > 3" class="cbProcess">
<el-scroll v-if="item.processList.length > 0" class="cbProcess">
<div class="pItem" v-for="(item2, i) in item.processList" :key="i">
<div class="pLeft">
<span :class="['plInner', 'plBgc' + ((i + 1) % 12)]">

View File

@ -80,9 +80,9 @@
</div>
</div>
<div class="classify-div">
<div class="classify-div-item" @click="openDialogData({ index: 98, title: '人员总览' })">
<!-- <div class="classify-div-item" @click="openDialogData({ index: 98, title: '人员总览' })">
<span style="font-size: 12px">人员总览</span>
</div>
</div> -->
<div class="classify-div-item" style="width: 250px" @click="openDialogData({ index: 1, title: '' })">
<span style="font-size: 12px">危险特殊作业&nbsp;{{ statsDirectorateBigScreen.dangerousEngineeringRecordNum }}</span>
</div>

View File

@ -2,7 +2,13 @@
<div class="list-detail" v-if="showDialog && mapsDetail.length == 0">
<div
:class="postData.type == 1 ? 'dialog-content' : postData.type == 2 ? 'dialog-content-show' : 'dialog-content-more'"
:style="postData.index == 98 ? { left: '5%', width: '90%', top: '5%', height: '90%' } : {}"
:style="
postData.index == 98
? { left: '5%', width: '90%', top: '5%', height: '90%' }
: postData.index == 9
? { left: '10%', top: '10%', width: '80%', height: '70%' }
: {}
"
>
<div class="dialog-title">
<!-- <div class="title-img"><img src="@/assets/images/titleIcon.png" alt="" /></div> -->
@ -46,9 +52,10 @@
<div class="political-outlook" v-if="showIndex == 99">
<qualityManage ref="historyAlarmList" tip="安全教育"></qualityManage>
</div>
<div class="political-outlook" v-if="showIndex == 98">
<!-- 人员总览 -->
<!-- <div class="political-outlook" v-if="showIndex == 98">
<personOverview ref="historyAlarmList" tip="安全教育"></personOverview>
</div>
</div> -->
<div class="political-outlook" v-if="showIndex == 6">
<aiAlarm ref="historyAlarmList" tip="安全教育"></aiAlarm>
</div>

View File

@ -27,11 +27,11 @@
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{ index + 1 }}</div>
<div>{{ item.engineeringName }}</div>
<div>{{index + 1}}</div>
<div>{{item.engineeringName || '--'}}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.progressDescribe" placement="top-start">
<span>{{ item.progressDescribe }}</span>
<span>{{item.progressDescribe || '--'}}</span>
</el-tooltip>
</div>
<div class="list-img">
@ -47,8 +47,8 @@
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{ item.createUserName }}</div>
<div>{{ item.createTime }}</div>
<div>{{item.createUserName || '--'}}</div>
<div>{{item.createTime || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -67,24 +67,20 @@
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{ index + 1 }}</div>
<div>{{ item.engineeringName }}</div>
<div>
{{
item.status == 2
? "待整改"
: item.status == 3
? "待复查"
: item.status == 4
? "待核验"
: item.status == 5
? "合格"
: ""
}}
</div>
<div>{{ item.inspectManName }}</div>
<div>{{ item.inspectTime }}</div>
<div>{{ item.changeName }}</div>
<div>{{index + 1}}</div>
<div>{{item.engineeringName || '--'}}</div>
<div>{{item.status == 2
? '待整改'
: item.status == 3
? '待复查'
: item.status == 4
? '待核验'
: item.status == 5
? '合格'
: '--'}}</div>
<div>{{item.inspectManName || '--'}}</div>
<div>{{item.inspectTime || '--'}}</div>
<div>{{item.changeName || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -99,19 +95,25 @@
<div>验收描述</div>
<div>验收结果</div>
<div>图片</div>
<div>申请验收</div>
<div>记录</div>
<div>创建时间</div>
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{ index + 1 }}</div>
<div>{{ item.engineeringName }}</div>
<div>{{index + 1}}</div>
<div>{{item.engineeringName || '--'}}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.acceptanceDesc" placement="top-start">
<span>{{ item.acceptanceDesc }}</span>
<span>{{item.acceptanceDesc || '--'}}</span>
</el-tooltip>
</div>
<div>{{ item.acceptanceResult == 1 ? "合格" : "不合格" }}</div>
<div>{{
item.acceptanceResult == undefined ||
item.acceptanceResult == null ||
item.acceptanceResult == '' ? '待确认' :
item.acceptanceResult == 1 ? '合格' :
item.acceptanceResult == 2 ? '不合格' : ''
}}</div>
<div class="list-img">
<el-image
fit="contain"
@ -125,8 +127,8 @@
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{ item.applyAcceptanceUserName }}</div>
<div>{{ item.createTime }}</div>
<div>{{item.acceptanceUserName || '--'}}</div>
<div>{{item.createTime || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -145,9 +147,13 @@
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{ index + 1 }}</div>
<div>{{ item.engineeringName }}</div>
<div>{{ item.buildSituation }}</div>
<div>{{index + 1}}</div>
<div>{{item.engineeringName || '--'}}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.buildSituation" placement="top-start">
<span>{{item.buildSituation || '--'}}</span>
</el-tooltip>
</div>
<div class="list-img">
<el-image
fit="contain"
@ -161,8 +167,8 @@
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{ item.createUserName }}</div>
<div>{{ item.createTime }}</div>
<div>{{item.createUserName || '--'}}</div>
<div>{{item.createTime || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -206,7 +212,11 @@
{{ item.type === typeItem.type ? typeItem.name : "" }}
</span>
</div>
<div>{{ item.workTicketCode || "--" }}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.workTicketCode" placement="top-start">
<span>{{item.workTicketCode || '--'}}</span>
</el-tooltip>
</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.progressDescribe" placement="top-start">
<span>{{ item.progressDescribe || "--" }}</span>
@ -225,9 +235,13 @@
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{ item.jobApplicationUnitName || "--" }}</div>
<div>{{ item.createUserName || "--" }}</div>
<div>{{ item.createTime || "--" }}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.jobApplicationUnitName" placement="top-start">
<span>{{item.jobApplicationUnitName || '--'}}</span>
</el-tooltip>
</div>
<div>{{item.createUserName || '--'}}</div>
<div>{{item.createTime || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -251,27 +265,31 @@
<div>{{ index + 1 }}</div>
<div>
<span v-for="typeItem in typeName" :key="typeItem.type">
{{ item.type === typeItem.type ? typeItem.name : "--" }}
{{ item.type === typeItem.type? typeItem.name : '' }}
</span>
</div>
<div>{{ item.workTicketCode || "--" }}</div>
<div>
{{
item.status == 2
? "待整改"
: item.status == 3
? "待复查"
: item.status == 4
? "待核验"
: item.status == 5
? "合格"
: "--"
}}
<el-tooltip class="box-item" effect="dark" :content="item.workTicketCode" placement="top-start">
<span>{{item.workTicketCode || '--'}}</span>
</el-tooltip>
</div>
<div>{{ item.inspectManName || "--" }}</div>
<div>{{ item.inspectTime || "--" }}</div>
<div>{{ item.jobApplicationUnitName || "--" }}</div>
<div>{{ item.changeName || "--" }}</div>
<div>{{item.status == 2
? '待整改'
: item.status == 3
? '待复查'
: item.status == 4
? '待核验'
: item.status == 5
? '合格'
: '--'}}</div>
<div>{{item.inspectManName || '--'}}</div>
<div>{{item.inspectTime || '--'}}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.jobApplicationUnitName" placement="top-start">
<span>{{item.jobApplicationUnitName || '--'}}</span>
</el-tooltip>
</div>
<div>{{item.changeName || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -287,7 +305,7 @@
<div>验收描述</div>
<div>验收结果</div>
<div>图片</div>
<div>申请验收</div>
<div>记录</div>
<div>创建时间</div>
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
@ -295,16 +313,26 @@
<div>{{ index + 1 }}</div>
<div>
<span v-for="typeItem in typeName" :key="typeItem.type">
{{ item.type === typeItem.type ? typeItem.name : "--" }}
{{ item.type === typeItem.type? typeItem.name : '' }}
</span>
</div>
<div>{{ item.workTicketCode || "--" }}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.workTicketCode" placement="top-start">
<span>{{item.workTicketCode || '--'}}</span>
</el-tooltip>
</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.acceptanceDesc" placement="top-start">
<span>{{ item.acceptanceDesc || "--" }}</span>
</el-tooltip>
</div>
<div>{{ item.acceptanceResult == 1 ? "合格" : "不合格" }}</div>
<div>{{
item.acceptanceResult == undefined ||
item.acceptanceResult == null ||
item.acceptanceResult == '' ? '待确认' :
item.acceptanceResult == 1 ? '合格' :
item.acceptanceResult == 2 ? '不合格' : ''
}}</div>
<div class="list-img">
<el-image
fit="contain"
@ -318,8 +346,8 @@
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{ item.applyAcceptanceUserName || "--" }}</div>
<div>{{ item.createTime || "--" }}</div>
<div>{{item.acceptanceUserName || '--'}}</div>
<div>{{item.createTime || '--'}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -342,11 +370,19 @@
<div>{{ index + 1 }}</div>
<div>
<span v-for="typeItem in typeName" :key="typeItem.type">
{{ item.type === typeItem.type ? typeItem.name : "--" }}
{{ item.type === typeItem.type? typeItem.name : '' }}
</span>
</div>
<div>{{ item.workTicketCode || "--" }}</div>
<div>{{ item.buildSituation || "--" }}</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.workTicketCode" placement="top-start">
<span>{{item.workTicketCode || '--'}}</span>
</el-tooltip>
</div>
<div>
<el-tooltip class="box-item" effect="dark" :content="item.buildSituation" placement="top-start">
<span>{{item.buildSituation || '--'}}</span>
</el-tooltip>
</div>
<div class="list-img">
<el-image
fit="contain"

View File

@ -277,6 +277,8 @@ onMounted(async () => {
.political-outlook {
height: 97%;
margin: 0 60px;
// background-color: #fff;
transform: translateY(40px) translateX(-13px);
.content {
height: 95%;
width: 100%;
@ -333,6 +335,7 @@ onMounted(async () => {
}
.listBox {
height: 73%;
// background-color: #fff;
.listStyle {
display: flex;
align-items: center;

View File

@ -153,7 +153,7 @@ const statusList = ref([
{ name: "待复查", value: 3 },
{ name: "待核验", value: 4 },
{ name: "合格", value: 5 },
{ name: "已撤回", value: 6 },
// { name: "", value: 6 },
{ name: "超期未关闭", value: 7 },
]);
let pageNo = ref(1 as any);
@ -256,9 +256,9 @@ const getMemberCountList = async (tip:any) => {
// const res: any = await getInspectionRecordApi(requestData);
const res: any = await getQualityInspectionRecordApi(requestData);
if(tip == 'more'){
partyMemberList.value = partyMemberList.value.concat(res.result.page.records);
partyMemberList.value = partyMemberList.value.concat(res.result.page.records.filter((item:any) => item.status != 6));
} else {
partyMemberList.value = res.result.page.records;
partyMemberList.value = res.result.page.records.filter((item:any) => item.status != 6);
}
// IP
// partyMemberList.value.map((item:any) => {

View File

@ -150,7 +150,7 @@ const statusList = ref([
{ name: "待复查", value: 3 },
{ name: "待核验", value: 4 },
{ name: "合格", value: 5 },
{ name: "已撤回", value: 6 },
// { name: "", value: 6 },
{ name: "超期未关闭", value: 7 },
]);
let pageNo = ref(1 as any);
@ -251,9 +251,9 @@ const getMemberCountList = async (tip:any) => {
}
const res: any = await getInspectionRecordApi(requestData);
if(tip == 'more'){
partyMemberList.value = partyMemberList.value.concat(res.result.page.records);
partyMemberList.value = partyMemberList.value.concat(res.result.page.records.filter((item:any) => item.status != 6));
} else {
partyMemberList.value = res.result.page.records;
partyMemberList.value = res.result.page.records.filter((item:any) => item.status != 6);
}
// IP
// partyMemberList.value.map((item:any) => {

View File

@ -19,9 +19,9 @@
<div>照片</div>
<div>所属企业</div>
<div>所属班组</div>
<div>身份证号</div>
<div style="width:180px">身份证号</div>
<div>联系电话</div>
<div>考试时间</div>
<div style="width:160px">考试时间</div>
<div>培训状态</div>
</div>
<el-scrollbar class="listBox" ref="refScrollbar">
@ -37,6 +37,9 @@
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
>
<template #error>
<el-image :src="noDataImage" :preview-src-list="[noDataImage]" fit="contain" class="el-no-img" alt="" />
</template>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
@ -55,13 +58,13 @@
<span>{{ item.personType == 1 ? item.teamName : item.departmentName }}</span>
</el-tooltip>
</div>
<div>
<div style="width:180px">
<el-tooltip class="box-item" effect="dark" :content="item.idCard" placement="top-start">
<span>{{ item.idCard }}</span>
</el-tooltip>
</div>
<div>{{ item.phoneNumber }}</div>
<div>
<div style="width:160px">
<el-tooltip class="box-item" effect="dark" :content="item.educationTime" placement="top-start">
<span>{{ item.educationTime }}</span>
</el-tooltip>
@ -124,12 +127,12 @@
<span>{{ item.title || "--" }}</span>
</el-tooltip>
</div>
<div style="width: 350px">{{ item.trainBeginTime || "--" }} - {{ item.trainEndTime || "--" }}</div>
<div>{{ item.workerNum || "--" }}</div>
<div>{{ item.createByName || "--" }}</div>
<div>{{ item.completeRadio ? item.completeRadio + "%" : "--" }}</div>
<div>{{ item.passRadio ? item.passRadio + "%" : "--" }}</div>
<div style="color: #5382f6; cursor: pointer" @click="handleOpenDetail(item)">查看培训详情</div>
<div style="width:350px">{{ item.trainBeginTime || '--'}} - {{item.trainEndTime || '--' }}</div>
<div>{{ item.workerNum || '--' }}</div>
<div>{{ item.createByName || '--' }}</div>
<div>{{ item.completeRadio != null ? item.completeRadio + '%' : '--' }}</div>
<div>{{ item.passRadio != null ? item.passRadio + '%' : '--' }}</div>
<div style="color:#5382f6;cursor:pointer;" @click="handleOpenDetail(item)">查看培训详情</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -162,7 +165,7 @@
<div>序号</div>
<div>姓名</div>
<div>课程名称</div>
<div>身份证号</div>
<div style="width:150px">身份证号</div>
<div>培训计划名称</div>
<div>开始学习时间</div>
<div>结束学习时间</div>
@ -170,12 +173,20 @@
<el-scrollbar class="listBox" ref="refScrollbar" style="height: 370px">
<div v-for="(item, index) in studyExamRecord" class="listStyle" :key="item" style="justify-content: space-around">
<div>{{ index + 1 }}</div>
<div>{{ item.workerName || "--" }}</div>
<div>{{ item.courseName || "--" }}</div>
<div>{{ item.workerCard || "--" }}</div>
<div>{{ eduPlanItem.name || "--" }}</div>
<div>{{ item.beginTime || "--" }}</div>
<div>{{ item.endTime || "--" }}</div>
<div>{{ item.workerName || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.courseName" placement="top-start">
<span>{{ eduPlanItem.courseName || '--' }}</span>
</el-tooltip>
</div>
<div style="width:150px">{{ item.workerCard || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.name" placement="top-start">
<span>{{ eduPlanItem.name || '--' }}</span>
</el-tooltip>
</div>
<div>{{ item.beginTime || '--' }}</div>
<div>{{ item.endTime || '--' }}</div>
</div>
<div class="notoDta" v-if="studyExamRecord.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -191,29 +202,37 @@
<div>姓名</div>
<div>科目名称</div>
<div>考试名称</div>
<div>培训计划名称</div>
<div>身份证号</div>
<div>开始考试时间</div>
<div style="width:140px">培训计划名称</div>
<div style="width:200px">身份证号</div>
<div style="width:180px">开始考试时间</div>
<div>作答时长</div>
<div>考试结果</div>
<div>考试总分</div>
<div>考得分</div>
<div>剩余重考次数</div>
<div style="width:140px">剩余重考次数</div>
</div>
<el-scrollbar class="listBox" ref="refScrollbar" style="height: 370px">
<div v-for="(item, index) in studyExamRecord" class="listStyle" :key="item" style="justify-content: space-around">
<div>{{ index + 1 }}</div>
<div>{{ item.workerName || "--" }}</div>
<div>{{ item.subjectName || "--" }}</div>
<div>{{ item.examPaperName || "--" }}</div>
<div>{{ eduPlanItem.name || "--" }}</div>
<div>{{ item.workerCard || "--" }}</div>
<div>{{ item.startExamTime || "--" }}</div>
<div>{{ item.duration || "--" }}</div>
<div>{{ item.isPass || "--" }}</div>
<div>{{ item.totalScore || "--" }}</div>
<div>{{ item.score || "--" }}</div>
<div>{{ item.examCount || "--" }}</div>
<div>{{ item.workerName || '--' }}</div>
<div>{{ item.subjectName || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="item.examPaperName" placement="top-start">
<span>{{ item.examPaperName || '--' }}</span>
</el-tooltip>
</div>
<div style="width:140px">
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.name" placement="top-start">
<span>{{ eduPlanItem.name || '--' }}</span>
</el-tooltip>
</div>
<div style="width:200px">{{ item.workerCard || '--' }}</div>
<div style="width:180px">{{ item.startExamTime || '--' }}</div>
<div>{{ item.duration || '--' }}</div>
<div>{{ item.isPass == 1 ? '合格' : '不合格'}}</div>
<div>{{ item.totalScore != null ? item.totalScore : 0}}</div>
<div>{{ item.score != null ? item.score : 0}}</div>
<div style="width:140px">{{ item.examCount != null ? item.examCount : 0}}</div>
</div>
<div class="notoDta" v-if="studyExamRecord.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -227,7 +246,7 @@
<div class="tabList" style="justify-content: space-around">
<div>序号</div>
<div>姓名</div>
<div>身份证号</div>
<div style="width:150px">身份证号</div>
<div>培训计划名称</div>
<div>科目类型</div>
<div>课程名称</div>
@ -235,11 +254,19 @@
<el-scrollbar class="listBox" ref="refScrollbar" style="height: 370px">
<div v-for="(item, index) in studyExamRecord" class="listStyle" :key="item" style="justify-content: space-around">
<div>{{ index + 1 }}</div>
<div>{{ item.workerName || "--" }}</div>
<div>{{ item.workerCard || "--" }}</div>
<div>{{ eduPlanItem.name || "--" }}</div>
<div>{{ eduPlanItem.subjectName || "--" }}</div>
<div>{{ eduPlanItem.courseName || "--" }}</div>
<div>{{ item.workerName || '--' }}</div>
<div style="width:150px">{{ item.workerCard || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.paperName" placement="top-start">
<span>{{ eduPlanItem.name || '--' }}</span>
</el-tooltip>
</div>
<div>{{ eduPlanItem.subjectName || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.paperName" placement="top-start">
<span>{{ eduPlanItem.courseName || '--' }}</span>
</el-tooltip>
</div>
</div>
<div class="notoDta" v-if="studyExamRecord.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -253,7 +280,7 @@
<div class="tabList" style="justify-content: space-around">
<div>序号</div>
<div>姓名</div>
<div>身份证号</div>
<div style="width:150px">身份证号</div>
<div>培训计划名称</div>
<div>科目类型</div>
<div>考试名称</div>
@ -261,11 +288,19 @@
<el-scrollbar class="listBox" ref="refScrollbar" style="height: 370px">
<div v-for="(item, index) in studyExamRecord" class="listStyle" :key="item" style="justify-content: space-around">
<div>{{ index + 1 }}</div>
<div>{{ item.workerName || "--" }}</div>
<div>{{ item.workerCard || "--" }}</div>
<div>{{ eduPlanItem.name || "--" }}</div>
<div>{{ eduPlanItem.subjectName || "--" }}</div>
<div>{{ eduPlanItem.paperName || "--" }}</div>
<div>{{ item.workerName || '--' }}</div>
<div style="width:150px">{{ item.workerCard || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.name" placement="top-start">
<span>{{ eduPlanItem.name || '--' }}</span>
</el-tooltip>
</div>
<div>{{ eduPlanItem.subjectName || '--' }}</div>
<div>
<el-tooltip class="box-item" style="text-align:center" effect="dark" :content="eduPlanItem.paperName" placement="top-start">
<span>{{ eduPlanItem.paperName || '--' }}</span>
</el-tooltip>
</div>
</div>
<div class="notoDta" v-if="studyExamRecord.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -291,8 +326,11 @@
<script lang="ts" setup>
import { ref, onMounted } from "vue";
import { GlobalStore } from "@/stores";
import type { TabsPaneContext } from "element-plus";
import { getSafeEducationDataApi, getEduPlanDataApi, getStudyDataApi, getExamDataApi } from "@/api/modules/agjtCommandApi";
import type { TabsPaneContext } from 'element-plus'
import noDataImage from "@/assets/images/vehicleManagement/car.png";
import { getSafeEducationDataApi,getEduPlanDataApi,
getStudyDataApi,getExamDataApi
} from "@/api/modules/agjtCommandApi";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
@ -304,8 +342,9 @@ const refScrollbar = ref(null as any); // 绑定到滚动的盒子上
const currentTab = ref("safeEdu" as any);
function handleChangeTab(val: any) {
//
isDetail.value = false;
activeIndex.value = 0;
isDetail.value = false
activeIndex.value = 0
activeName.value = 'first'
//
currentTab.value = val;
partyMemberList.value = [];
@ -611,6 +650,11 @@ onMounted(async () => {
height: 100%;
}
}
.el-no-img {
transform: translateX(-6px);
width: 30px;
height: 30px;
}
}
div {
width: 10%;

View File

@ -165,7 +165,7 @@
{{ day.num }}
<div class="tip-show" :style="{ height: tbodyHeight + 20 + 'px' }" v-show="isShowTopTip(date, day.num)">
<!-- <img src="@/assets/images/lcbTip.png" /> -->
<img src="@/assets/images/lcbTip.png" />
<div class="dash-line"></div>
<div class="info-show">
<div class="info-show-title">查看里程碑节点</div>

View File

@ -1,16 +1,14 @@
<template>
<div class="political-outlook">
<div class="tabBox">
<div :class="{'danger':true,active: currentTab == 'reason' ? true : false}">
<div :class="{ danger: true, active: currentTab == 'reason' ? true : false }">
<span @click="handleChangeTab('reason')">影响进度计划因素</span>
</div>
<div :class="{'danger':true,active: currentTab == 'overview' ? true : false}">
<div :class="{ danger: true, active: currentTab == 'overview' ? true : false }">
<span @click="handleChangeTab('overview')">项目总览</span>
</div>
</div>
<div class="content" v-if="currentTab == 'reason'">
<div class="top-data-show">
<div class="top-left">
@ -83,8 +81,8 @@
: BASEURL + '/image/' + item.image
"
:preview-src-list="
item.image && JSON.parse(item.image) instanceof Array
? JSON.parse(item.image).map((ele) => ele.url)
item.image && JSON.parse(item.image) instanceof Array
? JSON.parse(item.image).map(ele => ele.url)
: [BASEURL + '/image/' + item.image]
"
>
@ -100,37 +98,51 @@
<p>暂无数据</p>
</div>
</el-scrollbar>
<el-pagination
v-if="partyMemberList.length != 0"
background
:page-size="10"
style="justify-content: center"
@current-change="onCurrentChange"
layout="prev, pager, next"
:total="total"
/>
</div>
</div>
<div class="content" v-if="currentTab == 'overview'">
<div class="searchLine">
<el-select ref="selectRef" v-model="selectVal"
placeholder="请选择" style="width: 100%; margin-top: 10px"
size="medium" clearable @change="selectChange"
>
<el-option style="height: auto;width:100%;padding:0;" :value="[]">
<el-tree :data="level1CompanyData" node-key="id" ref="groupTree"
:default-expanded-keys="defaultExpandArr" :props="defaultProps"
:default-expand-all="false" @node-click="treeAreaClick"
>
</el-tree>
</el-option>
</el-select>
<el-select
ref="selectRef"
v-model="selectVal"
placeholder="请选择"
style="width: 100%; margin-top: 10px"
size="medium"
clearable
@change="selectChange"
>
<el-option style="height: auto; width: 100%; padding: 0" :value="[]">
<el-tree
:data="level1CompanyData"
node-key="id"
ref="groupTree"
:default-expanded-keys="defaultExpandArr"
:props="defaultProps"
:default-expand-all="false"
@node-click="treeAreaClick"
>
</el-tree>
</el-option>
</el-select>
</div>
<div class="gantt-box">
<div class="top-count">
<span>项目总进度{{ progressData.projectTotalProgress || 0 }}%</span>
<span>承包商进度{{ progressData.enterpriseTotalProgress || 0 }}%</span>
<span>项目总天数{{ progressData.projectTotalDayNum || 0 }}</span>
<span>项目剩余天数{{ progressData.projectSurplusDayNum || 0 }}</span>
</div>
<span>项目总进度{{ progressData.projectTotalProgress || 0 }}%</span>
<span>承包商进度{{ progressData.enterpriseTotalProgress || 0 }}%</span>
<span>项目总天数{{ progressData.projectTotalDayNum || 0 }}</span>
<span>项目剩余天数{{ progressData.projectSurplusDayNum || 0 }}</span>
</div>
<div class="header">
<div class="left-content">
<div class="item" v-for="(item, index) in headerList" :key="index">
@ -644,22 +656,21 @@
<div>暂无数据</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, watch, nextTick,reactive,computed, onBeforeMount } from "vue";
import { ref, onMounted, watch, nextTick, reactive, computed, onBeforeMount } from "vue";
import { ElMessage } from "element-plus";
import { GlobalStore } from "@/stores";
import { getDelayEventTypeApi, getProgressContentApi,
getCountTaskProgressApi,getQualityRegionListApi,selectHierarchyEnterpriseListApi,getXzParentChildTaskListApi,
import {
getDelayEventTypeApi,
getProgressContentApi,
getCountTaskProgressApi,
getQualityRegionListApi,
selectHierarchyEnterpriseListApi,
getXzParentChildTaskListApi
} from "@/api/modules/agjtCommandApi";
import noDataImage from "@/assets/images/vehicleManagement/car.png";
import moment from "moment";
@ -676,16 +687,16 @@ const tableParams = ref({
});
//tab
const currentTab = ref('reason' as any)
function handleChangeTab(val: any){
currentTab.value = val
if(currentTab.value == 'reason'){
partyMemberList.value = []
pageNo.value = 1
}else{
getHierarchyEnterpriseList()
getCountFn()
getDataList()
const currentTab = ref("reason" as any);
function handleChangeTab(val: any) {
currentTab.value = val;
if (currentTab.value == "reason") {
partyMemberList.value = [];
pageNo.value = 1;
} else {
getHierarchyEnterpriseList();
getCountFn();
getDataList();
}
}
@ -711,31 +722,38 @@ const getDelayEventTypeFn = async () => {
const res: any = await getDelayEventTypeApi(requestData);
topStatisticData.value = res.result;
};
let total = ref(0 as any);
const onCurrentChange = (event: number) => {
pageNo.value = event;
getMemberCountList();
};
//
const getMemberCountList = async (tip: any) => {
const getMemberCountList = async () => {
let requestData: any = {
projectSn: store.sn,
auditType: 2,
date: tableParams.value.calendarVal,
pageNo: tip == "search" ? 1 : pageNo.value,
pageSize: 100,
pageNo: pageNo.value,
pageSize: 10,
hasDelayEvent: 1
};
const res: any = await getProgressContentApi(requestData);
if (tip == "more") {
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else {
partyMemberList.value = res.result.records;
}
// if (tip == "more") {
// partyMemberList.value = partyMemberList.value.concat(res.result.records);
// } else {
// partyMemberList.value = res.result.records;
// }
partyMemberList.value = res.result.records;
total.value = Number(res.result.total);
// IP
// partyMemberList.value.map((item:any) => {
// item.fieldAcquisitionUrl = BASEURL + '/image/' + item.fieldAcquisitionUrl
// })
if (res.result.pages == pageNo.value) {
moreScroll.value = false;
} else {
pageNo.value = pageNo.value + 1;
}
// if (res.result.pages == pageNo.value) {
// moreScroll.value = false;
// } else {
// pageNo.value = pageNo.value + 1;
// }
};
watch(
() => calendarVal.value,
@ -744,124 +762,128 @@ watch(
// props.xData = newVal;
tableParams.value.calendarVal = moment(newVal).format("YYYY-MM-DD");
dateTime.value = moment(newVal).format("YYYY-MM-DD");
getMemberCountList("search");
getMemberCountList();
}
}
);
const state = reactive({
projects: [],
dateList: [],
}as any);
projects: [],
dateList: []
} as any);
const dates = computed(() => {
let dates:any = [];
const mapDates = (data:any) => {
data.map((p:any) => {
dates.push(p.startDate);
dates.push(p.finishDate);
p.children && mapDates(p.children);
});
};
mapDates(state.projects);
dates = dates.map((date:any) => date.slice(0, 7)).sort();
dates = [...new Set(dates)];
//
let startDate = moment(dates[0]);
let endDate = moment(dates[dates.length - 1]);
if (dates.length > 0) {
let countArr = [dates[0]];
const months = endDate.diff(startDate,'months');
for (let i = 0; i < months; i++) {
countArr.push(startDate.add(1,'month').format('YYYY-MM'));
}
return countArr;
} else {
return dates;
}
let dates: any = [];
const mapDates = (data: any) => {
data.map((p: any) => {
dates.push(p.startDate);
dates.push(p.finishDate);
p.children && mapDates(p.children);
});
};
mapDates(state.projects);
dates = dates.map((date: any) => date.slice(0, 7)).sort();
dates = [...new Set(dates)];
//
let startDate = moment(dates[0]);
let endDate = moment(dates[dates.length - 1]);
if (dates.length > 0) {
let countArr = [dates[0]];
const months = endDate.diff(startDate, "months");
for (let i = 0; i < months; i++) {
countArr.push(startDate.add(1, "month").format("YYYY-MM"));
}
return countArr;
} else {
return dates;
}
});
watch(dates, (newDates) => {
state.dateList = newDates;
}, { immediate: true });
watch(
dates,
newDates => {
state.dateList = newDates;
},
{ immediate: true }
);
//
const selectVal = ref(''as any)
const selectVal = ref("" as any);
const level1CompanyData = ref([] as any);
const defaultExpandArr = ref([]as any)
const defaultExpandArr = ref([] as any);
const defaultProps = ref({
children: "children",
label: "enterpriseName",
}as any)
children: "children",
label: "enterpriseName"
} as any);
const treeData = ref({} as any);
const selectRef = ref();
const groupTree = ref();
const progressData = ref ({
projectSurplusDayNum: 0,
projectTotalDayNum: 0,
projectTotalProgress: 0,
enterpriseTotalProgress: 0,
}as any)
const progressData = ref({
projectSurplusDayNum: 0,
projectTotalDayNum: 0,
projectTotalProgress: 0,
enterpriseTotalProgress: 0
} as any);
//
const getCountFn = async() => {
let requestData = {
projectSn: store.sn,
enterpriseId: treeData.value.id,
};
await getCountTaskProgressApi(requestData).then((res:any) => {
if (res.code == 200 && res.result) {
progressData.value = res.result;
}
});
}
const getCountFn = async () => {
let requestData = {
projectSn: store.sn,
enterpriseId: treeData.value.id
};
await getCountTaskProgressApi(requestData).then((res: any) => {
if (res.code == 200 && res.result) {
progressData.value = res.result;
}
});
};
const selectChange = async(val:any) => {
const selectChange = async (val: any) => {
if (!val) {
selectVal.value = "";
// areaSelectVal.value = "";
treeData.value = "";
getCountFn()
getDataList();
}
}
// areaSelectVal.value = "";
treeData.value = "";
getCountFn();
getDataList();
}
};
//
const treeAreaClick = async(data:any) => {
if (data.status == 1) {
ElMessage({
message:"无法选中已禁用组织",
type:"warning"
const treeAreaClick = async (data: any) => {
if (data.status == 1) {
ElMessage({
message: "无法选中已禁用组织",
type: "warning"
});
} else {
selectVal.value = data.enterpriseName;
treeData.value = data;
selectRef.value.blur();
getCountFn()
getDataList();
}
}
} else {
selectVal.value = data.enterpriseName;
treeData.value = data;
selectRef.value.blur();
getCountFn();
getDataList();
}
};
//
const getHierarchyEnterpriseList = async() => {
let data = {
projectSn: store.sn,
};
selectHierarchyEnterpriseListApi(data).then((res:any) => {
console.log(res, "承包商列表");
if (res.code == 200) {
level1CompanyData.value = res.result;
if (level1CompanyData.value && level1CompanyData.value.length > 0) {
nextTick(() => {
treeData.value = level1CompanyData.value[0];
selectVal.value = level1CompanyData.value[0].enterpriseName
// tree.value.setCurrentKey(level1CompanyData.value[0].id);//tree
groupTree.value.setCurrentKey(level1CompanyData.value[0].id);
getDataList();//123
// getCountFn();//123
});
}
// this.enterpriseTreeData = res.result
}
});
}
const getHierarchyEnterpriseList = async () => {
let data = {
projectSn: store.sn
};
selectHierarchyEnterpriseListApi(data).then((res: any) => {
console.log(res, "承包商列表");
if (res.code == 200) {
level1CompanyData.value = res.result;
if (level1CompanyData.value && level1CompanyData.value.length > 0) {
nextTick(() => {
treeData.value = level1CompanyData.value[0];
selectVal.value = level1CompanyData.value[0].enterpriseName;
// tree.value.setCurrentKey(level1CompanyData.value[0].id);//tree
groupTree.value.setCurrentKey(level1CompanyData.value[0].id);
getDataList(); //123
// getCountFn();//123
});
}
// this.enterpriseTreeData = res.result
}
});
};
//
const ganttDetailRef = ref();
@ -1388,7 +1410,7 @@ onMounted(async () => {
dateTime.value = moment(new Date()).format("YYYY-MM");
calendarVal.value = moment(new Date()).format("YYYY-MM-DD");
await getDelayEventTypeFn();
await getMemberCountList("search");
await getMemberCountList();
// refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// const scrollTop = e.target.scrollTop;
// const scrollHeight = e.target.scrollHeight;
@ -1411,12 +1433,12 @@ onMounted(async () => {
.political-outlook {
height: 97%;
margin: 0 60px;
.tabBox{
.tabBox {
position: absolute;
top: 6%;
left: 3.5%;
width:350px;
height:50px;
width: 350px;
height: 50px;
// background-color: #fff;
color: gray;
font-weight: bold;
@ -1425,24 +1447,24 @@ onMounted(async () => {
display: flex;
justify-content: space-around;
align-items: center;
.danger{
width:50%;
height:100%;
.danger {
width: 50%;
height: 100%;
display: flex;
justify-content: space-around;
align-items: center;
cursor: pointer;
}
.special{
width:50%;
height:100%;
.special {
width: 50%;
height: 100%;
display: flex;
justify-content: space-around;
align-items: center;
cursor: pointer;
}
.active{
color:#fff
.active {
color: #fff;
}
}
.content {
@ -1452,11 +1474,11 @@ onMounted(async () => {
// background: url("@/assets/images/cardImg.png") no-repeat;
background-size: 100% 100%;
padding: 20px 15px;
.searchLine{
color:#fff;
.searchLine {
color: #fff;
position: absolute;
top:14%;
left:7.5%;
top: 14%;
left: 7.5%;
}
.top-statistics {
display: grid;
@ -1686,8 +1708,6 @@ onMounted(async () => {
}
}
.gantt-box {
box-sizing: border-box;
min-width: 1120px;
@ -2078,15 +2098,12 @@ onMounted(async () => {
flex-direction: column;
color: #fff;
font-size: 16px;
img{
img {
height: 33%;
width: 10%;
}
}
}
}
}
.notoDta {
@ -2122,7 +2139,7 @@ onMounted(async () => {
color: white;
border-color: transparent;
}
.el-tree-node__label{
.el-tree-node__label {
word-wrap: break-word;
overflow: hidden;
text-overflow: ellipsis;

View File

@ -629,6 +629,8 @@ function jumpBgd() {
window.location.replace("http://jxj.zhgdyun.com:100/#/login?token=" + store.token);
} else if (COMPANY === "as") {
window.location.replace("http://182.90.224.237:15551/#/login?token=" + store.token);
} else if (COMPANY === "jzjt") {
window.location.replace("http://jxjzw.zhgdyun.com:6089/#/login?token=" + store.token);
} else if (envList.includes(COMPANY)) {
window.location.replace(BASEURL + "/#/login?token=" + store.token);
} else {