Files
jobslink-user-clent/pages/recruit/subPage/enterpriceCertification/pickerTree.vue

141 lines
4.4 KiB
Vue
Raw Normal View History

<template>
<view style="width: 100%">
<u--input :value="formatValue(value)" disabledColor="#ffffff" :placeholder="placeholder"
border="border"></u--input>
<u-picker ref="uPicker" :show="visibel" :keyName="labelName" :columns="VarColumns" @confirm="skillConfirm"
@cancel="skillClose" @close="skillClose" @change="changeHandler"></u-picker>
</view>
</template>
<script>
import {
isArray
} from 'lodash'
export default {
data() {
return {
valued: '',
VarColumnsIndex: [],
VarColumns: [],
}
},
props: {
border: {
type: String,
default: 'none'
},
valueName: {
type: String,
default: 'value'
},
labelName: {
type: String,
default: 'label'
},
placeholder: {
type: String,
default: '请选择'
},
visibel: {
type: Boolean,
default: false,
},
tree: {
type: Array,
require: true
},
deep: {
type: Number,
require: 1
},
value: {
type: String,
require: ''
},
cancel: {
type: Function
},
returnValue: {
type: String,
default: 'value',
},
joinSymbel: {
type: String,
default: '-',
}
},
created() {
this.VarColumnsIndex = new Array(3).fill(this.deep)
const arr = []
this.changeHandler({
columnIndex: 0,
index: 0
})
},
methods: {
skillClose() {
this.$emit("cancel");
},
skillConfirm({
index,
value,
values
}) {
if (this.returnValue === 'label') {
this.$emit("input", value.map(item => item[this.labelName]).join(this.joinSymbel));
} else {
this.$emit("input", value);
}
this.$emit("cancel");
},
changeHandler(e) {
const {
columnIndex,
value,
values, // values为当前变化列的数组内容
index,
} = e
// 微信小程序无法将picker实例传出来只能通过ref操作
const picker = this.$refs.uPicker
const columnlist = []
const arr = JSON.parse(JSON.stringify(this.VarColumnsIndex)).map((vItem, vIndex) => {
switch (true) {
case vIndex < columnIndex:
return vItem
case vIndex === columnIndex:
return index
default:
return 0
}
})
for (let i = 0; i <= arr.length - 1; i++) {
if (i) {
if (picker) {
picker.setColumnValues(i, columnlist[columnlist.length - 1][arr[i - 1]].children)
}
columnlist.push(columnlist[columnlist.length - 1][arr[i - 1]].children)
} else {
columnlist.push(this.tree)
}
}
this.VarColumnsIndex = arr
this.VarColumns = columnlist
},
formatValue(val) {
if (Array.isArray(val)) {
if (typeof val[0] === 'object') {
return val.map(item => item[this.labelName]).join(this.joinSymbel)
} else {
return val.join(this.joinSymbel)
}
} else {
return val
}
},
},
}
</script>
<style>
</style>