qidian-vue-ui 1.1.47 → 1.1.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/dialog/form.vue.mjs +9 -2
- package/dist/components/dialog/form.vue.mjs.map +1 -1
- package/dist/components/form/index.vue.mjs +1 -1
- package/dist/components/form/index.vue2.mjs +3 -2
- package/dist/components/form/index.vue2.mjs.map +1 -1
- package/dist/qidian-vue-ui.css +5 -5
- package/package.json +1 -1
|
@@ -72,7 +72,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
72
72
|
loading,
|
|
73
73
|
crudMode,
|
|
74
74
|
onSubmit: async (context) => {
|
|
75
|
-
if (!onSubmit)
|
|
75
|
+
if (!onSubmit) {
|
|
76
|
+
formSubmitLoad.value = false;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
76
79
|
formSubmitLoad.value = true;
|
|
77
80
|
const [err, res] = await suspectedWrapperPromise(onSubmit(context));
|
|
78
81
|
formSubmitLoad.value = false;
|
|
@@ -99,7 +102,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
99
102
|
onConfirm: (done) => {
|
|
100
103
|
const onConfirm = wrapper.onConfirm;
|
|
101
104
|
if (onConfirm) return onConfirm?.(done);
|
|
102
|
-
formRef.value?.submit
|
|
105
|
+
const submit = formRef.value?.submit;
|
|
106
|
+
if (submit) {
|
|
107
|
+
formSubmitLoad.value = true;
|
|
108
|
+
submit();
|
|
109
|
+
}
|
|
103
110
|
return false;
|
|
104
111
|
}
|
|
105
112
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.vue.mjs","sources":["../../../src/components/dialog/form.vue"],"sourcesContent":["<template>\n <qd-dialog v-model:visible=\"visible\" v-bind=\"reProps.qdDialogOptions\">\n <template v-if=\"reProps.crudMode === 'view'\" #footer>\n <t-button theme=\"default\" @click=\"hide\">{{ t('closeText') }}</t-button>\n </template>\n\n <template v-for=\"name in extractSlotsWithoutPrefix($slots, 'form')\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" :context=\"data\" />\n </template>\n\n <qd-form ref=\"form\" v-model:data=\"data\" v-bind=\"reProps.qdFormOptions\">\n <template\n v-for=\"item in extractSlotsWithPrefix($slots, 'form')\"\n #[item.filterName]=\"slotProps\"\n >\n <slot :name=\"item.originalName\" v-bind=\"slotProps\" />\n </template>\n </qd-form>\n </qd-dialog>\n</template>\n\n<script setup lang=\"ts\" generic=\"FD extends Data = Data\">\n import type { QdDialogDone, QdDialogFormInstanceFunctions, QdDialogFormProps } from './types'\n import type { FormInstanceFunctions, Data } from 'tdesign-vue-next'\n import type { QdFormProps, QdFormSubmitContext } from '../form'\n import { Button as TButton } from 'tdesign-vue-next'\n import { qdDialogFormProps } from './props'\n import { computed, useTemplateRef, ref } from 'vue'\n import { useVModels } from '@vueuse/core'\n import {\n easyCopy,\n extractSlotsWithoutPrefix,\n extractSlotsWithPrefix,\n suspectedWrapperPromise\n } from 'qidian-shared'\n import QdDialog from './index.vue'\n import { QdForm } from '../form'\n import { useConfig } from '../config-provider/useConfig'\n\n type Props = QdDialogFormProps<FD>\n\n const props = withDefaults(defineProps<Props>(), qdDialogFormProps)\n const emit = defineEmits<{\n 'update:visible': [Props['visible']]\n 'update:data': [Props['data']]\n }>()\n const { visible, data } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const { t } = useConfig('crud')\n const formRef = useTemplateRef<FormInstanceFunctions>('form')\n const formSubmitLoad = ref(false)\n\n const reProps = computed(() => {\n const {\n crudMode,\n data,\n visible: inVisible,\n wrapper,\n onSubmit,\n loading,\n ...qdFormOptions\n } = props\n const reConfirmLoading = formSubmitLoad.value || wrapper.confirmLoading\n\n return {\n crudMode,\n qdFormOptions: {\n ...qdFormOptions,\n loading,\n crudMode,\n onSubmit: async (context: QdFormSubmitContext<FD>) => {\n if (!onSubmit) return\n\n formSubmitLoad.value = true\n const [err, res] = await suspectedWrapperPromise(onSubmit(context))\n formSubmitLoad.value = false\n if (err || res === false) return\n\n visible.value = false\n }\n } as unknown as QdFormProps,\n qdDialogOptions: {\n ...wrapper,\n\n onOpened: () => {\n Object.assign(expose, formRef.value)\n wrapper.onOpened?.()\n },\n\n onBeforeClose: () => {\n formRef.value?.reset()\n wrapper.onBeforeClose?.()\n },\n\n confirmLoading: reConfirmLoading,\n closeOnEscKeydown: loading || reConfirmLoading ? false : wrapper.closeOnEscKeydown,\n closeOnOverlayClick: loading || reConfirmLoading ? false : wrapper.closeOnOverlayClick,\n closeBtn: loading || reConfirmLoading ? false : wrapper.closeBtn,\n\n confirmBtn:\n loading || reConfirmLoading\n ? typeof wrapper.confirmBtn === 'object'\n ? { ...wrapper.confirmBtn, disabled: true }\n : { disabled: true }\n : wrapper.confirmBtn,\n cancelBtn:\n loading || reConfirmLoading\n ? typeof wrapper.cancelBtn === 'object'\n ? { ...wrapper.cancelBtn, disabled: true }\n : { disabled: true }\n : wrapper.cancelBtn,\n\n onConfirm: (done: QdDialogDone) => {\n const onConfirm = wrapper.onConfirm\n if (onConfirm) return onConfirm?.(done)\n\n formRef.value?.submit()\n return false\n }\n },\n models: { data, visible: inVisible }\n }\n })\n\n function show(newData?: FD) {\n if (newData != undefined) data.value = easyCopy(newData)\n visible.value = true\n }\n\n function hide() {\n visible.value = false\n }\n\n const expose = {\n show,\n hide\n } as QdDialogFormInstanceFunctions\n\n defineExpose(expose)\n</script>\n"],"names":["data","_openBlock","_createBlock","QdDialog","_mergeProps","_unref","_createSlots","_createVNode","$slots","_withCtx","_renderSlot","TButton"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCE,UAAM,QAAQ;AACd,UAAM,OAAO;AAIb,UAAM,EAAE,SAAS,KAAA,IAAS,WAA4C,OAAO,MAAM;AAAA,MACjF,SAAS;AAAA,IAAA,CACV;AAED,UAAM,EAAE,EAAA,IAAM,UAAU,MAAM;AAC9B,UAAM,UAAU,eAAsC,MAAM;AAC5D,UAAM,iBAAiB,IAAI,KAAK;AAEhC,UAAM,UAAU,SAAS,MAAM;AAC7B,YAAM;AAAA,QACJ;AAAA,QACA,MAAAA;AAAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MAAA,IACD;AACJ,YAAM,mBAAmB,eAAe,SAAS,QAAQ;AAEzD,aAAO;AAAA,QACL;AAAA,QACA,eAAe;AAAA,UACb,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA,UAAU,OAAO,YAAqC;AACpD,gBAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"form.vue.mjs","sources":["../../../src/components/dialog/form.vue"],"sourcesContent":["<template>\n <qd-dialog v-model:visible=\"visible\" v-bind=\"reProps.qdDialogOptions\">\n <template v-if=\"reProps.crudMode === 'view'\" #footer>\n <t-button theme=\"default\" @click=\"hide\">{{ t('closeText') }}</t-button>\n </template>\n\n <template v-for=\"name in extractSlotsWithoutPrefix($slots, 'form')\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps\" :context=\"data\" />\n </template>\n\n <qd-form ref=\"form\" v-model:data=\"data\" v-bind=\"reProps.qdFormOptions\">\n <template\n v-for=\"item in extractSlotsWithPrefix($slots, 'form')\"\n #[item.filterName]=\"slotProps\"\n >\n <slot :name=\"item.originalName\" v-bind=\"slotProps\" />\n </template>\n </qd-form>\n </qd-dialog>\n</template>\n\n<script setup lang=\"ts\" generic=\"FD extends Data = Data\">\n import type { QdDialogDone, QdDialogFormInstanceFunctions, QdDialogFormProps } from './types'\n import type { FormInstanceFunctions, Data } from 'tdesign-vue-next'\n import type { QdFormProps, QdFormSubmitContext } from '../form'\n import { Button as TButton } from 'tdesign-vue-next'\n import { qdDialogFormProps } from './props'\n import { computed, useTemplateRef, ref } from 'vue'\n import { useVModels } from '@vueuse/core'\n import {\n easyCopy,\n extractSlotsWithoutPrefix,\n extractSlotsWithPrefix,\n suspectedWrapperPromise\n } from 'qidian-shared'\n import QdDialog from './index.vue'\n import { QdForm } from '../form'\n import { useConfig } from '../config-provider/useConfig'\n\n type Props = QdDialogFormProps<FD>\n\n const props = withDefaults(defineProps<Props>(), qdDialogFormProps)\n const emit = defineEmits<{\n 'update:visible': [Props['visible']]\n 'update:data': [Props['data']]\n }>()\n const { visible, data } = useVModels<typeof props, keyof typeof emit>(props, emit, {\n passive: true\n })\n\n const { t } = useConfig('crud')\n const formRef = useTemplateRef<FormInstanceFunctions>('form')\n const formSubmitLoad = ref(false)\n\n const reProps = computed(() => {\n const {\n crudMode,\n data,\n visible: inVisible,\n wrapper,\n onSubmit,\n loading,\n ...qdFormOptions\n } = props\n const reConfirmLoading = formSubmitLoad.value || wrapper.confirmLoading\n\n return {\n crudMode,\n qdFormOptions: {\n ...qdFormOptions,\n loading,\n crudMode,\n onSubmit: async (context: QdFormSubmitContext<FD>) => {\n if (!onSubmit) {\n formSubmitLoad.value = false\n return\n }\n\n formSubmitLoad.value = true\n const [err, res] = await suspectedWrapperPromise(onSubmit(context))\n formSubmitLoad.value = false\n if (err || res === false) return\n\n visible.value = false\n }\n } as unknown as QdFormProps,\n qdDialogOptions: {\n ...wrapper,\n\n onOpened: () => {\n Object.assign(expose, formRef.value)\n wrapper.onOpened?.()\n },\n\n onBeforeClose: () => {\n formRef.value?.reset()\n wrapper.onBeforeClose?.()\n },\n\n confirmLoading: reConfirmLoading,\n closeOnEscKeydown: loading || reConfirmLoading ? false : wrapper.closeOnEscKeydown,\n closeOnOverlayClick: loading || reConfirmLoading ? false : wrapper.closeOnOverlayClick,\n closeBtn: loading || reConfirmLoading ? false : wrapper.closeBtn,\n\n confirmBtn:\n loading || reConfirmLoading\n ? typeof wrapper.confirmBtn === 'object'\n ? { ...wrapper.confirmBtn, disabled: true }\n : { disabled: true }\n : wrapper.confirmBtn,\n cancelBtn:\n loading || reConfirmLoading\n ? typeof wrapper.cancelBtn === 'object'\n ? { ...wrapper.cancelBtn, disabled: true }\n : { disabled: true }\n : wrapper.cancelBtn,\n\n onConfirm: (done: QdDialogDone) => {\n const onConfirm = wrapper.onConfirm\n if (onConfirm) return onConfirm?.(done)\n\n const submit = formRef.value?.submit\n if (submit) {\n formSubmitLoad.value = true\n submit()\n }\n return false\n }\n },\n models: { data, visible: inVisible }\n }\n })\n\n function show(newData?: FD) {\n if (newData != undefined) data.value = easyCopy(newData)\n visible.value = true\n }\n\n function hide() {\n visible.value = false\n }\n\n const expose = {\n show,\n hide\n } as QdDialogFormInstanceFunctions\n\n defineExpose(expose)\n</script>\n"],"names":["data","_openBlock","_createBlock","QdDialog","_mergeProps","_unref","_createSlots","_createVNode","$slots","_withCtx","_renderSlot","TButton"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import _sfc_main from "./index.vue2.mjs";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
4
|
-
const QdForm = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
4
|
+
const QdForm = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3882becd"]]);
|
|
5
5
|
export {
|
|
6
6
|
QdForm as default
|
|
7
7
|
};
|
|
@@ -63,6 +63,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
63
63
|
});
|
|
64
64
|
const formRef = useTemplateRef("form");
|
|
65
65
|
const submitShowErrorMessage = ref();
|
|
66
|
+
const submitLoad = ref(false);
|
|
66
67
|
const reProps = computed(() => {
|
|
67
68
|
const {
|
|
68
69
|
grid,
|
|
@@ -80,6 +81,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
80
81
|
externalLoad,
|
|
81
82
|
formOptions: {
|
|
82
83
|
...formOptions,
|
|
84
|
+
readonly: submitLoad.value || formOptions.readonly,
|
|
83
85
|
labelAlign: descriptions ? "left" : formOptions.labelAlign,
|
|
84
86
|
scrollToFirstError: submitShowErrorMessage.value === false ? "" : scrollToFirstError
|
|
85
87
|
},
|
|
@@ -92,10 +94,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
92
94
|
models: { data: data2 }
|
|
93
95
|
};
|
|
94
96
|
});
|
|
95
|
-
const submitLoad = ref(false);
|
|
96
97
|
const formLoad = computed(() => {
|
|
97
98
|
return {
|
|
98
|
-
loading: reProps.value.externalLoad
|
|
99
|
+
loading: reProps.value.externalLoad,
|
|
99
100
|
size: "small",
|
|
100
101
|
...props.loadingProps
|
|
101
102
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/form/index.vue"],"sourcesContent":["<template>\n <t-form\n ref=\"form\"\n :class=\"[\n 'qd-form',\n $slots.footer ? 'qd-form--has-footer' : '',\n reProps.descriptions ? 'qd-form--descriptions' : ''\n ]\"\n v-loading=\"formLoad\"\n v-bind=\"reProps.formOptions\"\n :data=\"data\"\n @submit=\"handleSubmit\"\n >\n <slot name=\"header\" :context=\"data\" />\n\n <slot v-bind=\"reProps.gridOptions\">\n <qd-grid v-bind=\"reProps.gridOptions\">\n <qd-form-item\n v-for=\"(item, index) in reProps.formItems\"\n :key=\"index\"\n :crud-mode=\"crudMode\"\n :context=\"data\"\n :default-clearable=\"defaultClearable\"\n v-bind=\"item\"\n />\n </qd-grid>\n </slot>\n\n <slot name=\"footer\" :context=\"data\" />\n </t-form>\n</template>\n\n<script setup lang=\"ts\" generic=\"FD extends Data = Data\">\n import type { Data, FormInstanceFunctions, SubmitContext } from 'tdesign-vue-next'\n import type { QdFormBeforeSubmitQueueItem, QdFormProps } from './types'\n import { computed, nextTick, provide, onBeforeUnmount, useTemplateRef, ref, onMounted } from 'vue'\n import { Form as TForm, LoadingDirective } from 'tdesign-vue-next'\n import QdFormItem from './item.vue'\n import { QdGrid } from '../grid'\n import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE } from './config'\n import { suspectedWrapperPromise, easyCopy } from 'qidian-shared'\n import { qdFormGrid, qdFormProps } from './props'\n import { useVModels } from '@vueuse/core'\n import { useModal } from '../../hooks/useModal'\n import { merge } from 'lodash-es'\n\n defineOptions({\n name: 'QdForm'\n })\n\n const vLoading = LoadingDirective\n\n type Props = QdFormProps<Data>\n\n const props = withDefaults(defineProps<QdFormProps<Data>>(), qdFormProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['data']]\n }>()\n const { data } = useVModels(props, emit, { passive: true })\n\n const { msgError } = useModal()\n\n const beforeSubmitQueue: QdFormBeforeSubmitQueueItem[] = [] // 提交前需要处理的队列\n provide(PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, (item: QdFormBeforeSubmitQueueItem) => {\n const index = beforeSubmitQueue.length\n nextTick(() => {\n beforeSubmitQueue.push(item)\n })\n onBeforeUnmount(() => {\n beforeSubmitQueue.splice(index, 1)\n })\n })\n\n const formRef = useTemplateRef<FormInstanceFunctions>('form')\n const submitShowErrorMessage = ref<boolean | undefined>()\n\n const reProps = computed(() => {\n const {\n grid,\n gutter,\n descriptions,\n items,\n onSubmit,\n data,\n scrollToFirstError,\n loading: externalLoad,\n ...formOptions\n } = props\n\n return {\n descriptions,\n externalLoad,\n formOptions: {\n ...formOptions,\n labelAlign: descriptions ? 'left' : formOptions.labelAlign,\n scrollToFirstError: submitShowErrorMessage.value === false ? '' : scrollToFirstError\n },\n formItems: items,\n gridOptions: {\n grid: merge({}, qdFormGrid, grid),\n gutter: descriptions ? 0 : gutter\n },\n onSubmit,\n models: { data }\n }\n })\n\n const
|
|
1
|
+
{"version":3,"file":"index.vue2.mjs","sources":["../../../src/components/form/index.vue"],"sourcesContent":["<template>\n <t-form\n ref=\"form\"\n :class=\"[\n 'qd-form',\n $slots.footer ? 'qd-form--has-footer' : '',\n reProps.descriptions ? 'qd-form--descriptions' : ''\n ]\"\n v-loading=\"formLoad\"\n v-bind=\"reProps.formOptions\"\n :data=\"data\"\n @submit=\"handleSubmit\"\n >\n <slot name=\"header\" :context=\"data\" />\n\n <slot v-bind=\"reProps.gridOptions\">\n <qd-grid v-bind=\"reProps.gridOptions\">\n <qd-form-item\n v-for=\"(item, index) in reProps.formItems\"\n :key=\"index\"\n :crud-mode=\"crudMode\"\n :context=\"data\"\n :default-clearable=\"defaultClearable\"\n v-bind=\"item\"\n />\n </qd-grid>\n </slot>\n\n <slot name=\"footer\" :context=\"data\" />\n </t-form>\n</template>\n\n<script setup lang=\"ts\" generic=\"FD extends Data = Data\">\n import type { Data, FormInstanceFunctions, SubmitContext } from 'tdesign-vue-next'\n import type { QdFormBeforeSubmitQueueItem, QdFormProps } from './types'\n import { computed, nextTick, provide, onBeforeUnmount, useTemplateRef, ref, onMounted } from 'vue'\n import { Form as TForm, LoadingDirective } from 'tdesign-vue-next'\n import QdFormItem from './item.vue'\n import { QdGrid } from '../grid'\n import { PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE } from './config'\n import { suspectedWrapperPromise, easyCopy } from 'qidian-shared'\n import { qdFormGrid, qdFormProps } from './props'\n import { useVModels } from '@vueuse/core'\n import { useModal } from '../../hooks/useModal'\n import { merge } from 'lodash-es'\n\n defineOptions({\n name: 'QdForm'\n })\n\n const vLoading = LoadingDirective\n\n type Props = QdFormProps<Data>\n\n const props = withDefaults(defineProps<QdFormProps<Data>>(), qdFormProps)\n const emit = defineEmits<{\n 'update:modelValue': [Props['data']]\n }>()\n const { data } = useVModels(props, emit, { passive: true })\n\n const { msgError } = useModal()\n\n const beforeSubmitQueue: QdFormBeforeSubmitQueueItem[] = [] // 提交前需要处理的队列\n provide(PROVIDE_FORM_ADD_BEFORE_SUBMIT_QUEUE, (item: QdFormBeforeSubmitQueueItem) => {\n const index = beforeSubmitQueue.length\n nextTick(() => {\n beforeSubmitQueue.push(item)\n })\n onBeforeUnmount(() => {\n beforeSubmitQueue.splice(index, 1)\n })\n })\n\n const formRef = useTemplateRef<FormInstanceFunctions>('form')\n const submitShowErrorMessage = ref<boolean | undefined>()\n\n const submitLoad = ref(false)\n const reProps = computed(() => {\n const {\n grid,\n gutter,\n descriptions,\n items,\n onSubmit,\n data,\n scrollToFirstError,\n loading: externalLoad,\n ...formOptions\n } = props\n\n return {\n descriptions,\n externalLoad,\n formOptions: {\n ...formOptions,\n readonly: submitLoad.value || formOptions.readonly,\n labelAlign: descriptions ? 'left' : formOptions.labelAlign,\n scrollToFirstError: submitShowErrorMessage.value === false ? '' : scrollToFirstError\n },\n formItems: items,\n gridOptions: {\n grid: merge({}, qdFormGrid, grid),\n gutter: descriptions ? 0 : gutter\n },\n onSubmit,\n models: { data }\n }\n })\n\n const formLoad = computed(() => {\n return {\n loading: reProps.value.externalLoad,\n size: 'small',\n ...props.loadingProps\n }\n })\n\n async function handleSubmit(context: SubmitContext) {\n const showErrorMessage = submitShowErrorMessage.value ?? props.showErrorMessage\n submitShowErrorMessage.value = undefined\n\n if (showErrorMessage && context.firstError) {\n msgError(context.firstError)\n }\n\n if (context.validateResult === true || !showErrorMessage) {\n submitLoad.value = true\n const queueRes = await Promise.all(\n beforeSubmitQueue.map((item) => suspectedWrapperPromise(item()))\n )\n submitLoad.value = false\n\n const reQueueRes = { success: true, message: '' }\n queueRes.some(([err, res]) => {\n if (err) {\n reQueueRes.success = false\n reQueueRes.message = err.message\n return true\n }\n\n if (res === false) {\n reQueueRes.success = false\n return true\n }\n\n if (typeof res === 'object' && !res.success) {\n reQueueRes.success = false\n reQueueRes.message = res.message || ''\n return true\n }\n })\n\n if (reQueueRes.success === false) {\n if (showErrorMessage && reQueueRes.message) {\n msgError(reQueueRes.message)\n }\n return\n }\n }\n\n props.onSubmit?.({\n ...context,\n showErrorMessage,\n formData: easyCopy(data.value),\n crudMode: reProps.value.formOptions.crudMode\n })\n }\n\n const expose = {} as FormInstanceFunctions\n\n onMounted(() => {\n const submit: FormInstanceFunctions['submit'] = async (params) => {\n submitShowErrorMessage.value = params?.showErrorMessage\n formRef.value?.submit(params)\n }\n\n Object.assign(expose, formRef.value, { submit })\n })\n\n defineExpose(expose)\n</script>\n\n<style lang=\"less\" scoped>\n .qd-form {\n &--descriptions {\n :deep(.qd-grid) {\n border-top: 1px solid var(--td-component-border);\n border-left: 1px solid var(--td-component-border);\n }\n\n :deep(.qd-grid-item) {\n border-right: 1px solid var(--td-component-border);\n border-bottom: 1px solid var(--td-component-border);\n }\n\n :deep(.t-form) {\n &__item {\n display: flex;\n align-items: stretch;\n height: 100%;\n }\n\n &__label {\n display: flex;\n flex-direction: column;\n justify-content: center;\n background-color: var(--td-bg-color-secondarycontainer);\n padding: var(--td-comp-paddingLR-m) var(--td-comp-paddingLR-l);\n height: 100%;\n border-right: 1px solid var(--td-component-border);\n }\n\n &__controls {\n flex: 1 1 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding: var(--td-comp-paddingLR-m) var(--td-comp-paddingLR-l);\n margin-left: 0 !important;\n height: 100%;\n }\n }\n }\n }\n</style>\n"],"names":["data","_withDirectives","_openBlock","_createBlock","_unref","_mergeProps","$slots","_renderSlot","_normalizeProps","_guardReactiveProps","_createVNode","_createElementBlock","_Fragment"],"mappings":"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"}
|
package/dist/qidian-vue-ui.css
CHANGED
|
@@ -190,20 +190,20 @@ p {
|
|
|
190
190
|
.qd-form-item__component[data-v-3b3090b0] {
|
|
191
191
|
width: 100%;
|
|
192
192
|
}
|
|
193
|
-
.qd-form--descriptions[data-v-
|
|
193
|
+
.qd-form--descriptions[data-v-3882becd] .qd-grid {
|
|
194
194
|
border-top: 1px solid var(--td-component-border);
|
|
195
195
|
border-left: 1px solid var(--td-component-border);
|
|
196
196
|
}
|
|
197
|
-
.qd-form--descriptions[data-v-
|
|
197
|
+
.qd-form--descriptions[data-v-3882becd] .qd-grid-item {
|
|
198
198
|
border-right: 1px solid var(--td-component-border);
|
|
199
199
|
border-bottom: 1px solid var(--td-component-border);
|
|
200
200
|
}
|
|
201
|
-
.qd-form--descriptions[data-v-
|
|
201
|
+
.qd-form--descriptions[data-v-3882becd] .t-form__item {
|
|
202
202
|
display: flex;
|
|
203
203
|
align-items: stretch;
|
|
204
204
|
height: 100%;
|
|
205
205
|
}
|
|
206
|
-
.qd-form--descriptions[data-v-
|
|
206
|
+
.qd-form--descriptions[data-v-3882becd] .t-form__label {
|
|
207
207
|
display: flex;
|
|
208
208
|
flex-direction: column;
|
|
209
209
|
justify-content: center;
|
|
@@ -212,7 +212,7 @@ p {
|
|
|
212
212
|
height: 100%;
|
|
213
213
|
border-right: 1px solid var(--td-component-border);
|
|
214
214
|
}
|
|
215
|
-
.qd-form--descriptions[data-v-
|
|
215
|
+
.qd-form--descriptions[data-v-3882becd] .t-form__controls {
|
|
216
216
|
flex: 1 1 0;
|
|
217
217
|
overflow: hidden;
|
|
218
218
|
display: flex;
|