qidian-vue-ui 1.1.64 → 1.1.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/config-renderer/compute.d.ts +2 -2
- package/dist/components/config-renderer/compute.mjs +4 -4
- package/dist/components/config-renderer/compute.mjs.map +1 -1
- package/dist/components/config-renderer/index.vue.mjs +8 -4
- package/dist/components/config-renderer/index.vue.mjs.map +1 -1
- package/dist/components/config-renderer/types.d.ts +4 -3
- package/dist/components/crud/search/index.vue.d.ts +1 -1
- package/dist/components/form/item.css +2 -2
- package/dist/components/form/item.vue.d.ts +2 -2
- package/dist/components/form/item.vue.mjs +1 -1
- package/dist/components/form/item.vue2.mjs +7 -2
- package/dist/components/form/item.vue2.mjs.map +1 -1
- package/dist/components/service-dialog-table-select/index.css +9 -9
- package/dist/components/service-dialog-table-select/index.vue.mjs +1 -1
- package/dist/components/service-dialog-table-select/index.vue2.mjs +14 -6
- package/dist/components/service-dialog-table-select/index.vue2.mjs.map +1 -1
- package/dist/components/service-select/index.css +1 -1
- package/dist/components/service-select/index.vue.mjs +1 -1
- package/dist/components/service-select/index.vue2.mjs +3 -2
- package/dist/components/service-select/index.vue2.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ComputedRef, Ref } from 'vue';
|
|
2
|
-
import type { QdComputeFunction, QdAsyncComputeOptions } from './types';
|
|
2
|
+
import type { QdComputeFunction, QdAsyncComputeOptions, QdConfigRendererProps } from './types';
|
|
3
3
|
export declare function qdCompute<T = unknown>(fn: QdComputeFunction<T>): QdComputeFunction<T>;
|
|
4
4
|
export declare function qdAsyncCompute<T = unknown>(options: QdAsyncComputeOptions<T>): QdAsyncComputeOptions<T>;
|
|
5
|
-
export declare function qdUseComputeValue<T = unknown>(computeFn: QdComputeFunction<T> | QdAsyncComputeOptions<T>, context: Ref<Record<string, unknown>> | ComputedRef<Record<string, unknown
|
|
5
|
+
export declare function qdUseComputeValue<T = unknown>(computeFn: QdComputeFunction<T> | QdAsyncComputeOptions<T>, context: Ref<Record<string, unknown>> | ComputedRef<Record<string, unknown>>, crudMode: QdConfigRendererProps['crudMode']): {
|
|
6
6
|
result: Ref<T, T>;
|
|
7
7
|
loading: Ref<boolean, boolean>;
|
|
8
8
|
};
|
|
@@ -11,7 +11,7 @@ function qdAsyncCompute(options) {
|
|
|
11
11
|
options.__qdId = `qd_async_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
12
12
|
return options;
|
|
13
13
|
}
|
|
14
|
-
function qdUseComputeValue(computeFn, context) {
|
|
14
|
+
function qdUseComputeValue(computeFn, context, crudMode) {
|
|
15
15
|
const computeId = computeFn.__qdId;
|
|
16
16
|
if (!computeId) {
|
|
17
17
|
throw new Error("[configRenderer.qdUseComputeValue] 计算函数必须具有 ID");
|
|
@@ -24,7 +24,7 @@ function qdUseComputeValue(computeFn, context) {
|
|
|
24
24
|
watchHandle = watch(
|
|
25
25
|
context,
|
|
26
26
|
(newValue) => {
|
|
27
|
-
result.value = computeFn(newValue);
|
|
27
|
+
result.value = computeFn(newValue, crudMode);
|
|
28
28
|
},
|
|
29
29
|
{ immediate: true, deep: true }
|
|
30
30
|
);
|
|
@@ -38,7 +38,7 @@ function qdUseComputeValue(computeFn, context) {
|
|
|
38
38
|
async (newValue) => {
|
|
39
39
|
loading.value = true;
|
|
40
40
|
try {
|
|
41
|
-
result.value = await asyncFn(newValue, context.value);
|
|
41
|
+
result.value = await asyncFn(newValue, context.value, crudMode);
|
|
42
42
|
} finally {
|
|
43
43
|
loading.value = false;
|
|
44
44
|
}
|
|
@@ -49,7 +49,7 @@ function qdUseComputeValue(computeFn, context) {
|
|
|
49
49
|
loading.value = true;
|
|
50
50
|
(async () => {
|
|
51
51
|
const watchValue = context.value;
|
|
52
|
-
const [asyncErr, value] = await to(asyncFn(watchValue, context.value));
|
|
52
|
+
const [asyncErr, value] = await to(asyncFn(watchValue, context.value, crudMode));
|
|
53
53
|
loading.value = false;
|
|
54
54
|
if (asyncErr) return asyncErr;
|
|
55
55
|
result.value = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.mjs","sources":["../../../src/components/config-renderer/compute.ts"],"sourcesContent":["import type { ComputedRef, Ref, WatchHandle } from 'vue'\nimport type { QdComputeFunction, QdAsyncComputeOptions } from './types'\nimport { computed, watch, ref } from 'vue'\nimport { to } from 'qidian-shared'\n\nconst watchHandleMap = new Map<string, WatchHandle>()\n\nexport function qdCompute<T = unknown>(fn: QdComputeFunction<T>) {\n fn.__qdCompute = true\n fn.__qdId = `qd_compute_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`\n return fn\n}\n\nexport function qdAsyncCompute<T = unknown>(options: QdAsyncComputeOptions<T>) {\n options.__qdAsyncCompute = true\n options.__qdId = `qd_async_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`\n return options\n}\n\nexport function qdUseComputeValue<T = unknown>(\n computeFn: QdComputeFunction<T> | QdAsyncComputeOptions<T>,\n context: Ref<Record<string, unknown>> | ComputedRef<Record<string, unknown
|
|
1
|
+
{"version":3,"file":"compute.mjs","sources":["../../../src/components/config-renderer/compute.ts"],"sourcesContent":["import type { ComputedRef, Ref, WatchHandle } from 'vue'\nimport type { QdComputeFunction, QdAsyncComputeOptions, QdConfigRendererProps } from './types'\nimport { computed, watch, ref } from 'vue'\nimport { to } from 'qidian-shared'\n\nconst watchHandleMap = new Map<string, WatchHandle>()\n\nexport function qdCompute<T = unknown>(fn: QdComputeFunction<T>) {\n fn.__qdCompute = true\n fn.__qdId = `qd_compute_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`\n return fn\n}\n\nexport function qdAsyncCompute<T = unknown>(options: QdAsyncComputeOptions<T>) {\n options.__qdAsyncCompute = true\n options.__qdId = `qd_async_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`\n return options\n}\n\nexport function qdUseComputeValue<T = unknown>(\n computeFn: QdComputeFunction<T> | QdAsyncComputeOptions<T>,\n context: Ref<Record<string, unknown>> | ComputedRef<Record<string, unknown>>,\n crudMode: QdConfigRendererProps['crudMode']\n) {\n const computeId = computeFn.__qdId\n if (!computeId) {\n throw new Error('[configRenderer.qdUseComputeValue] 计算函数必须具有 ID')\n }\n\n watchHandleMap.get(computeId)?.()\n let watchHandle: WatchHandle | undefined\n const result = ref<T>() as Ref<T>\n const loading = ref(false)\n\n if ('__qdCompute' in computeFn) {\n watchHandle = watch(\n context,\n (newValue) => {\n result.value = computeFn(newValue, crudMode)\n },\n { immediate: true, deep: true }\n )\n } else {\n // qdAsyncCompute\n const asyncCompute = computeFn as QdAsyncComputeOptions<T>\n const { asyncFn, watch: watchFn } = asyncCompute\n\n if (watchFn) {\n // 有 watch 监听\n const watchValue = computed(() => watchFn(context.value))\n\n watchHandle = watch(\n watchValue,\n async (newValue: unknown) => {\n loading.value = true\n try {\n result.value = await asyncFn(newValue, context.value, crudMode)\n } finally {\n loading.value = false\n }\n },\n { immediate: true }\n )\n } else {\n // 只执行一次\n loading.value = true\n ;(async () => {\n const watchValue = context.value\n\n const [asyncErr, value] = await to(asyncFn(watchValue, context.value, crudMode))\n loading.value = false\n if (asyncErr) return asyncErr\n\n result.value = value\n })()\n }\n }\n\n if (watchHandle) watchHandleMap.set(computeId, watchHandle)\n const res = { result, loading }\n\n return res\n}\n"],"names":[],"mappings":";;AAKA,MAAM,qCAAqB,IAAA;AAEpB,SAAS,UAAuB,IAA0B;AAC/D,KAAG,cAAc;AACjB,KAAG,SAAS,cAAc,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAC9E,SAAO;AACT;AAEO,SAAS,eAA4B,SAAmC;AAC7E,UAAQ,mBAAmB;AAC3B,UAAQ,SAAS,YAAY,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AACjF,SAAO;AACT;AAEO,SAAS,kBACd,WACA,SACA,UACA;AACA,QAAM,YAAY,UAAU;AAC5B,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,iBAAe,IAAI,SAAS,IAAA;AAC5B,MAAI;AACJ,QAAM,SAAS,IAAA;AACf,QAAM,UAAU,IAAI,KAAK;AAEzB,MAAI,iBAAiB,WAAW;AAC9B,kBAAc;AAAA,MACZ;AAAA,MACA,CAAC,aAAa;AACZ,eAAO,QAAQ,UAAU,UAAU,QAAQ;AAAA,MAC7C;AAAA,MACA,EAAE,WAAW,MAAM,MAAM,KAAA;AAAA,IAAK;AAAA,EAElC,OAAO;AAEL,UAAM,eAAe;AACrB,UAAM,EAAE,SAAS,OAAO,QAAA,IAAY;AAEpC,QAAI,SAAS;AAEX,YAAM,aAAa,SAAS,MAAM,QAAQ,QAAQ,KAAK,CAAC;AAExD,oBAAc;AAAA,QACZ;AAAA,QACA,OAAO,aAAsB;AAC3B,kBAAQ,QAAQ;AAChB,cAAI;AACF,mBAAO,QAAQ,MAAM,QAAQ,UAAU,QAAQ,OAAO,QAAQ;AAAA,UAChE,UAAA;AACE,oBAAQ,QAAQ;AAAA,UAClB;AAAA,QACF;AAAA,QACA,EAAE,WAAW,KAAA;AAAA,MAAK;AAAA,IAEtB,OAAO;AAEL,cAAQ,QAAQ;AACf,OAAC,YAAY;AACZ,cAAM,aAAa,QAAQ;AAE3B,cAAM,CAAC,UAAU,KAAK,IAAI,MAAM,GAAG,QAAQ,YAAY,QAAQ,OAAO,QAAQ,CAAC;AAC/E,gBAAQ,QAAQ;AAChB,YAAI,SAAU,QAAO;AAErB,eAAO,QAAQ;AAAA,MACjB,GAAA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAa,gBAAe,IAAI,WAAW,WAAW;AAC1D,QAAM,MAAM,EAAE,QAAQ,QAAA;AAEtB,SAAO;AACT;"}
|
|
@@ -10,7 +10,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
10
10
|
props: {
|
|
11
11
|
config: {},
|
|
12
12
|
context: {},
|
|
13
|
-
fnInjectCtx: { type: Boolean }
|
|
13
|
+
fnInjectCtx: { type: Boolean },
|
|
14
|
+
crudMode: {}
|
|
14
15
|
},
|
|
15
16
|
emits: ["ifRenderChange"],
|
|
16
17
|
setup(__props, { emit: __emit }) {
|
|
@@ -24,7 +25,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
24
25
|
if (ifRender?.__qdCompute || ifRender?.__qdAsyncCompute) {
|
|
25
26
|
const { result } = qdUseComputeValue(
|
|
26
27
|
ifRender,
|
|
27
|
-
currentContext
|
|
28
|
+
currentContext,
|
|
29
|
+
props.crudMode
|
|
28
30
|
);
|
|
29
31
|
return result.value;
|
|
30
32
|
}
|
|
@@ -81,7 +83,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
81
83
|
if (value?.__qdCompute || value?.__qdAsyncCompute) {
|
|
82
84
|
const { result } = qdUseComputeValue(
|
|
83
85
|
value,
|
|
84
|
-
currentContext
|
|
86
|
+
currentContext,
|
|
87
|
+
props.crudMode
|
|
85
88
|
);
|
|
86
89
|
componentProps2[key] = result.value;
|
|
87
90
|
} else if (props.fnInjectCtx && typeof value === "function" && key.startsWith("on")) {
|
|
@@ -111,8 +114,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
111
114
|
slotConfig ? (openBlock(), createBlock(_sfc_main, mergeProps({
|
|
112
115
|
key: 0,
|
|
113
116
|
config: slotConfig,
|
|
117
|
+
"crud-mode": __props.crudMode,
|
|
114
118
|
context: slotConfig.context || currentContext.value
|
|
115
|
-
}, slotProps), null, 16, ["config", "context"])) : createCommentVNode("", true)
|
|
119
|
+
}, slotProps), null, 16, ["config", "crud-mode", "context"])) : createCommentVNode("", true)
|
|
116
120
|
])
|
|
117
121
|
};
|
|
118
122
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue.mjs","sources":["../../../src/components/config-renderer/index.vue"],"sourcesContent":["<template>\n <component :is=\"resolvedComponent\" v-bind=\"componentProps\" v-if=\"reIfRender !== false\">\n <template\n v-for=\"(slotConfig, slotName) in config.slots\"\n :key=\"slotName\"\n #[slotName]=\"slotProps\"\n >\n <qd-config-renderer\n v-if=\"slotConfig\"\n :config=\"slotConfig\"\n :context=\"slotConfig.context || currentContext\"\n v-bind=\"slotProps\"\n />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\n import type { QdConfigRendererProps, QdComputeFunction, QdAsyncComputeOptions } from './types'\n import { computed, resolveComponent, h, watch } from 'vue'\n import { qdUseComputeValue } from './compute'\n import { resolveVModelBinding } from './utils'\n import QdConfigRenderer from './index.vue'\n import { isEmpty } from 'qidian-shared'\n\n defineOptions({\n name: 'QdConfigRenderer'\n })\n\n const props = withDefaults(defineProps<QdConfigRendererProps>(), {})\n const emit = defineEmits<{ ifRenderChange: [boolean] }>()\n\n let initialized = false\n const currentContext = computed(() => props.config.context || props.context || {})\n\n // 处理 ifRender\n const reIfRender = computed(() => {\n const ifRender = props.config.ifRender\n if (isEmpty(ifRender)) return true\n\n if (\n (ifRender as QdComputeFunction<boolean>)?.__qdCompute ||\n (ifRender as QdAsyncComputeOptions<boolean>)?.__qdAsyncCompute\n ) {\n const { result } = qdUseComputeValue(\n ifRender as QdComputeFunction<boolean> | QdAsyncComputeOptions<boolean>,\n currentContext\n )\n return result.value\n }\n\n return ifRender as boolean\n })\n\n // 解析组件\n const resolvedComponent = computed(() => {\n const { is, render } = props.config\n\n // 优先使用 render 函数\n if (render) {\n return () => render(h, currentContext.value)\n }\n\n if (!is) return 'div'\n\n if (typeof is === 'string') {\n // 对于原生 HTML 标签(小写),直接返回\n if (is === is.toLowerCase()) {\n return is\n }\n\n // 尝试解析为注册的组件\n const resolved = resolveComponent(is)\n if (resolved !== is) return resolved\n return is\n }\n\n return is\n })\n\n // 处理动态属性\n const componentProps = computed(() => {\n const config = props.config\n const componentProps: Record<string, unknown> = {}\n\n // 处理 vModel 开头的属性\n Object.entries(config).forEach(([key, value]) => {\n if (key.startsWith('vModel') && typeof value === 'string') {\n const propName = key.slice(6) // 移除 'vModel' 前缀\n // 获取对应的默认值,比如 vModel -> defaultModelValue, vModelValue -> defaultValue\n const defaultKey =\n 'default' +\n (key === 'vModel' ? 'ModelValue' : propName.charAt(0).toUpperCase() + key.slice(7))\n const defaultValue = config[defaultKey]\n const vModelBinding = resolveVModelBinding(\n currentContext.value,\n value,\n initialized ? undefined : defaultValue\n )\n\n if (key === 'vModel') {\n componentProps.modelValue = vModelBinding.modelValue\n componentProps['onUpdate:modelValue'] = vModelBinding['onUpdate:modelValue']\n } else {\n // 处理其他 vModel 属性,如 vModelValue -> value\n const lowerFirst = propName.charAt(0).toLowerCase() + propName.slice(1)\n componentProps[lowerFirst] = vModelBinding.modelValue\n componentProps[`onUpdate:${lowerFirst}`] = vModelBinding['onUpdate:modelValue']\n }\n }\n })\n initialized = true\n\n // 处理其他属性\n Object.entries(config).forEach(([key, value]) => {\n if (['is', 'context', 'slots', 'ifRender'].includes(key)) return\n if (key.startsWith('vModel')) return\n\n // 检查是否为 vModel 对应的默认值配置\n if (key.startsWith('default')) {\n // 反向查找对应的 vModelKey\n const propName = key.slice(7) // 移除 'default' 前缀\n const vModelKey =\n 'vModel' +\n (propName === 'ModelValue' ? '' : propName.charAt(0).toUpperCase() + propName.slice(1))\n if (config[vModelKey]) return // 只有当存在对应的 vModel 配置时才跳过\n }\n\n // 处理动态计算的值\n if (\n (value as QdComputeFunction)?.__qdCompute ||\n (value as QdAsyncComputeOptions)?.__qdAsyncCompute\n ) {\n const { result } = qdUseComputeValue(\n value as QdComputeFunction | QdAsyncComputeOptions,\n currentContext\n )\n componentProps[key] = result.value\n } else if (props.fnInjectCtx && typeof value === 'function' && key.startsWith('on')) {\n componentProps[key] = (...args: unknown[]) => {\n return value(currentContext.value, ...args)\n }\n } else {\n componentProps[key] = value\n }\n })\n\n return componentProps\n })\n\n watch(\n reIfRender,\n (newV, oldV) => {\n if (newV === oldV) return\n\n emit('ifRenderChange', newV)\n },\n { immediate: true }\n )\n</script>\n"],"names":["componentProps","_createBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_createSlots","_renderList","_withCtx","_openBlock","QdConfigRenderer"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.vue.mjs","sources":["../../../src/components/config-renderer/index.vue"],"sourcesContent":["<template>\n <component :is=\"resolvedComponent\" v-bind=\"componentProps\" v-if=\"reIfRender !== false\">\n <template\n v-for=\"(slotConfig, slotName) in config.slots\"\n :key=\"slotName\"\n #[slotName]=\"slotProps\"\n >\n <qd-config-renderer\n v-if=\"slotConfig\"\n :config=\"slotConfig\"\n :crud-mode=\"crudMode\"\n :context=\"slotConfig.context || currentContext\"\n v-bind=\"slotProps\"\n />\n </template>\n </component>\n</template>\n\n<script setup lang=\"ts\">\n import type { QdConfigRendererProps, QdComputeFunction, QdAsyncComputeOptions } from './types'\n import { computed, resolveComponent, h, watch } from 'vue'\n import { qdUseComputeValue } from './compute'\n import { resolveVModelBinding } from './utils'\n import QdConfigRenderer from './index.vue'\n import { isEmpty } from 'qidian-shared'\n\n defineOptions({\n name: 'QdConfigRenderer'\n })\n\n const props = withDefaults(defineProps<QdConfigRendererProps>(), {})\n const emit = defineEmits<{ ifRenderChange: [boolean] }>()\n\n let initialized = false\n const currentContext = computed(() => props.config.context || props.context || {})\n\n // 处理 ifRender\n const reIfRender = computed(() => {\n const ifRender = props.config.ifRender\n if (isEmpty(ifRender)) return true\n\n if (\n (ifRender as QdComputeFunction<boolean>)?.__qdCompute ||\n (ifRender as QdAsyncComputeOptions<boolean>)?.__qdAsyncCompute\n ) {\n const { result } = qdUseComputeValue(\n ifRender as QdComputeFunction<boolean> | QdAsyncComputeOptions<boolean>,\n currentContext,\n props.crudMode\n )\n return result.value\n }\n\n return ifRender as boolean\n })\n\n // 解析组件\n const resolvedComponent = computed(() => {\n const { is, render } = props.config\n\n // 优先使用 render 函数\n if (render) {\n return () => render(h, currentContext.value)\n }\n\n if (!is) return 'div'\n\n if (typeof is === 'string') {\n // 对于原生 HTML 标签(小写),直接返回\n if (is === is.toLowerCase()) {\n return is\n }\n\n // 尝试解析为注册的组件\n const resolved = resolveComponent(is)\n if (resolved !== is) return resolved\n return is\n }\n\n return is\n })\n\n // 处理动态属性\n const componentProps = computed(() => {\n const config = props.config\n const componentProps: Record<string, unknown> = {}\n\n // 处理 vModel 开头的属性\n Object.entries(config).forEach(([key, value]) => {\n if (key.startsWith('vModel') && typeof value === 'string') {\n const propName = key.slice(6) // 移除 'vModel' 前缀\n // 获取对应的默认值,比如 vModel -> defaultModelValue, vModelValue -> defaultValue\n const defaultKey =\n 'default' +\n (key === 'vModel' ? 'ModelValue' : propName.charAt(0).toUpperCase() + key.slice(7))\n const defaultValue = config[defaultKey]\n const vModelBinding = resolveVModelBinding(\n currentContext.value,\n value,\n initialized ? undefined : defaultValue\n )\n\n if (key === 'vModel') {\n componentProps.modelValue = vModelBinding.modelValue\n componentProps['onUpdate:modelValue'] = vModelBinding['onUpdate:modelValue']\n } else {\n // 处理其他 vModel 属性,如 vModelValue -> value\n const lowerFirst = propName.charAt(0).toLowerCase() + propName.slice(1)\n componentProps[lowerFirst] = vModelBinding.modelValue\n componentProps[`onUpdate:${lowerFirst}`] = vModelBinding['onUpdate:modelValue']\n }\n }\n })\n initialized = true\n\n // 处理其他属性\n Object.entries(config).forEach(([key, value]) => {\n if (['is', 'context', 'slots', 'ifRender'].includes(key)) return\n if (key.startsWith('vModel')) return\n\n // 检查是否为 vModel 对应的默认值配置\n if (key.startsWith('default')) {\n // 反向查找对应的 vModelKey\n const propName = key.slice(7) // 移除 'default' 前缀\n const vModelKey =\n 'vModel' +\n (propName === 'ModelValue' ? '' : propName.charAt(0).toUpperCase() + propName.slice(1))\n if (config[vModelKey]) return // 只有当存在对应的 vModel 配置时才跳过\n }\n\n // 处理动态计算的值\n if (\n (value as QdComputeFunction)?.__qdCompute ||\n (value as QdAsyncComputeOptions)?.__qdAsyncCompute\n ) {\n const { result } = qdUseComputeValue(\n value as QdComputeFunction | QdAsyncComputeOptions,\n currentContext,\n props.crudMode\n )\n componentProps[key] = result.value\n } else if (props.fnInjectCtx && typeof value === 'function' && key.startsWith('on')) {\n componentProps[key] = (...args: unknown[]) => {\n return value(currentContext.value, ...args)\n }\n } else {\n componentProps[key] = value\n }\n })\n\n return componentProps\n })\n\n watch(\n reIfRender,\n (newV, oldV) => {\n if (newV === oldV) return\n\n emit('ifRenderChange', newV)\n },\n { immediate: true }\n )\n</script>\n"],"names":["componentProps","_createBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_createSlots","_renderList","_withCtx","_openBlock","QdConfigRenderer"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { Component, VNode, h } from 'vue';
|
|
2
|
+
import type { QdFormProps } from '../form';
|
|
2
3
|
export type QdComponentResolver = string | Component | VNode;
|
|
3
4
|
export type QdComponentRender = (vueH: typeof h, context: Record<string, unknown>) => VNode;
|
|
4
|
-
export type QdComputeFunction<T = unknown> = ((context: Record<string, unknown
|
|
5
|
+
export type QdComputeFunction<T = unknown> = ((context: Record<string, unknown>, crudMode: QdConfigRendererProps['crudMode']) => T) & {
|
|
5
6
|
__qdCompute?: true;
|
|
6
7
|
__qdId?: string;
|
|
7
8
|
};
|
|
8
|
-
export type QdAsyncFunction<T = unknown> = (watchValue: unknown, context: Record<string, unknown
|
|
9
|
+
export type QdAsyncFunction<T = unknown> = (watchValue: unknown, context: Record<string, unknown>, crudMode: QdConfigRendererProps['crudMode']) => Promise<T>;
|
|
9
10
|
export type QdWatchFunction<T = unknown> = (context: Record<string, unknown>) => T;
|
|
10
11
|
export interface QdAsyncComputeOptions<T = unknown> {
|
|
11
12
|
asyncFn: QdAsyncFunction<T>;
|
|
@@ -32,7 +33,7 @@ export interface QdComponentConfig {
|
|
|
32
33
|
[key: `default${string}`]: unknown;
|
|
33
34
|
[key: string]: QdConfigValue;
|
|
34
35
|
}
|
|
35
|
-
export interface QdConfigRendererProps {
|
|
36
|
+
export interface QdConfigRendererProps extends Pick<QdFormProps, 'crudMode'> {
|
|
36
37
|
config: QdComponentConfig;
|
|
37
38
|
context?: Record<string, unknown>;
|
|
38
39
|
fnInjectCtx?: boolean;
|
|
@@ -24,7 +24,6 @@ declare const __VLS_component: import("vue").DefineComponent<QdCrudSearchProps,
|
|
|
24
24
|
readonly: boolean;
|
|
25
25
|
gutter: number | import("tdesign-vue-next").GutterObject | (number | import("tdesign-vue-next").GutterObject)[];
|
|
26
26
|
grid: import("../..").QdGridItemProps;
|
|
27
|
-
defaultClearable: boolean;
|
|
28
27
|
labelAlign: "left" | "right" | "top";
|
|
29
28
|
labelWidth: string | number;
|
|
30
29
|
preventSubmitDefault: boolean;
|
|
@@ -34,6 +33,7 @@ declare const __VLS_component: import("vue").DefineComponent<QdCrudSearchProps,
|
|
|
34
33
|
scrollToFirstError: "" | "smooth" | "auto";
|
|
35
34
|
showErrorMessage: boolean;
|
|
36
35
|
statusIcon: boolean | import("tdesign-vue-next").TNode<import("tdesign-vue-next").TdFormItemProps>;
|
|
36
|
+
defaultClearable: boolean;
|
|
37
37
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
38
38
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
39
39
|
export default _default;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
.qd-form-item[data-v-
|
|
1
|
+
.qd-form-item[data-v-5f1deb0a] > .t-form__item > .t-form__controls > .t-form__controls-content > * {
|
|
2
2
|
width: 100%;
|
|
3
3
|
}
|
|
4
|
-
.qd-form-item__component[data-v-
|
|
4
|
+
.qd-form-item__component[data-v-5f1deb0a] {
|
|
5
5
|
width: 100%;
|
|
6
6
|
}
|
|
@@ -9,11 +9,11 @@ type __VLS_Slots = {} & {
|
|
|
9
9
|
default?: (props: typeof __VLS_10) => any;
|
|
10
10
|
};
|
|
11
11
|
declare const __VLS_component: import("vue").DefineComponent<QdFormItemProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<QdFormItemProps> & Readonly<{}>, {
|
|
12
|
-
ifRender: import("..").QdConfigValue<boolean>;
|
|
13
|
-
defaultClearable: boolean;
|
|
14
12
|
requiredMark: boolean;
|
|
15
13
|
showErrorMessage: boolean;
|
|
16
14
|
statusIcon: boolean | import("tdesign-vue-next").TNode;
|
|
15
|
+
ifRender: import("..").QdConfigValue<boolean>;
|
|
16
|
+
defaultClearable: boolean;
|
|
17
17
|
successBorder: boolean;
|
|
18
18
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
19
|
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
@@ -2,7 +2,7 @@ import './item.css'
|
|
|
2
2
|
import _sfc_main from "./item.vue2.mjs";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
5
|
-
const QdFormItem = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
5
|
+
const QdFormItem = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-5f1deb0a"]]);
|
|
6
6
|
export {
|
|
7
7
|
QdFormItem as default
|
|
8
8
|
};
|
|
@@ -42,7 +42,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
42
42
|
if (ifRender?.__qdCompute || ifRender?.__qdAsyncCompute) {
|
|
43
43
|
const { result } = qdUseComputeValue(
|
|
44
44
|
ifRender,
|
|
45
|
-
computed(() => props.context || {})
|
|
45
|
+
computed(() => props.context || {}),
|
|
46
|
+
props.crudMode
|
|
46
47
|
);
|
|
47
48
|
return result.value;
|
|
48
49
|
}
|
|
@@ -71,7 +72,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
71
72
|
rules: reRules
|
|
72
73
|
},
|
|
73
74
|
gridItemOptions: { col, row },
|
|
74
|
-
configRendererOptions: {
|
|
75
|
+
configRendererOptions: {
|
|
76
|
+
crudMode: formItemOptions.crudMode,
|
|
77
|
+
context,
|
|
78
|
+
config: component
|
|
79
|
+
}
|
|
75
80
|
};
|
|
76
81
|
});
|
|
77
82
|
return (_ctx, _cache) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.vue2.mjs","sources":["../../../src/components/form/item.vue"],"sourcesContent":["<template>\n <qd-grid-item\n v-if=\"reIfRender !== false\"\n :class=\"[\n 'qd-form-item',\n reProps.formItemOptions.name ? `qd-form-item__${reProps.formItemOptions.name}` : ''\n ]\"\n v-bind=\"reProps.gridItemOptions\"\n >\n <t-form-item v-bind=\"reProps.formItemOptions\">\n <slot :crud-mode=\"reProps.formItemOptions.crudMode\" :context=\"context\">\n <qd-config-renderer\n v-if=\"reProps.configRendererOptions.config\"\n class=\"qd-form-item__component\"\n v-bind=\"reProps.configRendererOptions\"\n />\n </slot>\n\n <template v-for=\"name in filterSlots($slots, ['default'])\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-form-item>\n </qd-grid-item>\n</template>\n\n<script setup lang=\"ts\">\n import type { QdFormItemProps } from './types'\n import type {\n QdConfigRendererProps,\n QdComputeFunction,\n QdAsyncComputeOptions\n } from '../config-renderer'\n import { computed } from 'vue'\n import { FormItem as TFormItem } from 'tdesign-vue-next'\n import { QdGridItem } from '../grid'\n import { QdConfigRenderer } from '../config-renderer'\n import { qdFormItemProps } from './props'\n import { qdUseComputeValue } from '../config-renderer/compute'\n import { filterSlots, isEmpty } from 'qidian-shared'\n\n defineOptions({\n name: 'QdFormItem'\n })\n\n const props = withDefaults(defineProps<QdFormItemProps>(), qdFormItemProps)\n\n // 处理 ifRender\n const reIfRender = computed(() => {\n const ifRender = props.ifRender\n if (isEmpty(ifRender)) return true\n\n if (\n (ifRender as QdComputeFunction<boolean>)?.__qdCompute ||\n (ifRender as QdAsyncComputeOptions<boolean>)?.__qdAsyncCompute\n ) {\n const { result } = qdUseComputeValue(\n ifRender as QdComputeFunction<boolean> | QdAsyncComputeOptions<boolean>,\n computed(() => props.context || {})\n )\n return result.value\n }\n\n return ifRender as boolean\n })\n\n const reProps = computed(() => {\n const { col, row, context, component, required, rules, ...formItemOptions } = props\n const reRules = rules || []\n\n if (component) {\n const comp = component.is\n const compName = (\n typeof comp === 'string' ? comp : !comp ? '' : 'name' in comp ? comp.name || '' : ''\n ).toLowerCase()\n const messagePrefix =\n compName.search('select') > -1 ||\n compName.search('checkbox') > -1 ||\n compName.search('radio') > -1\n ? '请选择'\n : compName.search('upload') > -1\n ? '请上传'\n : '请输入'\n\n if (required && !reRules.some((item) => item.required)) {\n if (required && typeof required === 'string') {\n reRules.push({ required: true, message: required })\n } else {\n reRules.push({ required: true, message: `${messagePrefix}${formItemOptions.label}` })\n }\n }\n\n component.placeholder =\n component.placeholder ??\n (compName.search('picker') > -1 || compName.search('upload') > -1\n ? ''\n : `${messagePrefix}${formItemOptions.label}`)\n component.clearable =\n component.clearable ?? (required ? false : (props.defaultClearable ?? true))\n }\n\n return {\n formItemOptions: {\n ...formItemOptions,\n rules: reRules\n },\n gridItemOptions: { col, row },\n configRendererOptions: { context
|
|
1
|
+
{"version":3,"file":"item.vue2.mjs","sources":["../../../src/components/form/item.vue"],"sourcesContent":["<template>\n <qd-grid-item\n v-if=\"reIfRender !== false\"\n :class=\"[\n 'qd-form-item',\n reProps.formItemOptions.name ? `qd-form-item__${reProps.formItemOptions.name}` : ''\n ]\"\n v-bind=\"reProps.gridItemOptions\"\n >\n <t-form-item v-bind=\"reProps.formItemOptions\">\n <slot :crud-mode=\"reProps.formItemOptions.crudMode\" :context=\"context\">\n <qd-config-renderer\n v-if=\"reProps.configRendererOptions.config\"\n class=\"qd-form-item__component\"\n v-bind=\"reProps.configRendererOptions\"\n />\n </slot>\n\n <template v-for=\"name in filterSlots($slots, ['default'])\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-form-item>\n </qd-grid-item>\n</template>\n\n<script setup lang=\"ts\">\n import type { QdFormItemProps } from './types'\n import type {\n QdConfigRendererProps,\n QdComputeFunction,\n QdAsyncComputeOptions\n } from '../config-renderer'\n import { computed } from 'vue'\n import { FormItem as TFormItem } from 'tdesign-vue-next'\n import { QdGridItem } from '../grid'\n import { QdConfigRenderer } from '../config-renderer'\n import { qdFormItemProps } from './props'\n import { qdUseComputeValue } from '../config-renderer/compute'\n import { filterSlots, isEmpty } from 'qidian-shared'\n\n defineOptions({\n name: 'QdFormItem'\n })\n\n const props = withDefaults(defineProps<QdFormItemProps>(), qdFormItemProps)\n\n // 处理 ifRender\n const reIfRender = computed(() => {\n const ifRender = props.ifRender\n if (isEmpty(ifRender)) return true\n\n if (\n (ifRender as QdComputeFunction<boolean>)?.__qdCompute ||\n (ifRender as QdAsyncComputeOptions<boolean>)?.__qdAsyncCompute\n ) {\n const { result } = qdUseComputeValue(\n ifRender as QdComputeFunction<boolean> | QdAsyncComputeOptions<boolean>,\n computed(() => props.context || {}),\n props.crudMode\n )\n return result.value\n }\n\n return ifRender as boolean\n })\n\n const reProps = computed(() => {\n const { col, row, context, component, required, rules, ...formItemOptions } = props\n const reRules = rules || []\n\n if (component) {\n const comp = component.is\n const compName = (\n typeof comp === 'string' ? comp : !comp ? '' : 'name' in comp ? comp.name || '' : ''\n ).toLowerCase()\n const messagePrefix =\n compName.search('select') > -1 ||\n compName.search('checkbox') > -1 ||\n compName.search('radio') > -1\n ? '请选择'\n : compName.search('upload') > -1\n ? '请上传'\n : '请输入'\n\n if (required && !reRules.some((item) => item.required)) {\n if (required && typeof required === 'string') {\n reRules.push({ required: true, message: required })\n } else {\n reRules.push({ required: true, message: `${messagePrefix}${formItemOptions.label}` })\n }\n }\n\n component.placeholder =\n component.placeholder ??\n (compName.search('picker') > -1 || compName.search('upload') > -1\n ? ''\n : `${messagePrefix}${formItemOptions.label}`)\n component.clearable =\n component.clearable ?? (required ? false : (props.defaultClearable ?? true))\n }\n\n return {\n formItemOptions: {\n ...formItemOptions,\n rules: reRules\n },\n gridItemOptions: { col, row },\n configRendererOptions: {\n crudMode: formItemOptions.crudMode,\n context,\n config: component\n } as QdConfigRendererProps\n }\n })\n</script>\n\n<style lang=\"less\" scoped>\n .qd-form-item {\n & > :deep(.t-form__item) {\n & > .t-form__controls > .t-form__controls-content > * {\n width: 100%;\n }\n }\n\n &__component {\n width: 100%;\n }\n }\n</style>\n"],"names":["_openBlock","_createBlock","_unref","_mergeProps","_createVNode","TFormItem","_normalizeProps","_guardReactiveProps","_createSlots","_renderSlot","$slots","_withCtx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CE,UAAM,QAAQ;AAGd,UAAM,aAAa,SAAS,MAAM;AAChC,YAAM,WAAW,MAAM;AACvB,UAAI,QAAQ,QAAQ,EAAG,QAAO;AAE9B,UACG,UAAyC,eACzC,UAA6C,kBAC9C;AACA,cAAM,EAAE,WAAW;AAAA,UACjB;AAAA,UACA,SAAS,MAAM,MAAM,WAAW,EAAE;AAAA,UAClC,MAAM;AAAA,QAAA;AAER,eAAO,OAAO;AAAA,MAChB;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,UAAU,SAAS,MAAM;AAC7B,YAAM,EAAE,KAAK,KAAK,SAAS,WAAW,UAAU,OAAO,GAAG,gBAAA,IAAoB;AAC9E,YAAM,UAAU,SAAS,CAAA;AAEzB,UAAI,WAAW;AACb,cAAM,OAAO,UAAU;AACvB,cAAM,YACJ,OAAO,SAAS,WAAW,OAAO,CAAC,OAAO,KAAK,UAAU,OAAO,KAAK,QAAQ,KAAK,IAClF,YAAA;AACF,cAAM,gBACJ,SAAS,OAAO,QAAQ,IAAI,MAC5B,SAAS,OAAO,UAAU,IAAI,MAC9B,SAAS,OAAO,OAAO,IAAI,KACvB,QACA,SAAS,OAAO,QAAQ,IAAI,KAC1B,QACA;AAER,YAAI,YAAY,CAAC,QAAQ,KAAK,CAAC,SAAS,KAAK,QAAQ,GAAG;AACtD,cAAI,YAAY,OAAO,aAAa,UAAU;AAC5C,oBAAQ,KAAK,EAAE,UAAU,MAAM,SAAS,UAAU;AAAA,UACpD,OAAO;AACL,oBAAQ,KAAK,EAAE,UAAU,MAAM,SAAS,GAAG,aAAa,GAAG,gBAAgB,KAAK,GAAA,CAAI;AAAA,UACtF;AAAA,QACF;AAEA,kBAAU,cACR,UAAU,gBACT,SAAS,OAAO,QAAQ,IAAI,MAAM,SAAS,OAAO,QAAQ,IAAI,KAC3D,KACA,GAAG,aAAa,GAAG,gBAAgB,KAAK;AAC9C,kBAAU,YACR,UAAU,cAAc,WAAW,QAAS,MAAM,oBAAoB;AAAA,MAC1E;AAEA,aAAO;AAAA,QACL,iBAAiB;AAAA,UACf,GAAG;AAAA,UACH,OAAO;AAAA,QAAA;AAAA,QAET,iBAAiB,EAAE,KAAK,IAAA;AAAA,QACxB,uBAAuB;AAAA,UACrB,UAAU,gBAAgB;AAAA,UAC1B;AAAA,UACA,QAAQ;AAAA,QAAA;AAAA,MACV;AAAA,IAEJ,CAAC;;aA/GO,WAAA,UAAU,SADlBA,UAAA,GAAAC,YAqBeC,mBArBfC,WAqBe;AAAA;QAnBZ,OAAK;AAAA;UAAgC,QAAA,MAAQ,gBAAgB,wBAAwB,QAAA,MAAQ,gBAAgB,IAAI,KAAA;AAAA,QAAA;AAAA,SAI1G,QAAA,MAAQ,eAAe,GAAA;AAAA,yBAE/B,MAYc;AAAA,UAZdC,YAYcF,MAAAG,QAAA,GAAAC,eAAAC,mBAZO,QAAA,MAAQ,eAAe,CAAA,GAAAC,YAAA;AAAA,6BAC1C,MAMO;AAAA,cANPC,WAMO,KAAA,QAAA,WAAA;AAAA,gBANA,UAAW,QAAA,MAAQ,gBAAgB;AAAA,gBAAW,SAAS,QAAA;AAAA,cAAA,GAA9D,MAMO;AAAA,gBAJG,QAAA,MAAQ,sBAAsB,UADtCT,aAAAC,YAIEC,oBAJFC,WAIE;AAAA;kBAFA,OAAM;AAAA,gBAAA,GACE,QAAA,MAAQ,qBAAqB,GAAA,MAAA,EAAA;;;;;uBAIhBD,MAAA,WAAA,EAAYQ,KAAAA,QAAM,CAAA,SAAA,CAAA,GAAA,CAA1B,SAAI;;;gBACnB,IAAAC,QAAA,CADkE,cAAS;AAAA,kBAC3EF,WAAwC,KAAA,QAA3B,MAAIH,eAAAC,mBAAU,SAAS,CAAA,GAAA,QAAA,IAAA;AAAA,gBAAA;;;;;;;;;;"}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
.qd-dialog-table-select[data-v-
|
|
1
|
+
.qd-dialog-table-select[data-v-9d7b31a2] {
|
|
2
2
|
width: 100%;
|
|
3
3
|
}
|
|
4
|
-
.qd-dialog-table-select__trigger[data-v-
|
|
4
|
+
.qd-dialog-table-select__trigger[data-v-9d7b31a2] {
|
|
5
5
|
width: 100%;
|
|
6
6
|
}
|
|
7
|
-
.qd-dialog-table-select__trigger[data-v-
|
|
7
|
+
.qd-dialog-table-select__trigger[data-v-9d7b31a2]:not(.qd-dialog-table-select__trigger--readonly):not(.qd-dialog-table-select__trigger--disabled) {
|
|
8
8
|
cursor: pointer;
|
|
9
9
|
}
|
|
10
|
-
.qd-dialog-table-select__table[data-v-
|
|
11
|
-
.qd-dialog-table-select__table[data-v-
|
|
10
|
+
.qd-dialog-table-select__table[data-v-9d7b31a2] .qd-crud-search > .t-card__body,
|
|
11
|
+
.qd-dialog-table-select__table[data-v-9d7b31a2] .qd-crud-table__body > .t-card__body {
|
|
12
12
|
padding: 0 !important;
|
|
13
13
|
}
|
|
14
|
-
.qd-dialog-table-select__table[data-v-
|
|
14
|
+
.qd-dialog-table-select__table[data-v-9d7b31a2] .qd-crud-table__toolbar {
|
|
15
15
|
display: none;
|
|
16
16
|
}
|
|
17
|
-
.qd-dialog-table-select__table[data-v-
|
|
17
|
+
.qd-dialog-table-select__table[data-v-9d7b31a2] .qd-service-table {
|
|
18
18
|
margin-top: 0;
|
|
19
19
|
}
|
|
20
|
-
.qd-dialog-table-select__table-add[data-v-
|
|
20
|
+
.qd-dialog-table-select__table-add[data-v-9d7b31a2] {
|
|
21
21
|
margin-top: var(--td-comp-margin-m);
|
|
22
22
|
display: flex;
|
|
23
23
|
}
|
|
24
|
-
.qd-dialog-table-select__table-add .t-input__wrap[data-v-
|
|
24
|
+
.qd-dialog-table-select__table-add .t-input__wrap[data-v-9d7b31a2] {
|
|
25
25
|
flex: 1 1 0;
|
|
26
26
|
overflow: hidden;
|
|
27
27
|
margin-right: var(--td-comp-margin-m);
|
|
@@ -2,7 +2,7 @@ import './index.css'
|
|
|
2
2
|
import _sfc_main from "./index.vue2.mjs";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
5
|
-
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
5
|
+
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9d7b31a2"]]);
|
|
6
6
|
export {
|
|
7
7
|
index as default
|
|
8
8
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './index.css'
|
|
2
2
|
import { defineComponent, mergeDefaults, useTemplateRef, ref, reactive, computed, createVNode, watch, onMounted, createElementBlock, openBlock, Fragment, createElementVNode, mergeProps, renderSlot, unref, isRef, withCtx, createSlots, renderList, normalizeProps, guardReactiveProps } from "vue";
|
|
3
|
-
import { isEmpty, useDoubleClick, extractSlotsWithPrefix, identifyType } from "qidian-shared";
|
|
3
|
+
import { isEmpty, useDoubleClick, suspectedWrapperPromise, extractSlotsWithPrefix, identifyType } from "qidian-shared";
|
|
4
4
|
import { Select, Input, Space, Button } from "tdesign-vue-next";
|
|
5
5
|
import { AddIcon, SearchIcon } from "tdesign-icons-vue-next";
|
|
6
6
|
import { qdDialogTableSelectSearchGrid, qdServiceDialogTableSelectProps } from "./props.mjs";
|
|
@@ -324,6 +324,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
324
324
|
const tdReadonly = useReadonly();
|
|
325
325
|
const tdDisabled = useDisabled();
|
|
326
326
|
const dialogRef = useTemplateRef("dialog");
|
|
327
|
+
const confirmLoad = ref(false);
|
|
327
328
|
const selectedRowKeys = ref([]);
|
|
328
329
|
const selectedRows = ref([]);
|
|
329
330
|
let latestSelectedRows = [];
|
|
@@ -460,8 +461,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
460
461
|
handleConfirm();
|
|
461
462
|
}
|
|
462
463
|
});
|
|
463
|
-
function handleConfirm(done) {
|
|
464
|
-
if (!done) done = (closed) => visible.value = !closed;
|
|
464
|
+
async function handleConfirm(done) {
|
|
465
465
|
selectedRows.value = latestSelectedRows;
|
|
466
466
|
const {
|
|
467
467
|
selectOptions
|
|
@@ -484,7 +484,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
484
484
|
}];
|
|
485
485
|
reProps.value.onChange?.(...eventParams);
|
|
486
486
|
const onConfirm = reProps.value.onConfirm;
|
|
487
|
-
if (!onConfirm)
|
|
487
|
+
if (!onConfirm) return;
|
|
488
|
+
if (!done) {
|
|
489
|
+
confirmLoad.value = true;
|
|
490
|
+
const [err, res] = await suspectedWrapperPromise(onConfirm(...eventParams, (closed) => {
|
|
491
|
+
visible.value = !closed;
|
|
492
|
+
}));
|
|
493
|
+
confirmLoad.value = false;
|
|
494
|
+
if (err || res === false) return;
|
|
488
495
|
visible.value = false;
|
|
489
496
|
return;
|
|
490
497
|
}
|
|
@@ -583,7 +590,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
583
590
|
}, 16, ["class", "modelValue", "options"])], true)], 16), createVNode(unref(_sfc_main$1), mergeProps({
|
|
584
591
|
ref: "dialog",
|
|
585
592
|
visible: unref(visible),
|
|
586
|
-
"onUpdate:visible": _cache[12] || (_cache[12] = ($event) => isRef(visible) ? visible.value = $event : null)
|
|
593
|
+
"onUpdate:visible": _cache[12] || (_cache[12] = ($event) => isRef(visible) ? visible.value = $event : null),
|
|
594
|
+
"confirm-loading": confirmLoad.value
|
|
587
595
|
}, reProps.value.dialogOptions, {
|
|
588
596
|
onConfirm: handleConfirm,
|
|
589
597
|
onBeforeOpen: handleBeforeOpen,
|
|
@@ -652,7 +660,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
652
660
|
};
|
|
653
661
|
})]), 1040, ["search-data", "data", "selected-row-keys", "active-row-keys", "column-controller-visible", "display-columns", "expanded-rowKeys", "filter-value", "sort", "expanded-tree-nodes", "onSelectChange"])]),
|
|
654
662
|
_: 3
|
|
655
|
-
}, 16, ["visible"])], 64);
|
|
663
|
+
}, 16, ["visible", "confirm-loading"])], 64);
|
|
656
664
|
};
|
|
657
665
|
}
|
|
658
666
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/service-dialog-table-select/index.vue"],"sourcesContent":["<template>\n <div class=\"qd-dialog-table-select\" v-bind=\"$attrs\" @click=\"openDialog\">\n <slot :selected-rows=\"selectedRows\">\n <t-select\n :class=\"[\n 'qd-dialog-table-select__trigger',\n reProps.selectOptions.readonly ? 'qd-dialog-table-select__trigger--readonly' : '',\n reProps.selectOptions.disabled ? 'qd-dialog-table-select__trigger--disabled' : ''\n ]\"\n v-model=\"modelValue\"\n :options=\"selectedRows\"\n :popup-visible=\"false\"\n v-bind=\"reProps.selectOptions\"\n @clear=\"handleClear\"\n >\n <template #suffixIcon>\n <search-icon />\n </template>\n </t-select>\n </slot>\n </div>\n\n <qd-dialog\n ref=\"dialog\"\n v-model:visible=\"visible\"\n v-bind=\"reProps.dialogOptions\"\n @confirm=\"handleConfirm\"\n @before-open=\"handleBeforeOpen\"\n @closed=\"handleClosed\"\n >\n <qd-crud-table\n class=\"qd-dialog-table-select__table\"\n v-model:search-data=\"searchData\"\n v-model:data=\"data\"\n v-model:selected-row-keys=\"selectedRowKeys\"\n v-model:active-row-keys=\"selectedRowKeys\"\n v-model:column-controller-visible=\"columnControllerVisible\"\n v-model:display-columns=\"displayColumns\"\n v-model:expanded-rowKeys=\"expandedRowKeys\"\n v-model:filter-value=\"filterValue\"\n v-model:sort=\"sort\"\n v-model:expanded-tree-nodes=\"expandedTreeNodes\"\n reserve-selected-row-on-paginate\n active-row-type=\"multiple\"\n v-bind=\"reProps.tableOptions\"\n @select-change=\"handleSelectChange\"\n >\n <template v-if=\"reProps.creatable\" #table-bottom-content>\n <div v-if=\"addCustom.visible\" class=\"qd-dialog-table-select__table-add\">\n <slot name=\"add-input\" :add-custom=\"addCustom\">\n <t-input v-model=\"addCustom.value\" v-bind=\"reProps.addInputOptions\" />\n </slot>\n\n <t-space size=\"small\">\n <slot name=\"add-confirm-btn\" :add-custom=\"addCustom\">\n <t-button v-bind=\"reProps.addConfirmBtnOptions\" />\n </slot>\n\n <slot name=\"add-cancel-btn\" :add-custom=\"addCustom\">\n <t-button v-bind=\"reProps.addCancelBtnOptions\" />\n </slot>\n </t-space>\n </div>\n\n <slot v-else name=\"add-btn\" :add-custom=\"addCustom\">\n <t-button class=\"qd-dialog-table-select__table-add\" v-bind=\"reProps.addBtnOptions\" />\n </slot>\n </template>\n\n <template\n v-for=\"item in extractSlotsWithPrefix($slots, 'search')\"\n #[item.filterName]=\"slotProps\"\n >\n <slot :name=\"item.originalName\" v-bind=\"slotProps\" />\n </template>\n\n <template\n v-for=\"item in extractSlotsWithPrefix($slots, 'table')\"\n #[item.filterName]=\"slotProps\"\n >\n <slot :name=\"item.originalName\" v-bind=\"slotProps\" />\n </template>\n </qd-crud-table>\n </qd-dialog>\n</template>\n\n<script\n setup\n lang=\"tsx\"\n generic=\"\n D extends TableRowData = TableRowData,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n \"\n>\n import type {\n SelectOptions,\n SelectValue,\n TableRowData,\n TdButtonProps,\n TdInputProps\n } from 'tdesign-vue-next'\n import type { ServicePageParams, ServicePagination } from 'qidian-shared'\n import type {\n QdDialogTableSelectInstanceFunctions,\n QdServiceDialogTableSelectProps\n } from './types'\n import type { QdDialogDone, QdDialogInstanceFunctions } from '../dialog'\n import type { QdCrudTableProps } from '../crud'\n import { extractSlotsWithPrefix, identifyType, isEmpty, useDoubleClick } from 'qidian-shared'\n import {\n Select as TSelect,\n Button as TButton,\n Input as TInput,\n Space as TSpace\n } from 'tdesign-vue-next'\n import type { WatchHandle } from 'vue'\n import { AddIcon, SearchIcon } from 'tdesign-icons-vue-next'\n import { qdDialogTableSelectSearchGrid, qdServiceDialogTableSelectProps } from './props'\n import { computed, onMounted, reactive, ref, useTemplateRef, watch } from 'vue'\n import { useVModels } from '@vueuse/core'\n import { QdDialog } from '../dialog'\n import { QdCrudTable } from '../crud'\n import { qdServiceSelectKeys } from '../service-select/props'\n import { useDisabled, useReadonly } from '../../hooks'\n import { get, merge } from 'lodash-es'\n import { useConfig } from '../config-provider/useConfig'\n\n defineOptions({\n name: 'QdServiceDialogTableSelect'\n })\n\n type Props = QdServiceDialogTableSelectProps<D, R, P, TP, Pag>\n\n const props = withDefaults(defineProps<Props>(), qdServiceDialogTableSelectProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']]\n 'update:visible': [Props['visible']]\n\n 'update:searchData': [Props['searchData']]\n 'update:data': [Props['data']]\n 'update:columnControllerVisible': [Props['columnControllerVisible']]\n 'update:displayColumns': [Props['displayColumns']]\n 'update:expandedRowKeys': [Props['expandedRowKeys']]\n 'update:filterValue': [Props['filterValue']]\n 'update:sort': [Props['sort']]\n 'update:expandedTreeNodes': [Props['expandedTreeNodes']]\n }>()\n const {\n modelValue,\n visible,\n searchData,\n data,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const { t } = useConfig('dialogTableSelect')\n const tdReadonly = useReadonly()\n const tdDisabled = useDisabled()\n const dialogRef = useTemplateRef<QdDialogInstanceFunctions>('dialog')\n\n const selectedRowKeys = ref<(string | number)[]>([])\n const selectedRows = ref<D[]>([])\n let latestSelectedRows: D[] = []\n\n const addCustom = reactive({\n visible: false,\n value: ''\n })\n const addConfirmDisabled = computed(() => isEmpty(addCustom.value))\n\n const reProps = computed(() => {\n const {\n modelValue,\n visible,\n fillOptions,\n searchData,\n data,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes,\n wrapper,\n readonly,\n\n multiple,\n disabled,\n keys,\n valueType,\n clearable,\n creatable,\n placeholder,\n size,\n\n onClear,\n onCreate,\n onChange,\n onConfirm,\n\n search,\n tableSize,\n\n addBtn,\n addConfirmBtn,\n addCancelBtn,\n addInput,\n\n ...tableOptions\n } = props\n\n const addBtnOptions: TdButtonProps = merge(\n {},\n {\n block: true,\n theme: 'primary',\n variant: 'dashed',\n icon: () => <AddIcon />,\n content: t('addText'),\n onClick: () => {\n addCustom.visible = true\n }\n },\n typeof addBtn === 'string' ? { content: addBtn } : addBtn\n )\n\n const addConfirmBtnOptions: TdButtonProps = merge(\n {},\n {\n content: t('addConfirmText'),\n onClick: confirmAddCustom\n },\n typeof addConfirmBtn === 'string'\n ? { content: addConfirmBtn, disabled: addConfirmDisabled.value }\n : { ...addConfirmBtn, disabled: addConfirmDisabled.value || addConfirmBtn?.disabled }\n )\n\n const addCancelBtnOptions: TdButtonProps = merge(\n {},\n {\n variant: 'outline',\n content: t('addCancelText'),\n onClick: cancelAddCustom\n },\n typeof addCancelBtn === 'string' ? { content: addCancelBtn } : addCancelBtn\n )\n\n const addInputOptions: TdInputProps = merge(\n {},\n { clearable: true },\n typeof addInput === 'string' ? { placeholder: addInput } : addInput\n )\n\n const dialogOptions = merge({}, { header: placeholder }, wrapper)\n\n return {\n creatable,\n fillOptions,\n selectOptions: {\n multiple,\n readonly: readonly ?? tdReadonly.value,\n disabled: disabled ?? tdDisabled.value,\n keys,\n valueType,\n clearable,\n placeholder,\n size\n },\n dialogOptions,\n tableOptions: {\n ...tableOptions,\n size: tableSize,\n search: {\n ...search,\n grid: merge({}, qdDialogTableSelectSearchGrid, search?.grid)\n },\n selectType: (multiple ? 'multiple' : 'single') as QdCrudTableProps['selectType'],\n rowKey: keys?.value || qdServiceSelectKeys.value\n },\n\n onClear,\n onCreate,\n onChange,\n onConfirm,\n\n addBtnOptions,\n addConfirmBtnOptions,\n addCancelBtnOptions,\n addInputOptions,\n\n models: {\n modelValue,\n visible,\n searchData,\n data,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n }\n }\n })\n\n let fillOptionsWatchStop: WatchHandle | undefined // 处理 fillOptions 合并逻辑\n\n const handleSelectChange = useDoubleClick<[(string | number)[], SelectOptions<D>]>({\n onSingleClick: (rowKeys, options) => {\n latestSelectedRows = options.selectedRowData\n },\n onDoubleClick: (rowKeys, options) => {\n latestSelectedRows = options.selectedRowData\n handleConfirm()\n }\n })\n\n function handleConfirm(done?: QdDialogDone) {\n if (!done) done = (closed: boolean) => (visible.value = !closed)\n\n selectedRows.value = latestSelectedRows\n const { selectOptions } = reProps.value\n const valueKey = selectOptions.keys?.value || qdServiceSelectKeys.value\n const labelKey = selectOptions.keys?.label || qdServiceSelectKeys.label\n if (selectOptions.valueType === 'value') {\n modelValue.value = selectOptions.multiple\n ? latestSelectedRows.map((item) => get(item, valueKey))\n : get(latestSelectedRows[0], valueKey)\n } else {\n const rows = latestSelectedRows.map((item) => ({\n [valueKey]: get(item, valueKey),\n [labelKey]: get(item, labelKey)\n }))\n modelValue.value = selectOptions.multiple ? rows : rows[0]\n }\n\n const eventParams = [\n modelValue.value,\n {\n option: latestSelectedRows[latestSelectedRows.length - 1],\n selectedOptions: latestSelectedRows,\n trigger: 'check'\n }\n ] as const\n reProps.value.onChange?.(...eventParams)\n\n const onConfirm = reProps.value.onConfirm\n if (!onConfirm) {\n visible.value = false\n return\n }\n\n return onConfirm(...eventParams, done)\n }\n\n function openDialog() {\n const { selectOptions } = reProps.value\n if (selectOptions.readonly || selectOptions.disabled) return\n\n visible.value = true\n }\n\n function handleClear(context: { e: MouseEvent }) {\n selectedRowKeys.value = []\n\n reProps.value.onChange?.(undefined as unknown as SelectValue, {\n e: context.e,\n option: null as unknown as D,\n selectedOptions: [],\n trigger: 'clear'\n })\n reProps.value.onClear?.(context)\n }\n\n function confirmAddCustom(e: MouseEvent) {\n reProps.value.onCreate?.(addCustom.value, (closed: boolean) => {\n visible.value = !closed\n })\n reProps.value.onChange?.(addCustom.value, {\n e,\n option: null as unknown as D,\n selectedOptions: [],\n trigger: 'check'\n })\n }\n\n function cancelAddCustom() {\n Object.assign(addCustom, {\n visible: false,\n value: ''\n })\n }\n\n function handleBeforeOpen() {\n fillOptionsWatchStop?.()\n\n const { selectOptions } = reProps.value\n const valueKey = selectOptions.keys?.value || qdServiceSelectKeys.value\n if (identifyType(modelValue.value) === 'array') {\n selectedRowKeys.value = modelValue.value.map((item: (typeof modelValue.value)[number]) => {\n if (identifyType(item) === 'object') {\n return get(item, valueKey)\n }\n\n return item\n })\n } else if (identifyType(modelValue.value) === 'object') {\n selectedRowKeys.value = [get(modelValue.value, valueKey)]\n } else {\n selectedRowKeys.value = isEmpty(modelValue.value) ? [] : [modelValue.value]\n }\n }\n\n function handleClosed() {\n if (addCustom.visible) cancelAddCustom()\n\n if (reProps.value.dialogOptions.destroyOnClose) {\n data.value = []\n searchData.value = {}\n selectedRowKeys.value = []\n }\n }\n\n const expose = {} as QdDialogTableSelectInstanceFunctions\n\n fillOptionsWatchStop = watch(\n () => reProps.value.fillOptions,\n (fillOpts) => {\n if (!fillOpts?.length) return\n\n selectedRows.value = fillOpts as D[]\n },\n { immediate: true, deep: true }\n )\n\n onMounted(() => {\n Object.assign(expose, dialogRef.value)\n })\n</script>\n\n<style lang=\"less\" scoped>\n .qd-dialog-table-select {\n width: 100%;\n\n &__trigger {\n width: 100%;\n\n &:not(&--readonly):not(&--disabled) {\n cursor: pointer;\n }\n }\n\n &__table {\n :deep(.qd-crud) {\n &-search > .t-card__body,\n &-table__body > .t-card__body {\n padding: 0 !important;\n }\n\n &-table__toolbar {\n display: none;\n }\n }\n\n :deep(.qd-service-table) {\n margin-top: 0;\n }\n\n &-add {\n margin-top: var(--td-comp-margin-m);\n display: flex;\n\n .t-input__wrap {\n flex: 1 1 0;\n overflow: hidden;\n margin-right: var(--td-comp-margin-m);\n }\n }\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","modelValue","visible","searchData","data","columnControllerVisible","displayColumns","expandedRowKeys","filterValue","sort","expandedTreeNodes","useVModels","passive","t","useConfig","tdReadonly","useReadonly","tdDisabled","useDisabled","dialogRef","useTemplateRef","selectedRowKeys","ref","selectedRows","latestSelectedRows","addCustom","reactive","value","addConfirmDisabled","computed","isEmpty","reProps","fillOptions","wrapper","readonly","multiple","disabled","keys","valueType","clearable","creatable","placeholder","size","onClear","onCreate","onChange","onConfirm","search","tableSize","addBtn","addConfirmBtn","addCancelBtn","addInput","tableOptions","addBtnOptions","merge","block","theme","variant","icon","_createVNode2","AddIcon","content","onClick","addConfirmBtnOptions","confirmAddCustom","addCancelBtnOptions","cancelAddCustom","addInputOptions","dialogOptions","header","selectOptions","grid","qdDialogTableSelectSearchGrid","selectType","rowKey","qdServiceSelectKeys","models","fillOptionsWatchStop","handleSelectChange","useDoubleClick","onSingleClick","rowKeys","options","selectedRowData","onDoubleClick","handleConfirm","done","closed","valueKey","labelKey","label","map","item","get","rows","eventParams","option","length","selectedOptions","trigger","openDialog","handleClear","context","undefined","e","Object","assign","handleBeforeOpen","identifyType","handleClosed","destroyOnClose","expose","watch","fillOpts","immediate","deep","onMounted","_createElementVNode","_mergeProps","class","$attrs","_renderSlot","_ctx","$slots","_createVNode","_unref","$event","suffixIcon","SearchIcon","onBeforeOpen","onClosed","onSelectChange","_createSlots","_","_openBlock","_createElementBlock","_hoisted_1","_cache","TSpace","TButton","_normalizeProps","_guardReactiveProps","extractSlotsWithPrefix","name","filterName","fn","_withCtx","slotProps","originalName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/service-dialog-table-select/index.vue"],"sourcesContent":["<template>\n <div class=\"qd-dialog-table-select\" v-bind=\"$attrs\" @click=\"openDialog\">\n <slot :selected-rows=\"selectedRows\">\n <t-select\n :class=\"[\n 'qd-dialog-table-select__trigger',\n reProps.selectOptions.readonly ? 'qd-dialog-table-select__trigger--readonly' : '',\n reProps.selectOptions.disabled ? 'qd-dialog-table-select__trigger--disabled' : ''\n ]\"\n v-model=\"modelValue\"\n :options=\"selectedRows\"\n :popup-visible=\"false\"\n v-bind=\"reProps.selectOptions\"\n @clear=\"handleClear\"\n >\n <template #suffixIcon>\n <search-icon />\n </template>\n </t-select>\n </slot>\n </div>\n\n <qd-dialog\n ref=\"dialog\"\n v-model:visible=\"visible\"\n :confirm-loading=\"confirmLoad\"\n v-bind=\"reProps.dialogOptions\"\n @confirm=\"handleConfirm\"\n @before-open=\"handleBeforeOpen\"\n @closed=\"handleClosed\"\n >\n <qd-crud-table\n class=\"qd-dialog-table-select__table\"\n v-model:search-data=\"searchData\"\n v-model:data=\"data\"\n v-model:selected-row-keys=\"selectedRowKeys\"\n v-model:active-row-keys=\"selectedRowKeys\"\n v-model:column-controller-visible=\"columnControllerVisible\"\n v-model:display-columns=\"displayColumns\"\n v-model:expanded-rowKeys=\"expandedRowKeys\"\n v-model:filter-value=\"filterValue\"\n v-model:sort=\"sort\"\n v-model:expanded-tree-nodes=\"expandedTreeNodes\"\n reserve-selected-row-on-paginate\n active-row-type=\"multiple\"\n v-bind=\"reProps.tableOptions\"\n @select-change=\"handleSelectChange\"\n >\n <template v-if=\"reProps.creatable\" #table-bottom-content>\n <div v-if=\"addCustom.visible\" class=\"qd-dialog-table-select__table-add\">\n <slot name=\"add-input\" :add-custom=\"addCustom\">\n <t-input v-model=\"addCustom.value\" v-bind=\"reProps.addInputOptions\" />\n </slot>\n\n <t-space size=\"small\">\n <slot name=\"add-confirm-btn\" :add-custom=\"addCustom\">\n <t-button v-bind=\"reProps.addConfirmBtnOptions\" />\n </slot>\n\n <slot name=\"add-cancel-btn\" :add-custom=\"addCustom\">\n <t-button v-bind=\"reProps.addCancelBtnOptions\" />\n </slot>\n </t-space>\n </div>\n\n <slot v-else name=\"add-btn\" :add-custom=\"addCustom\">\n <t-button class=\"qd-dialog-table-select__table-add\" v-bind=\"reProps.addBtnOptions\" />\n </slot>\n </template>\n\n <template\n v-for=\"item in extractSlotsWithPrefix($slots, 'search')\"\n #[item.filterName]=\"slotProps\"\n >\n <slot :name=\"item.originalName\" v-bind=\"slotProps\" />\n </template>\n\n <template\n v-for=\"item in extractSlotsWithPrefix($slots, 'table')\"\n #[item.filterName]=\"slotProps\"\n >\n <slot :name=\"item.originalName\" v-bind=\"slotProps\" />\n </template>\n </qd-crud-table>\n </qd-dialog>\n</template>\n\n<script\n setup\n lang=\"tsx\"\n generic=\"\n D extends TableRowData = TableRowData,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination\n \"\n>\n import type {\n SelectOptions,\n SelectValue,\n TableRowData,\n TdButtonProps,\n TdInputProps\n } from 'tdesign-vue-next'\n import type { ServicePageParams, ServicePagination } from 'qidian-shared'\n import type {\n QdDialogTableSelectInstanceFunctions,\n QdServiceDialogTableSelectProps\n } from './types'\n import type { QdDialogDone, QdDialogInstanceFunctions } from '../dialog'\n import type { QdCrudTableProps } from '../crud'\n import {\n extractSlotsWithPrefix,\n identifyType,\n isEmpty,\n suspectedWrapperPromise,\n useDoubleClick\n } from 'qidian-shared'\n import {\n Select as TSelect,\n Button as TButton,\n Input as TInput,\n Space as TSpace\n } from 'tdesign-vue-next'\n import type { WatchHandle } from 'vue'\n import { AddIcon, SearchIcon } from 'tdesign-icons-vue-next'\n import { qdDialogTableSelectSearchGrid, qdServiceDialogTableSelectProps } from './props'\n import { computed, onMounted, reactive, ref, useTemplateRef, watch } from 'vue'\n import { useVModels } from '@vueuse/core'\n import { QdDialog } from '../dialog'\n import { QdCrudTable } from '../crud'\n import { qdServiceSelectKeys } from '../service-select/props'\n import { useDisabled, useReadonly } from '../../hooks'\n import { get, merge } from 'lodash-es'\n import { useConfig } from '../config-provider/useConfig'\n\n defineOptions({\n name: 'QdServiceDialogTableSelect'\n })\n\n type Props = QdServiceDialogTableSelectProps<D, R, P, TP, Pag>\n\n const props = withDefaults(defineProps<Props>(), qdServiceDialogTableSelectProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']]\n 'update:visible': [Props['visible']]\n\n 'update:searchData': [Props['searchData']]\n 'update:data': [Props['data']]\n 'update:columnControllerVisible': [Props['columnControllerVisible']]\n 'update:displayColumns': [Props['displayColumns']]\n 'update:expandedRowKeys': [Props['expandedRowKeys']]\n 'update:filterValue': [Props['filterValue']]\n 'update:sort': [Props['sort']]\n 'update:expandedTreeNodes': [Props['expandedTreeNodes']]\n }>()\n const {\n modelValue,\n visible,\n searchData,\n data,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const { t } = useConfig('dialogTableSelect')\n const tdReadonly = useReadonly()\n const tdDisabled = useDisabled()\n const dialogRef = useTemplateRef<QdDialogInstanceFunctions>('dialog')\n\n const confirmLoad = ref(false)\n const selectedRowKeys = ref<(string | number)[]>([])\n const selectedRows = ref<D[]>([])\n let latestSelectedRows: D[] = []\n\n const addCustom = reactive({\n visible: false,\n value: ''\n })\n const addConfirmDisabled = computed(() => isEmpty(addCustom.value))\n\n const reProps = computed(() => {\n const {\n modelValue,\n visible,\n fillOptions,\n searchData,\n data,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes,\n wrapper,\n readonly,\n\n multiple,\n disabled,\n keys,\n valueType,\n clearable,\n creatable,\n placeholder,\n size,\n\n onClear,\n onCreate,\n onChange,\n onConfirm,\n\n search,\n tableSize,\n\n addBtn,\n addConfirmBtn,\n addCancelBtn,\n addInput,\n\n ...tableOptions\n } = props\n\n const addBtnOptions: TdButtonProps = merge(\n {},\n {\n block: true,\n theme: 'primary',\n variant: 'dashed',\n icon: () => <AddIcon />,\n content: t('addText'),\n onClick: () => {\n addCustom.visible = true\n }\n },\n typeof addBtn === 'string' ? { content: addBtn } : addBtn\n )\n\n const addConfirmBtnOptions: TdButtonProps = merge(\n {},\n {\n content: t('addConfirmText'),\n onClick: confirmAddCustom\n },\n typeof addConfirmBtn === 'string'\n ? { content: addConfirmBtn, disabled: addConfirmDisabled.value }\n : { ...addConfirmBtn, disabled: addConfirmDisabled.value || addConfirmBtn?.disabled }\n )\n\n const addCancelBtnOptions: TdButtonProps = merge(\n {},\n {\n variant: 'outline',\n content: t('addCancelText'),\n onClick: cancelAddCustom\n },\n typeof addCancelBtn === 'string' ? { content: addCancelBtn } : addCancelBtn\n )\n\n const addInputOptions: TdInputProps = merge(\n {},\n { clearable: true },\n typeof addInput === 'string' ? { placeholder: addInput } : addInput\n )\n\n const dialogOptions = merge({}, { header: placeholder }, wrapper)\n\n return {\n creatable,\n fillOptions,\n selectOptions: {\n multiple,\n readonly: readonly ?? tdReadonly.value,\n disabled: disabled ?? tdDisabled.value,\n keys,\n valueType,\n clearable,\n placeholder,\n size\n },\n dialogOptions,\n tableOptions: {\n ...tableOptions,\n size: tableSize,\n search: {\n ...search,\n grid: merge({}, qdDialogTableSelectSearchGrid, search?.grid)\n },\n selectType: (multiple ? 'multiple' : 'single') as QdCrudTableProps['selectType'],\n rowKey: keys?.value || qdServiceSelectKeys.value\n },\n\n onClear,\n onCreate,\n onChange,\n onConfirm,\n\n addBtnOptions,\n addConfirmBtnOptions,\n addCancelBtnOptions,\n addInputOptions,\n\n models: {\n modelValue,\n visible,\n searchData,\n data,\n columnControllerVisible,\n displayColumns,\n expandedRowKeys,\n filterValue,\n sort,\n expandedTreeNodes\n }\n }\n })\n\n let fillOptionsWatchStop: WatchHandle | undefined // 处理 fillOptions 合并逻辑\n\n const handleSelectChange = useDoubleClick<[(string | number)[], SelectOptions<D>]>({\n onSingleClick: (rowKeys, options) => {\n latestSelectedRows = options.selectedRowData\n },\n onDoubleClick: (rowKeys, options) => {\n latestSelectedRows = options.selectedRowData\n handleConfirm()\n }\n })\n\n async function handleConfirm(done?: QdDialogDone) {\n selectedRows.value = latestSelectedRows\n const { selectOptions } = reProps.value\n const valueKey = selectOptions.keys?.value || qdServiceSelectKeys.value\n const labelKey = selectOptions.keys?.label || qdServiceSelectKeys.label\n if (selectOptions.valueType === 'value') {\n modelValue.value = selectOptions.multiple\n ? latestSelectedRows.map((item) => get(item, valueKey))\n : get(latestSelectedRows[0], valueKey)\n } else {\n const rows = latestSelectedRows.map((item) => ({\n [valueKey]: get(item, valueKey),\n [labelKey]: get(item, labelKey)\n }))\n modelValue.value = selectOptions.multiple ? rows : rows[0]\n }\n\n const eventParams = [\n modelValue.value,\n {\n option: latestSelectedRows[latestSelectedRows.length - 1],\n selectedOptions: latestSelectedRows,\n trigger: 'check'\n }\n ] as const\n reProps.value.onChange?.(...eventParams)\n\n const onConfirm = reProps.value.onConfirm\n if (!onConfirm) return\n\n if (!done) {\n confirmLoad.value = true\n const [err, res] = await suspectedWrapperPromise(\n onConfirm(...eventParams, (closed) => {\n visible.value = !closed\n })\n )\n confirmLoad.value = false\n if (err || res === false) return\n\n visible.value = false\n return\n }\n\n return onConfirm(...eventParams, done)\n }\n\n function openDialog() {\n const { selectOptions } = reProps.value\n if (selectOptions.readonly || selectOptions.disabled) return\n\n visible.value = true\n }\n\n function handleClear(context: { e: MouseEvent }) {\n selectedRowKeys.value = []\n\n reProps.value.onChange?.(undefined as unknown as SelectValue, {\n e: context.e,\n option: null as unknown as D,\n selectedOptions: [],\n trigger: 'clear'\n })\n reProps.value.onClear?.(context)\n }\n\n function confirmAddCustom(e: MouseEvent) {\n reProps.value.onCreate?.(addCustom.value, (closed: boolean) => {\n visible.value = !closed\n })\n reProps.value.onChange?.(addCustom.value, {\n e,\n option: null as unknown as D,\n selectedOptions: [],\n trigger: 'check'\n })\n }\n\n function cancelAddCustom() {\n Object.assign(addCustom, {\n visible: false,\n value: ''\n })\n }\n\n function handleBeforeOpen() {\n fillOptionsWatchStop?.()\n\n const { selectOptions } = reProps.value\n const valueKey = selectOptions.keys?.value || qdServiceSelectKeys.value\n if (identifyType(modelValue.value) === 'array') {\n selectedRowKeys.value = modelValue.value.map((item: (typeof modelValue.value)[number]) => {\n if (identifyType(item) === 'object') {\n return get(item, valueKey)\n }\n\n return item\n })\n } else if (identifyType(modelValue.value) === 'object') {\n selectedRowKeys.value = [get(modelValue.value, valueKey)]\n } else {\n selectedRowKeys.value = isEmpty(modelValue.value) ? [] : [modelValue.value]\n }\n }\n\n function handleClosed() {\n if (addCustom.visible) cancelAddCustom()\n\n if (reProps.value.dialogOptions.destroyOnClose) {\n data.value = []\n searchData.value = {}\n selectedRowKeys.value = []\n }\n }\n\n const expose = {} as QdDialogTableSelectInstanceFunctions\n\n fillOptionsWatchStop = watch(\n () => reProps.value.fillOptions,\n (fillOpts) => {\n if (!fillOpts?.length) return\n\n selectedRows.value = fillOpts as D[]\n },\n { immediate: true, deep: true }\n )\n\n onMounted(() => {\n Object.assign(expose, dialogRef.value)\n })\n</script>\n\n<style lang=\"less\" scoped>\n .qd-dialog-table-select {\n width: 100%;\n\n &__trigger {\n width: 100%;\n\n &:not(&--readonly):not(&--disabled) {\n cursor: pointer;\n }\n }\n\n &__table {\n :deep(.qd-crud) {\n &-search > .t-card__body,\n &-table__body > .t-card__body {\n padding: 0 !important;\n }\n\n &-table__toolbar {\n display: none;\n }\n }\n\n :deep(.qd-service-table) {\n margin-top: 0;\n }\n\n &-add {\n margin-top: var(--td-comp-margin-m);\n display: flex;\n\n .t-input__wrap {\n flex: 1 1 0;\n overflow: hidden;\n margin-right: var(--td-comp-margin-m);\n }\n }\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","modelValue","visible","searchData","data","columnControllerVisible","displayColumns","expandedRowKeys","filterValue","sort","expandedTreeNodes","useVModels","passive","t","useConfig","tdReadonly","useReadonly","tdDisabled","useDisabled","dialogRef","useTemplateRef","confirmLoad","ref","selectedRowKeys","selectedRows","latestSelectedRows","addCustom","reactive","value","addConfirmDisabled","computed","isEmpty","reProps","fillOptions","wrapper","readonly","multiple","disabled","keys","valueType","clearable","creatable","placeholder","size","onClear","onCreate","onChange","onConfirm","search","tableSize","addBtn","addConfirmBtn","addCancelBtn","addInput","tableOptions","addBtnOptions","merge","block","theme","variant","icon","_createVNode2","AddIcon","content","onClick","addConfirmBtnOptions","confirmAddCustom","addCancelBtnOptions","cancelAddCustom","addInputOptions","dialogOptions","header","selectOptions","grid","qdDialogTableSelectSearchGrid","selectType","rowKey","qdServiceSelectKeys","models","fillOptionsWatchStop","handleSelectChange","useDoubleClick","onSingleClick","rowKeys","options","selectedRowData","onDoubleClick","handleConfirm","done","valueKey","labelKey","label","map","item","get","rows","eventParams","option","length","selectedOptions","trigger","err","res","suspectedWrapperPromise","closed","openDialog","handleClear","context","undefined","e","Object","assign","handleBeforeOpen","identifyType","handleClosed","destroyOnClose","expose","watch","fillOpts","immediate","deep","onMounted","_createElementVNode","_mergeProps","class","$attrs","_renderSlot","_ctx","$slots","_createVNode","_unref","$event","suffixIcon","SearchIcon","onBeforeOpen","onClosed","onSelectChange","_createSlots","_","_openBlock","_createElementBlock","_hoisted_1","_cache","TSpace","TButton","_normalizeProps","_guardReactiveProps","extractSlotsWithPrefix","name","filterName","fn","_withCtx","slotProps","originalName"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import './index.css'
|
|
|
2
2
|
import _sfc_main from "./index.vue2.mjs";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
5
|
-
const QdServiceSelect = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
5
|
+
const QdServiceSelect = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-77db0747"]]);
|
|
6
6
|
export {
|
|
7
7
|
QdServiceSelect as default
|
|
8
8
|
};
|
|
@@ -2,7 +2,7 @@ import './index.css'
|
|
|
2
2
|
import { defineComponent, mergeDefaults, computed, ref, watch, onMounted, onActivated, onDeactivated, createBlock, openBlock, unref, mergeProps, isRef, createSlots, withCtx, renderSlot, createCommentVNode, renderList, normalizeProps, guardReactiveProps } from "vue";
|
|
3
3
|
import { Select, Loading } from "tdesign-vue-next";
|
|
4
4
|
import { useVModels } from "../../node_modules/.pnpm/@vueuse_core@14.0.0_vue@3.5.26_typescript@5.9.3_/node_modules/@vueuse/core/dist/index.mjs";
|
|
5
|
-
import { isEmpty, useServiceLoadMore, toArr, extractSlotsWithoutPrefix } from "qidian-shared";
|
|
5
|
+
import { isEmpty, useServiceLoadMore, toArr, extractSlotsWithoutPrefix, checkSameObject } from "qidian-shared";
|
|
6
6
|
import { qdServiceSelectKeys, qdServiceSelectProps } from "./props.mjs";
|
|
7
7
|
import { useConfig } from "../config-provider/useConfig.mjs";
|
|
8
8
|
import { qdDictConvStrSeparator } from "../dict/tag/props.mjs";
|
|
@@ -195,7 +195,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
195
195
|
const reOnPopupVisibleChange = (visible, context) => {
|
|
196
196
|
onPopupVisibleChange?.(visible, context);
|
|
197
197
|
if (loading.value) return;
|
|
198
|
-
|
|
198
|
+
const { fillOptions: fillOptions2 } = reProps.value;
|
|
199
|
+
if (visible && (!options.value?.length || triggerServiceMerged && checkSameObject(options.value, fillOptions2))) {
|
|
199
200
|
search.value = "";
|
|
200
201
|
refresh();
|
|
201
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/service-select/index.vue"],"sourcesContent":["<template>\n <t-select\n class=\"qd-service-select\"\n v-model=\"reModelValue\"\n v-model:input=\"inputValue\"\n v-model:popup-visible=\"popupVisible\"\n :autofocus=\"autofocus\"\n :loading=\"selectLoad\"\n v-bind=\"{\n ...reProps.selectOptions,\n ...($slots.default ? {} : { options })\n }\"\n >\n <template #panel-bottom-content>\n <t-loading\n v-if=\"loading && !firstLoad\"\n class=\"qd-service-select__load\"\n size=\"small\"\n :text=\"t('text')\"\n />\n\n <slot v-else-if=\"$slots['panel-bottom-content']\" name=\"panel-bottom-content\" />\n </template>\n\n <template #default>\n <slot :options=\"options as D[]\" />\n </template>\n\n <template\n v-for=\"(_, name) in extractSlotsWithoutPrefix($slots, 'panel-bottom')\"\n #[name]=\"slotProps\"\n >\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-select>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n D extends SelectOption = SelectOption,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination,\n SK extends string | string[] = string | string[]\n \"\n>\n import type { SelectOption, TdSelectProps } from 'tdesign-vue-next'\n import type { ServiceMaybePageParams, ServicePageParams, ServicePagination } from 'qidian-shared'\n import type { QdServiceSelectInstanceFunctions, QdServiceSelectProps } from './types'\n import type { WatchHandle } from 'vue'\n import { computed, onActivated, onDeactivated, onMounted, ref, watch } from 'vue'\n import { Select as TSelect, Loading as TLoading } from 'tdesign-vue-next'\n import { useVModels } from '@vueuse/core'\n import { useServiceLoadMore, toArr, extractSlotsWithoutPrefix, isEmpty } from 'qidian-shared'\n import { qdServiceSelectKeys, qdServiceSelectProps } from './props'\n import { useConfig } from '../config-provider/useConfig'\n import { qdDictConvStrSeparator } from '../dict/tag/props'\n\n defineOptions({\n name: 'QdServiceSelect'\n })\n\n type Props = QdServiceSelectProps<D, R, P, TP, Pag, SK>\n\n const props = withDefaults(defineProps<Props>(), qdServiceSelectProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']]\n 'update:valueLabel': [Props['valueLabel']]\n 'update:inputValue': [Props['inputValue']]\n 'update:popupVisible': [Props['popupVisible']]\n 'update:options': [Props['options']]\n }>()\n const { modelValue, valueLabel, inputValue, popupVisible, options } = useVModels(props, emit, {\n passive: true\n })\n\n const reModelValue = computed({\n get: () => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') return modelValue.value\n\n if (isEmpty(modelValue.value)) return []\n if (typeof modelValue.value === 'string') {\n return modelValue.value.split(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n }\n return modelValue.value\n },\n set: (val) => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') {\n modelValue.value = val\n return\n }\n\n if (convStr && Array.isArray(val)) {\n modelValue.value = val.join(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n } else {\n modelValue.value = val\n }\n }\n })\n\n const reValueLabel = computed({\n get: () => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') return valueLabel.value\n\n if (isEmpty(valueLabel.value)) return []\n if (typeof valueLabel.value === 'string') {\n return valueLabel.value.split(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n }\n return valueLabel.value\n },\n set: (val) => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') {\n valueLabel.value = val\n return\n }\n\n if (convStr && Array.isArray(val)) {\n valueLabel.value = val.join(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n } else {\n valueLabel.value = val\n }\n }\n })\n\n const { t } = useConfig('loading')\n\n const search = ref('')\n const autofocus = ref(false)\n\n const reProps = computed(() => {\n const {\n service,\n manual,\n transformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError,\n\n convStr,\n searchKey,\n loading: externalLoad,\n defaultSelectFirst,\n fillOptions,\n\n modelValue,\n inputValue,\n popupVisible: inPopupVisible,\n options: inOptions,\n valueLabel,\n\n popupProps,\n filterable,\n filter,\n autofocus,\n onSearch,\n onPopupVisibleChange,\n onFocus,\n onChange,\n ...selectOptions\n } = props\n\n const rePopupProps = popupProps || {}\n rePopupProps.onScrollToBottom = (context: { e: WheelEvent }) => {\n popupProps?.onScrollToBottom?.(context)\n if (loading.value || noMore.value) return\n loadMore()\n }\n\n const reOnSearch: typeof onSearch = (\n filterWords: string,\n context: {\n e: KeyboardEvent\n }\n ) => {\n onSearch?.(filterWords, context)\n search.value = filterWords.trim()\n refresh()\n }\n\n const reOnPopupVisibleChange: typeof onPopupVisibleChange = (visible, context) => {\n onPopupVisibleChange?.(visible, context)\n\n if (loading.value) return\n if (visible && !options.value?.length) {\n search.value = ''\n refresh()\n }\n }\n\n const reOnFocus: typeof onFocus = (context) => {\n onFocus?.(context)\n\n if (autofocus && !popupVisible.value) {\n popupVisible.value = true\n }\n }\n\n const reOnChange = (value: any, context: any) => {\n onChange?.(value, context)\n\n // 更新 valueLabel\n const { selectOptions } = reProps.value\n const { multiple, keys } = selectOptions\n const labelKey = keys?.label || qdServiceSelectKeys.label\n\n if (multiple) {\n const selectedLabels =\n context.selectedOptions\n ?.map((option: D) => option[labelKey as keyof D] as string)\n .filter(Boolean) || []\n reValueLabel.value = selectedLabels\n } else {\n reValueLabel.value = (context.option?.[labelKey as keyof D] as string) || ''\n }\n }\n\n const reSearchKey = toArr(searchKey)\n const mergedTransformParams = (params: ServiceMaybePageParams<Pag>) => {\n const searchData: Record<string, string> = {}\n reSearchKey.forEach((key) => {\n searchData[key] = search.value\n })\n\n const merged = !params && !reSearchKey.length ? params : { ...params, ...searchData }\n if (transformParams)\n return transformParams(merged as unknown as Parameters<typeof transformParams>[0])\n return merged as TP\n }\n\n const reFilterable = filterable ?? !!reSearchKey.length\n const reFilter = reFilterable ? handleFilter : filter\n\n return {\n autofocus,\n externalLoad,\n defaultSelectFirst,\n fillOptions,\n convStr,\n selectOptions: {\n ...selectOptions,\n filterable: reFilterable,\n filter: reFilter,\n popupProps: rePopupProps,\n onSearch: reOnSearch,\n onPopupVisibleChange: reOnPopupVisibleChange,\n onFocus: reOnFocus,\n onChange: reOnChange\n } as unknown as TdSelectProps<SelectOption>,\n serviceOptions: {\n service,\n manual,\n transformParams: mergedTransformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError\n },\n models: {\n modelValue,\n valueLabel,\n inputValue,\n popupVisible: inPopupVisible,\n options: inOptions\n }\n }\n })\n\n let hasAutoSelected = false // 记录是否已经自动选择过\n let fillOptionsWatchStop: WatchHandle | undefined // 处理 fillOptions 合并逻辑\n let triggerServiceMerged = false // 记录是否已经触发过请求后合并\n\n const {\n data,\n firstLoad,\n manualTriggerLoad,\n loading,\n loadingMore,\n noMore,\n error,\n refresh,\n refreshAsync,\n cancel,\n loadMore,\n loadMoreAsync,\n mutate\n } = useServiceLoadMore({\n ...reProps.value.serviceOptions,\n onBefore: () => {\n // 请求开始时销毁 fillOptions 的 watch\n fillOptionsWatchStop?.()\n reProps.value.serviceOptions.onBefore?.()\n },\n onSuccess: (res) => {\n reProps.value.serviceOptions.onSuccess?.(res)\n\n const list = (data.value?.list || []) as D[]\n if (!triggerServiceMerged && reProps.value.fillOptions?.length) {\n const map = new Map<typeof reModelValue.value, D>()\n ;[...reProps.value.fillOptions, ...list].forEach((item) => {\n const k =\n item[\n (reProps.value.selectOptions.keys?.value ||\n qdServiceSelectKeys.value) as keyof typeof item\n ]\n map.set(k, item as D)\n })\n options.value = Array.from(map.values())\n } else {\n options.value = list\n }\n triggerServiceMerged = true\n\n // 当 defaultSelectFirst 为 true 且 modelValue 为空且未自动选择过时,默认选中第一个\n if (\n !hasAutoSelected &&\n reProps.value.defaultSelectFirst &&\n isEmpty(reModelValue.value) &&\n res.list.length\n ) {\n const firstOption = res.list[0]\n reModelValue.value =\n firstOption[\n (reProps.value.selectOptions.keys?.value ||\n qdServiceSelectKeys.value) as keyof typeof firstOption\n ]\n hasAutoSelected = true\n }\n }\n })\n\n const selectLoad = computed(() => reProps.value.externalLoad || firstLoad.value)\n\n function handleFilter(filterWords: string, option: SelectOption) {\n if (!filterWords) return true\n\n if ('value' in option) {\n if (reProps.value.selectOptions.multiple) {\n if (reModelValue.value.includes(option.value)) return true\n } else if (reModelValue.value === option.value) {\n return true\n }\n }\n\n if (!option.label) return false\n\n const value = filterWords.trim().toLowerCase()\n return option.label.toLowerCase().includes(value)\n }\n\n const expose = {\n firstLoad,\n manualTriggerLoad,\n loading,\n loadingMore,\n noMore,\n error,\n refresh,\n refreshAsync,\n cancel,\n loadMore,\n loadMoreAsync,\n mutate\n } as QdServiceSelectInstanceFunctions<D, R, P, TP, Pag>\n\n // manual 为 true 时,watch fillOptions 对 options.value 进行赋值\n if (reProps.value.serviceOptions.manual) {\n fillOptionsWatchStop = watch(\n () => reProps.value.fillOptions,\n (fillOpts) => {\n if (!fillOpts?.length) return\n\n options.value = fillOpts\n triggerServiceMerged = true\n },\n { immediate: true, deep: true }\n )\n }\n\n onMounted(() => {\n autofocus.value = reProps.value.autofocus\n })\n\n onActivated(() => {\n autofocus.value = reProps.value.autofocus\n })\n\n onDeactivated(() => {\n autofocus.value = false\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-service-select {\n &__load {\n width: 100%;\n border-top: 1px solid var(--td-component-stroke);\n padding: 6px;\n color: var(--td-text-color-disabled);\n }\n }\n</style>\n"],"names":["modelValue","inputValue","valueLabel","autofocus","selectOptions","_openBlock","_createBlock","_unref","_mergeProps","$slots","TLoading","_renderSlot","_renderList","_withCtx","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/service-select/index.vue"],"sourcesContent":["<template>\n <t-select\n class=\"qd-service-select\"\n v-model=\"reModelValue\"\n v-model:input=\"inputValue\"\n v-model:popup-visible=\"popupVisible\"\n :autofocus=\"autofocus\"\n :loading=\"selectLoad\"\n v-bind=\"{\n ...reProps.selectOptions,\n ...($slots.default ? {} : { options })\n }\"\n >\n <template #panel-bottom-content>\n <t-loading\n v-if=\"loading && !firstLoad\"\n class=\"qd-service-select__load\"\n size=\"small\"\n :text=\"t('text')\"\n />\n\n <slot v-else-if=\"$slots['panel-bottom-content']\" name=\"panel-bottom-content\" />\n </template>\n\n <template #default>\n <slot :options=\"options as D[]\" />\n </template>\n\n <template\n v-for=\"(_, name) in extractSlotsWithoutPrefix($slots, 'panel-bottom')\"\n #[name]=\"slotProps\"\n >\n <slot :name=\"name\" v-bind=\"slotProps\" />\n </template>\n </t-select>\n</template>\n\n<script\n setup\n lang=\"ts\"\n generic=\"\n D extends SelectOption = SelectOption,\n R = unknown,\n P = ServicePageParams,\n TP = P,\n Pag extends ServicePagination = ServicePagination,\n SK extends string | string[] = string | string[]\n \"\n>\n import type { SelectOption, TdSelectProps } from 'tdesign-vue-next'\n import type { ServiceMaybePageParams, ServicePageParams, ServicePagination } from 'qidian-shared'\n import type { QdServiceSelectInstanceFunctions, QdServiceSelectProps } from './types'\n import type { WatchHandle } from 'vue'\n import { computed, onActivated, onDeactivated, onMounted, ref, watch } from 'vue'\n import { Select as TSelect, Loading as TLoading } from 'tdesign-vue-next'\n import { useVModels } from '@vueuse/core'\n import {\n useServiceLoadMore,\n toArr,\n extractSlotsWithoutPrefix,\n isEmpty,\n checkSameObject\n } from 'qidian-shared'\n import { qdServiceSelectKeys, qdServiceSelectProps } from './props'\n import { useConfig } from '../config-provider/useConfig'\n import { qdDictConvStrSeparator } from '../dict/tag/props'\n\n defineOptions({\n name: 'QdServiceSelect'\n })\n\n type Props = QdServiceSelectProps<D, R, P, TP, Pag, SK>\n\n const props = withDefaults(defineProps<Props>(), qdServiceSelectProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['modelValue']]\n 'update:valueLabel': [Props['valueLabel']]\n 'update:inputValue': [Props['inputValue']]\n 'update:popupVisible': [Props['popupVisible']]\n 'update:options': [Props['options']]\n }>()\n const { modelValue, valueLabel, inputValue, popupVisible, options } = useVModels(props, emit, {\n passive: true\n })\n\n const reModelValue = computed({\n get: () => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') return modelValue.value\n\n if (isEmpty(modelValue.value)) return []\n if (typeof modelValue.value === 'string') {\n return modelValue.value.split(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n }\n return modelValue.value\n },\n set: (val) => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') {\n modelValue.value = val\n return\n }\n\n if (convStr && Array.isArray(val)) {\n modelValue.value = val.join(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n } else {\n modelValue.value = val\n }\n }\n })\n\n const reValueLabel = computed({\n get: () => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') return valueLabel.value\n\n if (isEmpty(valueLabel.value)) return []\n if (typeof valueLabel.value === 'string') {\n return valueLabel.value.split(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n }\n return valueLabel.value\n },\n set: (val) => {\n const { convStr, selectOptions } = reProps.value\n const { multiple, valueType } = selectOptions\n if (!multiple || valueType === 'object') {\n valueLabel.value = val\n return\n }\n\n if (convStr && Array.isArray(val)) {\n valueLabel.value = val.join(\n (typeof convStr === 'string' ? convStr : '') || qdDictConvStrSeparator\n )\n } else {\n valueLabel.value = val\n }\n }\n })\n\n const { t } = useConfig('loading')\n\n const search = ref('')\n const autofocus = ref(false)\n\n const reProps = computed(() => {\n const {\n service,\n manual,\n transformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError,\n\n convStr,\n searchKey,\n loading: externalLoad,\n defaultSelectFirst,\n fillOptions,\n\n modelValue,\n inputValue,\n popupVisible: inPopupVisible,\n options: inOptions,\n valueLabel,\n\n popupProps,\n filterable,\n filter,\n autofocus,\n onSearch,\n onPopupVisibleChange,\n onFocus,\n onChange,\n ...selectOptions\n } = props\n\n const rePopupProps = popupProps || {}\n rePopupProps.onScrollToBottom = (context: { e: WheelEvent }) => {\n popupProps?.onScrollToBottom?.(context)\n if (loading.value || noMore.value) return\n loadMore()\n }\n\n const reOnSearch: typeof onSearch = (\n filterWords: string,\n context: {\n e: KeyboardEvent\n }\n ) => {\n onSearch?.(filterWords, context)\n search.value = filterWords.trim()\n refresh()\n }\n\n const reOnPopupVisibleChange: typeof onPopupVisibleChange = (visible, context) => {\n onPopupVisibleChange?.(visible, context)\n\n if (loading.value) return\n\n const { fillOptions } = reProps.value\n if (\n visible &&\n (!options.value?.length ||\n (triggerServiceMerged && checkSameObject(options.value, fillOptions)))\n ) {\n search.value = ''\n refresh()\n }\n }\n\n const reOnFocus: typeof onFocus = (context) => {\n onFocus?.(context)\n\n if (autofocus && !popupVisible.value) {\n popupVisible.value = true\n }\n }\n\n const reOnChange = (value: any, context: any) => {\n onChange?.(value, context)\n\n // 更新 valueLabel\n const { selectOptions } = reProps.value\n const { multiple, keys } = selectOptions\n const labelKey = keys?.label || qdServiceSelectKeys.label\n\n if (multiple) {\n const selectedLabels =\n context.selectedOptions\n ?.map((option: D) => option[labelKey as keyof D] as string)\n .filter(Boolean) || []\n reValueLabel.value = selectedLabels\n } else {\n reValueLabel.value = (context.option?.[labelKey as keyof D] as string) || ''\n }\n }\n\n const reSearchKey = toArr(searchKey)\n const mergedTransformParams = (params: ServiceMaybePageParams<Pag>) => {\n const searchData: Record<string, string> = {}\n reSearchKey.forEach((key) => {\n searchData[key] = search.value\n })\n\n const merged = !params && !reSearchKey.length ? params : { ...params, ...searchData }\n if (transformParams)\n return transformParams(merged as unknown as Parameters<typeof transformParams>[0])\n return merged as TP\n }\n\n const reFilterable = filterable ?? !!reSearchKey.length\n const reFilter = reFilterable ? handleFilter : filter\n\n return {\n autofocus,\n externalLoad,\n defaultSelectFirst,\n fillOptions,\n convStr,\n selectOptions: {\n ...selectOptions,\n filterable: reFilterable,\n filter: reFilter,\n popupProps: rePopupProps,\n onSearch: reOnSearch,\n onPopupVisibleChange: reOnPopupVisibleChange,\n onFocus: reOnFocus,\n onChange: reOnChange\n } as unknown as TdSelectProps<SelectOption>,\n serviceOptions: {\n service,\n manual,\n transformParams: mergedTransformParams,\n transformRes,\n pagination,\n onBefore,\n onAfter,\n onSuccess,\n onError\n },\n models: {\n modelValue,\n valueLabel,\n inputValue,\n popupVisible: inPopupVisible,\n options: inOptions\n }\n }\n })\n\n let hasAutoSelected = false // 记录是否已经自动选择过\n let fillOptionsWatchStop: WatchHandle | undefined // 处理 fillOptions 合并逻辑\n let triggerServiceMerged = false // 记录是否已经触发过请求后合并\n\n const {\n data,\n firstLoad,\n manualTriggerLoad,\n loading,\n loadingMore,\n noMore,\n error,\n refresh,\n refreshAsync,\n cancel,\n loadMore,\n loadMoreAsync,\n mutate\n } = useServiceLoadMore({\n ...reProps.value.serviceOptions,\n onBefore: () => {\n // 请求开始时销毁 fillOptions 的 watch\n fillOptionsWatchStop?.()\n reProps.value.serviceOptions.onBefore?.()\n },\n onSuccess: (res) => {\n reProps.value.serviceOptions.onSuccess?.(res)\n\n const list = (data.value?.list || []) as D[]\n if (!triggerServiceMerged && reProps.value.fillOptions?.length) {\n const map = new Map<typeof reModelValue.value, D>()\n ;[...reProps.value.fillOptions, ...list].forEach((item) => {\n const k =\n item[\n (reProps.value.selectOptions.keys?.value ||\n qdServiceSelectKeys.value) as keyof typeof item\n ]\n map.set(k, item as D)\n })\n options.value = Array.from(map.values())\n } else {\n options.value = list\n }\n triggerServiceMerged = true\n\n // 当 defaultSelectFirst 为 true 且 modelValue 为空且未自动选择过时,默认选中第一个\n if (\n !hasAutoSelected &&\n reProps.value.defaultSelectFirst &&\n isEmpty(reModelValue.value) &&\n res.list.length\n ) {\n const firstOption = res.list[0]\n reModelValue.value =\n firstOption[\n (reProps.value.selectOptions.keys?.value ||\n qdServiceSelectKeys.value) as keyof typeof firstOption\n ]\n hasAutoSelected = true\n }\n }\n })\n\n const selectLoad = computed(() => reProps.value.externalLoad || firstLoad.value)\n\n function handleFilter(filterWords: string, option: SelectOption) {\n if (!filterWords) return true\n\n if ('value' in option) {\n if (reProps.value.selectOptions.multiple) {\n if (reModelValue.value.includes(option.value)) return true\n } else if (reModelValue.value === option.value) {\n return true\n }\n }\n\n if (!option.label) return false\n\n const value = filterWords.trim().toLowerCase()\n return option.label.toLowerCase().includes(value)\n }\n\n const expose = {\n firstLoad,\n manualTriggerLoad,\n loading,\n loadingMore,\n noMore,\n error,\n refresh,\n refreshAsync,\n cancel,\n loadMore,\n loadMoreAsync,\n mutate\n } as QdServiceSelectInstanceFunctions<D, R, P, TP, Pag>\n\n // manual 为 true 时,watch fillOptions 对 options.value 进行赋值\n if (reProps.value.serviceOptions.manual) {\n fillOptionsWatchStop = watch(\n () => reProps.value.fillOptions,\n (fillOpts) => {\n if (!fillOpts?.length) return\n\n options.value = fillOpts\n triggerServiceMerged = true\n },\n { immediate: true, deep: true }\n )\n }\n\n onMounted(() => {\n autofocus.value = reProps.value.autofocus\n })\n\n onActivated(() => {\n autofocus.value = reProps.value.autofocus\n })\n\n onDeactivated(() => {\n autofocus.value = false\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-service-select {\n &__load {\n width: 100%;\n border-top: 1px solid var(--td-component-stroke);\n padding: 6px;\n color: var(--td-text-color-disabled);\n }\n }\n</style>\n"],"names":["modelValue","inputValue","valueLabel","autofocus","fillOptions","selectOptions","_openBlock","_createBlock","_unref","_mergeProps","$slots","TLoading","_renderSlot","_renderList","_withCtx","_normalizeProps","_guardReactiveProps"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qidian-vue-ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.66",
|
|
4
4
|
"description": "基于 TDesign 的 QiDian Vue UI 组件库",
|
|
5
5
|
"author": "qidian",
|
|
6
6
|
"license": "MIT",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"tdesign-icons-vue-next": "^0.4.1",
|
|
62
62
|
"tdesign-vue-next": "^1.16.1",
|
|
63
63
|
"vue": "~3.5.26",
|
|
64
|
-
"qidian-shared": "1.0.
|
|
64
|
+
"qidian-shared": "1.0.46"
|
|
65
65
|
},
|
|
66
66
|
"scripts": {
|
|
67
67
|
"clean": "rm -rf dist",
|