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.
@@ -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>>\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)\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)\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))\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;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,QAAQ;AAAA,MACnC;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,KAAK;AAAA,UACtD,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,KAAK,CAAC;AACrE,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;"}
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":"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"}
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>) => T) & {
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>) => Promise<T>;
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-834dd2be] > .t-form__item > .t-form__controls > .t-form__controls-content > * {
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-834dd2be] {
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-834dd2be"]]);
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: { context, config: component }
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, config: component } 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,CAAA,CAAE;AAAA,QAAA;AAEpC,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,EAAE,SAAS,QAAQ,UAAA;AAAA,MAAU;AAAA,IAExD,CAAC;;aA1GO,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
+ {"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-ca129fa4] {
1
+ .qd-dialog-table-select[data-v-9d7b31a2] {
2
2
  width: 100%;
3
3
  }
4
- .qd-dialog-table-select__trigger[data-v-ca129fa4] {
4
+ .qd-dialog-table-select__trigger[data-v-9d7b31a2] {
5
5
  width: 100%;
6
6
  }
7
- .qd-dialog-table-select__trigger[data-v-ca129fa4]:not(.qd-dialog-table-select__trigger--readonly):not(.qd-dialog-table-select__trigger--disabled) {
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-ca129fa4] .qd-crud-search > .t-card__body,
11
- .qd-dialog-table-select__table[data-v-ca129fa4] .qd-crud-table__body > .t-card__body {
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-ca129fa4] .qd-crud-table__toolbar {
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-ca129fa4] .qd-service-table {
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-ca129fa4] {
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-ca129fa4] {
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-ca129fa4"]]);
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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"}
@@ -1,4 +1,4 @@
1
- .qd-service-select__load[data-v-52c45650] {
1
+ .qd-service-select__load[data-v-77db0747] {
2
2
  width: 100%;
3
3
  border-top: 1px solid var(--td-component-stroke);
4
4
  padding: 6px;
@@ -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-52c45650"]]);
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
- if (visible && !options.value?.length) {
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.64",
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.45"
64
+ "qidian-shared": "1.0.46"
65
65
  },
66
66
  "scripts": {
67
67
  "clean": "rm -rf dist",