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.

691 lines
15 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>
<view class="paibanCard">
<view class="title">
<view class="line"></view>
选择{{title}}
</view>
<view style="background: #FFFFFF;border-radius: 20rpx;padding: 26rpx 41rpx;">
<view class="pickPerson">
<view class="picktitle">
<image src="../../static/images/fireman/fire.png"
style="width: 26rpx;height: 32rpx;margin-right: 10rpx;"></image>
{{title}}
</view>
<image src="../../static/images/fireman/add.png" style="width: 135rpx;height: 46rpx;"
@click="itemclick(true)"></image>
</view>
</view>
</view>
<!-- demo -->
<!-- <next-tree :selectParent="false" :checkStrictly="true" :multiple="true" ref="nextTreeAsyncRef"
:treeData="asyncTreeData" :loadData="loadData" /> -->
<next-tree :expandedKeys="['3','3-1']" :changeVerify="changeVerify" :title="getTitle" ref="nextTreeRef"
:checkStrictly="checkStrictly" :selectParent="selectParent" :multiple="multiple" :treeData="list"
@cancel="oncancel" @confirm="onconfirm">
</next-tree>
</view>
</template>
<script>
let self = null;
export default {
name: "choosePerson",
props: {
// 下拉树的数组
list: {
type: Array
},
// 标题字符
title: {
type: String,
default: ""
},
// 最多选择几个节点
count: {
type: String,
default: "1"
}
},
mounted() {
// console.log(this._props, "this._props");
},
data() {
return {
multiple: false,
selectParent: false,
checkStrictly: false,
activeId: '',
localData: {
'a1': [{
id: 'a1-1',
label: 'a1-1'
}, {
id: 'a1-2',
label: 'a1-2',
children: []
}, {
id: 'a1-3',
label: 'a1-3'
}],
'b1': [{
id: 'b1-1',
label: 'b1-1',
children: []
}, {
id: 'b1-2',
label: 'b1-2'
}, {
id: 'b1-3',
label: 'b1-3'
}],
'c1': [{
id: 'c1-1',
label: 'c1-1'
}, {
id: 'c1-2',
label: 'c1-2'
}, {
id: 'c1-3',
label: 'c1-3',
children: []
}],
'a1-2': [{
id: 'a1-2-1',
label: 'a1-2-1'
}, {
id: 'a1-2-2',
label: 'a1-2-2'
}],
'b1-1': [{
id: 'b1-1-1',
label: 'b1-1-1'
}, {
id: 'b1-1-2',
label: 'b1-1-2'
}],
'c1-3': [{
id: 'c1-3-1',
label: 'c1-3-1'
}, {
id: 'c1-3-2',
label: 'c1-3-2'
}]
},
asyncTreeData: [{
id: 'a1',
label: 'a1',
children: []
}, {
id: 'b1',
label: 'b1',
children: []
}, {
id: 'c1',
label: 'c1',
children: []
}],
treeData: [{
id: '1',
label: '北京',
checked: false
},
{
id: '2',
label: '上海',
checked: false,
children: [{
id: '2-1',
label: '上海-1',
checked: false
},
{
id: '2-2',
label: '上海-2',
checked: false
},
{
id: '2-3',
label: '上海-3',
checked: false
},
]
},
{
id: '3',
label: '广州',
children: [{
id: '3-1',
label: '海珠区',
checked: false,
children: [{
id: '3-1-1',
label: '海珠区-1',
checked: false,
disabled: true
},
{
id: '3-1-2',
label: '海珠区-2',
checked: false
},
{
id: '3-1-4',
label: '海珠区-3',
checked: false
},
{
id: '3-1-5',
label: '海珠区-4',
checked: false
},
{
id: '3-1-6',
label: '海珠区-5',
checked: false
},
{
id: '3-1-7',
label: '海珠区-6',
checked: false
},
{
id: '3-1-8',
label: '海珠区-7',
checked: false
},
{
id: '3-1-9',
label: '海珠区-8',
checked: false
},
{
id: '3-1-10',
label: '海珠区-9',
checked: false
},
{
id: '3-1-11',
label: '海珠区-10',
checked: false
},
]
},
{
id: '3-2',
label: '番禺区',
checked: false,
children: [{
id: '3-2-1',
label: '番禺区-1',
checked: false
},
{
id: '3-2-2',
label: '番禺区-2',
checked: false
},
{
id: '3-2-4',
label: '番禺区-3',
checked: false
},
{
id: '3-2-5',
label: '番禺区-4',
checked: false
},
{
id: '3-2-6',
label: '番禺区-5',
checked: false
},
{
id: '3-2-7',
label: '番禺区-6',
checked: false
},
{
id: '3-2-8',
label: '番禺区-7',
checked: false
},
{
id: '3-2-9',
label: '番禺区-8',
checked: false
},
{
id: '3-2-10',
label: '番禺区-9',
checked: false
},
{
id: '3-2-11',
label: '番禺区-10',
checked: false
},
]
},
{
id: '3-3',
label: '黄埔区',
checked: false,
children: [{
id: '3-3-1',
label: '黄埔区-1',
checked: false
},
{
id: '3-3-2',
label: '黄埔区-2',
checked: false
},
{
id: '3-3-3',
label: '黄埔区-3',
checked: false
},
{
id: '3-3-4',
label: '黄埔区-4',
checked: false
},
{
id: '3-3-5',
label: '黄埔区-5',
checked: false
},
{
id: '3-3-6',
label: '黄埔区-6',
checked: false
},
{
id: '3-3-7',
label: '黄埔区-7',
checked: false
},
{
id: '3-3-8',
label: '黄埔区-8',
checked: false
},
{
id: '3-3-9',
label: '黄埔区-9',
checked: false
},
{
id: '3-3-10',
label: '黄埔区-10',
checked: false
},
{
id: '3-3-12',
label: '黄埔区-11',
checked: false
},
{
id: '3-3-13',
label: '黄埔区-12',
checked: false
},
{
id: '3-3-13',
label: '黄埔区-13',
checked: false
},
{
id: '3-3-14',
label: '黄埔区-14',
checked: false
},
{
id: '3-3-15',
label: '黄埔区-15',
checked: false
},
{
id: '3-3-16',
label: '黄埔区-16',
checked: false
},
{
id: '3-3-17',
label: '黄埔区-17',
checked: false
},
{
id: '3-3-18',
label: '黄埔区-18',
checked: false
},
{
id: '3-3-19',
label: '黄埔区-19',
checked: false
},
{
id: '3-3-20',
label: '黄埔区-20',
checked: false
},
{
id: '3-3-21',
label: '黄埔区-21',
checked: false
},
{
id: '3-3-22',
label: '黄埔区-22',
checked: false
},
{
id: '3-3-23',
label: '黄埔区-23',
checked: false
},
{
id: '3-3-24',
label: '黄埔区-24',
checked: false
},
{
id: '3-3-25',
label: '黄埔区-25',
checked: false
},
{
id: '3-3-26',
label: '黄埔区-26',
checked: false
},
{
id: '3-3-27',
label: '黄埔区-27',
checked: false
},
{
id: '3-3-28',
label: '黄埔区-28',
checked: false
},
{
id: '3-3-29',
label: '黄埔区-29',
checked: false
},
{
id: '3-3-30',
label: '黄埔区-30',
checked: false
},
{
id: '3-3-31',
label: '黄埔区-31',
checked: false
},
{
id: '3-3-32',
label: '黄埔区-32',
checked: false
},
{
id: '3-3-33',
label: '黄埔区-33',
checked: false
},
{
id: '3-3-34',
label: '黄埔区-34',
checked: false
},
{
id: '3-3-35',
label: '黄埔区-35',
checked: false
},
{
id: '3-3-36',
label: '黄埔区-36',
checked: false
},
]
},
],
}
]
}
},
methods: {
openTree: function() {
this.$refs.nextTreeAsyncRef.showTree = true
},
changeVerify: function(current, chooseList) {
// 注意:返回非空字符串会阻止原有行为,并提示返回的字符串
// 如果函数体不做return返回值即验证通过控件正常处理业务
// console.log('当前变化的数据', current)
// console.log('已选择的数据', chooseList)
if (chooseList && chooseList.length > this._props.count) {
return `最多可以选择${this._props.count}个人员`
}
},
checkedFunc: function(id) {
if (this.activeId === id) {
this.activeId = '';
this.$refs.nextTreeRef.checkedFunc(id, false)
} else {
this.activeId = id;
this.$refs.nextTreeRef.checkedFunc(id)
}
},
loadData(nodeItem) {
// 同步实现的代码处理方式 可以返回单个子节点的集合也可以返回子孙节点的集合
// 如果期望子集节点中还存在孙子节点可以打开,请在初始化数据的时候,初始化个空数组的子节点配置值{[this.childrenKey]: []}
// if(nodeItem && this.localData[nodeItem.id]) {
// return this.localData[nodeItem.id]
// } else {
// return []
// }
// 异步的代码实现方式 可以返回单个子节点的集合也可以返回子孙节点的集合
// 如果期望子集节点中还存在孙子节点可以打开,请在初始化数据的时候,初始化个空数组的子节点配置值{[this.childrenKey]: []}
return new Promise((resolve, reject) => {
setTimeout(() => {
if (nodeItem && self.localData[nodeItem.id]) {
return resolve(self.localData[nodeItem.id])
} else {
return resolve([])
}
}, 1000)
})
},
getTitle: function(checked) {
return `已选:${checked.length}`
},
echoDefault: function() {
const selectIds = ['2-1', '3-3-35']
this.checkedTreeData(this.treeData, selectIds)
// console.log('treeData的数据', this.treeData)
this.multiple = true
this.$refs.nextTreeRef.showTree = true
},
itemclick: function(_multiple, _selectParent, _checkStrictly = false) {
this.multiple = _multiple
this.selectParent = _selectParent
this.checkStrictly = _checkStrictly
this.$refs.nextTreeRef.showTree = true
},
checkedTreeData: function(treeData, selectIds) {
// 注意 vue2当数据深嵌套时如果没有在treeData里面初始化checked属性那在改变数据的时候直接将checked属性赋值为true这时候ui界面有可能不会更新
// 这时候建议使用this.$set去更新checked属性值或者在初始化this.treeData的时候初始化checked属性
(treeData || []).map(item => {
if (selectIds.indexOf(item.id) !== -1) {
item.checked = true
} else {
item.checked = false
}
if (item.children && item.children.length) {
this.checkedTreeData(item.children, selectIds)
}
})
},
onconfirm: function(list) {
this.$emit("choosePerson", list)
// console.log('选中项的数量列表list', list)
},
oncancel: function() {
// 清除treeData的选中状态
this.checkedTreeData(this.treeData, [])
}
},
created() {
self = this
}
}
</script>
<style lang="scss">
page {
box-sizing: border-box !important;
padding: 24rpx;
background-color: #eff0f4;
/deep/.uni-swipe {
background-color: #fff;
padding: 15rpx 0 15rpx 10rpx;
}
/deep/.uni-card {
border-radius: 10rpx;
}
/deep/.u-list {
height: 0 !important;
}
/deep/.u-row {
margin-bottom: 10rpx;
padding: 10rpx 30rpx;
border-radius: 10rpx;
display: flex;
justify-content: space-between !important;
background-color: #f9fbfc;
:first-child {
color: black;
}
}
/deep/.uni-date-x--border {
border: none;
padding: 15rpx;
border-radius: 0;
}
/deep/.uniui-calendar {
color: #454545;
font-weight: 500;
font-size: 28rpx;
}
/deep/.uniui-calendar:before {
content: none;
}
/deep/.input1 .uniui-calendar :before {
content: '开始日期';
font-weight: 500;
font-size: 30rpx;
color: #333333;
}
/deep/.input2 .uniui-calendar :before {
content: '结束日期';
}
/deep/.uni-icons {
color: #171819 !important;
font-size: 30rpx !important;
}
/deep/.uni-date__x-input {
padding-left: 50rpx;
}
/deep/.uni-date-x {
background: #F5F6FA;
border-radius: 20rpx;
padding: 10rpx 15rpx;
}
/deep/.uni-swipe_box {
background: #F5F6FA;
border-radius: 20rpx;
padding: 26rpx 22rpx;
}
.paibanCard {
margin-bottom: 15rpx;
.title {
margin-bottom: 15rpx;
font-family: Noto Sans S Chinese;
font-weight: bold;
font-size: 30rpx;
color: #333333;
display: flex;
align-items: center;
.line {
width: 4rpx;
height: 30rpx;
background: #358FFE;
border-radius: 2rpx;
margin-right: 20rpx;
}
}
.pickTime {
background-color: #fff;
border-radius: 10rpx;
padding: 43rpx 20rpx;
}
.pickPerson {
background-color: #fff;
border-radius: 20rpx;
display: flex;
align-items: center;
// padding: 15rpx;
justify-content: space-between;
// margin-bottom: 15rpx;
}
.picktitle {
font-family: Noto Sans S Chinese;
font-weight: 400;
font-size: 30rpx;
color: #333333;
display: flex;
align-items: center;
}
}
.addPaiBan {
width: 85%;
background: linear-gradient(0deg, #2A86FF, #8FBCFF);
font-weight: 400;
font-size: 36rpx;
color: #FFFFFF;
line-height: 38rpx;
text-align: center;
padding: 20rpx;
border-radius: 40rpx;
margin: 50rpx auto;
}
}
</style>