代码格式化

pull/157/head
gao 2023-08-28 11:53:54 +08:00
parent 2dcff6f5c5
commit d28af316a8
1 changed files with 122 additions and 120 deletions

View File

@ -15,131 +15,133 @@
</template>
<script setup>
import { watch } from 'vue'
import { watch } from 'vue'
const total = ref(0) //
const initParams = ref({})
const options = ref([])
const spinning = ref(false)
const emit = defineEmits({ change: null, 'update:value': null })
const props = defineProps({
value: {
type: String,
default: () => undefined
},
placeholder: {
type: String,
default: () => '请选择'
},
pageFunction: {
type: Function
},
echoFunction: {
type: Function
},
pageSize: {
type: Number,
default: () => 10
},
allowClear: {
type: Boolean,
default: () => false
},
disabled: {
type: Boolean,
default: () => false
}
})
const modelValue = ref(props.value)
watch(props, (newValue) => {
modelValue.value = newValue.value
})
const total = ref(0) //
const initParams = ref({})
const options = ref([])
const spinning = ref(false)
const emit = defineEmits({ change: null, 'update:value': null })
const props = defineProps({
value: {
type: String,
default: () => undefined
},
placeholder: {
type: String,
default: () => '请选择'
},
pageFunction: {
type: Function
},
echoFunction: {
type: Function
},
pageSize: {
type: Number,
default: () => 10
},
allowClear: {
type: Boolean,
default: () => false
},
disabled: {
type: Boolean,
default: () => false
}
})
const modelValue = ref(props.value)
watch(props, (newValue) => {
modelValue.value = newValue.value
})
//
const onPage = (param = {}) => {
if (props.pageFunction) {
initParams.value = { ...initParams.value, ...param, size: props.pageSize };
// API
spinning.value = true;
props.pageFunction(initParams.value)
.then((data) => {
//
initParams.value.current = data.current;
//
total.value = data.total;
options.value = data.records;
queryEcho();
})
.finally(() => {
spinning.value = false;
});
}
};
const queryEcho = () => {
//
if (props.echoFunction) {
nextTick(() => {
if (modelValue.value) {
const entity = options.value.find((f) => f.id === modelValue.value)
if (!entity) {
const param = {
idList: [modelValue.value]
}
props.echoFunction(param).then((data) => {
if (data[0]){
options.value.unshift(data[0])
}
})
}
}
})
}
}
// change
const handleChange = (value, array) => {
modelValue.value = value
// change
emit('change', value, array)
//
emit('update:value', value)
}
//
const handlePopupScroll = (e) => {
const { target } = e
const { scrollTop, scrollHeight, clientHeight } = target
if (scrollTop + 2 + clientHeight >= scrollHeight) {
//
handlePagination()
}
}
//
const handlePagination = () => {
//
if (options.value.length < total.value) {
const param = { ...initParams.value, current: initParams.value.current + 1 };
spinning.value = true;
props.pageFunction(param)
.then((data) => {
if (data.records.length > 0) {
//
const onPage = (param = {}) => {
if (props.pageFunction) {
initParams.value = { ...initParams.value, ...param, size: props.pageSize }
// API
spinning.value = true
props
.pageFunction(initParams.value)
.then((data) => {
//
initParams.value.current = data.current;
//
const newOptions = [...options.value, ...data.records];
// 使 id
const uniqueOptions = newOptions.reduce((acc, cur) => {
acc[cur.id] = cur;
return acc;
}, {});
options.value = Object.values(uniqueOptions);
initParams.value.current = data.current
//
total.value = data.total
options.value = data.records
queryEcho()
})
.finally(() => {
spinning.value = false
})
}
}
const queryEcho = () => {
//
if (props.echoFunction) {
nextTick(() => {
if (modelValue.value) {
const entity = options.value.find((f) => f.id === modelValue.value)
if (!entity) {
const param = {
idList: [modelValue.value]
}
props.echoFunction(param).then((data) => {
if (data[0]) {
options.value.unshift(data[0])
}
})
}
}
})
.finally(() => {
spinning.value = false;
});
}
}
// change
const handleChange = (value, array) => {
modelValue.value = value
// change
emit('change', value, array)
//
emit('update:value', value)
}
//
const handlePopupScroll = (e) => {
const { target } = e
const { scrollTop, scrollHeight, clientHeight } = target
if (scrollTop + 2 + clientHeight >= scrollHeight) {
//
handlePagination()
}
}
//
const handlePagination = () => {
//
if (options.value.length < total.value) {
const param = { ...initParams.value, current: initParams.value.current + 1 }
spinning.value = true
props
.pageFunction(param)
.then((data) => {
if (data.records.length > 0) {
//
initParams.value.current = data.current
//
const newOptions = [...options.value, ...data.records]
// 使 id
const uniqueOptions = newOptions.reduce((acc, cur) => {
acc[cur.id] = cur
return acc
}, {})
options.value = Object.values(uniqueOptions)
}
})
.finally(() => {
spinning.value = false
})
}
}
};
defineExpose({
onPage
})
defineExpose({
onPage
})
</script>