ll-plus 2.7.1 → 2.7.2

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.
Files changed (33) hide show
  1. package/es/components/key-value/index.d.ts +7 -0
  2. package/es/components/key-value/src/components/key-value-item.vue.d.ts +1 -0
  3. package/es/components/key-value/src/config/key-value.d.ts +1 -0
  4. package/es/components/key-value/src/key-value.vue.d.ts +7 -0
  5. package/es/packages/components/key-value/src/components/key-value-item.vue2.mjs +60 -20
  6. package/es/packages/components/key-value/src/components/key-value-item.vue2.mjs.map +1 -1
  7. package/es/packages/components/key-value/src/config/key-value.mjs +4 -0
  8. package/es/packages/components/key-value/src/config/key-value.mjs.map +1 -1
  9. package/es/packages/components/key-value/src/key-value.vue2.mjs +7 -6
  10. package/es/packages/components/key-value/src/key-value.vue2.mjs.map +1 -1
  11. package/index.full.js +69 -24
  12. package/index.full.min.js +16 -16
  13. package/index.full.min.js.map +1 -1
  14. package/index.full.min.mjs +16 -16
  15. package/index.full.min.mjs.map +1 -1
  16. package/index.full.mjs +69 -24
  17. package/lib/components/key-value/index.d.ts +7 -0
  18. package/lib/components/key-value/src/components/key-value-item.vue.d.ts +1 -0
  19. package/lib/components/key-value/src/config/key-value.d.ts +1 -0
  20. package/lib/components/key-value/src/key-value.vue.d.ts +7 -0
  21. package/lib/packages/components/key-value/src/components/key-value-item.vue2.js +59 -19
  22. package/lib/packages/components/key-value/src/components/key-value-item.vue2.js.map +1 -1
  23. package/lib/packages/components/key-value/src/config/key-value.js +4 -0
  24. package/lib/packages/components/key-value/src/config/key-value.js.map +1 -1
  25. package/lib/packages/components/key-value/src/key-value.vue2.js +6 -5
  26. package/lib/packages/components/key-value/src/key-value.vue2.js.map +1 -1
  27. package/package.json +1 -1
  28. package/theme-chalk/fonts/iconfont.js +1 -1
  29. package/theme-chalk/fonts/iconfont.json +28 -0
  30. package/types/packages/components/key-value/index.d.ts +7 -0
  31. package/types/packages/components/key-value/src/components/key-value-item.vue.d.ts +1 -0
  32. package/types/packages/components/key-value/src/config/key-value.d.ts +1 -0
  33. package/types/packages/components/key-value/src/key-value.vue.d.ts +7 -0
@@ -40,6 +40,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
40
40
  readonly disabledDelete: import("ll-plus/es/utils").EpPropFinalized<(new (...args: any[]) => number[]) | (() => number[]) | ((new (...args: any[]) => number[]) | (() => number[]))[], unknown, unknown, () => never[], boolean>;
41
41
  readonly disabledAdd: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
42
42
  readonly validate: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
