6/22完善引入,

This commit is contained in:
Zy
2026-06-22 08:14:35 +08:00
parent ea8129216b
commit 826bf3c782
208 changed files with 1122 additions and 1685 deletions

View File

@@ -19,10 +19,10 @@
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getlist"
@pagination="getList"
/>
<div>
<el-button @click="conback">退出</el-button>
<el-button @click="conBack">退出</el-button>
<el-button type="primary" @click="confirm"> 确定 </el-button>
</div>
</div>
@@ -31,33 +31,30 @@
</template>
<script setup lang="ts">
import { BillUserlist } from '@/api/system/SdbBill';
import { ref, nextTick, getCurrentInstance, ComponentInternalInstance, toRefs } from 'vue';
import { getAppUser } from '@/api/system/cars';
import pagination from '@/components/Pagination/index.vue';
import { ref, nextTick, toRefs } from 'vue';
import { AppUserList, getAppUser } from '@/api/system/cars';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const props = defineProps({
returnvalue: {
type: String,
default: '*'
},
titleName: {
type: String,
default: '选择业主'
},
/** 是否多选 false 单选 */
isMultiple: {
type: Boolean,
default: false
type ReturnValueType = keyof AppUserList | '*';
const props = withDefaults(
defineProps<{
returnable: ReturnValueType;
titleName?: string;
isMultiple?: boolean;
}>(),
{
returnable: '*',
titleName: '选择业主',
isMultiple: false
}
});
const { titleName, returnvalue } = toRefs(props);
);
const { titleName, returnable } = toRefs(props);
const userid = ref([]);
// ✅ 手动设置默认值(替代 withDefaults)
const emit = defineEmits<{
change: [value: string | number | (string | number)[] | BillUserlist | BillUserlist[]]; // 支持返回数组
change: [value: AppUserList[keyof AppUserList] | AppUserList | AppUserList[]]; // 支持返回数组
}>();
const dialog = ref({
@@ -71,12 +68,12 @@ const queryParams = ref({
});
const multipleTableRef = ref();
const tableData = ref<BillUserlist[]>([]);
const tableData = ref<AppUserList[]>([]);
const total = ref(0);
const loading = ref(false);
const isFetching = ref(false);
// 存储选中项
const multipleSelection = ref<BillUserlist[]>([]);
const multipleSelection = ref<AppUserList[]>([]);
const isMultiple = computed(() => props.isMultiple ?? false);
@@ -88,7 +85,7 @@ const handleUserSelection = () => {
return;
}
const rowsToSelect = tableData.value.filter((row) => {
return multipleSelection.value.some((selected) => selected.parkingId === row.parkingId);
return multipleSelection.value.some((selected) => selected.user_id === row.user_id);
});
multipleTableRef.value.clearSelection();
if (rowsToSelect.length > 0) {
@@ -106,7 +103,7 @@ const handleUserSelection = () => {
// ====================== 方法 ======================
// 获取列表
function getlist() {
function getList() {
isFetching.value = true; // 加锁
loading.value = true;
getAppUser(queryParams.value)
@@ -127,14 +124,14 @@ function getlist() {
// ==============================================
// ✅ 新增:处理 selection-change(多选专用)
// ==============================================
function handleSelectionChange(selection: BillUserlist[]) {
function handleSelectionChange(selection: AppUserList[]) {
if (isFetching.value) return;
if (isMultiple.value) {
const currentSelectedIds = new Set(selection.map((item) => item.parkingId));
const currentSelectedIds = new Set(selection.map((item) => item.user_id));
const otherPageSelections = multipleSelection.value.filter((item) => {
const isCurrentPageItem = tableData.value.some((row) => row.parkingId === item.parkingId);
const isCurrentPageItem = tableData.value.some((row) => row.user_id === item.user_id);
if (isCurrentPageItem) {
return currentSelectedIds.has(item.parkingId);
return currentSelectedIds.has(item.user_id);
} else {
return true;
}
@@ -143,9 +140,9 @@ function handleSelectionChange(selection: BillUserlist[]) {
const finalSelection = [...otherPageSelections, ...selection];
// 4. 去重(以防万一)
const uniqueMap = new Map();
finalSelection.forEach((item) => uniqueMap.set(item.parkingId, item));
finalSelection.forEach((item) => uniqueMap.set(item.user_id, item));
multipleSelection.value = Array.from(uniqueMap.values());
console.log(multipleSelection.value.map((item) => item.parkingId));
console.log(multipleSelection.value.map((item) => item.user_id));
} else {
// --- 单选逻辑 ---
if (selection.length > 0) {
@@ -169,40 +166,40 @@ function resetQuery() {
pageNum: 1,
pageSize: 10
};
getlist();
getList();
}
// 退出
function conback() {
function conBack() {
dialog.value.dialogVisible = false;
resetQuery();
}
// ==============================================
// ✅ 核心修改:根据 returnvalue 返回对应的值
// ✅ 核心修改:根据 returnable 返回对应的值
// ==============================================
function confirm() {
dialog.value.dialogVisible = false;
if (isMultiple.value) {
// 多选
if (returnvalue.value === '*') {
if (returnable.value === '*') {
// ✅ 返回整个对象数组
emit('change', multipleSelection.value);
} else {
// 返回指定字段数组
emit(
'change',
multipleSelection.value.map((item) => item[returnvalue.value as keyof BillUserlist])
multipleSelection.value.map((item) => item[returnable.value])
);
}
} else {
// 单选
if (returnvalue.value === '*') {
if (returnable.value === '*') {
// ✅ 返回整个对象
emit('change', multipleSelection.value[0]);
emit('change', multipleSelection.value[multipleSelection.value.length - 1]);
} else {
// 返回指定字段
emit('change', multipleSelection.value[0][returnvalue.value as keyof BillUserlist]);
emit('change', multipleSelection.value[multipleSelection.value.length - 1][returnable.value]);
}
}
@@ -217,14 +214,13 @@ defineExpose({
multipleSelection.value = arr.map(
(id) =>
({
parkingId: id
}) as BillUserlist
user_id: id
}) as AppUserList
);
console.log(multipleSelection.value);
} else {
multipleSelection.value = [];
}
getlist();
getList();
dialog.value.dialogVisible = true;
}
});
@@ -238,7 +234,7 @@ defineExpose({
border: 1px solid #ccc;
border-radius: 5px;
padding: 0 10px;
.defaultbox {
.defaultBox {
display: flex;
align-items: center;
justify-content: space-between;