124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
	<view class="each-department">
 | 
						|
		<u-checkbox-group
 | 
						|
			:value="newChecked"
 | 
						|
			placement="column"
 | 
						|
			@change="e => checkboxChange(e, level)"
 | 
						|
		>
 | 
						|
			<view v-for="(item, key) in lists" :key="key">
 | 
						|
				<view class="box">
 | 
						|
					<view class="row">
 | 
						|
						<view><text v-for="i in (level - 1)" :key="i">——</text></view>
 | 
						|
						<u-checkbox
 | 
						|
							:name="item.ID"
 | 
						|
							:key="item.ID"
 | 
						|
						></u-checkbox>
 | 
						|
						<text class="dep-name" @click="handleOpenCollapse(item, key)">{{item.NAME}}</text>
 | 
						|
					</view>
 | 
						|
					<view class="sub-box" :style="{height: item.isExpand ? 'auto' : 0}" v-if="item.departments || item.users">
 | 
						|
						<each-department
 | 
						|
							:level="level + 1"
 | 
						|
							:lists="item.departments"
 | 
						|
							:checkboxValueAll="checkboxValueAll"
 | 
						|
							@check="handleCheckAll"
 | 
						|
							@expand="handleSubOpenCollapse"></each-department>
 | 
						|
						<view class="row" v-for="(o, u) in item.users">
 | 
						|
							<view><text v-for="i in (level)" :key="i">——</text></view>
 | 
						|
							<u-checkbox
 | 
						|
								:key="o.ID"
 | 
						|
								:name="o.ID"
 | 
						|
								:label="o.NAME"
 | 
						|
							></u-checkbox>
 | 
						|
						</view>
 | 
						|
					</view>
 | 
						|
				</view>
 | 
						|
			</view>
 | 
						|
		</u-checkbox-group>
 | 
						|
	</view>
 | 
						|
</template>
 | 
						|
<script>
 | 
						|
	export default {
 | 
						|
		name: 'EachDepartment',
 | 
						|
		props: {
 | 
						|
			lists: {
 | 
						|
				type: Array,
 | 
						|
				default() {
 | 
						|
					return []
 | 
						|
				}
 | 
						|
			},
 | 
						|
			level: {
 | 
						|
				type: Number
 | 
						|
			},
 | 
						|
			checkboxValueAll: {
 | 
						|
				type: Object,
 | 
						|
				default() {
 | 
						|
					return {}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		},
 | 
						|
		data() {
 | 
						|
			return {
 | 
						|
				checkboxValueAllForObj: [],
 | 
						|
				checkboxValueForObj: [],
 | 
						|
				checkboxValue: []
 | 
						|
			}
 | 
						|
		},
 | 
						|
		mounted() {
 | 
						|
 | 
						|
		},
 | 
						|
		methods: {
 | 
						|
			handleOpenCollapse(val) {
 | 
						|
				setTimeout(() => {
 | 
						|
					this.$forceUpdate()
 | 
						|
				}, 200)
 | 
						|
				this.$emit('expand', val)
 | 
						|
			},
 | 
						|
			handleSubOpenCollapse(val) {
 | 
						|
				setTimeout(() => {
 | 
						|
					this.$forceUpdate()
 | 
						|
				}, 200)
 | 
						|
				this.$emit('expand', val)
 | 
						|
			},
 | 
						|
			checkboxChange(e, n) {
 | 
						|
				this.$emit('check', {[n]: e})
 | 
						|
			},
 | 
						|
			handleCheckAll(res) {
 | 
						|
				this.$emit('check', res)
 | 
						|
			},
 | 
						|
 | 
						|
			handleClick() {
 | 
						|
				this.$emit('click', this.dataSource)
 | 
						|
			}
 | 
						|
		},
 | 
						|
		computed: {
 | 
						|
			newChecked() {
 | 
						|
				const a = Object.keys(this.checkboxValueAll).map(i => this.checkboxValueAll[i])
 | 
						|
				let c = []
 | 
						|
				a.forEach(i => {c = c.concat(i)})
 | 
						|
				return c
 | 
						|
			},
 | 
						|
		},
 | 
						|
		watch: {
 | 
						|
			// checkboxValueAll(newVal, oldVal) {
 | 
						|
			// 	return newVal
 | 
						|
			// },
 | 
						|
		},
 | 
						|
	}
 | 
						|
</script>
 | 
						|
<style scoped>
 | 
						|
	.each-department {
 | 
						|
 | 
						|
	}
 | 
						|
	.each-department .row {
 | 
						|
		display: flex;
 | 
						|
		align-items: center;
 | 
						|
		margin-bottom: 16px;
 | 
						|
	}
 | 
						|
	.each-department .row .dep-name {
 | 
						|
		color: #3c9cff;
 | 
						|
	}
 | 
						|
	.each-department .sub-box {
 | 
						|
		overflow: hidden;
 | 
						|
	}
 | 
						|
</style>
 |