Merge branch 'gaoang2025-06' into 'dev'
人员选择器增加组织机构全选, 时间范围选择器,设置可以返回数组或字符串形式 See merge request itc-framework/ma/2024/front!85
This commit is contained in:
@ -29,6 +29,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="user-select-box">
|
<div class="user-select-box">
|
||||||
|
<div class="select-depart-all" @click="selectAll">
|
||||||
|
<span>全选</span>
|
||||||
|
<div class="select-circle" :class="departAllSelected ? 'selected' : ''" v-if="!viewList">
|
||||||
|
<check-outlined v-if="departAllSelected" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<SelectUserListV2 :multiple="multiple" :data="searchDepartMemberList" emptyDescription="暂无人员" @selectId="changeDepMemberSelect"></SelectUserListV2>
|
<SelectUserListV2 :multiple="multiple" :data="searchDepartMemberList" emptyDescription="暂无人员" @selectId="changeDepMemberSelect"></SelectUserListV2>
|
||||||
<div v-if="false" class="user-select-pagination">
|
<div v-if="false" class="user-select-pagination">
|
||||||
<a-pagination v-model:current="searchDepartMemberParams.limit" :pageSize="searchDepartMemberParams.size" :total="searchDepartMemberTotal" />
|
<a-pagination v-model:current="searchDepartMemberParams.limit" :pageSize="searchDepartMemberParams.size" :total="searchDepartMemberTotal" />
|
||||||
@ -75,6 +81,7 @@
|
|||||||
import { camelCaseString } from '/@/utils/stringUtil';
|
import { camelCaseString } from '/@/utils/stringUtil';
|
||||||
import { useUserStore } from '/@/store/modules/user';
|
import { useUserStore } from '/@/store/modules/user';
|
||||||
import { Icon } from '/@/components/Icon';
|
import { Icon } from '/@/components/Icon';
|
||||||
|
import { CheckOutlined } from '@ant-design/icons-vue';
|
||||||
|
|
||||||
const emits = defineEmits(['update:value', 'selectedId', 'change']);
|
const emits = defineEmits(['update:value', 'selectedId', 'change']);
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
@ -128,6 +135,7 @@
|
|||||||
let resetMemberList = [];
|
let resetMemberList = [];
|
||||||
const searchPlaceholder = '请输入姓名或工号搜索';
|
const searchPlaceholder = '请输入姓名或工号搜索';
|
||||||
const defaultDepts = ref('')
|
const defaultDepts = ref('')
|
||||||
|
const departAllSelected = ref(false)
|
||||||
if(props.onlyUserCompany) {
|
if(props.onlyUserCompany) {
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const userInfo = userStore.getUserInfo;
|
const userInfo = userStore.getUserInfo;
|
||||||
@ -223,7 +231,22 @@
|
|||||||
});
|
});
|
||||||
const searchAllMemberTotal = ref(0);
|
const searchAllMemberTotal = ref(0);
|
||||||
const searchAllMemberList = ref([]);
|
const searchAllMemberList = ref([]);
|
||||||
|
|
||||||
|
watch(searchDepartMemberList, (val) => {
|
||||||
|
let allSelected = true
|
||||||
|
searchDepartMemberList.value.forEach(item => {
|
||||||
|
if(!item.selected) {
|
||||||
|
allSelected = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(!searchDepartMemberList.value.length) {
|
||||||
|
allSelected = false
|
||||||
|
}
|
||||||
|
departAllSelected.value = allSelected
|
||||||
|
},
|
||||||
|
{
|
||||||
|
deep: true
|
||||||
|
})
|
||||||
async function departChange(e) {
|
async function departChange(e) {
|
||||||
searchDepartMemberParams.value.departmentId = e.id;
|
searchDepartMemberParams.value.departmentId = e.id;
|
||||||
let res = await getUserList(searchDepartMemberParams.value);
|
let res = await getUserList(searchDepartMemberParams.value);
|
||||||
@ -260,6 +283,25 @@
|
|||||||
return await getUserPageListNew(params);
|
return await getUserPageListNew(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function selectAll() {
|
||||||
|
departAllSelected.value = !departAllSelected.value
|
||||||
|
if(departAllSelected.value) {
|
||||||
|
searchDepartMemberList.value.forEach(item => {
|
||||||
|
if(!item.selected) {
|
||||||
|
selectedMemberList.value.push(item)
|
||||||
|
}
|
||||||
|
item.selected = true
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
searchDepartMemberList.value.forEach(item => {
|
||||||
|
if(item.selected) {
|
||||||
|
selectedMemberList.value = selectedMemberList.value.filter(m => m.id !== item.id)
|
||||||
|
}
|
||||||
|
item.selected = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function departCompleted() {
|
function departCompleted() {
|
||||||
treeLoading.value = false;
|
treeLoading.value = false;
|
||||||
}
|
}
|
||||||
@ -441,6 +483,34 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
.select-depart-all {
|
||||||
|
height: 30px;
|
||||||
|
padding-left: 14px;
|
||||||
|
padding-right: 21px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 2px;
|
||||||
|
margin-top: 5px;
|
||||||
|
border-bottom: 1px solid #eaeaea;
|
||||||
|
color: #111111;
|
||||||
|
.select-circle {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
border: 1px solid rgba(144, 147, 153, 0.7);
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
.selected {
|
||||||
|
border: none;
|
||||||
|
background-color: #5d9cec;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
color: white;
|
||||||
|
font-size: 10px
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.user-select-title {
|
.user-select-title {
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,6 +26,10 @@
|
|||||||
mainKey: String,
|
mainKey: String,
|
||||||
//组件在子表中的Index
|
//组件在子表中的Index
|
||||||
tableIndex: Number,
|
tableIndex: Number,
|
||||||
|
valueType: {
|
||||||
|
default: 'Array',
|
||||||
|
type: String
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const formModel = inject<any>('formModel', null);
|
const formModel = inject<any>('formModel', null);
|
||||||
@ -34,7 +38,7 @@
|
|||||||
watch(
|
watch(
|
||||||
() => props.value,
|
() => props.value,
|
||||||
(val: any) => {
|
(val: any) => {
|
||||||
modelValue.value = val || [];
|
modelValue.value = props.valueType == 'Array' ? (val || []) : (val ? val.split(',') : '');
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
immediate: true,
|
immediate: true,
|
||||||
@ -56,20 +60,20 @@
|
|||||||
formModel[props.mainKey][props.tableIndex!]?.[props.startField!],
|
formModel[props.mainKey][props.tableIndex!]?.[props.startField!],
|
||||||
formModel[props.mainKey][props.tableIndex!]?.[props.endField!],
|
formModel[props.mainKey][props.tableIndex!]?.[props.endField!],
|
||||||
];
|
];
|
||||||
emit('update:value', emitData);
|
emit('update:value', props.valueType == 'Array' || !emitData ? emitData : emitData.join(','));
|
||||||
} else {
|
} else {
|
||||||
if (props.startField && props.endField && Object.keys(formModel).length) {
|
if (props.startField && props.endField && Object.keys(formModel).length) {
|
||||||
const emitData =
|
const emitData =
|
||||||
!formModel[props.startField] || !formModel[props.endField]
|
!formModel[props.startField] || !formModel[props.endField]
|
||||||
? null
|
? null
|
||||||
: [formModel[props.startField], formModel[props.endField]];
|
: [formModel[props.startField], formModel[props.endField]];
|
||||||
emit('update:value', emitData);
|
emit('update:value', props.valueType == 'Array' || !emitData ? emitData : emitData.join(','));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const handleChange = (time) => {
|
const handleChange = (time) => {
|
||||||
emit('update:value', time);
|
emit('update:value', props.valueType == 'Array' || !time ? time : time.join(','));
|
||||||
emit('change', time);
|
emit('change', props.valueType == 'Array' || !time ? time : time.join(','));
|
||||||
if (formModel && props.startField && props.endField) {
|
if (formModel && props.startField && props.endField) {
|
||||||
if (props.mainKey) {
|
if (props.mainKey) {
|
||||||
formModel[props.mainKey][props.tableIndex!][props.startField!] = time?.length
|
formModel[props.mainKey][props.tableIndex!][props.startField!] = time?.length
|
||||||
|
|||||||
Reference in New Issue
Block a user