feat: 系统管理 组织架构 选人选组织组件替换

This commit is contained in:
GAOANG
2024-07-26 18:16:59 +08:00
parent 62a400adab
commit c6ff986f61
8 changed files with 580 additions and 36 deletions

View File

@ -23,19 +23,23 @@ const props = defineProps({
type: Boolean,
default: true
},
value: {
type: String,
default: ''
selectedNodes: {
type: Array,
default: () => []
},
parentNode: {
type: String,
default: ''
},
isArray: {
type: Boolean,
default: false
},
});
const emit = defineEmits(['change-value', 'query-completed']);
const expandedKeys = ref<string[]>([]);
const selectedKeys = ref<string[]>([]);
const checkedKeys = ref<string[]>([]);
const emit = defineEmits(['change-value', 'query-completed', 'select']);
const expandedKeys = ref([]);
const selectedKeys = ref([]);
const checkedKeys = ref([]);
const checkable = ref(false)
const treeData = ref([])
const params = ref({
@ -45,7 +49,6 @@ const params = ref({
parentNode: false
})
onMounted(() => {
selectedKeys.value = [props.value]
getList()
})
const loadData = (node) => {
@ -88,7 +91,7 @@ function resetTreeList(list) {
return result
}
function selectData(selectedKeys, e) {
emit('change-value', e.selectedNodes);
emit('change-value', e.node, e.selected);
}
watch(expandedKeys, () => {
console.log('expandedKeys', expandedKeys);
@ -99,4 +102,14 @@ watch(selectedKeys, () => {
watch(checkedKeys, () => {
console.log('checkedKeys', checkedKeys);
});
watch(
() => props.selectedNodes,
() => {
selectedKeys.value = props.selectedNodes.map(item => item.id)
},
{
immediate: true,
deep: true
}
);
</script>

View File

@ -12,12 +12,12 @@
<div class="choose-dep-box">
<div class="choose-dep">
<a-spin :spinning="loading" class="loading-box" />
<SelectDepartmentTreeV2 v-if="visible" :parentNode="parentNode" :value="props.value" @changeValue="departChange" @queryCompleted="queryCompleted"></SelectDepartmentTreeV2>
<SelectDepartmentTreeV2 v-if="visible" :multiple="multiple" :isArray="isArray" :parentNode="parentNode" :selectedNodes="selectedNodes" @changeValue="departChange" @queryCompleted="queryCompleted"></SelectDepartmentTreeV2>
</div>
<div class="choosen-dep">
<div v-for="item in selectedNodes" class="choosen-item">
<div class="choosen-label">{{ item.name }}</div>
<close-outlined class="close" @click="deleteItem" />
<close-outlined class="close" @click="deleteItem(item)" />
</div>
</div>
</div>
@ -41,7 +41,6 @@
const valChanged = ref(false);
const props = defineProps({
value: String,
prefix: String,
suffix: String,
placeholder: String,
@ -49,13 +48,20 @@
disabled: Boolean,
parentNode: String,
size: String,
value: {
type: String || Array,
},
isArray: {
type: Boolean,
default: false
},
bordered: {
type: Boolean,
default: true
},
multiple: {
type: Boolean,
default: true
default: false
},
componentProps: {
type: Object,
@ -69,16 +75,18 @@
// Embedded in the form, just use the hook binding to perform form verification
onMounted(() => {});
onMounted(() => {
});
watch(
() => props.value,
(val) => {
if (val) {
let ids = props.isArray ? val?.join(',') : val
if (ids) {
if (props.sepTextField && !valChanged.value) {
departNames.value = props.row[camelCaseString(props.sepTextField)];
} else {
getDefaultList(val);
getDefaultList(ids);
}
}
},
@ -87,9 +95,9 @@
}
);
async function getDefaultList(id) {
async function getDefaultList(ids) {
let param = {
id: id,
ids: ids,
code: '',
name: '',
parentNode: false
@ -127,8 +135,21 @@
loading.value = false;
}
function departChange(nodes) {
selectedNodes.value = nodes;
function departChange(node, isSelect) {
if (props.multiple) {
if (isSelect) {
selectedNodes.value.push(node.dataRef)
} else {
selectedNodes.value = selectedNodes.value.filter(item => item.id !== node.dataRef.id)
}
} else {
if (isSelect) {
selectedNodes.value = [node.dataRef]
} else {
selectedNodes.value = []
}
}
valChanged.value = true;
}
@ -136,7 +157,11 @@
visible.value = true;
loading.value = true;
if (props.value) {
getDefaultList(props.value);
if(props.isArray && !props.value.length) {
return
}
let ids = props.isArray ? props.value.join(',') : props.value
getDefaultList(ids);
}
}
@ -145,13 +170,15 @@
let idList = selectedNodes.value.map((item) => item.id);
const names = nameList.join(',');
const ids = idList.join(',');
emits('update:value', ids);
emits('update:value', props.isArray ? idList : ids);
departNames.value = names;
updateSepTextField(names);
emits('change', props.isArray ? idList : ids);
}
function deleteItem() {
selectedNodes.value = [];
function deleteItem(item) {
selectedNodes.value = selectedNodes.value.filter(m => item.id !== m.id)
}
function submit() {

View File

@ -1,6 +1,7 @@
<template>
<div :class="{ disabled }" class="form-select-user" @click="show">
<a-input v-model:value="userNames" :disabled="disabled" :placeholder="placeholder" :size="size" readonly>
<a-button type="primary" v-if="buttonShow">{{ t('添加人员') }}</a-button>
<a-input v-model:value="userNames" v-if="!buttonShow" :disabled="disabled" :placeholder="placeholder" :size="size" readonly>
<template v-if="prefix" #prefix>
<Icon :icon="prefix" />
</template>
@ -69,8 +70,8 @@
import { useI18n } from '/@/hooks/web/useI18n';
import { ModalPanel } from '/@/components/ModalPanel/index';
import { getUserPageListNew, getUserMulti } from '/@/api/system/user';
import SelectDepartmentTreeV2 from './SelectDepartmentTreeV2.vue';
import SelectUserListV2 from './SelectUserListV2.vue';
import SelectDepartmentTreeV2 from '/@/components/Form/src/components/SelectDepartmentTreeV2.vue';
import SelectUserListV2 from '/@/components/Form/src/components/SelectUserListV2.vue';
import { camelCaseString } from '/@/utils/stringUtil';
const emits = defineEmits(['update:value', 'selectedId', 'change']);
@ -99,7 +100,11 @@
default: true
},
row: Object, // 行数据,在表格里用的到
sepTextField: String // 将文本表示存储在独立字段
sepTextField: String, // 将文本表示存储在独立字段
buttonShow: {
type: Boolean,
default: false
}
});
let timeoutId = null;
let resetMemberList = [];