43
+ readonly keepLast: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
43
44
  }, {
44
45
  props: import("@vue/shared").LooseRequired<{
45
46
  readonly value: import("./src/config").KeyValueItem[];
@@ -57,6 +58,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
57
58
  readonly disabledKey: number[];
58
59
  readonly disabledDelete: number[];
59
60
  readonly disabledAdd: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
61
+ readonly keepLast: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
60
62
  readonly onChange?: ((value: import("./src/config").KeyValueItem[]) => any) | undefined;
61
63
  readonly "onUpdate:value"?: ((value: import("./src/config").KeyValueItem[]) => any) | undefined;
62
64
  readonly onDelete?: ((index: number) => any) | undefined;
@@ -5093,6 +5095,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
5093
5095
  getKeyDisabled: import("vue").ComputedRef<any>;
5094
5096
  getValueDisabled: import("vue").ComputedRef<any>;
5095
5097
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
5098
+ hasValue: import("vue").ComputedRef<any>;
5096
5099
  handleDelete: () => void;
5097
5100
  handleChange: () => Promise<void>;
5098
5101
  validate: () => Promise<any>;
@@ -10433,6 +10436,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
10433
10436
  getKeyDisabled: import("vue").ComputedRef<any>;
10434
10437
  getValueDisabled: import("vue").ComputedRef<any>;
10435
10438
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
10439
+ hasValue: import("vue").ComputedRef<any>;
10436
10440
  handleDelete: () => void;
10437
10441
  handleChange: () => Promise<void>;
10438
10442
  validate: () => Promise<any>;
@@ -15701,6 +15705,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
15701
15705
  getKeyDisabled: import("vue").ComputedRef<any>;
15702
15706
  getValueDisabled: import("vue").ComputedRef<any>;
15703
15707
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
15708
+ hasValue: import("vue").ComputedRef<any>;
15704
15709
  handleDelete: () => void;
15705
15710
  handleChange: () => Promise<void>;
15706
15711
  validate: () => Promise<any>;
@@ -16066,6 +16071,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
16066
16071
  readonly disabledDelete: import("ll-plus/es/utils").EpPropFinalized<(new (...args: any[]) => number[]) | (() => number[]) | ((new (...args: any[]) => number[]) | (() => number[]))[], unknown, unknown, () => never[], boolean>;
16067
16072
  readonly disabledAdd: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
16068
16073
  readonly validate: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
16074
+ readonly keepLast: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
16069
16075
  }>> & {
16070
16076
  onChange?: ((value: import("./src/config").KeyValueItem[]) => any) | undefined;
16071
16077
  "onUpdate:value"?: ((value: import("./src/config").KeyValueItem[]) => any) | undefined;
@@ -16087,6 +16093,7 @@ export declare const LlKeyValue: import("ll-plus/es/utils").SFCWithInstall<impor
16087
16093
  readonly disabledKey: number[];
16088
16094
  readonly disabledDelete: number[];
16089
16095
  readonly disabledAdd: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
16096
+ readonly keepLast: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
16090
16097
  }, {}>>;
16091
16098
  export default LlKeyValue;
16092
16099
  export * from './src/config';
@@ -5010,6 +5010,7 @@ declare const _default: import("vue").DefineComponent<{
5010
5010
  getKeyDisabled: import("vue").ComputedRef<any>;
5011
5011
  getValueDisabled: import("vue").ComputedRef<any>;
5012
5012
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
5013
+ hasValue: import("vue").ComputedRef<any>;
5013
5014
  handleDelete: () => void;
5014
5015
  handleChange: () => Promise<void>;
5015
5016
  validate: () => Promise<any>;
@@ -53,6 +53,7 @@ export declare const keyValueProps: {
53
53
  readonly disabledDelete: import("ll-plus/es/utils").EpPropFinalized<(new (...args: any[]) => number[]) | (() => number[]) | ((new (...args: any[]) => number[]) | (() => number[]))[], unknown, unknown, () => never[], boolean>;
54
54
  readonly disabledAdd: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
55
55
  readonly validate: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
56
+ readonly keepLast: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
56
57
  };
57
58
  export interface KeyValueAddEmits {
58
59
  index: number;
@@ -40,6 +40,7 @@ declare const _default: import("vue").DefineComponent<{
40
40
  readonly disabledDelete: import("ll-plus/es/utils").EpPropFinalized<(new (...args: any[]) => number[]) | (() => number[]) | ((new (...args: any[]) => number[]) | (() => number[]))[], unknown, unknown, () => never[], boolean>;
41
41
  readonly disabledAdd: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
42
42
  readonly validate: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
43
+ readonly keepLast: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
43
44
  }, {
44
45
  props: import("@vue/shared").LooseRequired<{
45
46
  readonly value: KeyValueItem[];
@@ -57,6 +58,7 @@ declare const _default: import("vue").DefineComponent<{
57
58
  readonly disabledKey: number[];
58
59
  readonly disabledDelete: number[];
59
60
  readonly disabledAdd: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
61
+ readonly keepLast: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
60
62
  readonly onChange?: ((value: KeyValueItem[]) => any) | undefined;
61
63
  readonly "onUpdate:value"?: ((value: KeyValueItem[]) => any) | undefined;
62
64
  readonly onDelete?: ((index: number) => any) | undefined;
@@ -5093,6 +5095,7 @@ declare const _default: import("vue").DefineComponent<{
5093
5095
  getKeyDisabled: import("vue").ComputedRef<any>;
5094
5096
  getValueDisabled: import("vue").ComputedRef<any>;
5095
5097
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
5098
+ hasValue: import("vue").ComputedRef<any>;
5096
5099
  handleDelete: () => void;
5097
5100
  handleChange: () => Promise<void>;
5098
5101
  validate: () => Promise<any>;
@@ -10433,6 +10436,7 @@ declare const _default: import("vue").DefineComponent<{
10433
10436
  getKeyDisabled: import("vue").ComputedRef<any>;
10434
10437
  getValueDisabled: import("vue").ComputedRef<any>;
10435
10438
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
10439
+ hasValue: import("vue").ComputedRef<any>;
10436
10440
  handleDelete: () => void;
10437
10441
  handleChange: () => Promise<void>;
10438
10442
  validate: () => Promise<any>;
@@ -15701,6 +15705,7 @@ declare const _default: import("vue").DefineComponent<{
15701
15705
  getKeyDisabled: import("vue").ComputedRef<any>;
15702
15706
  getValueDisabled: import("vue").ComputedRef<any>;
15703
15707
  getDeleteDisabled: import("vue").ComputedRef<import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown> | undefined>;
15708
+ hasValue: import("vue").ComputedRef<any>;
15704
15709
  handleDelete: () => void;
15705
15710
  handleChange: () => Promise<void>;
15706
15711
  validate: () => Promise<any>;
@@ -16066,6 +16071,7 @@ declare const _default: import("vue").DefineComponent<{
16066
16071
  readonly disabledDelete: import("ll-plus/es/utils").EpPropFinalized<(new (...args: any[]) => number[]) | (() => number[]) | ((new (...args: any[]) => number[]) | (() => number[]))[], unknown, unknown, () => never[], boolean>;
16067
16072
  readonly disabledAdd: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
16068
16073
  readonly validate: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, false, boolean>;
16074
+ readonly keepLast: import("ll-plus/es/utils").EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
16069
16075
  }>> & {
16070
16076
  onChange?: ((value: KeyValueItem[]) => any) | undefined;
16071
16077
  "onUpdate:value"?: ((value: KeyValueItem[]) => any) | undefined;
@@ -16087,5 +16093,6 @@ declare const _default: import("vue").DefineComponent<{
16087
16093
  readonly disabledKey: number[];
16088
16094
  readonly disabledDelete: number[];
16089
16095
  readonly disabledAdd: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
16096
+ readonly keepLast: import("ll-plus/es/utils").EpPropMergeType<BooleanConstructor, unknown, unknown>;
16090
16097
  }, {}>;
16091
16098
  export default _default;
@@ -1,4 +1,4 @@
1
- import { defineComponent, useAttrs, ref, computed, watch, nextTick, resolveComponent, openBlock, createBlock, unref, withCtx, createElementBlock, normalizeClass, createVNode, renderSlot, resolveDynamicComponent, mergeProps, createSlots, renderList, createCommentVNode, normalizeStyle, createTextVNode, createElementVNode, normalizeProps, guardReactiveProps } from 'vue';
1
+ import { defineComponent, useAttrs, ref, computed, watch, nextTick, resolveComponent, openBlock, createBlock, unref, withCtx, createElementBlock, normalizeClass, createVNode, renderSlot, resolveDynamicComponent, mergeProps, createSlots, renderList, createCommentVNode, normalizeStyle, createTextVNode, createElementVNode, normalizeProps, guardReactiveProps, Fragment } from 'vue';
2
2
  import { isEmpty } from 'lodash-es';
3
3
  import '../../../../utils/index.mjs';
4
4
  import '../config/index.mjs';
@@ -40,6 +40,9 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
40
40
  const getDeleteDisabled = computed(() => {
41
41
  return props.disabledDelete?.includes(props.idx) || props.disabled;
42
42
  });
43
+ const hasValue = computed(() => {
44
+ return innerValue.value["key"] || innerValue.value["key"] === 0 || innerValue.value["value"];
45
+ });
43
46
  const handleDelete = () => {
44
47
  emits("delete");
45
48
  };
@@ -215,21 +218,57 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
215
218
  2
216
219
  /* CLASS */
217
220
  ),
218
- createVNode(_component_a_popconfirm, {
219
- title: "\u4F60\u786E\u5B9A\u8981\u79FB\u9664\u5417?",
220
- "ok-text": "\u786E\u8BA4",
221
- "cancel-text": "\u53D6\u6D88",
222
- placement: "topRight",
223
- "overlay-class-name": unref(bem).m("popconfirm"),
224
- "get-popup-container": (trigger) => trigger.parentNode,
225
- "destroy-tooltip-on-hide": "",
226
- onConfirm: handleDelete
227
- }, {
228
- default: withCtx(() => [
229
- props.showDelete ? (openBlock(), createElementBlock(
221
+ props.showDelete ? (openBlock(), createElementBlock(
222
+ Fragment,
223
+ { key: 2 },
224
+ [
225
+ hasValue.value ? (openBlock(), createBlock(_component_a_popconfirm, {
226
+ key: 0,
227
+ title: "\u4F60\u786E\u5B9A\u8981\u79FB\u9664\u5417?",
228
+ "ok-text": "\u786E\u8BA4",
229
+ "cancel-text": "\u53D6\u6D88",
230
+ placement: "topRight",
231
+ "overlay-class-name": unref(bem).m("popconfirm"),
232
+ "get-popup-container": (trigger) => trigger.parentNode,
233
+ "destroy-tooltip-on-hide": "",
234
+ onConfirm: handleDelete
235
+ }, {
236
+ default: withCtx(() => [
237
+ createElementVNode(
238
+ "div",
239
+ {
240
+ class: normalizeClass(unref(bem).m("delete")),
241
+ style: normalizeStyle({
242
+ "margin-top": !!unref(attrs)["key-label"] || !!unref(attrs)["value-label"] ? "26px" : "0px"
243
+ })
244
+ },
245
+ [
246
+ createVNode(_component_ll_button, {
247
+ type: "link",
248
+ disabled: getDeleteDisabled.value
249
+ }, {
250
+ default: withCtx(() => [
251
+ renderSlot(_ctx.$slots, "delete-icon", {}, () => [
252
+ createVNode(_component_ll_icon, {
253
+ "icon-name": "icon-remove",
254
+ class: "delete"
255
+ })
256
+ ])
257
+ ]),
258
+ _: 3
259
+ /* FORWARDED */
260
+ }, 8, ["disabled"])
261
+ ],
262
+ 6
263
+ /* CLASS, STYLE */
264
+ )
265
+ ]),
266
+ _: 3
267
+ /* FORWARDED */
268
+ }, 8, ["overlay-class-name", "get-popup-container"])) : (openBlock(), createElementBlock(
230
269
  "div",
231
270
  {
232
- key: 0,
271
+ key: 1,
233
272
  class: normalizeClass(unref(bem).m("delete")),
234
273
  style: normalizeStyle({
235
274
  "margin-top": !!unref(attrs)["key-label"] || !!unref(attrs)["value-label"] ? "26px" : "0px"
@@ -238,7 +277,8 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
238
277
  [
239
278
  createVNode(_component_ll_button, {
240
279
  type: "link",
241
- disabled: getDeleteDisabled.value
280
+ disabled: getDeleteDisabled.value,
281
+ onClick: handleDelete
242
282
  }, {
243
283
  default: withCtx(() => [
244
284
  renderSlot(_ctx.$slots, "delete-icon", {}, () => [
@@ -254,11 +294,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
254
294
  ],
255
295
  6
256
296
  /* CLASS, STYLE */
257
- )) : createCommentVNode("v-if", true)
258
- ]),
259
- _: 3
260
- /* FORWARDED */
261
- }, 8, ["overlay-class-name", "get-popup-container"])
297
+ ))
298
+ ],
299
+ 64
300
+ /* STABLE_FRAGMENT */
301
+ )) : createCommentVNode("v-if", true)
262
302
  ],
263
303
  2
264
304
  /* CLASS */
@@ -1 +1 @@
1
- {"version":3,"file":"key-value-item.vue2.mjs","sources":["../../../../../../../packages/components/key-value/src/components/key-value-item.vue"],"sourcesContent":["<template>\n <ll-form\n ref=\"form\"\n :form-columns=\"formColumns\"\n :form-data=\"props.value\"\n :form-options=\"formOptions\"\n >\n <template #formItem=\"{ item }\">\n <template v-if=\"item.key === 'other'\">\n <div :class=\"bem.e('item')\">\n <div v-if=\"props.keyValueType !== 'single'\" :class=\"bem.m('left')\">\n <ll-form-item\n :label=\"attrs['key-label']\"\n :label-col=\"{\n span: 24\n }\"\n :rules=\"getKeyType.rules || []\"\n name=\"key\"\n >\n <slot name=\"key\">\n <ll-select\n v-if=\"!isEmpty(props.keyTypes)\"\n v-model:value=\"innerValue['key']\"\n :options=\"props.keyTypes\"\n :disabled=\"getKeyDisabled\"\n style=\"width: 100%\"\n placeholder=\"请选择\"\n allow-clear\n @change=\"handleChange\"\n />\n <component\n :is=\"`ll-${getKeyType.type}`\"\n v-else\n v-model:value=\"innerValue['key']\"\n v-bind=\"getKeyType\"\n :disabled=\"getKeyDisabled\"\n style=\"width: 100%\"\n >\n <template\n v-for=\"_item in Object.keys($slots)\"\n :key=\"_item\"\n #[_item]=\"data\"\n >\n <slot\n :name=\"_item\"\n v-bind=\"data || {}\"\n content=\"key\"\n ></slot>\n </template>\n </component>\n </slot>\n </ll-form-item>\n </div>\n\n <div\n v-if=\"props.keyValueType !== 'single'\"\n :class=\"bem.m('separator')\"\n :style=\"{\n 'margin-top':\n !!attrs['key-label'] || !!attrs['value-label'] ? '26px' : '0px'\n }\"\n >\n <slot name=\"separator\">~</slot>\n </div>\n\n <div :class=\"bem.m('right')\">\n <ll-form-item\n :label=\"attrs['value-label']\"\n :label-col=\"{\n span: 24\n }\"\n :rules=\"getValueType.rules || []\"\n name=\"value\"\n >\n <slot name=\"value-warapper\" v-bind=\"getValueType\">\n <component\n :is=\"`ll-${getValueType.type}`\"\n v-model:value=\"innerValue['value']\"\n :disabled=\"getValueDisabled\"\n style=\"width: 100%\"\n v-bind=\"getValueType\"\n >\n <template\n v-for=\"_item in Object.keys($slots)\"\n :key=\"_item\"\n #[_item]=\"data\"\n >\n <slot\n :name=\"_item\"\n v-bind=\"data || {}\"\n content=\"value\"\n ></slot>\n </template>\n </component>\n </slot>\n </ll-form-item>\n </div>\n\n <a-popconfirm\n title=\"你确定要移除吗?\"\n ok-text=\"确认\"\n cancel-text=\"取消\"\n placement=\"topRight\"\n :overlay-class-name=\"bem.m('popconfirm')\"\n :get-popup-container=\"(trigger: Element) => trigger.parentNode\"\n destroy-tooltip-on-hide\n @confirm=\"handleDelete\"\n >\n <div\n v-if=\"props.showDelete\"\n :class=\"bem.m('delete')\"\n :style=\"{\n 'margin-top':\n !!attrs['key-label'] || !!attrs['value-label']\n ? '26px'\n : '0px'\n }\"\n >\n <ll-button type=\"link\" :disabled=\"getDeleteDisabled\">\n <slot name=\"delete-icon\">\n <ll-icon icon-name=\"icon-remove\" class=\"delete\" />\n </slot>\n </ll-button>\n </div>\n </a-popconfirm>\n </div>\n </template>\n </template>\n </ll-form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch, nextTick } from 'vue'\nimport { isEmpty } from 'lodash-es'\nimport { createNamespace } from '@ll-plus/utils'\nimport type { FormInstance } from '@ll-plus/components'\nimport {\n keyValueItemProps,\n keyValueItemEmits,\n formColumns,\n formOptions\n} from '../config'\nimport { type FormColumn } from '@ll-plus/components'\nimport type { NamePath } from 'ant-design-vue/es/form/interface'\n\ndefineOptions({\n name: 'LlKeyValueItem'\n})\n\nconst props = defineProps(keyValueItemProps)\nconst emits = defineEmits(keyValueItemEmits)\n\nconst attrs = useAttrs()\nconst bem = createNamespace('key-value')\nconst innerValue = ref(props.value)\n\nconst form = ref<FormInstance | null>()\n\nconst getKeyType = computed<FormColumn>(() => {\n const option = props.keyType\n return option\n})\nconst getValueType = computed<FormColumn>(() => {\n let option = props.valueType\n if (innerValue.value['key'] && !isEmpty(props.keyValueTypeDict)) {\n option = props.keyValueTypeDict[innerValue.value['key']]\n }\n return option\n})\n\nconst getKeyDisabled = computed(() => {\n return (\n props.disabledKey?.includes(props.idx) ||\n props.disabled ||\n getKeyType.value?.disabled\n )\n})\n\nconst getValueDisabled = computed(() => {\n return (\n props.disabledValue?.includes(props.idx) ||\n props.disabled ||\n getValueType.value?.disabled\n )\n})\n\nconst getDeleteDisabled = computed(() => {\n return props.disabledDelete?.includes(props.idx) || props.disabled\n})\n\nconst handleDelete = () => {\n emits('delete')\n}\n\nconst handleChange = async () => {\n innerValue.value['value'] = null\n await form.value?.clearValidate()\n}\n\nconst validate = async () => {\n return await form.value?.validate()\n}\n\nconst resetFields = async () => {\n return await form.value?.resetFields()\n}\nconst clearValidate = async (namePath?: NamePath[]) => {\n return await form.value?.clearValidate(namePath)\n}\n\nwatch(\n innerValue,\n async val => {\n await nextTick().then(() => {\n try {\n emits('update:value', val)\n emits('change')\n } catch (error) {\n console.error(error)\n }\n })\n },\n {\n deep: true\n }\n)\n\ndefineExpose({\n validate,\n resetFields,\n clearValidate\n})\n</script>\n\n<style scoped></style>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"key-value-item.vue2.mjs","sources":["../../../../../../../packages/components/key-value/src/components/key-value-item.vue"],"sourcesContent":["<template>\n <ll-form\n ref=\"form\"\n :form-columns=\"formColumns\"\n :form-data=\"props.value\"\n :form-options=\"formOptions\"\n >\n <template #formItem=\"{ item }\">\n <template v-if=\"item.key === 'other'\">\n <div :class=\"bem.e('item')\">\n <div v-if=\"props.keyValueType !== 'single'\" :class=\"bem.m('left')\">\n <ll-form-item\n :label=\"attrs['key-label']\"\n :label-col=\"{\n span: 24\n }\"\n :rules=\"getKeyType.rules || []\"\n name=\"key\"\n >\n <slot name=\"key\">\n <ll-select\n v-if=\"!isEmpty(props.keyTypes)\"\n v-model:value=\"innerValue['key']\"\n :options=\"props.keyTypes\"\n :disabled=\"getKeyDisabled\"\n style=\"width: 100%\"\n placeholder=\"请选择\"\n allow-clear\n @change=\"handleChange\"\n />\n <component\n :is=\"`ll-${getKeyType.type}`\"\n v-else\n v-model:value=\"innerValue['key']\"\n v-bind=\"getKeyType\"\n :disabled=\"getKeyDisabled\"\n style=\"width: 100%\"\n >\n <template\n v-for=\"_item in Object.keys($slots)\"\n :key=\"_item\"\n #[_item]=\"data\"\n >\n <slot\n :name=\"_item\"\n v-bind=\"data || {}\"\n content=\"key\"\n ></slot>\n </template>\n </component>\n </slot>\n </ll-form-item>\n </div>\n\n <div\n v-if=\"props.keyValueType !== 'single'\"\n :class=\"bem.m('separator')\"\n :style=\"{\n 'margin-top':\n !!attrs['key-label'] || !!attrs['value-label'] ? '26px' : '0px'\n }\"\n >\n <slot name=\"separator\">~</slot>\n </div>\n\n <div :class=\"bem.m('right')\">\n <ll-form-item\n :label=\"attrs['value-label']\"\n :label-col=\"{\n span: 24\n }\"\n :rules=\"getValueType.rules || []\"\n name=\"value\"\n >\n <slot name=\"value-warapper\" v-bind=\"getValueType\">\n <component\n :is=\"`ll-${getValueType.type}`\"\n v-model:value=\"innerValue['value']\"\n :disabled=\"getValueDisabled\"\n style=\"width: 100%\"\n v-bind=\"getValueType\"\n >\n <template\n v-for=\"_item in Object.keys($slots)\"\n :key=\"_item\"\n #[_item]=\"data\"\n >\n <slot\n :name=\"_item\"\n v-bind=\"data || {}\"\n content=\"value\"\n ></slot>\n </template>\n </component>\n </slot>\n </ll-form-item>\n </div>\n <template v-if=\"props.showDelete\">\n <template v-if=\"hasValue\">\n <a-popconfirm\n title=\"你确定要移除吗?\"\n ok-text=\"确认\"\n cancel-text=\"取消\"\n placement=\"topRight\"\n :overlay-class-name=\"bem.m('popconfirm')\"\n :get-popup-container=\"(trigger: Element) => trigger.parentNode\"\n destroy-tooltip-on-hide\n @confirm=\"handleDelete\"\n >\n <div\n :class=\"bem.m('delete')\"\n :style=\"{\n 'margin-top':\n !!attrs['key-label'] || !!attrs['value-label']\n ? '26px'\n : '0px'\n }\"\n >\n <ll-button type=\"link\" :disabled=\"getDeleteDisabled\">\n <slot name=\"delete-icon\">\n <ll-icon icon-name=\"icon-remove\" class=\"delete\" />\n </slot>\n </ll-button>\n </div>\n </a-popconfirm>\n </template>\n <div\n v-else\n :class=\"bem.m('delete')\"\n :style=\"{\n 'margin-top':\n !!attrs['key-label'] || !!attrs['value-label']\n ? '26px'\n : '0px'\n }\"\n >\n <ll-button\n type=\"link\"\n :disabled=\"getDeleteDisabled\"\n @click=\"handleDelete\"\n >\n <slot name=\"delete-icon\">\n <ll-icon icon-name=\"icon-remove\" class=\"delete\" />\n </slot>\n </ll-button>\n </div>\n </template>\n </div>\n </template>\n </template>\n </ll-form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch, nextTick } from 'vue'\nimport { isEmpty } from 'lodash-es'\nimport { createNamespace } from '@ll-plus/utils'\nimport type { FormInstance } from '@ll-plus/components'\nimport {\n keyValueItemProps,\n keyValueItemEmits,\n formColumns,\n formOptions\n} from '../config'\nimport { type FormColumn } from '@ll-plus/components'\nimport type { NamePath } from 'ant-design-vue/es/form/interface'\n\ndefineOptions({\n name: 'LlKeyValueItem'\n})\n\nconst props = defineProps(keyValueItemProps)\nconst emits = defineEmits(keyValueItemEmits)\n\nconst attrs = useAttrs()\nconst bem = createNamespace('key-value')\nconst innerValue = ref(props.value)\n\nconst form = ref<FormInstance | null>()\n\nconst getKeyType = computed<FormColumn>(() => {\n const option = props.keyType\n return option\n})\nconst getValueType = computed<FormColumn>(() => {\n let option = props.valueType\n if (innerValue.value['key'] && !isEmpty(props.keyValueTypeDict)) {\n option = props.keyValueTypeDict[innerValue.value['key']]\n }\n return option\n})\n\nconst getKeyDisabled = computed(() => {\n return (\n props.disabledKey?.includes(props.idx) ||\n props.disabled ||\n getKeyType.value?.disabled\n )\n})\n\nconst getValueDisabled = computed(() => {\n return (\n props.disabledValue?.includes(props.idx) ||\n props.disabled ||\n getValueType.value?.disabled\n )\n})\n\nconst getDeleteDisabled = computed(() => {\n return props.disabledDelete?.includes(props.idx) || props.disabled\n})\n\nconst hasValue = computed(() => {\n return (\n innerValue.value['key'] ||\n innerValue.value['key'] === 0 ||\n innerValue.value['value']\n )\n})\n\nconst handleDelete = () => {\n emits('delete')\n}\n\nconst handleChange = async () => {\n innerValue.value['value'] = null\n await form.value?.clearValidate()\n}\n\nconst validate = async () => {\n return await form.value?.validate()\n}\n\nconst resetFields = async () => {\n return await form.value?.resetFields()\n}\nconst clearValidate = async (namePath?: NamePath[]) => {\n return await form.value?.clearValidate(namePath)\n}\n\nwatch(\n innerValue,\n async val => {\n await nextTick().then(() => {\n try {\n emits('update:value', val)\n emits('change')\n } catch (error) {\n console.error(error)\n }\n })\n },\n {\n deep: true\n }\n)\n\ndefineExpose({\n validate,\n resetFields,\n clearValidate\n})\n</script>\n\n<style scoped></style>\n"],"names":[],"mappings":"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"}
@@ -72,6 +72,10 @@ const keyValueProps = buildProps({
72
72
  validate: {
73
73
  type: Boolean,
74
74
  default: false
75
+ },
76
+ keepLast: {
77
+ type: Boolean,
78
+ default: true
75
79
  }
76
80
  });
77
81
  const keyValueEmits = {
@@ -1 +1 @@
1
- {"version":3,"file":"key-value.mjs","sources":["../../../../../../../packages/components/key-value/src/config/key-value.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\n\nimport type { ExtractPropTypes } from 'vue'\nimport { type FormColumn } from '@ll-plus/components'\nimport type { KeyValueItem } from './key-value-item'\nimport type KeyValue from '../key-value.vue'\n\nexport interface KeyType {\n label: string\n value: string\n option: FormColumn\n}\n\ntype KeyValueType = 'single' | 'doubt'\n\nexport const getKeyValueItem = () => ({\n key: null,\n value: null\n})\n\nexport const keyValueProps = buildProps({\n value: {\n type: definePropType<KeyValueItem[]>(Array),\n default: () => [{ key: '', value: '' }]\n },\n loading: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n keyLabel: {\n type: String,\n default: ''\n },\n valueLabel: {\n type: String,\n default: ''\n },\n addText: {\n type: String,\n default: '添加'\n },\n keyValueType: {\n type: definePropType<KeyValueType>(String),\n default: 'doubt'\n },\n keyType: {\n type: definePropType<FormColumn>(Object),\n default: () => ({\n type: 'input',\n placeholder: '请输入Key'\n })\n },\n keyTypes: {\n type: definePropType<KeyType[]>(Array),\n default: () => []\n },\n valueType: {\n type: definePropType<FormColumn>(Object),\n default: () => ({\n type: 'input',\n placeholder: '请输入Value'\n })\n },\n disabledValue: {\n type: definePropType<number[]>(Array),\n default: () => []\n },\n disabledKey: {\n type: definePropType<number[]>(Array),\n default: () => []\n },\n disabledDelete: {\n type: definePropType<number[]>(Array),\n default: () => []\n },\n disabledAdd: {\n type: Boolean,\n default: false\n },\n validate: {\n type: Boolean,\n default: false\n }\n} as const)\n\nexport interface KeyValueAddEmits {\n index: number\n item: KeyValueItem\n value: KeyValueItem[]\n}\n\nexport const keyValueEmits = {\n change: (value: KeyValueItem[]) => !!value,\n add: (params: KeyValueAddEmits) => !!params,\n delete: (index: number) => typeof index === 'number',\n 'update:value': (value: KeyValueItem[]) => !!value\n}\n\n// props\nexport type KeyValueProps = ExtractPropTypes<typeof keyValueProps>\n// emits\nexport type KeyValueEmits = typeof keyValueEmits\n// instance\nexport type KeyValueInstance = InstanceType<typeof KeyValue>\n"],"names":[],"mappings":";;;;AAeO,MAAM,kBAAkB,OAAO;AAAA,EACpC,GAAK,EAAA,IAAA;AAAA,EACL,KAAO,EAAA,IAAA;AACT,CAAA,EAAA;AAEO,MAAM,gBAAgB,UAAW,CAAA;AAAA,EACtC,KAAO,EAAA;AAAA,IACL,IAAA,EAAM,eAA+B,KAAK,CAAA;AAAA,IAC1C,OAAA,EAAS,MAAM,CAAC,EAAE,KAAK,EAAI,EAAA,KAAA,EAAO,IAAI,CAAA;AAAA,GACxC;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,cAAA;AAAA,GACX;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAA,EAAM,eAA6B,MAAM,CAAA;AAAA,IACzC,OAAS,EAAA,OAAA;AAAA,GACX;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAA,EAAM,eAA2B,MAAM,CAAA;AAAA,IACvC,SAAS,OAAO;AAAA,MACd,IAAM,EAAA,OAAA;AAAA,MACN,WAAa,EAAA,uBAAA;AAAA,KACf,CAAA;AAAA,GACF;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAA,EAAM,eAA0B,KAAK,CAAA;AAAA,IACrC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAA,EAAM,eAA2B,MAAM,CAAA;AAAA,IACvC,SAAS,OAAO;AAAA,MACd,IAAM,EAAA,OAAA;AAAA,MACN,WAAa,EAAA,yBAAA;AAAA,KACf,CAAA;AAAA,GACF;AAAA,EACA,aAAe,EAAA;AAAA,IACb,IAAA,EAAM,eAAyB,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAA,EAAM,eAAyB,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,IAAA,EAAM,eAAyB,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AACF,CAAU,EAAA;AAQH,MAAM,aAAgB,GAAA;AAAA,EAC3B,MAAQ,EAAA,CAAC,KAA0B,KAAA,CAAC,CAAC,KAAA;AAAA,EACrC,GAAK,EAAA,CAAC,MAA6B,KAAA,CAAC,CAAC,MAAA;AAAA,EACrC,MAAQ,EAAA,CAAC,KAAkB,KAAA,OAAO,KAAU,KAAA,QAAA;AAAA,EAC5C,cAAgB,EAAA,CAAC,KAA0B,KAAA,CAAC,CAAC,KAAA;AAC/C;;;;"}
1
+ {"version":3,"file":"key-value.mjs","sources":["../../../../../../../packages/components/key-value/src/config/key-value.ts"],"sourcesContent":["import { buildProps, definePropType } from '@ll-plus/utils'\n\nimport type { ExtractPropTypes } from 'vue'\nimport { type FormColumn } from '@ll-plus/components'\nimport type { KeyValueItem } from './key-value-item'\nimport type KeyValue from '../key-value.vue'\n\nexport interface KeyType {\n label: string\n value: string\n option: FormColumn\n}\n\ntype KeyValueType = 'single' | 'doubt'\n\nexport const getKeyValueItem = () => ({\n key: null,\n value: null\n})\n\nexport const keyValueProps = buildProps({\n value: {\n type: definePropType<KeyValueItem[]>(Array),\n default: () => [{ key: '', value: '' }]\n },\n loading: {\n type: Boolean,\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n keyLabel: {\n type: String,\n default: ''\n },\n valueLabel: {\n type: String,\n default: ''\n },\n addText: {\n type: String,\n default: '添加'\n },\n keyValueType: {\n type: definePropType<KeyValueType>(String),\n default: 'doubt'\n },\n keyType: {\n type: definePropType<FormColumn>(Object),\n default: () => ({\n type: 'input',\n placeholder: '请输入Key'\n })\n },\n keyTypes: {\n type: definePropType<KeyType[]>(Array),\n default: () => []\n },\n valueType: {\n type: definePropType<FormColumn>(Object),\n default: () => ({\n type: 'input',\n placeholder: '请输入Value'\n })\n },\n disabledValue: {\n type: definePropType<number[]>(Array),\n default: () => []\n },\n disabledKey: {\n type: definePropType<number[]>(Array),\n default: () => []\n },\n disabledDelete: {\n type: definePropType<number[]>(Array),\n default: () => []\n },\n disabledAdd: {\n type: Boolean,\n default: false\n },\n validate: {\n type: Boolean,\n default: false\n },\n keepLast: {\n type: Boolean,\n default: true\n }\n} as const)\n\nexport interface KeyValueAddEmits {\n index: number\n item: KeyValueItem\n value: KeyValueItem[]\n}\n\nexport const keyValueEmits = {\n change: (value: KeyValueItem[]) => !!value,\n add: (params: KeyValueAddEmits) => !!params,\n delete: (index: number) => typeof index === 'number',\n 'update:value': (value: KeyValueItem[]) => !!value\n}\n\n// props\nexport type KeyValueProps = ExtractPropTypes<typeof keyValueProps>\n// emits\nexport type KeyValueEmits = typeof keyValueEmits\n// instance\nexport type KeyValueInstance = InstanceType<typeof KeyValue>\n"],"names":[],"mappings":";;;;AAeO,MAAM,kBAAkB,OAAO;AAAA,EACpC,GAAK,EAAA,IAAA;AAAA,EACL,KAAO,EAAA,IAAA;AACT,CAAA,EAAA;AAEO,MAAM,gBAAgB,UAAW,CAAA;AAAA,EACtC,KAAO,EAAA;AAAA,IACL,IAAA,EAAM,eAA+B,KAAK,CAAA;AAAA,IAC1C,OAAA,EAAS,MAAM,CAAC,EAAE,KAAK,EAAI,EAAA,KAAA,EAAO,IAAI,CAAA;AAAA,GACxC;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,EAAA;AAAA,GACX;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAM,EAAA,MAAA;AAAA,IACN,OAAS,EAAA,cAAA;AAAA,GACX;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAA,EAAM,eAA6B,MAAM,CAAA;AAAA,IACzC,OAAS,EAAA,OAAA;AAAA,GACX;AAAA,EACA,OAAS,EAAA;AAAA,IACP,IAAA,EAAM,eAA2B,MAAM,CAAA;AAAA,IACvC,SAAS,OAAO;AAAA,MACd,IAAM,EAAA,OAAA;AAAA,MACN,WAAa,EAAA,uBAAA;AAAA,KACf,CAAA;AAAA,GACF;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAA,EAAM,eAA0B,KAAK,CAAA;AAAA,IACrC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAA,EAAM,eAA2B,MAAM,CAAA;AAAA,IACvC,SAAS,OAAO;AAAA,MACd,IAAM,EAAA,OAAA;AAAA,MACN,WAAa,EAAA,yBAAA;AAAA,KACf,CAAA;AAAA,GACF;AAAA,EACA,aAAe,EAAA;AAAA,IACb,IAAA,EAAM,eAAyB,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAA,EAAM,eAAyB,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,cAAgB,EAAA;AAAA,IACd,IAAA,EAAM,eAAyB,KAAK,CAAA;AAAA,IACpC,OAAA,EAAS,MAAM,EAAC;AAAA,GAClB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,KAAA;AAAA,GACX;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,OAAA;AAAA,IACN,OAAS,EAAA,IAAA;AAAA,GACX;AACF,CAAU,EAAA;AAQH,MAAM,aAAgB,GAAA;AAAA,EAC3B,MAAQ,EAAA,CAAC,KAA0B,KAAA,CAAC,CAAC,KAAA;AAAA,EACrC,GAAK,EAAA,CAAC,MAA6B,KAAA,CAAC,CAAC,MAAA;AAAA,EACrC,MAAQ,EAAA,CAAC,KAAkB,KAAA,OAAO,KAAU,KAAA,QAAA;AAAA,EAC5C,cAAgB,EAAA,CAAC,KAA0B,KAAA,CAAC,CAAC,KAAA;AAC/C;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, computed, nextTick, watch, resolveComponent, openBlock, createElementBlock, normalizeClass, unref, createVNode, withCtx, createElementVNode, Fragment, renderList, createBlock, createSlots, renderSlot, mergeProps, createCommentVNode, createTextVNode, toDisplayString } from 'vue';
1
+ import { defineComponent, ref, computed, nextTick, watch, resolveComponent, openBlock, createElementBlock, normalizeClass, unref, createVNode, withCtx, Fragment, renderList, createBlock, createSlots, renderSlot, mergeProps, createCommentVNode, createElementVNode, createTextVNode, toDisplayString } from 'vue';
2
2
  import { Form } from 'ant-design-vue';
3
3
  import '../../../utils/index.mjs';
4
4
  import './config/index.mjs';
@@ -73,7 +73,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
73
73
  watch(
74
74
  () => props.value,
75
75
  (n) => {
76
- innerValue.value = n && n.length > 0 ? n : [{ key: null, value: null }];
76
+ innerValue.value = n && n.length > 0 ? n : props.keepLast ? [{ key: null, value: null }] : n;
77
77
  },
78
78
  {
79
79
  immediate: true,
@@ -99,9 +99,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
99
99
  spinning: props.loading
100
100
  }, {
101
101
  default: withCtx(() => [
102
- createElementVNode(
102
+ innerValue.value.length > 0 ? (openBlock(), createElementBlock(
103
103
  "div",
104
104
  {
105
+ key: 0,
105
106
  class: normalizeClass(unref(bem).e("list"))
106
107
  },
107
108
  [
@@ -119,7 +120,6 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
119
120
  "key-label": props.keyLabel,
120
121
  "value-label": props.valueLabel,
121
122
  "key-value-type-dict": keyValueTypeDict.value,
122
- "show-delete": innerValue.value.length > 1,
123
123
  "key-value-type": props.keyValueType,
124
124
  "key-type": props.keyType,
125
125
  "key-types": props.keyTypes,
@@ -128,6 +128,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
128
128
  "disabled-value": props.disabledValue,
129
129
  "disabled-key": props.disabledKey,
130
130
  "disabled-delete": props.disabledDelete,
131
+ "show-delete": props.keepLast ? idx > 0 : true,
131
132
  onDelete: ($event) => handleDelete(idx),
132
133
  onChange: handleChange
133
134
  }, createSlots({
@@ -142,7 +143,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
142
143
  ])
143
144
  };
144
145
  })
145
- ]), 1032, ["value", "onUpdate:value", "idx", "key-label", "value-label", "key-value-type-dict", "show-delete", "key-value-type", "key-type", "key-types", "value-type", "disabled", "disabled-value", "disabled-key", "disabled-delete", "onDelete"]);
146
+ ]), 1032, ["value", "onUpdate:value", "idx", "key-label", "value-label", "key-value-type-dict", "key-value-type", "key-type", "key-types", "value-type", "disabled", "disabled-value", "disabled-key", "disabled-delete", "show-delete", "onDelete"]);
146
147
  }),
147
148
  128
148
149
  /* KEYED_FRAGMENT */
@@ -150,7 +151,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
150
151
  ],
151
152
  2
152
153
  /* CLASS */
153
- ),
154
+ )) : createCommentVNode("v-if", true),
154
155
  createVNode(_component_ll_button, {
155
156
  class: normalizeClass(unref(bem).e("add")),
156
157
  loading: _ctx.loading,
@@ -1 +1 @@
1
- {"version":3,"file":"key-value.vue2.mjs","sources":["../../../../../../packages/components/key-value/src/key-value.vue"],"sourcesContent":["<template>\n <div :class=\"bem.b()\">\n <a-spin :spinning=\"props.loading\">\n <div :class=\"bem.e('list')\">\n <key-value-item\n v-for=\"(_item, idx) in innerValue\"\n :key=\"_item\"\n :ref=\"el => (keyValueItems[idx] = el)\"\n v-model:value=\"innerValue[idx]\"\n :idx=\"idx\"\n :key-label=\"props.keyLabel\"\n :value-label=\"props.valueLabel\"\n :key-value-type-dict=\"keyValueTypeDict\"\n :show-delete=\"innerValue.length > 1\"\n :key-value-type=\"props.keyValueType\"\n :key-type=\"props.keyType\"\n :key-types=\"props.keyTypes\"\n :value-type=\"props.valueType\"\n :disabled=\"props.disabled\"\n :disabled-value=\"props.disabledValue\"\n :disabled-key=\"props.disabledKey\"\n :disabled-delete=\"props.disabledDelete\"\n @delete=\"handleDelete(idx)\"\n @change=\"handleChange\"\n >\n <template\n v-for=\"item in Object.keys($slots)\"\n :key=\"item\"\n #[item]=\"data\"\n >\n <slot :name=\"item\" v-bind=\"data || {}\" :index=\"idx\"></slot>\n </template>\n </key-value-item>\n </div>\n\n <ll-button\n :class=\"bem.e('add')\"\n :loading=\"loading\"\n :disabled=\"props.disabled || props.disabledAdd\"\n @click=\"handleAddItem\"\n >\n <div :class=\"bem.e('plus')\">\n <ll-icon\n v-if=\"!loading\"\n icon-name=\"icon-add\"\n :class=\"bem.e('icon-add')\"\n />\n {{ props.addText }}\n </div>\n </ll-button>\n </a-spin>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick } from 'vue'\nimport { Form } from 'ant-design-vue'\nimport { createNamespace } from '@ll-plus/utils'\nimport {\n keyValueProps,\n keyValueEmits,\n getKeyValueItem,\n type KeyValueItem\n} from './config'\nimport keyValueItem from './components/key-value-item.vue'\n\ndefineOptions({ name: 'LlKeyValue' })\n\nconst props = defineProps(keyValueProps)\nconst emits = defineEmits(keyValueEmits)\nconst bem = createNamespace('key-value')\nconst formItemContext = Form.useInjectFormItemContext()\n\nconst innerValue = ref<KeyValueItem[]>([])\n\nconst keyValueItems = ref<InstanceType<typeof keyValueItem>[]>([])\n\nconst keyValueTypeDict = computed(() => {\n const obj = {}\n props.keyTypes.map(e => {\n obj[e.value] = e.option\n })\n return obj\n})\n\nconst validate = async () => {\n await nextTick()\n return Promise.all(\n keyValueItems.value.filter(e => !!e).map(e => e.validate())\n )\n}\n\nconst resetFields = async () => {\n await nextTick()\n return Promise.all(\n keyValueItems.value.filter(e => !!e).map(e => e.resetFields())\n )\n}\n\nconst clearValidate = async () => {\n await nextTick()\n return Promise.all(\n keyValueItems.value.filter(e => !!e).map(e => e.clearValidate())\n )\n}\n\nconst handleAddItem = async () => {\n const valid = await validate()\n if (props.validate && !valid) return false\n innerValue.value.push(getKeyValueItem())\n emits('add', {\n index: innerValue.value.length - 1,\n item: innerValue.value[innerValue.value.length - 1],\n value: innerValue.value\n })\n handleChange()\n}\n\nconst handleDelete = (idx: number) => {\n innerValue.value.splice(idx, 1)\n emits('delete', idx)\n handleChange()\n}\n\nconst handleChange = () => {\n try {\n formItemContext.onFieldChange()\n emits('change', innerValue.value)\n emits('update:value', innerValue.value)\n } catch (error) {\n console.error(error)\n }\n}\n\nwatch(\n () => props.value,\n n => {\n innerValue.value = n && n.length > 0 ? n : [{ key: null, value: null }]\n },\n {\n immediate: true,\n deep: true\n }\n)\n\ndefineExpose({\n validate,\n resetFields,\n clearValidate\n})\n</script>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"key-value.vue2.mjs","sources":["../../../../../../packages/components/key-value/src/key-value.vue"],"sourcesContent":["<template>\n <div :class=\"bem.b()\">\n <a-spin :spinning=\"props.loading\">\n <div v-if=\"innerValue.length > 0\" :class=\"bem.e('list')\">\n <key-value-item\n v-for=\"(_item, idx) in innerValue\"\n :key=\"_item\"\n :ref=\"el => (keyValueItems[idx] = el)\"\n v-model:value=\"innerValue[idx]\"\n :idx=\"idx\"\n :key-label=\"props.keyLabel\"\n :value-label=\"props.valueLabel\"\n :key-value-type-dict=\"keyValueTypeDict\"\n :key-value-type=\"props.keyValueType\"\n :key-type=\"props.keyType\"\n :key-types=\"props.keyTypes\"\n :value-type=\"props.valueType\"\n :disabled=\"props.disabled\"\n :disabled-value=\"props.disabledValue\"\n :disabled-key=\"props.disabledKey\"\n :disabled-delete=\"props.disabledDelete\"\n :show-delete=\"props.keepLast ? idx > 0 : true\"\n @delete=\"handleDelete(idx)\"\n @change=\"handleChange\"\n >\n <template\n v-for=\"item in Object.keys($slots)\"\n :key=\"item\"\n #[item]=\"data\"\n >\n <slot :name=\"item\" v-bind=\"data || {}\" :index=\"idx\"></slot>\n </template>\n </key-value-item>\n </div>\n\n <ll-button\n :class=\"bem.e('add')\"\n :loading=\"loading\"\n :disabled=\"props.disabled || props.disabledAdd\"\n @click=\"handleAddItem\"\n >\n <div :class=\"bem.e('plus')\">\n <ll-icon\n v-if=\"!loading\"\n icon-name=\"icon-add\"\n :class=\"bem.e('icon-add')\"\n />\n {{ props.addText }}\n </div>\n </ll-button>\n </a-spin>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick } from 'vue'\nimport { Form } from 'ant-design-vue'\nimport { createNamespace } from '@ll-plus/utils'\nimport {\n keyValueProps,\n keyValueEmits,\n getKeyValueItem,\n type KeyValueItem\n} from './config'\nimport keyValueItem from './components/key-value-item.vue'\n\ndefineOptions({ name: 'LlKeyValue' })\n\nconst props = defineProps(keyValueProps)\nconst emits = defineEmits(keyValueEmits)\nconst bem = createNamespace('key-value')\nconst formItemContext = Form.useInjectFormItemContext()\n\nconst innerValue = ref<KeyValueItem[]>([])\n\nconst keyValueItems = ref<InstanceType<typeof keyValueItem>[]>([])\n\nconst keyValueTypeDict = computed(() => {\n const obj = {}\n props.keyTypes.map(e => {\n obj[e.value] = e.option\n })\n return obj\n})\n\nconst validate = async () => {\n await nextTick()\n return Promise.all(\n keyValueItems.value.filter(e => !!e).map(e => e.validate())\n )\n}\n\nconst resetFields = async () => {\n await nextTick()\n return Promise.all(\n keyValueItems.value.filter(e => !!e).map(e => e.resetFields())\n )\n}\n\nconst clearValidate = async () => {\n await nextTick()\n return Promise.all(\n keyValueItems.value.filter(e => !!e).map(e => e.clearValidate())\n )\n}\n\nconst handleAddItem = async () => {\n const valid = await validate()\n if (props.validate && !valid) return false\n innerValue.value.push(getKeyValueItem())\n emits('add', {\n index: innerValue.value.length - 1,\n item: innerValue.value[innerValue.value.length - 1],\n value: innerValue.value\n })\n handleChange()\n}\n\nconst handleDelete = (idx: number) => {\n innerValue.value.splice(idx, 1)\n emits('delete', idx)\n handleChange()\n}\n\nconst handleChange = () => {\n try {\n formItemContext.onFieldChange()\n emits('change', innerValue.value)\n emits('update:value', innerValue.value)\n } catch (error) {\n console.error(error)\n }\n}\n\nwatch(\n () => props.value,\n n => {\n innerValue.value =\n n && n.length > 0 ? n : props.keepLast ? [{ key: null, value: null }] : n\n },\n {\n immediate: true,\n deep: true\n }\n)\n\ndefineExpose({\n validate,\n resetFields,\n clearValidate\n})\n</script>\n"],"names":[],"mappings":"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"}
package/index.full.js CHANGED
@@ -63250,6 +63250,10 @@
63250
63250
  validate: {
63251
63251
  type: Boolean,
63252
63252
  default: false
63253
+ },
63254
+ keepLast: {
63255
+ type: Boolean,
63256
+ default: true
63253
63257
  }
63254
63258
  });
63255
63259
  const keyValueEmits = {
@@ -63369,6 +63373,9 @@
63369
63373
  const getDeleteDisabled = require$$0.computed(() => {
63370
63374
  return props.disabledDelete?.includes(props.idx) || props.disabled;
63371
63375
  });
63376
+ const hasValue = require$$0.computed(() => {
63377
+ return innerValue.value["key"] || innerValue.value["key"] === 0 || innerValue.value["value"];
63378
+ });
63372
63379
  const handleDelete = () => {
63373
63380
  emits("delete");
63374
63381
  };
@@ -63544,21 +63551,57 @@
63544
63551
  2
63545
63552
  /* CLASS */
63546
63553
  ),
63547
- require$$0.createVNode(_component_a_popconfirm, {
63548
- title: "\u4F60\u786E\u5B9A\u8981\u79FB\u9664\u5417?",
63549
- "ok-text": "\u786E\u8BA4",
63550
- "cancel-text": "\u53D6\u6D88",
63551
- placement: "topRight",
63552
- "overlay-class-name": require$$0.unref(bem).m("popconfirm"),
63553
- "get-popup-container": (trigger) => trigger.parentNode,
63554
- "destroy-tooltip-on-hide": "",
63555
- onConfirm: handleDelete
63556
- }, {
63557
- default: require$$0.withCtx(() => [
63558
- props.showDelete ? (require$$0.openBlock(), require$$0.createElementBlock(
63554
+ props.showDelete ? (require$$0.openBlock(), require$$0.createElementBlock(
63555
+ require$$0.Fragment,
63556
+ { key: 2 },
63557
+ [
63558
+ hasValue.value ? (require$$0.openBlock(), require$$0.createBlock(_component_a_popconfirm, {
63559
+ key: 0,
63560
+ title: "\u4F60\u786E\u5B9A\u8981\u79FB\u9664\u5417?",
63561
+ "ok-text": "\u786E\u8BA4",
63562
+ "cancel-text": "\u53D6\u6D88",
63563
+ placement: "topRight",
63564
+ "overlay-class-name": require$$0.unref(bem).m("popconfirm"),
63565
+ "get-popup-container": (trigger) => trigger.parentNode,
63566
+ "destroy-tooltip-on-hide": "",
63567
+ onConfirm: handleDelete
63568
+ }, {
63569
+ default: require$$0.withCtx(() => [
63570
+ require$$0.createElementVNode(
63571
+ "div",
63572
+ {
63573
+ class: require$$0.normalizeClass(require$$0.unref(bem).m("delete")),
63574
+ style: require$$0.normalizeStyle({
63575
+ "margin-top": !!require$$0.unref(attrs)["key-label"] || !!require$$0.unref(attrs)["value-label"] ? "26px" : "0px"
63576
+ })
63577
+ },
63578
+ [
63579
+ require$$0.createVNode(_component_ll_button, {
63580
+ type: "link",
63581
+ disabled: getDeleteDisabled.value
63582
+ }, {
63583
+ default: require$$0.withCtx(() => [
63584
+ require$$0.renderSlot(_ctx.$slots, "delete-icon", {}, () => [
63585
+ require$$0.createVNode(_component_ll_icon, {
63586
+ "icon-name": "icon-remove",
63587
+ class: "delete"
63588
+ })
63589
+ ])
63590
+ ]),
63591
+ _: 3
63592
+ /* FORWARDED */
63593
+ }, 8, ["disabled"])
63594
+ ],
63595
+ 6
63596
+ /* CLASS, STYLE */
63597
+ )
63598
+ ]),
63599
+ _: 3
63600
+ /* FORWARDED */
63601
+ }, 8, ["overlay-class-name", "get-popup-container"])) : (require$$0.openBlock(), require$$0.createElementBlock(
63559
63602
  "div",
63560
63603
  {
63561
- key: 0,
63604
+ key: 1,
63562
63605
  class: require$$0.normalizeClass(require$$0.unref(bem).m("delete")),
63563
63606
  style: require$$0.normalizeStyle({
63564
63607
  "margin-top": !!require$$0.unref(attrs)["key-label"] || !!require$$0.unref(attrs)["value-label"] ? "26px" : "0px"
@@ -63567,7 +63610,8 @@
63567
63610
  [
63568
63611
  require$$0.createVNode(_component_ll_button, {
63569
63612
  type: "link",
63570
- disabled: getDeleteDisabled.value
63613
+ disabled: getDeleteDisabled.value,
63614
+ onClick: handleDelete
63571
63615
  }, {
63572
63616
  default: require$$0.withCtx(() => [
63573
63617
  require$$0.renderSlot(_ctx.$slots, "delete-icon", {}, () => [
@@ -63583,11 +63627,11 @@
63583
63627
  ],
63584
63628
  6
63585
63629
  /* CLASS, STYLE */
63586
- )) : require$$0.createCommentVNode("v-if", true)
63587
- ]),
63588
- _: 3
63589
- /* FORWARDED */
63590
- }, 8, ["overlay-class-name", "get-popup-container"])
63630
+ ))
63631
+ ],
63632
+ 64
63633
+ /* STABLE_FRAGMENT */
63634
+ )) : require$$0.createCommentVNode("v-if", true)
63591
63635
  ],
63592
63636
  2
63593
63637
  /* CLASS */
@@ -63668,7 +63712,7 @@
63668
63712
  require$$0.watch(
63669
63713
  () => props.value,
63670
63714
  (n) => {
63671
- innerValue.value = n && n.length > 0 ? n : [{ key: null, value: null }];
63715
+ innerValue.value = n && n.length > 0 ? n : props.keepLast ? [{ key: null, value: null }] : n;
63672
63716
  },
63673
63717
  {
63674
63718
  immediate: true,
@@ -63694,9 +63738,10 @@
63694
63738
  spinning: props.loading
63695
63739
  }, {
63696
63740
  default: require$$0.withCtx(() => [
63697
- require$$0.createElementVNode(
63741
+ innerValue.value.length > 0 ? (require$$0.openBlock(), require$$0.createElementBlock(
63698
63742
  "div",
63699
63743
  {
63744
+ key: 0,
63700
63745
  class: require$$0.normalizeClass(require$$0.unref(bem).e("list"))
63701
63746
  },
63702
63747
  [
@@ -63714,7 +63759,6 @@
63714
63759
  "key-label": props.keyLabel,
63715
63760
  "value-label": props.valueLabel,
63716
63761
  "key-value-type-dict": keyValueTypeDict.value,
63717
- "show-delete": innerValue.value.length > 1,
63718
63762
  "key-value-type": props.keyValueType,
63719
63763
  "key-type": props.keyType,
63720
63764
  "key-types": props.keyTypes,
@@ -63723,6 +63767,7 @@
63723
63767
  "disabled-value": props.disabledValue,
63724
63768
  "disabled-key": props.disabledKey,
63725
63769
  "disabled-delete": props.disabledDelete,
63770
+ "show-delete": props.keepLast ? idx > 0 : true,
63726
63771
  onDelete: ($event) => handleDelete(idx),
63727
63772
  onChange: handleChange
63728
63773
  }, require$$0.createSlots({
@@ -63737,7 +63782,7 @@
63737
63782
  ])
63738
63783
  };
63739
63784
  })
63740
- ]), 1032, ["value", "onUpdate:value", "idx", "key-label", "value-label", "key-value-type-dict", "show-delete", "key-value-type", "key-type", "key-types", "value-type", "disabled", "disabled-value", "disabled-key", "disabled-delete", "onDelete"]);
63785
+ ]), 1032, ["value", "onUpdate:value", "idx", "key-label", "value-label", "key-value-type-dict", "key-value-type", "key-type", "key-types", "value-type", "disabled", "disabled-value", "disabled-key", "disabled-delete", "show-delete", "onDelete"]);
63741
63786
  }),
63742
63787
  128
63743
63788
  /* KEYED_FRAGMENT */
@@ -63745,7 +63790,7 @@
63745
63790
  ],
63746
63791
  2
63747
63792
  /* CLASS */
63748
- ),
63793
+ )) : require$$0.createCommentVNode("v-if", true),
63749
63794
  require$$0.createVNode(_component_ll_button, {
63750
63795
  class: require$$0.normalizeClass(require$$0.unref(bem).e("add")),
63751
63796
  loading: _ctx.loading,