512 lines
13 KiB
Vue
Raw Normal View History

<template>
<view class="fullHeight dangerLibrary">
<view class="fixedheader">
<headers :themeType="true" :showBack="true">
<view class="headerName">
隐患库
</view>
</headers>
</view>
<view style="height: 100%; box-sizing: border-box;" :style="{ 'padding-top': (statusBarHeight + 45) * 1.5 + 'rpx' }">
<!-- <view class="dangerLibrary-crumbs flex b-bottom">
<view class="crumbs-title">当前标准<text>房建JGJ59-2011</text></view>
<view class="add-btn" @tap="addDanger">
自定义隐患
</view>
</view> -->
<view class="dangerLibrary-content flex" id="scroll-panel">
<view class="dangerLibrary-nav">
<scroll-view class="smallHeight" :scroll-into-view="leftIntoView" scroll-y>
<view class="nav-item"
:id="'left-' + item"
:class="{'active-nav': leftIndex == index}"
v-for="(item,index) in navList" :key="index"
@tap="checkNav(index)">
{{item.hiddenDangerName}}
</view>
</scroll-view>
</view>
<view class="dangerLibrary-detail">
<scroll-view class="smallHeight" scroll-y>
<view class="detail-title">
检查分项<text>(包含{{rightNavList.length}}个分项)</text>
</view>
<!-- <view class="detail-title">
<text>共22个隐患点</text>
</view> -->
<view>
<view :class="{'b-bottom': rightNavList.length && index != (rightNavList.length-1)}" v-for="(item,index) in rightNavList" :key="index" >
<!-- <template v-slot:title> -->
<view>
<view class="card-title flex">
<view @tap="checkNavChildren(item)">{{item.hiddenDangerName}}<!-- <p>(共3个隐患点)</p> --></view>
<view class="flex" style="margin-right: 20rpx;">
<view class="pre-btn" @tap="previewRule(item)">
检查依据
</view>
<uni-icons2 type="arrowdown" style="transition: all 0.3s linear;" :class="{'down': !item.isShow, 'up': item.isShow}" color="#6C7178" @tap="showCard(item)"/>
</view>
</view>
</view>
<!-- </template> -->
<view class="content" style="overflow: hidden;">
<view style="transition: all 0.3s linear; overflow: hidden;" :class="{'hidden': !item.isShow, 'show': item.isShow}">
<view class="card-detail flex" :class="{'b-bottom': idx !== (item.children.length-1)}" v-for="(itm,idx) in item.children" :key="idx">
<text class="text">{{itm.checkContent}}</text>
<view class="add-detail" @click="checkDetail(itm)">生成整改单</view>
</view>
</view>
</view>
</view>
</view>
<!-- <view class="others-list">
<view class="others-item" :class="{'b-bottom': item !== 10}" v-for="item in 10" :key="item">
<view class="others-detail flex">
<text class="text">折叠内容主体可自定义内容及样式折叠内容主体可自定义内容及样式</text>
<view class="add-detail">生成整改单</view>
</view>
</view>
</view> -->
</scroll-view>
</view>
</view>
</view>
<dialogs ref="dialogs">
<template v-slot:content>
<view class="dialog-title">
检查依据
</view>
<view class="dialog-content">
<scroll-view class="dialog-scroll" scroll-y>
<p v-for="(item,index) in childrenData" :key="index" @tap="checkNavChildren(item)">{{item.checkContent}}</p>
</scroll-view>
</view>
</template>
</dialogs>
<dialogs ref="dialogs2">
<template v-slot:content>
<view class="dialog-title">
新建隐患
</view>
<view class="dialog-content">
<view class="add-form">
<view class="form-item">
<picker class="form-content" :value="addForm.type" range-key="name" :range="typeList" @change="bindType">
<view class="uni-input" :class="{'noCheck': !addForm.type.toString()}">
{{addForm.type.toString() ? typeList[addForm.type].name : ""}}
</view>
</picker>
</view>
<view class="form-item">
<picker class="form-content" :value="addForm.lv" range-key="name" :range="lvList" @change="bindLv">
<view class="uni-input" :class="{'noCheck': !addForm.lv.toString()}">
{{addForm.lv.toString() ? lvList[addForm.lv].name : "--请选择隐患等级--"}}
</view>
</picker>
</view>
<view class="form-item">
<view class="form-textarea">
<textarea placeholder="隐患点" @blur="bindTextAreaBlur"/>
</view>
</view>
</view>
<view class="submit-btn">提交</view>
</view>
</template>
</dialogs>
<levitatedsphere :x="100" :y="80"></levitatedsphere>
</view>
</template>
<script>
import levitatedsphere from "@/components/levitatedsphere/levitatedsphere.vue"
import headers from '../../../components/headers/headers.vue'
import dialogs from '../../../components/dialog/dialog.vue'
export default {
data(){
return{
childrenData:[],
type:"",
taskId:"",
itemId:"",
engineeringId: "",
moduleType: "",
statusBarHeight: 0,
navList: [],
leftIndex: 0,
scrollHeight: 400,
scrollTopSize: 0,
addForm:{
type: 0,
lv: "",
content: ""
},
typeList:[{
name: "其他",
id: 0
}],
lvList:[{
id: 0,
name: "一般隐患"
},{
id: 1,
name: "较大隐患"
},{
id: 2,
name: "重大隐患"
}],
headquartersSn: "",
rightNavList:[]
}
},
computed: {
/* 计算左侧滚动位置定位 */
leftIntoView() {
return `left-${this.leftIndex > 1 ? this.leftIndex - 1 : 0}`;
}
},
components:{
headers,
dialogs
},
onLoad(val) {
console.log(val, '-----隐患级别 数据')
this.type = val.type
this.taskId = val.taskId
this.itemId = val.itemId
this.engineeringId = val.engineeringId
this.moduleType = val.moduleType
},
onShow(val){
this.statusBarHeight=uni.getStorageSync('systemInfo').statusBarHeight;
this.headquartersSn = uni.getStorageSync('company').headquartersSn
this.initData()
console.log(JSON.parse(uni.getStorageSync('userInfo')))
},
mounted(){
// this.$nextTick(() => {
// /* 在非H5平台nextTick回调后有概率获取到错误的元素高度则添加200ms的延迟来减少BUG的产生 */
// setTimeout(() => {
// /* 等待滚动区域初始化完成 */
// this.initScrollView().then(() => {
// /* 获取列表数据,你的代码从此处开始 */
// // this.getListData();
// });
// }, 200);
// });
},
methods:{
initData(){
let _this = this
let sn = this.headquartersSn
this.sendRequest({
url: 'xmgl/inspectHiddenDangerLibrary/selectLibraryList',
method: 'post',
data: {
sn: sn
},
success: res => {
_this.navList = res.result
if(_this.navList.length>0){
_this.checkNav(0)
}
console.log(res.result, '-----分类列表数据')
}
})
},
initScrollView() {
return new Promise((resolve, reject) => {
let view = uni.createSelectorQuery().select('#scroll-panel');
view.boundingClientRect(res => {
this.scrollTopSize = res.top;
this.scrollHeight = res.height;
this.$nextTick(() => {
resolve();
});
}).exec();
});
},
checkNav(val){
console.log('点击事件触发了吗',val);
this.leftIndex = val
if(this.navList[val].children && this.navList[val].children.length >= 1) {
this.rightNavList = this.navList[val].children
console.log('列表数据',this.rightNavLis);
console.log(this.navList[val].children, '-----分类列表数据')
this.navList[val].children.forEach(item=>{
item.isShow = false
})
}else{
this.rightNavList = []
}
},
checkNavChildren(val) {
console.log('子类调用参数',val);
val.title = this.navList[this.leftIndex].hiddenDangerName
uni.setStorageSync('dangerData', val);
uni.navigateTo({
url: './addExamine?type='+this.type+'&taskId=' + this.taskId + '&itemId=' + this.itemId + '&engineeringId=' + this.engineeringId + '&moduleType=' + this.moduleType
})
},
previewRule(e){
console.log('列表数据 点击数据:',e);
this.sendRequest({
url: 'xmgl/inspectHiddenDangerItemRecord/selectHiddenDangerItemRecordList',
method: 'post',
data: {
libraryId: e.id
},
success: res => {
this.childrenData=res.result
this.$refs.dialogs.showFn()
console.log(res.result, '-----分类子项详情')
}
})
},
addDanger(e){
this.$refs.dialogs2.showFn()
},
bindType(e){
this.addForm.type = e.detail.value
},
bindLv(e){
this.addForm.lv = e.detail.value
},
bindTextAreaBlur(e){
this.addForm.content = e.detail.value
},
showCard(val){
if(val.isShow&&val.children.length>0){
val.isShow = !val.isShow
this.$forceUpdate()
} else{
val.children = []
let _this = this
this.sendRequest({
url: 'xmgl/inspectHiddenDangerItemRecord/selectHiddenDangerItemRecordList',
method: 'post',
data: {
libraryId: val.id
},
success: res => {
val.children=res.result
val.isShow = !val.isShow
_this.$forceUpdate()
console.log(res.result, '-----分类子项详情')
}
})
}
// console.log(val)
},
checkDetail(val){
console.log('val的数据',val);
val.title = this.navList[this.leftIndex].hiddenDangerName
uni.setStorageSync('dangerData', val);
uni.navigateBack({})
// console.log(val)
}
}
}
</script>
<style lang="scss" scoped>
.dangerLibrary{
.fixedheader{
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 2;
}
.flex{
display: flex;
align-items: center;
justify-content: space-between;
}
.b-bottom{
border-bottom: 2rpx solid #DCDFE6;
}
.dangerLibrary-crumbs{
height: 120rpx;
width: 100%;
padding: 0 20rpx;
background: #fff;
box-sizing: border-box;
font-size: 26rpx;
.crumbs-title{
:deep(span){
font-weight: 600;
}
}
.add-btn{
padding: 6rpx 30rpx;
border: 1px solid #409EFF;
border-radius: 24rpx;
color: #409EFF;
}
}
.dangerLibrary-content{
height: 100%;
.smallHeight{
height: 100%;
box-sizing: border-box;
}
.dangerLibrary-nav{
height: 100%;
width: 30%;
background: #E4E7ED;
.nav-item{
width: 100%;
padding: 20rpx 14rpx;
box-sizing: border-box;
text-align: center;
font-size: 28rpx;
}
.active-nav{
background: #fff;
color: #409EFF;
}
}
.dangerLibrary-detail{
height: 100%;
width: 70%;
padding: 10rpx 0;
padding-left: 20rpx;
box-sizing: border-box;
.detail-title{
font-size: 24rpx;
padding-bottom: 10rpx;
:deep(span){
color: #C0C4CC;
}
}
.card-title{
font-size: 32rpx;
padding-bottom: 20rpx;
padding-top: 26rpx;
p{
color: #C0C4CC;
font-size: 24rpx;
padding-top: 12rpx;
}
.pre-btn{
font-size: 24rpx;
color: #409EFF;
white-space: nowrap;
margin-right: 10rpx;
}
}
.card-detail{
color: #409EFF;
font-size: 24rpx;
margin-left: 20%;
padding: 20rpx 0;
line-height: 40rpx;
padding-right: 20rpx;
.text{
flex: 1;
}
.add-detail{
margin-left: 20rpx;
width: 140rpx;
}
}
}
}
.others-list{
.others-detail{
color: #409EFF;
font-size: 24rpx;
padding: 20rpx 0;
line-height: 40rpx;
padding-right: 20rpx;
.add-detail{
margin-left: 20rpx;
width: 280rpx;
}
}
}
.dialog-title{
text-align: center;
padding: 30rpx 0;
}
.dialog-content{
padding: 0 40rpx;
padding-bottom: 40rpx;
font-size: 28rpx;
p{
line-height: 80rpx;
border-bottom: 1px solid #ccc;
}
.add-form{
margin-bottom: 48rpx;
.form-item{
background: #eee;
margin-bottom: 20rpx;
padding:10rpx 0;
padding-left: 20rpx;
border-radius: 6rpx;
}
}
.form-textarea{
flex: 1;
height: 160rpx;
border: 1px solid #f0f0f0;
overflow: auto;
background: #eee;
:deep(uni-textarea){
width: 100%;
height: 100%;
font-size: 28rpx;
.uni-textarea-compute{
width: 100%;
height: 100%;
overflow: auto;
}
}
}
.submit-btn{
margin: 0 auto;
text-align: center;
width: 100%;
height: 80rpx;
color: #fff;
background: #409EFF;
line-height: 80rpx;
border-radius: 6px;
}
}
.down{
transform: rotate(0deg);
}
.up{
transform: rotate(180deg);
}
.hidden{
height: 0;
transform: translateY(-100%);
// opacity: 0;
}
.show{
height: 100%;
transform: translateY(0);
// opacity: 1;
}
.dialog-scroll{
height: 600rpx;
}
}
</style>