2025-09-03 09:29:58 +08:00

798 lines
19 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="addIssue">
<view class="fixedheader">
<headers :showBack="true" :themeType="true">
<view class="headerName"> 风险管控待办 </view>
</headers>
</view>
<view
class="search-box"
:style="{ paddingTop: mobileTopHeight + 44 + 'px' }"
>
<view class="uni-form-item">
<u-search
class="uni-input"
placeholder="搜索风险相关内容"
:show-action="false"
@change="loadData"
v-model="searchName"
></u-search>
</view>
</view>
<view class="content" :style="{ paddingTop: mobileTopHeight + 110 + 'px' }">
<u-collapse
ref="myCollapse"
v-if="selectWorkerInfoList.length > 0"
v-model="activeName"
accordion
>
<u-collapse-item
@change="onRegionChange"
:index="item.id"
v-for="item in selectWorkerInfoList"
:key="item.id"
>
<template v-slot:title>
<view class="item-cell flex-center item-cell_title">
{{ item.regionName }}({{
item.riskListPointTodoNum ? item.riskListPointTodoNum : 0
}})
</view>
</template>
<u-collapse
class="my-collapse"
ref="myCollapse1"
v-if="riskListPointList.length > 0"
accordion
>
<u-collapse-item
@change="onRiskPointChange(item)"
:index="item.id"
v-for="item in riskListPointList"
:key="item.id"
>
<template v-slot:title>
<view class="item-cell flex-center item-cell_title">
{{ fullPathCutOut(item.riskPointName, 2) }}({{
item.hazardSourceNumberTodo
}})
</view>
</template>
<template v-if="riskListSourceList.length > 0">
<view
class="content-box content-box1"
v-for="ele in riskListSourceList"
:key="ele.id"
>
<view class="content-header">
<view class="header-title">{{
ele.subProjectWorkTask
}}</view>
<view
class="riskcolor riskcolor_table"
:class="{
riskcolor1: ele.riskLevel == 1,
riskcolor2: ele.riskLevel == 2,
riskcolor3: ele.riskLevel == 3,
riskcolor4: ele.riskLevel == 4,
}"
>{{ riskLevelUp(ele.riskLevel) }}</view
>
</view>
<view class="content-row">
<view>风险描述:</view>
<view>{{
ele.riskDescription ? ele.riskDescription : "--"
}}</view>
</view>
<view class="box-content">
<view>管控措施</view>
<view
@click.stop="ele.expandMoreShow = !ele.expandMoreShow"
>
{{ ele.expandMoreShow ? "收起" : "展开更多" }}
</view>
</view>
<view
:class="{ 'webkit-clamp_2': !ele.expandMoreShow }"
class="box-content_detail"
>
<view>
<view>
工程措施{{
ele.engineeringMeasure ? ele.engineeringMeasure : "--"
}}
</view>
<view>
管理措施{{
ele.managementMeasure ? ele.managementMeasure : "--"
}}
</view>
<view>
个体防护{{
ele.personalProtection ? ele.personalProtection : "--"
}}
</view>
<view>
应急措施{{
ele.emergencyMeasure ? ele.emergencyMeasure : "--"
}}
</view>
<view>
教育措施{{
ele.educationalMeasure ? ele.educationalMeasure : "--"
}}
</view>
</view>
</view>
<!-- <view class="content-row">
<view>管控措施:</view>
<view>{{ele.managementMeasure ? ele.managementMeasure : '--'}}</view>
</view> -->
<!-- <view class="content-row">
<view>工程措施:</view>
<view>{{ele.engineeringMeasure ? ele.engineeringMeasure : '--'}}</view>
</view>
<view class="content-row">
<view>管理措施:</view>
<view>{{ele.managementMeasure ? ele.managementMeasure : '--'}}
</view>
</view>
<view class="content-row">
<view>个体防护:</view>
<view>{{ele.personalProtection ? ele.personalProtection : '--'}}
</view>
</view>
<view class="content-row">
<view>应急措施:</view>
<view>{{ele.emergencyMeasure ? ele.emergencyMeasure : '--'}}
</view>
</view>
<view class="content-row">
<view>教育措施:</view>
<view>{{ele.educationalMeasure ? ele.educationalMeasure : '--'}}
</view>
</view> -->
<view class="content-btn">
<view @click="onNavigateToDetail(ele)">新增落实记录</view>
</view>
</view>
</template>
<view class="new-nodata1" v-else>
<view></view>
<text>暂无数据...</text>
</view>
</u-collapse-item>
</u-collapse>
<view class="new-nodata1" v-else>
<view></view>
<text>暂无数据...</text>
</view>
</u-collapse-item>
</u-collapse>
<view class="new-nodata" v-else>
<view></view>
<text>暂无数据...</text>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
mobileTopHeight: 0,
projectDetail: {},
pageNo: 1,
pageSize: 10,
selectWorkerInfoList: [],
isLoadMore: false,
loadStatus: "more",
activeName: "",
activeName1: "",
searchName: "",
riskListPointList: [],
riskListSourceList: [],
riskLevelList: [
{
id: 1,
name: "重大风险",
},
{
id: 2,
name: "较大风险",
},
{
id: 3,
name: "一般风险",
},
{
id: 4,
name: "低风险",
},
],
regionIds: "",
};
},
onLoad(opts) {
console.log(112233, opts);
this.projectDetail = JSON.parse(uni.getStorageSync("projectDetail"));
this.getSelectWorkerInfoList();
},
mounted() {
var that = this;
uni.getSystemInfo({
success(res) {
that.mobileTopHeight = res.statusBarHeight ? res.statusBarHeight : 0;
uni.setStorageSync("systemInfo", res);
console.log(res);
},
});
},
onReachBottom() {
console.log(1);
// if (!this.isLoadMore) { //此处判断,上锁,防止重复请求
// this.isLoadMore = true
// this.pageNo += 1
// this.getSelectWorkerInfoList()
// }
},
onPullDownRefresh() {
console.log(2);
this.pageNo = 1;
this.selectWorkerInfoList = [];
this.getSelectWorkerInfoList();
},
methods: {
// 截取指定/字符串
fullPathCutOut(strName, startIndex) {
const parts = strName.split("/");
if (startIndex < 1 || startIndex >= parts.length) return ""; // n 无效或超出范围
return parts.slice(startIndex).join("/"); // 拼接第 n 部分之后的内容
},
onRiskPointChange(row) {
console.log("event", row);
let data = {
projectSn: this.projectDetail.projectSn,
pageNo: 1,
pageSize: -1,
pointId: row.id,
regionIds: this.regionIds,
isMySourceToDoForWorkable: 1,
};
this.sendRequest({
url: "xmgl/riskListSource/page",
method: "GET",
data: data,
success: (res) => {
if (res.code == 200) {
this.riskListSourceList = res.result.records.map(item => {
return {
...item,
expandMoreShow: false,
}
});
this.$nextTick(() => {
console.log(this.$refs.myCollapse1);
const findIndex = this.selectWorkerInfoList.findIndex(
(item) => item.id == this.regionIds
);
this.$refs.myCollapse1[findIndex].init();
setTimeout(() => {
this.$refs.myCollapse.init();
}, 200);
});
}
},
});
},
onRegionChange(event) {
console.log("event", event);
this.regionIds = event.index;
let data = {
projectSn: this.projectDetail.projectSn,
pageNo: 1,
pageSize: -1,
regionIds: this.regionIds,
isMySourceToDoForWorkable: 1,
};
this.sendRequest({
url: "xmgl/riskListPoint/page",
method: "GET",
data: data,
success: (res) => {
if (res.code == 200) {
this.riskListPointList = res.result.records;
this.$nextTick(() => {
this.$refs.myCollapse.init();
});
}
},
});
},
onNavigateToDetail(row) {
uni.navigateTo({
url: `./addImplementingRecord?id=${row.id}`,
});
},
loadData() {
this.pageNo = 1;
this.selectWorkerInfoList = [];
this.getSelectWorkerInfoList();
},
getSelectWorkerInfoList() {
let data = {
pageNo: this.pageNo,
pageSize: this.pageSize,
projectSn: this.projectDetail.projectSn,
regionName: this.searchName,
isMySourceToDoForWorkable: 1,
};
this.sendRequest({
url: "xmgl/qualityRegion/notTreeList",
method: "POST",
data: data,
success: (res) => {
uni.hideLoading();
if (res.code == 200) {
console.log("workList======================", res);
// this.selectWorkerInfoList = this.selectWorkerInfoList.concat(res.result.records);
this.selectWorkerInfoList = res.result;
// if (res.result.records.length < this.pageSize) { //判断接口返回数据量小于请求数据量,则表示此为最后一页
// this.isLoadMore = true
// this.loadStatus = 'nomore'
// } else {
// this.isLoadMore = false
// // that.loadStatus='more'
// }
// uni.stopPullDownRefresh()
}
},
});
},
},
computed: {
riskLevelUp() {
return (riskLevel) => {
const find = this.riskLevelList.find((item) => riskLevel === item.id);
return find ? find.name : "--";
};
},
},
};
</script>
<style scoped lang="scss">
/deep/ .u-collapse-head {
padding: 12rpx 0;
background-color: #ffffff;
.u-collapse-title {
color: #498cec;
}
// .u-icon__icon {
// color: #498CEC !important;
// }
}
/deep/ .u-collapse-content {
display: flex;
flex-direction: column;
align-items: center;
padding-bottom: 13px;
}
.my-collapse {
width: 100%;
/deep/ .u-collapse-head {
padding-left: 66rpx;
background-color: #fbfbfb;
}
}
/deep/ .van-cell__title,
.item-cell_title {
font-weight: 500;
font-size: 30rpx;
color: #1a1a1a;
}
/deep/ .van-collapse-item__content,
/deep/ .uni-collapse-item__wrap-content {
background-color: #f2f3f7;
padding: 26rpx;
}
.riskcolor {
color: white !important;
padding: 8rpx 12rpx;
width: 140rpx;
margin-left: 10rpx;
flex: inherit !important;
text-align: center;
}
.riskcolor_table {
padding: 2rpx 12rpx;
display: inline-block;
}
.riskcolor1 {
background-color: #eb4047;
}
.riskcolor2 {
background-color: #ffbf00;
}
.riskcolor3 {
background-color: #ffff00;
}
.riskcolor4 {
background-color: #006fbf;
}
.icon-left,
.icon-right {
width: 32rpx;
height: 32rpx;
background-image: url("@/static/staffAttendance/attendance-icon1.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}
.icon-right {
transform: rotate(90deg);
}
.icon-top {
transform: rotate(-90deg);
}
.new-nodata {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
> view {
width: 300rpx;
height: 300rpx;
background-image: url("@/static/staffAttendance/nodata.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}
> text {
font-size: 22rpx;
color: #808080;
margin-top: 60rpx;
}
}
.new-nodata1 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background-color: white;
padding: 20rpx;
width: 698rpx;
margin-top: 26rpx;
> view {
width: 300rpx;
height: 300rpx;
background-image: url("@/static/staffAttendance/nodata.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}
> text {
font-size: 22rpx;
color: #808080;
margin-top: 60rpx;
}
}
/deep/ .van-cell,
.item-cell {
padding: 22rpx 26rpx;
}
/deep/ .van-cell__title,
.item-cell_title {
font-weight: 500;
font-size: 30rpx;
color: #1a1a1a;
}
/deep/ .van-collapse-item__content,
/deep/ .u-collapse-item__wrap-content {
background-color: #f2f3f7;
padding: 26rpx;
}
.content-main {
padding: 26rpx;
}
.content-box1 {
// height: 554rpx;
margin-top: 26rpx;
position: relative;
padding-bottom: 120rpx !important;
.content-btn {
width: 100%;
padding: 18rpx 26rpx;
background: #ffffff;
box-shadow: 0rpx -8rpx 8rpx 0rpx rgba(0, 0, 0, 0.05);
position: absolute;
bottom: 0;
left: 0;
display: flex;
justify-content: flex-end;
> view {
// width: 216rpx;
background: #5181f6;
border-radius: 6rpx;
padding: 18rpx 24rpx;
font-size: 28rpx;
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
}
}
.box-content {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 26rpx;
font-size: 28rpx;
> view:first-child {
color: #808080;
}
> view:last-child {
font-size: 24rpx;
color: #4d8eec;
}
}
.box-content_detail {
font-size: 28rpx;
color: #4d4d4d;
margin-top: 4rpx;
}
.webkit-clamp_2 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/* 限制为两行 */
overflow: hidden;
}
.content-row {
display: flex;
align-items: flex-start;
padding: 20rpx 0;
// border-bottom: 2rpx solid #F2F2F2;
font-size: 28rpx;
> view:first-child {
width: 162rpx;
color: #808080;
}
> view:last-child {
flex: 1;
color: #4d4d4d;
word-break: break-all;
// display: -webkit-box;
// -webkit-box-orient: vertical;
// -webkit-line-clamp: 1;
// /* 限制为两行 */
// overflow: hidden;
}
}
.attachment {
flex-direction: column;
align-items: flex-start;
> view:not(:first-child) {
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 32rpx;
width: 100%;
> view:first-child {
display: flex;
align-items: center;
width: 70%;
> image {
width: 40rpx;
height: 40rpx;
}
> view {
font-size: 28rpx;
color: #171717;
margin-left: 32rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
> view:last-child {
font-size: 24rpx;
color: #808080;
}
}
}
}
.content-box {
width: 698rpx;
padding: 26rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(3, 92, 181, 0.1),
0rpx 8rpx 40rpx 0rpx rgba(0, 0, 0, 0.05);
// border-radius: 16rpx;
.content-header {
display: flex;
align-items: center;
justify-content: space-between;
.header-title {
font-weight: 500;
font-size: 30rpx;
color: #1a1a1a;
}
// >view:last-child {
// font-size: 22rpx;
// color: #4D4D4D;
// background-color: #FFFF00;
// padding: 4rpx 14rpx;
// }
}
}
.fixedheader {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 999;
/deep/ .headerBox {
border-bottom: none;
}
.headerName {
z-index: 1;
}
}
.addIssue {
min-height: 100vh;
background-color: #eff3f7;
}
/deep/ .u-collapse-item__title-arrow {
display: none;
}
.flex-center {
display: flex;
align-items: center;
justify-content: space-between;
}
.icon-screen {
display: flex;
flex-direction: column;
margin-left: 22rpx;
> view:nth-child(1) {
border-bottom: 12rpx solid #333333;
border-right: 10rpx solid transparent;
border-left: 10rpx solid transparent;
}
> view:nth-child(2) {
border-top: 12rpx solid #333333;
border-right: 10rpx solid transparent;
border-left: 10rpx solid transparent;
margin-top: 4rpx;
}
.icon-screen_active {
border-bottom-color: #108bc7 !important;
border-top-color: #108bc7 !important;
}
}
.search-box {
background-color: white;
width: 100%;
position: fixed;
z-index: 99;
.uni-form-item {
padding: 20rpx 26rpx;
position: relative;
display: flex;
.uni-input {
border: 2rpx solid #e4e4e4;
border-radius: 68rpx;
padding: 0;
font-size: 30rpx;
color: #444444;
/deep/ .u-content {
background-color: #ffffff !important;
.u-input {
background-color: #ffffff !important;
color: #999999 !important;
}
}
}
.search-btn {
width: 72rpx;
height: 72rpx;
background: #498cec;
border-radius: 48rpx;
margin-left: 30rpx;
display: flex;
align-items: center;
justify-content: center;
> image {
width: 50rpx;
height: 50rpx;
}
}
}
/deep/ .u-dropdown {
padding-right: 60rpx;
}
.calendar_box {
position: absolute;
right: 28rpx;
bottom: 20rpx;
.calendar {
width: 32rpx;
height: 32rpx;
background-image: url("@/static/workTicketManage/calendar.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}
.calendar_active {
background-image: url("@/static/workTicketManage/calendar-active.png");
}
}
}
</style>