You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
4.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<!-- 弹框 -->
<uni-popup ref="share" type="share">
<view class="allcon">
<view class="hcon">
<view class="htitle">
<u-search class="searchinput" v-model="searchKey" @change="searchchange" @custom="searchcustom" placeholder="请输入人员名称查询"
shape="square" bg-color="#EFF4F9" :clearabled="true" :show-action="showAction" input-align="left" @clear="clear"></u-search>
</view>
<view class="rclose" @tap="_cancel">取消</view>
</view>
<view class="selcon">
<radio-group class="checklist-group" @change="chagne">
<view class="sitem" v-for="(item,index) in clistnow" :key="index">
<view class="conright">
<view class="sname">
{{item.yhms}}
</view>
<view class="adress">
{{item.lxdh}}
</view>
</view>
<view class="selbtn">
<radio :value="item.yhdm" :checked="item.isChecked" />
</view>
</view>
</radio-group>
<view class="lineb"></view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
export default {
props: {
value: {
type: String,
default: "",
},
clist:{
type:Array,
default:[],
}
},
data() {
return {
clistnow:[],
clistall:[],
searchKey:"",
showAction:false,
};
},
watch: {
clist(list) {
console.log('监视值的改变1');
this._initTree(list);
},
deep: true, // 深度监听
immediate: true, // 初次监听即执行
},
methods: {
searchchange(value) {
// 搜索框内容变化时会触发此事件value值为输入框的内容
if(value){
this.showAction=true;
this.$forceUpdate();
}
},
searchcustom(value) {
if (this.searchKey) {
this.clistall.forEach((v, i) => {
this.clistall[i].isChecked = false;
});
this.clistnow = this.clistall.filter((p) => {
//filter过滤的意思这个是过滤函数将每一项符合结果的值返回到personList
return ( p.yhms.indexOf(this.searchKey) !== -1 );
});
this.$forceUpdate();
}
},
clear() {
this.showAction=false;
this.clistnow=[];
this.clistall.forEach((v, i) => {
this.clistall[i].isChecked = false;
this.clistnow.push(this.clistall[i]);
});
},
_initTree(list){
this.clistall=list;
this.clistnow=[];
this.clistall.forEach((v, i) => {
if(this.value == v.yhdm){
this.clistall[i].isChecked = true;
}
else{
this.clistall[i].isChecked = false;
}
this.clistnow.push(this.clistall[i]);
});
this.$forceUpdate();
},
chagne(e){
var rt= null;
if(e.detail.value){
this.clist.forEach(cell=>{
if(cell.yhdm==e.detail.value){
rt=cell;
}
});
}
this.$emit("change", rt);
this._hide();
},
_show(id) {
this._initTree(this.clist);
this.$refs.share.open();
this.value=id;
this.clistnow.forEach(cell=>{
if(this.value == cell.yhdm){
cell.isChecked=true;
}
else{
cell.isChecked=false;
}
});
this.$forceUpdate();
},
_hide() {
this.$refs.share.close();
},
_cancel() {
this._hide();
this.$emit("cancel", "");
}
}
}
</script>
<style lang="scss" scoped>
::v-deep.uni-radio-input-checked::before{
display: none!important;
}
.allcon{
height: calc((0.8*100vh));
min-height: 300rpx;
overflow: hidden;
background-color: #FFFFFF;
}
.hcon{
display: flex;
flex-direction: row;
padding: 20rpx;
.htitle{
flex:1;
justify-content: flex-start;
font-size: 32rpx;
font-weight: 600;
letter-spacing: 5rpx;
padding-right: 20rpx;
}
.rclose{
width: 70rpx;
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 28rpx;
color:#949494;
}
}
.checklist-group{
width: 100%;
}
.selcon{
padding: 20rpx;
position: relative;
display: block;
overflow-y: auto;
height: calc((100vh*0.9 - 230rpx));
.lineb{
height: 50rpx;
}
.sitem {
display: flex;
flex-direction: row;
flex: 1;
background-color: #FFFFFF;
border-bottom: 1rpx solid #eeeeee;
padding: 10rpx 0;
.conright{
flex: 1;
display: flex;
flex-direction: row;
width: 100%;
justify-content:flex-start;
}
.selbtn{
width: 80rpx;
display: flex;
justify-content: center;
align-items: center;
}
.sname{
display: flex;
justify-content: flex-start;
align-items: center;
font-size: 28rpx;
font-weight: 600;
color: rgb(29, 29, 29);
padding: 10rpx 10rpx 10rpx 0;
}
.adress{
display: flex;
justify-content: flex-start;
align-items: center;
padding: 10rpx 10rpx 10rpx 10rpx;
font-size: 26rpx;
color:#949494;
}
}
}
</style>