|
@@ -1,13 +1,6 @@
|
|
|
<template>
|
|
<template>
|
|
|
<el-select v-model="modelValue" :loading="loading" v-bind="renderOpts.props" @change="compChange">
|
|
<el-select v-model="modelValue" :loading="loading" v-bind="renderOpts.props" @change="compChange">
|
|
|
- <template #label="{ label }">
|
|
|
|
|
- <span v-if="renderOpts.slot && XEUtils.isString(label)">{{ XEUtils.first(label.split(" ")) }}</span>
|
|
|
|
|
- <span v-else>{{ label }}</span>
|
|
|
|
|
- </template>
|
|
|
|
|
- <el-option v-for="(item, index) in options" :key="index" :label="formatOptions('label', { item, index }) + ' ' + formatOptions('slot', { item, index })" :value="formatOptions('value', { item, index })">
|
|
|
|
|
- <span style="float: left;">{{ formatOptions('label', { item, index }) }}</span>
|
|
|
|
|
- <span v-if="renderOpts.slot" :style="XEUtils.get(renderOpts, 'slot.style', {})">{{ formatOptions('slot', { item, index }) }}</span>
|
|
|
|
|
- </el-option>
|
|
|
|
|
|
|
+ <el-option v-for="(item, index) in options" :key="index" :label="XEUtils.get(item, optionProps.label, item)" :value="XEUtils.get(item, optionProps.value, index)"></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -19,36 +12,25 @@ import config from "@/config/select";
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
renderOpts: { type: Object, default: () => ({}) },
|
|
renderOpts: { type: Object, default: () => ({}) },
|
|
|
params: { type: Object, default: () => ({}) }
|
|
params: { type: Object, default: () => ({}) }
|
|
|
-})
|
|
|
|
|
-
|
|
|
|
|
-watch(props.params.data, e => {
|
|
|
|
|
- if (modelValue.value != XEUtils.get(e, props.params.field)) modelValue.value = XEUtils.get(e, props.params.field)
|
|
|
|
|
-}, { deep: true })
|
|
|
|
|
-watch(props.renderOpts.api.query, () => getRemoteData())
|
|
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
const loading = ref(false);
|
|
const loading = ref(false);
|
|
|
-const modelValue = ref(XEUtils.get(props, "renderOpts.defaultValue", null));
|
|
|
|
|
-const options = ref(TOOL.data.get(props.renderOpts.storageKey) || props.renderOpts.options);
|
|
|
|
|
-const optionProps = reactive(props.renderOpts.optionProps);
|
|
|
|
|
|
|
+const modelValue = ref(XEUtils.get(props.params.data, props.params.field, null));
|
|
|
|
|
+const options = ref(props.renderOpts.options || []);
|
|
|
|
|
+const optionProps = reactive(props.renderOpts.optionProps || config.props);
|
|
|
|
|
|
|
|
const getRemoteData = async () => {
|
|
const getRemoteData = async () => {
|
|
|
- loading.value = true;
|
|
|
|
|
- options.value = await config.queryData(props.renderOpts.api);
|
|
|
|
|
- loading.value = false;
|
|
|
|
|
|
|
+ console.log('renderOpts',props.renderOpts)
|
|
|
|
|
+ console.log('params',props.params)
|
|
|
|
|
+
|
|
|
|
|
+ if (props.renderOpts.api) {
|
|
|
|
|
+ loading.value = true;
|
|
|
|
|
+ options.value = await config.queryData(props.renderOpts.api);
|
|
|
|
|
+ loading.value = false;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const formatOptions = (key, { item, index }) => {
|
|
|
|
|
- if (XEUtils.isFunction(optionProps[key])) return optionProps[key]({ data: item, index });
|
|
|
|
|
- return XEUtils.get(item, optionProps[key], "");
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
const compChange = () => props.renderOpts.events.change({ [props.params.field]: modelValue.value });
|
|
const compChange = () => props.renderOpts.events.change({ [props.params.field]: modelValue.value });
|
|
|
|
|
|
|
|
-!options.value.length && !props.renderOpts.storageKey && getRemoteData();
|
|
|
|
|
-
|
|
|
|
|
-const storageChange = ({ key, newValue }) => {
|
|
|
|
|
- if (key === props.renderOpts.storageKey) options.value = XEUtils.toStringJSON(newValue).content;
|
|
|
|
|
-}
|
|
|
|
|
-window.addEventListener("setItemEvent", storageChange);
|
|
|
|
|
-onUnmounted(() => window.removeEventListener("setItemEvent", storageChange));
|
|
|
|
|
|
|
+getRemoteData();
|
|
|
</script>
|
|
</script>
|