shenzhen-dev #2

Merged
admin merged 614 commits from shenzhen-dev into master 2025-06-03 18:28:43 +08:00
8 changed files with 336 additions and 369 deletions
Showing only changes of commit 7a986d8ae7 - Show all commits

View File

@ -16,3 +16,37 @@ export const getEnterpriseStatusApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/xzSecurityQualityInspectionRecord/statsByEnterprise`, params, { headers: { noLoading: true } });
};
// 危大工程弹窗
// 形象进度
export const getProgressRecordApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/dangerousEngineeringProgressRecord/page`, params, { headers: { noLoading: true } });
};
// 安全隐患
export const getInspectionRecordApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/xzSecurityQualityInspectionRecord/page`, params, { headers: { noLoading: true } });
};
// 验收记录
export const getEngineeringRecordApi = (params: {}) => {
return http.get(BASEURL + `/xmgl/xzDangerousEngineeringAcceptance/page`, params, { headers: { noLoading: true } });
};
// 旁站记录
export const getSideStationApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/dangerousEngineeringSideStation/page`, params, { headers: { noLoading: true } });
};
// 安全教育弹窗
export const getSafeEducationDataApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/xzWorkerInfoAuditRecord/selectWorkerInfoAuditList`, params, { headers: { noLoading: true } });
};
// 天气弹窗
export const getDelayEventTypeApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/xzTaskProgressContent/statsDelayEventType`, params, { headers: { noLoading: true } });
};
// 风险统计弹窗
// 顶部数据
export const getStatisticsNumDataApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/xzSecurityQualityInspectionRecord/selectQualityStatisticsNum`, params, { headers: { noLoading: true } });
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -56,7 +56,7 @@
<div class="classify-div-item" @click="openDialogData({index: 2, title: '安全教育'})">
<span>安全教育&nbsp;&nbsp;+20</span>
</div>
<div class="classify-div-item" @click="openDialogData({index: 3, title: '极端恶劣天气'})">
<div class="classify-div-item" @click="openDialogData({index: 3, title: '影响进度的因素'})">
<span>极端恶劣天气&nbsp;&nbsp;+20</span>
</div>
<div class="classify-div-item" @click="openDialogData({index: 4, title: '风险统计'})">
@ -69,6 +69,9 @@
<span>AI警报&nbsp;&nbsp;+20</span>
</div>
</div>
<div class="background-title">
<span @click="openDialogData({index: 9, title: '月度安全综合评分'})">查看月度安全评分报告详情</span>
</div>
</div>
</div>
</template>
@ -352,7 +355,7 @@ onMounted(async () => {
width: 100%;
color: white;
position: absolute;
bottom: 0px;
bottom: 10px;
left: 0px;
display: flex;
align-items: center;
@ -374,6 +377,21 @@ onMounted(async () => {
}
}
}
.background-title{
width: 100%;
height: 40px;
position: absolute;
text-align: center;
line-height: 50px;
color: #00E2F9;
font-size: 14px;
bottom: -10px;
left: 0px;
background-image: url("@/assets/images/commandScreen/title-bg.png");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
}
}
</style>

View File

@ -10,7 +10,8 @@
<div class="tabs-one" v-if="activeIndex == 0">
<div class="tabList">
<div>序号</div>
<div>当前进度</div>
<div>危大工程名称</div>
<div>进度描述</div>
<div>图片</div>
<div>记录人</div>
<div>记录时间</div>
@ -18,19 +19,20 @@
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{index + 1}}</div>
<div>{{item.workerName}}</div>
<div>{{item.engineeringName}}</div>
<div>{{item.progressDescribe}}</div>
<div class="list-img">
<el-image
fit="contain"
class="el-img"
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
:src="BASEURL + '/image/' + item.imageUrl"
:preview-src-list="[BASEURL + '/image/' + item.imageUrl]"
>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{item.phoneNumber}}</div>
<div>{{item.personType == 1?item.teamName:item.personType == 2?item.departmentName:''}}</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="" />
@ -41,29 +43,28 @@
<div class="tabs-two" v-if="activeIndex == 1">
<div class="tabList">
<div>序号</div>
<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.workerName}}</div>
<div class="list-img">
<el-image
fit="contain"
class="el-img"
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{item.phoneNumber}}</div>
<div>{{item.personType == 1?item.teamName:item.personType == 2?item.departmentName:''}}</div>
<div>{{item.phoneNumber}}</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="" />
@ -74,29 +75,31 @@
<div class="tabs-three" v-if="activeIndex == 2">
<div class="tabList">
<div>序号</div>
<div>危大工程名称</div>
<div>验收描述</div>
<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.workerName}}</div>
<div>{{item.phoneNumber}}</div>
<div>{{item.engineeringName}}</div>
<div>{{item.acceptanceDesc}}</div>
<div>{{item.acceptanceResult == 1?'合格':'不合格'}}</div>
<div class="list-img">
<el-image
fit="contain"
class="el-img"
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
:src="BASEURL + '/image/' + item.photo"
:preview-src-list="[BASEURL + '/image/' + item.photo]"
>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{item.phoneNumber}}</div>
<div>{{item.personType == 1?item.teamName:item.personType == 2?item.departmentName:''}}</div>
<div>{{item.applyAcceptanceUserName}}</div>
<div>{{item.createTime}}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -115,19 +118,19 @@
<el-scrollbar class="listBox" ref="refScrollbar">
<div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
<div>{{index + 1}}</div>
<div>{{item.workerName}}</div>
<div>{{item.buildSituation}}</div>
<div class="list-img">
<el-image
fit="contain"
class="el-img"
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
:src="BASEURL + '/image/' + item.imageUrl"
:preview-src-list="[BASEURL + '/image/' + item.imageUrl]"
>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{item.phoneNumber}}</div>
<div>{{item.personType == 1?item.teamName:item.personType == 2?item.departmentName:''}}</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="" />
@ -144,16 +147,16 @@ import { ref, onMounted } from "vue";
import { GlobalStore } from "@/stores";
import { getCompanyDataList, getMemberInfoList } from "@/api/modules/labor";
import type { TabsPaneContext } from 'element-plus'
import { getProgressRecordApi, getInspectionRecordApi, getEngineeringRecordApi, getSideStationApi } from "@/api/modules/agjtCommandApi";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
const activeName = ref('first')
const activeIndex = ref('1' as any)
const activeIndex = ref(0 as any)
const onlineWorkList = ref([
{ name: "在职", value: 1 },
{ name: "离职", value: 2 }
])
const enterpriseListData = ref([] as any);
const memberTypeList = ref([
{ name: "劳务人员", value: 1 },
{ name: "管理人员", value: 2 },
@ -172,7 +175,7 @@ const searchForm = ref({
idCard: ''
});
const partyMemberList = ref({} as any);
const partyMemberList = ref([] as any);
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
// console.log('tab',tab.index)
@ -181,45 +184,50 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
// if(activeName.value === 'second') console.log('2')
// if(activeName.value === 'third') console.log('3')
activeIndex.value = tab.index
partyMemberList.value = [];
getMemberCountList('search')
console.log('activeIndex',activeIndex.value)
}
//
const getCompanyList = async () => {
let data = {
projectSn: store.sn,
enterpriseName: "",
userEnterpriseId: store.userInfo?.userEnterpriseId
};
const res: any = await getCompanyDataList(data);
if (res.code == 200) {
enterpriseListData.value = res.result;
}
};
//
const getMemberCountList = async (tip:any) => {
let requestData:any = {
projectSn: store.sn,
personType: searchForm.value.memberType, //
enterpriseId: searchForm.value.belongCompany, //
inserviceType: searchForm.value.workState, //
idCard: searchForm.value.idCard, //
workerName: searchForm.value.name, //
pageNo: tip == 'search'?1:pageNo.value,
pageSize: 100
}
if(props.tip == '实时'){
requestData.presence = 1;
} else if(props.tip == '日累积') {
requestData.attendance = 1;
} else {
requestData.inserviceType = 1;
let requestFn:any;
if(activeIndex.value == 0){
requestFn = getProgressRecordApi;
} else if(activeIndex.value == 1){
requestFn = getInspectionRecordApi;
requestData.isDangerousEngineering = 1;
} else if(activeIndex.value == 2){
requestFn = getEngineeringRecordApi;
} else if(activeIndex.value == 3){
requestFn = getSideStationApi;
}
const res: any = await getMemberInfoList(requestData);
console.log("获取人员信息列表", res);
const res: any = await requestFn(requestData);
console.log("获取危大工程数据", res);
if(tip == 'more'){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
if(activeIndex.value == 0){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else if(activeIndex.value == 1){
partyMemberList.value = partyMemberList.value.concat(res.result.page.records);
} else if(activeIndex.value == 2){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else if(activeIndex.value == 3){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
}
} else {
partyMemberList.value = res.result.records;
if(activeIndex.value == 0){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else if(activeIndex.value == 1){
partyMemberList.value = partyMemberList.value.concat(res.result.page.records);
} else if(activeIndex.value == 2){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else if(activeIndex.value == 3){
partyMemberList.value = partyMemberList.value.concat(res.result.records);
}
}
// IP
// partyMemberList.value.map((item:any) => {
@ -233,7 +241,6 @@ const getMemberCountList = async (tip:any) => {
};
onMounted(async () => {
await getCompanyList();
await getMemberCountList('search');
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("", e);
@ -286,7 +293,7 @@ onMounted(async () => {
margin-top: 2%;
div {
text-align: center;
width: 20%;
width: 17%;
}
}
.listBox {
@ -311,7 +318,7 @@ onMounted(async () => {
}
}
div {
width: 20%;
width: 17%;
white-space: nowrap; //
overflow: hidden;
text-overflow: ellipsis;
@ -451,7 +458,7 @@ onMounted(async () => {
margin-top: 2%;
div {
text-align: center;
width: 17%;
width: 20%;
}
}
.listBox {
@ -476,7 +483,7 @@ onMounted(async () => {
}
}
div {
width: 17%;
width: 20%;
white-space: nowrap; //
overflow: hidden;
text-overflow: ellipsis;

View File

@ -31,27 +31,41 @@
<div>
<span>{{ index3 + 1 }}</span>
</div>
<div>{{ item.scoreCriteria }}</div>
<div>123</div>
<div>
<span>{{ item.standardScore }}</span>
</div>
<div>0</div>
<div>
<!-- <el-input placeholder="请输入" v-model="item.punish" class="form-element-input" /> -->
0
<span>123</span>
</div>
</div>
</div>
<div class="category-title">
<span>{{ key2 }}</span>
</div>
<div class="category-title">
<span>{{ key2 }}</span>
</div>
</div>
<div class="table-head-nine-part2">
<div><span>小计</span></div>
<div>
<span>0</span>
<div class="category-title">
<span>AI报警</span>
</div>
<div>
<span>0</span>
<div class="category-title">
<span>AI违章抓拍</span>
</div>
<div class="category-title">
<span>告警数量月度环比对比</span>
</div>
<div class="category-title">
<span>123</span>
</div>
<div class="category-title">
<span>123</span>
</div>
</div>
<div class="table-head-nine-part3">
<div><span>综合得分</span></div>
<div>
<span>89</span>
</div>
<div></div>
</div>
</div>
<!-- <div v-for="(item, index) in partyMemberList" class="listStyle" :key="item.id">
@ -367,78 +381,36 @@ onMounted(async () => {
.table-head-nine-part1 {
display: flex;
align-items: center;
// background-color: #fff;
text-align: center;
color: white;
font-size: 20px;
border-bottom: 1px solid #086d93;
font-size: 14px;
.category-title {
width: calc(17% - 2px);
width: 17%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
// overflow-wrap: anywhere;
border-right: 2px solid #086d93;
// text-align: left !important;
}
.category-content {
width: calc(85% - 8px);
width: 49%;
> div {
width: 100%;
height: 30px;
line-height: 30px;
display: flex;
> div:nth-child(1) {
width: 6%;
>div{
width: 33.3%;
display: flex;
align-items: center;
justify-content: center;
white-space: nowrap;
text-align: center;
}
> div:nth-child(2) {
width: 54%;
overflow-wrap: anywhere;
text-align: left !important;
}
> div:nth-child(3) {
width: 13%;
display: flex;
align-items: center;
justify-content: center;
white-space: nowrap;
}
> div:nth-child(4) {
width: 13%;
display: flex;
align-items: center;
justify-content: center;
white-space: nowrap;
}
> div:nth-child(5) {
width: calc(14% - 2px);
display: flex;
align-items: center;
justify-content: center;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #086d93;
}
}
> div:not(:last-child) {
> div:nth-child(1) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(2) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(3) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(4) {
border-bottom: 1px solid #086d93;
}
> div:nth-child(5) {
border-bottom: 1px solid #086d93;
>div:nth-child(2){
text-align: left;
justify-content: flex-start;
}
}
}
@ -448,10 +420,55 @@ onMounted(async () => {
align-items: center;
text-align: center;
color: white;
font-size: 20px;
border-bottom: 1px solid #086d93;
font-size: 14px;
>div{
height: 30px;
line-height: 30px;
}
> div:nth-child(1) {
width: 68%;
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(2) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(3) {
width: 34%;
text-align: left;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(4) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
> div:nth-child(5) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
}
}
.table-head-nine-part3 {
display: flex;
align-items: center;
text-align: center;
color: white;
font-size: 14px;
>div{
height: 30px;
line-height: 30px;
}
> div:nth-child(1) {
width: 17%;
display: flex;
flex-direction: column;
white-space: nowrap;
@ -460,31 +477,10 @@ onMounted(async () => {
}
}
> div:nth-child(2) {
width: 11%;
width: 49%;
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #086d93;
}
}
> div:nth-child(3) {
width: 11%;
display: flex;
flex-direction: column;
white-space: nowrap;
> span:not(:first-child) {
border-top: 1px solid #086d93;
}
}
> div:nth-child(4) {
width: calc(12% - 4px);
display: flex;
flex-direction: column;
white-space: nowrap;
}
div:not(:last-child) {
border-right: 2px solid #086d93;
}
}
}

View File

@ -2,70 +2,65 @@
<div class="political-outlook">
<div class="content">
<div class="top-count">
<div class="rightHeader">
<!-- <div class="rightHeader">
<div class="day Selected" @click="changeSelect(1)" :class="checked == 1 ? 'active' : ''"><span>在施</span></div>
<div class="year Selected" @click="changeSelect(2)" :class="checked == 2 ? 'active' : ''"><span>当月</span></div>
</div>
</div> -->
<div class="risk-count-all">
<div class="all-sum">
<span>5</span>
<span>{{ statisticsData.totalNum || 0 }}</span>
<span></span>
</div>
<span>风险总数</span>
</div>
<div class="risk-classify">
<div class="classify-item classify-one">
<span>2</span>
<span>{{ statisticsData.greatFaultLevelNum || 0 }}</span>
<span>重大风险</span>
</div>
<div class="classify-item classify-two">
<span>2</span>
<span>{{ statisticsData.largerRiskNum || 0 }}</span>
<span>较大风险</span>
</div>
<div class="classify-item classify-three">
<span>2</span>
<span>{{ statisticsData.generalRiskNum || 0 }}</span>
<span>一般风险</span>
</div>
<div class="classify-item classify-four">
<span>2</span>
<span>{{ statisticsData.lowRiskNum || 0 }}</span>
<span>低风险</span>
</div>
</div>
</div>
<div class="radio-content">
<!-- <div class="radio-content">
<el-radio-group
v-model="riskType"
>
<el-radio :label="1">动态风险</el-radio>
<el-radio :label="2">静态风险</el-radio>
</el-radio-group>
</div>
</div> -->
<div class="table-one">
<div class="tabList">
<div>序号</div>
<div>检查结果</div>
<div>检查人</div>
<div>检查时间</div>
<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.workerName }}</div>
<div class="list-img">
<el-image
fit="contain"
class="el-img"
:src="BASEURL + '/image/' + item.fieldAcquisitionUrl"
:preview-src-list="[BASEURL + '/image/' + item.fieldAcquisitionUrl]"
>
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{ item.phoneNumber }}</div>
<div>{{ item.personType == 1 ? item.teamName : item.personType == 2 ? item.departmentName : "" }}</div>
<div>{{ item.phoneNumber }}</div>
<div>{{ item.problemDescription }}</div>
<div>{{ item.remark }}</div>
<div>{{ item.level == 1
? "一级"
: item.level == 2
? "二级"
: item.level == 3
? "三级"
: "四级" }}</div>
<div>{{ item.inspectTime }}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -81,28 +76,15 @@
import { ref, onMounted } from "vue";
import { GlobalStore } from "@/stores";
import { getCompanyDataList, getMemberInfoList } from "@/api/modules/labor";
import type { TabsPaneContext } from "element-plus";
import { getStatisticsNumDataApi, getInspectionRecordApi } from "@/api/modules/agjtCommandApi";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
const riskType = ref(1);
const activeName = ref("first");
const activeIndex = ref("1" as any);
const onlineWorkList = ref([
{ name: "在职", value: 1 },
{ name: "离职", value: 2 }
]);
const enterpriseListData = ref([] as any);
const memberTypeList = ref([
{ name: "劳务人员", value: 1 },
{ name: "管理人员", value: 2 },
{ name: "临时人员", value: 3 }
]);
const alarmTypeList = ref(["报警", "预警"]);
let pageNo = ref(1 as any);
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); //
const deviceList = ref([] as any); //
const searchForm = ref({
memberType: "",
belongCompany: "",
@ -112,18 +94,20 @@ const searchForm = ref({
});
const checked = ref(1);
const partyMemberList = ref({} as any);
const statisticsData = ref({} as any)
const changeSelect = (index: any) => {
checked.value = index;
};
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
// console.log('tab',tab.index)
// console.log('activeName',activeName.value)
// if(activeName.value === 'first') console.log('1')
// if(activeName.value === 'second') console.log('2')
// if(activeName.value === 'third') console.log('3')
activeIndex.value = tab.index;
console.log("activeIndex", activeIndex.value);
//
const getStatisticsNumDataFn = async () => {
let data = {
projectSn: store.sn
};
const res: any = await getStatisticsNumDataApi(data);
if (res.code == 200) {
console.log('风险统计顶部统计数据', res)
statisticsData.value = res.result;
}
};
//
const getCompanyList = async () => {
@ -141,27 +125,16 @@ const getCompanyList = async () => {
const getMemberCountList = async (tip: any) => {
let requestData: any = {
projectSn: store.sn,
personType: searchForm.value.memberType, //
enterpriseId: searchForm.value.belongCompany, //
inserviceType: searchForm.value.workState, //
idCard: searchForm.value.idCard, //
workerName: searchForm.value.name, //
recordType: 1,
pageNo: tip == "search" ? 1 : pageNo.value,
pageSize: 100
};
if (props.tip == "实时") {
requestData.presence = 1;
} else if (props.tip == "日累积") {
requestData.attendance = 1;
} else {
requestData.inserviceType = 1;
}
const res: any = await getMemberInfoList(requestData);
console.log("获取人员信息列表", res);
const res: any = await getInspectionRecordApi(requestData);
console.log("获取风险统计列表", res);
if (tip == "more") {
partyMemberList.value = partyMemberList.value.concat(res.result.records);
partyMemberList.value = partyMemberList.value.concat(res.result.page.records);
} else {
partyMemberList.value = res.result.records;
partyMemberList.value = res.result.page.records;
}
// IP
// partyMemberList.value.map((item:any) => {
@ -177,6 +150,7 @@ const getMemberCountList = async (tip: any) => {
onMounted(async () => {
await getCompanyList();
await getMemberCountList("search");
await getStatisticsNumDataFn();
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("", e);
const scrollTop = e.target.scrollTop;
@ -275,7 +249,7 @@ onMounted(async () => {
grid-template-columns: repeat(4, 1fr);
color: white;
margin: 0 auto;
margin-top: 1.5%;
margin-top: 3%;
.classify-item {
width: 100%;
height: 100%;

View File

@ -1,7 +1,7 @@
<template>
<div class="political-outlook">
<div class="content">
<div class="top-statistics">
<!-- <div class="top-statistics">
<div class="statistics-item">
<span class="title">三级入场教育</span>
<span class="statistics-item-content">总数1</span>
@ -44,20 +44,27 @@
<span class="statistics-item-content">已完成1</span>
<span class="statistics-item-content">100%</span>
</div>
</div>
</div> -->
<div class="table-one">
<div class="tabList">
<div>序号</div>
<div>检查结果</div>
<div>检查人</div>
<div>检查时间</div>
<div>隐患信息</div>
<div>整改人</div>
<div>姓名</div>
<div>性别</div>
<div>民族</div>
<div>照片</div>
<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.workerName}}</div>
<div>{{ index + 1 }}</div>
<div>{{ item.workerName }}</div>
<div>{{ item.sex == 1 ? "男" : "女" }}</div>
<div>{{ item.nation }}</div>
<div class="list-img">
<el-image
fit="contain"
@ -68,9 +75,12 @@
</el-image>
<!-- <img :src="item.fieldAcquisitionUrl" alt="" srcset=""> -->
</div>
<div>{{item.phoneNumber}}</div>
<div>{{item.personType == 1?item.teamName:item.personType == 2?item.departmentName:''}}</div>
<div>{{item.phoneNumber}}</div>
<div>{{ item.enterpriseName }}</div>
<div>{{ item.personType == 1 ? item.teamName : item.departmentName }}</div>
<div>{{ item.idCard }}</div>
<div>{{ item.phoneNumber }}</div>
<div>{{ item.educationTime }}</div>
<div>{{ item.isExamPass == -1 ? "未培训" : item.isExamPass == 1 ? "合格" : "不合格" }}</div>
</div>
<div class="notoDta" v-if="partyMemberList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
@ -85,81 +95,32 @@
<script lang="ts" setup>
import { ref, onMounted } from "vue";
import { GlobalStore } from "@/stores";
import { getCompanyDataList, getMemberInfoList } from "@/api/modules/labor";
import type { TabsPaneContext } from 'element-plus'
import { getSafeEducationDataApi } from "@/api/modules/agjtCommandApi";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
const activeName = ref('first')
const activeIndex = ref('1' as any)
const onlineWorkList = ref([
{ name: "在职", value: 1 },
{ name: "离职", value: 2 }
])
const enterpriseListData = ref([] as any);
const memberTypeList = ref([
{ name: "劳务人员", value: 1 },
{ name: "管理人员", value: 2 },
{ name: "临时人员", value: 3 }
]);
const alarmTypeList = ref(["报警", "预警"]);
let pageNo = ref(1 as any);
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); //
const deviceList = ref([] as any); //
const searchForm = ref({
memberType: '',
belongCompany: '',
workState: '',
name: '',
idCard: ''
});
const partyMemberList = ref({} as any);
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
// console.log('tab',tab.index)
// console.log('activeName',activeName.value)
// if(activeName.value === 'first') console.log('1')
// if(activeName.value === 'second') console.log('2')
// if(activeName.value === 'third') console.log('3')
activeIndex.value = tab.index
console.log('activeIndex',activeIndex.value)
}
//
const getCompanyList = async () => {
let data = {
projectSn: store.sn,
enterpriseName: "",
userEnterpriseId: store.userInfo?.userEnterpriseId
};
const res: any = await getCompanyDataList(data);
if (res.code == 200) {
enterpriseListData.value = res.result;
}
};
//
const getMemberCountList = async (tip:any) => {
let requestData:any = {
const getMemberCountList = async (tip: any) => {
let requestData: any = {
projectSn: store.sn,
personType: searchForm.value.memberType, //
enterpriseId: searchForm.value.belongCompany, //
inserviceType: searchForm.value.workState, //
idCard: searchForm.value.idCard, //
workerName: searchForm.value.name, //
pageNo: tip == 'search'?1:pageNo.value,
pageNo: tip == "search" ? 1 : pageNo.value,
pageSize: 100
}
if(props.tip == '实时'){
};
if (props.tip == "实时") {
requestData.presence = 1;
} else if(props.tip == '日累积') {
} else if (props.tip == "日累积") {
requestData.attendance = 1;
} else {
requestData.inserviceType = 1;
}
const res: any = await getMemberInfoList(requestData);
console.log("获取人员信息列表", res);
if(tip == 'more'){
const res: any = await getSafeEducationDataApi(requestData);
console.log("获取安全教育", res);
if (tip == "more") {
partyMemberList.value = partyMemberList.value.concat(res.result.records);
} else {
partyMemberList.value = res.result.records;
@ -176,8 +137,7 @@ const getMemberCountList = async (tip:any) => {
};
onMounted(async () => {
await getCompanyList();
await getMemberCountList('search');
await getMemberCountList("search");
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("", e);
const scrollTop = e.target.scrollTop;
@ -210,13 +170,13 @@ onMounted(async () => {
// background: url("@/assets/images/cardImg.png") no-repeat;
background-size: 100% 100%;
padding: 20px 15px;
.top-statistics{
.top-statistics {
display: grid;
grid-gap: 20px;
grid-template-columns: repeat(3, 1fr);
color: white;
margin: 0 5%;
.statistics-item{
.statistics-item {
width: 240px;
height: 95px;
display: flex;
@ -224,50 +184,50 @@ onMounted(async () => {
justify-content: space-between;
align-items: center;
position: relative;
.title{
.title {
position: absolute;
top: 4%;
left: 4%;
}
&-content{
&-content {
display: inline-block;
width: 50%;
height: auto;
text-indent: 1.5em;
}
&-content:nth-child(2){
&-content:nth-child(2) {
margin-top: 8%;
}
&-content:nth-child(3){
&-content:nth-child(3) {
margin-top: 8%;
}
}
.statistics-item:nth-child(1){
.statistics-item:nth-child(1) {
background: url("@/assets/images/commandScreen/bg6.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(2){
.statistics-item:nth-child(2) {
background: url("@/assets/images/commandScreen/bg2.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(3){
.statistics-item:nth-child(3) {
background: url("@/assets/images/commandScreen/bg4.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(4){
.statistics-item:nth-child(4) {
background: url("@/assets/images/commandScreen/bg1.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(5){
.statistics-item:nth-child(5) {
background: url("@/assets/images/commandScreen/bg3.png") no-repeat;
background-size: 100% 100%;
}
.statistics-item:nth-child(6){
.statistics-item:nth-child(6) {
background: url("@/assets/images/commandScreen/bg5.png") no-repeat;
background-size: 100% 100%;
}
}
.table-one{
.table-one {
height: 68%;
.tabList {
display: flex;
@ -285,7 +245,7 @@ onMounted(async () => {
margin-top: 2%;
div {
text-align: center;
width: 20%;
width: 10%;
}
}
.listBox {
@ -310,7 +270,7 @@ onMounted(async () => {
}
}
div {
width: 20%;
width: 10%;
white-space: nowrap; //
overflow: hidden;
text-overflow: ellipsis;
@ -321,12 +281,12 @@ onMounted(async () => {
}
}
}
:deep(){
.el-tabs__item{
:deep() {
.el-tabs__item {
color: white;
}
.el-tabs__item.is-active{
color: var(--el-color-primary)
.el-tabs__item.is-active {
color: var(--el-color-primary);
}
}
}

View File

@ -3,13 +3,13 @@
<div class="content">
<div class="top-data-show">
<div class="top-left">
<el-date-picker v-model="dateTime" type="date" placeholder="请选择日期" value-format="YYYY-MM-DD" :clearable="true" />
<el-date-picker v-model="dateTime" type="month" placeholder="请选择日期" value-format="YYYY-MM" :clearable="false"/>
<el-calendar v-model="calendarVal" style="width: 95%; margin-top: 15px" />
</div>
<div class="top-right">
<div class="right-title-data">
<div>
<span>1.00</span>
<span>{{ topStatisticData.count }}</span>
<span></span>
</div>
<span>本月影响天数</span>
@ -17,18 +17,18 @@
<div class="right-inspect-data">
<div class="inspect-data-item">
<div class="inspect-style inspect-one"></div>
<span>多因素影响</span>
<span>0.50</span>
<span>人为因素</span>
<span>{{ topStatisticData.data?topStatisticData.data[0].count:0 }}</span>
</div>
<div class="inspect-data-item">
<div class="inspect-style inspect-two"></div>
<span>雷电</span>
<span>0.50</span>
<span>环境因素</span>
<span>{{ topStatisticData.data?topStatisticData.data[1].count:0 }}</span>
</div>
<div class="inspect-data-item">
<div class="inspect-style inspect-three"></div>
<span>大风</span>
<span>0.50</span>
<span>不可抗力因素</span>
<span>{{ topStatisticData.data?topStatisticData.data[2].count:0 }}</span>
</div>
</div>
</div>
@ -73,26 +73,14 @@
<script lang="ts" setup>
import { ref, onMounted } from "vue";
import { GlobalStore } from "@/stores";
import { getCompanyDataList, getMemberInfoList } from "@/api/modules/labor";
import type { TabsPaneContext } from "element-plus";
import { getMemberInfoList } from "@/api/modules/labor";
import { getDelayEventTypeApi } from "@/api/modules/agjtCommandApi";
import moment from "moment";
const store = GlobalStore();
const props = defineProps(["tip"]);
const BASEURL = import.meta.env.VITE_API_URL;
const dateTime = ref(null);
const calendarVal = ref(new Date());
const activeName = ref("first");
const activeIndex = ref("1" as any);
const onlineWorkList = ref([
{ name: "在职", value: 1 },
{ name: "离职", value: 2 }
]);
const enterpriseListData = ref([] as any);
const memberTypeList = ref([
{ name: "劳务人员", value: 1 },
{ name: "管理人员", value: 2 },
{ name: "临时人员", value: 3 }
]);
const alarmTypeList = ref(["报警", "预警"]);
const dateTime:any = ref(null);
const calendarVal:any = ref(new Date());
let pageNo = ref(1 as any);
let moreScroll = ref(true as any);
const refScrollbar = ref(null as any); //
@ -106,27 +94,16 @@ const searchForm = ref({
});
const partyMemberList = ref({} as any);
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
// console.log('tab',tab.index)
// console.log('activeName',activeName.value)
// if(activeName.value === 'first') console.log('1')
// if(activeName.value === 'second') console.log('2')
// if(activeName.value === 'third') console.log('3')
activeIndex.value = tab.index;
console.log("activeIndex", activeIndex.value);
};
//
const getCompanyList = async () => {
let data = {
const topStatisticData = ref({} as any)
//
const getDelayEventTypeFn = async () => {
let requestData: any = {
projectSn: store.sn,
enterpriseName: "",
userEnterpriseId: store.userInfo?.userEnterpriseId
auditType: 2
};
const res: any = await getCompanyDataList(data);
if (res.code == 200) {
enterpriseListData.value = res.result;
}
const res: any = await getDelayEventTypeApi(requestData);
console.log("获取天气顶部统计数据", res);
topStatisticData.value = res.result;
};
//
const getMemberCountList = async (tip: any) => {
@ -166,8 +143,9 @@ const getMemberCountList = async (tip: any) => {
};
onMounted(async () => {
await getCompanyList();
await getDelayEventTypeFn();
await getMemberCountList("search");
dateTime.value = moment(new Date()).format("YYYY-MM")
refScrollbar.value.wrapRef.addEventListener("scroll", (e: any) => {
// console.log("", e);
const scrollTop = e.target.scrollTop;
@ -289,7 +267,7 @@ onMounted(async () => {
color: white;
background-color: #143a85;
}
.el-calendar-table td.is-today {
.el-calendar-table td.is-today,.el-calendar-table td.is-selected {
color: white;
background-color: #143a85;
}
@ -297,7 +275,7 @@ onMounted(async () => {
.el-calendar-table__row {
.prev,
.current,
.next {
.next{
border-color: #35538c;
color: white;
.el-calendar-day {