107 lines
2.4 KiB
Vue
107 lines
2.4 KiB
Vue
|
/** * 单选人员 */
|
|||
|
<template>
|
|||
|
<u-picker
|
|||
|
:show="show"
|
|||
|
ref="uPicker"
|
|||
|
:columns="columns"
|
|||
|
:closeOnClickOverlay="true"
|
|||
|
keyName="label"
|
|||
|
@close="show = false"
|
|||
|
@cancel="show = false"
|
|||
|
@confirm="confirm"
|
|||
|
@change="changeHandler"
|
|||
|
></u-picker>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import { GetOrganTree, GetBillList } from '@/api/system/assembly.js';
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
show: false,
|
|||
|
columns: [[], []],
|
|||
|
columnData: []
|
|||
|
};
|
|||
|
},
|
|||
|
|
|||
|
components: {},
|
|||
|
|
|||
|
computed: {},
|
|||
|
|
|||
|
mounted() {},
|
|||
|
|
|||
|
created() {
|
|||
|
this.init();
|
|||
|
},
|
|||
|
|
|||
|
methods: {
|
|||
|
changeHandler(e) {
|
|||
|
const {
|
|||
|
columnIndex,
|
|||
|
value,
|
|||
|
values, // values为当前变化列的数组内容
|
|||
|
index,
|
|||
|
// 微信小程序无法将picker实例传出来,只能通过ref操作
|
|||
|
picker = this.$refs.uPicker
|
|||
|
} = e;
|
|||
|
// 当第一列值发生变化时,变化第二列(后一列)对应的选项
|
|||
|
if (columnIndex === 0) {
|
|||
|
// picker为选择器this实例,变化第二列对应的选项
|
|||
|
picker.setColumnValues(1, this.columnData[index]);
|
|||
|
}
|
|||
|
},
|
|||
|
// 回调参数为包含columnIndex、value、values
|
|||
|
confirm(e) {
|
|||
|
this.$emit('confirm',e.value)
|
|||
|
this.show = false;
|
|||
|
},
|
|||
|
async init() {
|
|||
|
const res = await GetOrganTree({ companyID: 'null' });
|
|||
|
let item = await GetBillList({ departmentID: '', limit: '999', page: '1' });
|
|||
|
item.data[1].forEach(el => {
|
|||
|
el.label = el.p_PersonName
|
|||
|
})
|
|||
|
this.columns[0].push(...this.treeToArray(JSON.parse(res.data[0])));
|
|||
|
let keys = item.data[1].map((val) => {
|
|||
|
return val.o_OrganName;
|
|||
|
});
|
|||
|
keys = [...new Set(keys)];
|
|||
|
let data = {};
|
|||
|
keys.forEach((el) => {
|
|||
|
data[el] = [];
|
|||
|
});
|
|||
|
item.data[1].map((e) => {
|
|||
|
keys.some((value) => {
|
|||
|
if (e.o_OrganName == value) {
|
|||
|
data[value].push(e);
|
|||
|
return;
|
|||
|
}
|
|||
|
});
|
|||
|
});
|
|||
|
let treatment = this.sort(this.treeToArray(JSON.parse(res.data[0])),data)
|
|||
|
this.columns[1] = data[this.treeToArray(JSON.parse(res.data[0]))[0].label]
|
|||
|
this.columnData.push(...treatment)
|
|||
|
},
|
|||
|
// 数据扁平
|
|||
|
treeToArray(items) {
|
|||
|
let children = [];
|
|||
|
items.forEach((item) => {
|
|||
|
children.push(item);
|
|||
|
if (item.children) {
|
|||
|
children = children.concat(this.treeToArray(item.children));
|
|||
|
}
|
|||
|
});
|
|||
|
return children;
|
|||
|
},
|
|||
|
sort(item,data) {
|
|||
|
let list = []
|
|||
|
item.forEach(el => {
|
|||
|
list.push(data[el.label])
|
|||
|
})
|
|||
|
return list
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
<style scoped lang="scss"></style>
|