easybill-ui 1.4.1 → 1.4.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.
- package/dist/_virtual/_plugin-vue_export-helper.js +9 -0
- package/dist/assets/easybill-ui.css +1 -0
- package/dist/components/ConstantStatus/index.d.ts +24 -0
- package/dist/components/ConstantStatus/index.js +7 -0
- package/dist/components/ConstantStatus/src/ConstantStatus.vue.d.ts +25 -0
- package/dist/components/ConstantStatus/src/ConstantStatus.vue.js +76 -0
- package/dist/components/ConstantStatus/src/ConstantStatus.vue2.js +4 -0
- package/dist/components/ConstantStatus/src/index.d.ts +3 -0
- package/dist/components/ConstantStatus/src/index.js +5 -0
- package/dist/components/ConstantStatus/src/types.d.ts +18 -0
- package/dist/components/CurdForm/index.d.ts +9 -0
- package/dist/components/CurdForm/index.js +9 -0
- package/dist/components/CurdForm/src/CurdForm.vue.js +7 -0
- package/dist/components/CurdForm/src/CurdForm.vue2.js +326 -0
- package/dist/components/CurdForm/src/CurdFormItem.vue.d.ts +37 -0
- package/dist/components/CurdForm/src/CurdFormItem.vue.js +55 -0
- package/dist/components/CurdForm/src/CurdFormItem.vue2.js +4 -0
- package/dist/components/CurdForm/src/FormItem.vue.d.ts +44 -0
- package/dist/components/CurdForm/src/FormItem.vue.js +128 -0
- package/dist/components/CurdForm/src/FormItem.vue2.js +4 -0
- package/dist/components/CurdForm/src/FormTooltip.vue.d.ts +33 -0
- package/dist/components/CurdForm/src/FormTooltip.vue.js +63 -0
- package/dist/components/CurdForm/src/FormTooltip.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/index.d.ts +10 -0
- package/dist/components/CurdForm/src/components/index.js +38 -0
- package/dist/components/CurdForm/src/components/schema-form-autocomplete.vue.d.ts +56 -0
- package/dist/components/CurdForm/src/components/schema-form-autocomplete.vue.js +39 -0
- package/dist/components/CurdForm/src/components/schema-form-autocomplete.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-cascader.vue.d.ts +56 -0
- package/dist/components/CurdForm/src/components/schema-form-cascader.vue.js +32 -0
- package/dist/components/CurdForm/src/components/schema-form-cascader.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-checkbox.vue.d.ts +59 -0
- package/dist/components/CurdForm/src/components/schema-form-checkbox.vue.js +86 -0
- package/dist/components/CurdForm/src/components/schema-form-checkbox.vue2.js +33 -0
- package/dist/components/CurdForm/src/components/schema-form-choose.vue.js +217 -0
- package/dist/components/CurdForm/src/components/schema-form-choose.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-color-picker.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-color-picker.vue.js +15 -0
- package/dist/components/CurdForm/src/components/schema-form-color-picker.vue2.js +19 -0
- package/dist/components/CurdForm/src/components/schema-form-date-picker.vue.d.ts +56 -0
- package/dist/components/CurdForm/src/components/schema-form-date-picker.vue.js +32 -0
- package/dist/components/CurdForm/src/components/schema-form-date-picker.vue2.js +27 -0
- package/dist/components/CurdForm/src/components/schema-form-input-number.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-input-number.vue.js +39 -0
- package/dist/components/CurdForm/src/components/schema-form-input-number.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-input.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-input.vue.js +44 -0
- package/dist/components/CurdForm/src/components/schema-form-input.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-radio.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-radio.vue.js +114 -0
- package/dist/components/CurdForm/src/components/schema-form-radio.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-select-v2.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-select-v2.vue.js +69 -0
- package/dist/components/CurdForm/src/components/schema-form-select-v2.vue2.js +4 -0
- package/dist/components/CurdForm/src/components/schema-form-select.vue.js +65 -0
- package/dist/components/CurdForm/src/components/schema-form-select.vue2.js +66 -0
- package/dist/components/CurdForm/src/components/schema-form-switch.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-switch.vue.js +14 -0
- package/dist/components/CurdForm/src/components/schema-form-switch.vue2.js +25 -0
- package/dist/components/CurdForm/src/components/schema-form-time-picker.vue.d.ts +57 -0
- package/dist/components/CurdForm/src/components/schema-form-time-picker.vue.js +29 -0
- package/dist/components/CurdForm/src/components/schema-form-time-picker.vue2.js +30 -0
- package/dist/components/CurdForm/src/components/schema-form-tree-select.vue.d.ts +58 -0
- package/dist/components/CurdForm/src/components/schema-form-tree-select.vue.js +55 -0
- package/dist/components/CurdForm/src/components/schema-form-tree-select.vue2.js +31 -0
- package/dist/components/CurdForm/src/components/schema-form-value.vue.d.ts +54 -0
- package/dist/components/CurdForm/src/components/schema-form-value.vue.js +11 -0
- package/dist/components/CurdForm/src/components/schema-form-value.vue2.js +21 -0
- package/dist/components/CurdForm/src/directive/index.d.ts +12 -0
- package/dist/components/CurdForm/src/directive/index.js +32 -0
- package/dist/components/CurdForm/src/hooks/index.d.ts +4 -0
- package/dist/components/CurdForm/src/hooks/index.js +7 -0
- package/dist/components/CurdForm/src/types.d.ts +136 -0
- package/dist/components/CurdForm/src/types.js +27 -0
- package/dist/components/CurdForm/src/utils/ajax.d.ts +25 -0
- package/dist/components/CurdForm/src/utils/common.d.ts +1 -0
- package/dist/components/CurdForm/src/utils/common.js +13 -0
- package/dist/components/CurdGroupForm/index.d.ts +2 -0
- package/dist/components/CurdGroupForm/src/CurdGroupForm.vue.d.ts +36 -0
- package/dist/components/CurdGroupForm/src/CurdGroupForm.vue.js +113 -0
- package/dist/components/CurdGroupForm/src/CurdGroupForm.vue2.js +4 -0
- package/dist/components/CurdGroupForm/src/components/CurdFormGroup.vue.d.ts +52 -0
- package/dist/components/CurdGroupForm/src/components/CurdFormGroup.vue.js +64 -0
- package/dist/components/CurdGroupForm/src/components/CurdFormGroup.vue2.js +4 -0
- package/dist/components/CurdGroupForm/src/hooks/useFormHook.d.ts +12 -0
- package/dist/components/CurdGroupForm/src/hooks/useFormHook.js +32 -0
- package/dist/components/CurdGroupForm/types.d.ts +33 -0
- package/dist/components/CurdTable/index.d.ts +13 -0
- package/dist/components/CurdTable/index.js +7 -0
- package/dist/components/CurdTable/src/CurdTable.vue.js +562 -0
- package/dist/components/CurdTable/src/CurdTable.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableColumnControl.vue.d.ts +21 -0
- package/dist/components/CurdTable/src/STableColumnControl.vue.js +132 -0
- package/dist/components/CurdTable/src/STableColumnControl.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableDetail.vue.d.ts +9 -0
- package/dist/components/CurdTable/src/STableDetail.vue.js +53 -0
- package/dist/components/CurdTable/src/STableDetail.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableFilter.vue.d.ts +28 -0
- package/dist/components/CurdTable/src/STableFilter.vue.js +40 -0
- package/dist/components/CurdTable/src/STableFilter.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableItem.vue.d.ts +127 -0
- package/dist/components/CurdTable/src/STableItem.vue.js +147 -0
- package/dist/components/CurdTable/src/STableItem.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableItemFilter.vue.d.ts +34 -0
- package/dist/components/CurdTable/src/STableItemFilter.vue.js +71 -0
- package/dist/components/CurdTable/src/STableItemFilter.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableItemFormatter.vue.d.ts +38 -0
- package/dist/components/CurdTable/src/STableItemFormatter.vue.js +34 -0
- package/dist/components/CurdTable/src/STableItemFormatter.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableItemHeader.vue.d.ts +16 -0
- package/dist/components/CurdTable/src/STableItemHeader.vue.js +24 -0
- package/dist/components/CurdTable/src/STableItemHeader.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableItemHeaderTooltip.vue.d.ts +14 -0
- package/dist/components/CurdTable/src/STableItemHeaderTooltip.vue.js +48 -0
- package/dist/components/CurdTable/src/STableItemHeaderTooltip.vue2.js +4 -0
- package/dist/components/CurdTable/src/STableMenu.vue.d.ts +20 -0
- package/dist/components/CurdTable/src/STableMenu.vue.js +120 -0
- package/dist/components/CurdTable/src/STableMenu.vue2.js +4 -0
- package/dist/components/CurdTable/src/hooks/useColumnHook.d.ts +9 -0
- package/dist/components/CurdTable/src/hooks/useColumnHook.js +45 -0
- package/dist/components/CurdTable/src/types.d.ts +178 -0
- package/dist/components/CurdTable/utils/common.d.ts +5 -0
- package/dist/components/CurdTable/utils/common.js +18 -0
- package/dist/components/CurdTable/utils/tabelToExcel.d.ts +4 -0
- package/dist/components/CurdTable/utils/tabelToExcel.js +23 -0
- package/dist/components/DetailInfo/index.d.ts +147 -0
- package/dist/components/DetailInfo/index.js +7 -0
- package/dist/components/DetailInfo/src/DetailInfo.vue.d.ts +77 -0
- package/dist/components/DetailInfo/src/DetailInfo.vue.js +144 -0
- package/dist/components/DetailInfo/src/DetailInfo.vue2.js +4 -0
- package/dist/components/DetailInfo/src/DetailInfoContent.vue.d.ts +16 -0
- package/dist/components/DetailInfo/src/DetailInfoContent.vue.js +43 -0
- package/dist/components/DetailInfo/src/DetailInfoContent.vue2.js +4 -0
- package/dist/components/DetailInfo/src/DetailInfoTooltip.vue.d.ts +15 -0
- package/dist/components/DetailInfo/src/DetailInfoTooltip.vue.js +48 -0
- package/dist/components/DetailInfo/src/DetailInfoTooltip.vue2.js +4 -0
- package/dist/components/DetailInfo/src/types.d.ts +22 -0
- package/dist/components/FormDialog/index.d.ts +7 -0
- package/dist/components/FormDialog/index.js +6 -0
- package/dist/components/FormDialog/src/FormDialog.vue.d.ts +247 -0
- package/dist/components/FormDialog/src/FormDialog.vue.js +117 -0
- package/dist/components/FormDialog/src/FormDialog.vue2.js +191 -0
- package/dist/components/FormDialog/src/hooks/index.d.ts +2 -0
- package/dist/components/FormDialog/src/hooks/useStepList.d.ts +14 -0
- package/dist/components/FormDialog/src/hooks/useStepList.js +27 -0
- package/dist/components/FormDialog/src/hooks/useStepNavigation.d.ts +75 -0
- package/dist/components/FormDialog/src/hooks/useStepNavigation.js +34 -0
- package/dist/components/FormDialog/src/index.d.ts +13 -0
- package/dist/components/FormDialog/src/index.js +23 -0
- package/dist/components/FormDialog/src/types.d.ts +63 -0
- package/dist/components/TableFilter/index.d.ts +6 -0
- package/dist/components/TableFilter/index.js +7 -0
- package/dist/components/TableFilter/src/FilterExternal/FilterExternal.vue.js +91 -0
- package/dist/components/TableFilter/src/FilterExternal/FilterExternal.vue2.js +4 -0
- package/dist/components/TableFilter/src/FilterSearchBox.vue.d.ts +33 -0
- package/dist/components/TableFilter/src/FilterSearchBox.vue.js +71 -0
- package/dist/components/TableFilter/src/FilterSearchBox.vue2.js +4 -0
- package/dist/components/TableFilter/src/TableFilter.vue.js +180 -0
- package/dist/components/TableFilter/src/TableFilter.vue2.js +4 -0
- package/dist/components/TableFilter/src/components/FilterItem.vue.d.ts +37 -0
- package/dist/components/TableFilter/src/components/FilterItem.vue.js +63 -0
- package/dist/components/TableFilter/src/components/FilterItem.vue2.js +4 -0
- package/dist/components/TableFilter/src/components/FilterTags.vue.d.ts +114 -0
- package/dist/components/TableFilter/src/components/FilterTags.vue.js +142 -0
- package/dist/components/TableFilter/src/components/FilterTags.vue2.js +4 -0
- package/dist/components/TableFilter/src/components/FilterToggle.vue.d.ts +29 -0
- package/dist/components/TableFilter/src/components/FilterToggle.vue.js +70 -0
- package/dist/components/TableFilter/src/components/FilterToggle.vue2.js +4 -0
- package/dist/components/TableFilter/src/components/FilterType.vue.d.ts +30 -0
- package/dist/components/TableFilter/src/components/FilterType.vue.js +62 -0
- package/dist/components/TableFilter/src/components/FilterType.vue2.js +4 -0
- package/dist/components/TableFilter/src/components/containers/TagsSelect.vue.d.ts +42 -0
- package/dist/components/TableFilter/src/components/containers/TagsSelect.vue.js +99 -0
- package/dist/components/TableFilter/src/components/containers/TagsSelect.vue2.js +4 -0
- package/dist/components/TableFilter/types.d.ts +34 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +35 -0
- package/dist/locale/index.d.ts +9 -0
- package/dist/locale/index.js +6 -0
- package/dist/locale/lang/en.d.ts +49 -0
- package/{locale/lang/en.ts → dist/locale/lang/en.js} +10 -7
- package/dist/locale/lang/zh-cn.d.ts +49 -0
- package/{locale/lang/zh-cn.ts → dist/locale/lang/zh-cn.js} +10 -7
- package/dist/utils/common/index.d.ts +8 -0
- package/dist/utils/common/index.js +13 -0
- package/dist/utils/hooks/useGlobalConfig.d.ts +13 -0
- package/dist/utils/hooks/useGlobalConfig.js +22 -0
- package/dist/utils/hooks/useLocal.d.ts +15 -0
- package/dist/utils/hooks/useLocal.js +33 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/vue/index.d.ts +2 -0
- package/dist/utils/vue/index.js +4 -0
- package/dist/utils/vue/install.d.ts +2 -0
- package/dist/utils/vue/install.js +14 -0
- package/dist/utils/vue/make-installer.d.ts +5 -0
- package/dist/utils/vue/make-installer.js +9 -0
- package/dist/utils/vue/typescript.d.ts +5 -0
- package/package.json +55 -46
- package/components/ConstantStatus/index.ts +0 -5
- package/components/ConstantStatus/src/ConstantStatus.vue +0 -69
- package/components/ConstantStatus/src/index.ts +0 -3
- package/components/ConstantStatus/src/types.ts +0 -18
- package/components/CurdForm/index.ts +0 -9
- package/components/CurdForm/src/CurdForm.vue +0 -500
- package/components/CurdForm/src/CurdFormItem.vue +0 -70
- package/components/CurdForm/src/FormItem.vue +0 -105
- package/components/CurdForm/src/FormTooltip.vue +0 -54
- package/components/CurdForm/src/components/index.ts +0 -52
- package/components/CurdForm/src/components/schema-form-autocomplete.vue +0 -25
- package/components/CurdForm/src/components/schema-form-cascader.vue +0 -24
- package/components/CurdForm/src/components/schema-form-checkbox.vue +0 -53
- package/components/CurdForm/src/components/schema-form-choose.vue +0 -225
- package/components/CurdForm/src/components/schema-form-color-picker.vue +0 -23
- package/components/CurdForm/src/components/schema-form-date-picker.vue +0 -34
- package/components/CurdForm/src/components/schema-form-input-number.vue +0 -12
- package/components/CurdForm/src/components/schema-form-input.vue +0 -21
- package/components/CurdForm/src/components/schema-form-radio.vue +0 -59
- package/components/CurdForm/src/components/schema-form-select-v2.vue +0 -60
- package/components/CurdForm/src/components/schema-form-select.vue +0 -93
- package/components/CurdForm/src/components/schema-form-switch.vue +0 -29
- package/components/CurdForm/src/components/schema-form-time-picker.vue +0 -37
- package/components/CurdForm/src/components/schema-form-tree-select.vue +0 -45
- package/components/CurdForm/src/components/schema-form-value.vue +0 -25
- package/components/CurdForm/src/directive/index.ts +0 -60
- package/components/CurdForm/src/hooks/index.ts +0 -6
- package/components/CurdForm/src/types.ts +0 -146
- package/components/CurdForm/src/utils/ajax.ts +0 -125
- package/components/CurdForm/src/utils/common.ts +0 -17
- package/components/CurdGroupForm/index.ts +0 -2
- package/components/CurdGroupForm/src/CurdGroupForm.vue +0 -93
- package/components/CurdGroupForm/src/components/CurdFormGroup.vue +0 -39
- package/components/CurdGroupForm/src/hooks/useFormHook.ts +0 -55
- package/components/CurdGroupForm/types.ts +0 -22
- package/components/CurdTable/index.ts +0 -5
- package/components/CurdTable/src/CurdTable.vue +0 -470
- package/components/CurdTable/src/STableColumnControl.vue +0 -88
- package/components/CurdTable/src/STableDetail.vue +0 -52
- package/components/CurdTable/src/STableFilter.vue +0 -50
- package/components/CurdTable/src/STableItem.vue +0 -119
- package/components/CurdTable/src/STableItemFilter.vue +0 -53
- package/components/CurdTable/src/STableItemFormatter.vue +0 -35
- package/components/CurdTable/src/STableItemHeader.vue +0 -33
- package/components/CurdTable/src/STableItemHeaderTooltip.vue +0 -32
- package/components/CurdTable/src/STableMenu.vue +0 -77
- package/components/CurdTable/src/hooks/useColumnHook.ts +0 -77
- package/components/CurdTable/src/types.ts +0 -163
- package/components/CurdTable/utils/common.ts +0 -33
- package/components/CurdTable/utils/tabelToExcel.ts +0 -68
- package/components/DetailInfo/index.ts +0 -5
- package/components/DetailInfo/src/DetailInfo.vue +0 -108
- package/components/DetailInfo/src/DetailInfoContent.vue +0 -27
- package/components/DetailInfo/src/DetailInfoTooltip.vue +0 -33
- package/components/DetailInfo/src/types.ts +0 -23
- package/components/FormDialog/index.ts +0 -3
- package/components/FormDialog/src/FormDialog.vue +0 -276
- package/components/FormDialog/src/hooks/index.ts +0 -2
- package/components/FormDialog/src/hooks/useStepList.ts +0 -49
- package/components/FormDialog/src/hooks/useStepNavigation.ts +0 -74
- package/components/FormDialog/src/index.ts +0 -39
- package/components/FormDialog/src/types.ts +0 -51
- package/components/TableFilter/index.ts +0 -6
- package/components/TableFilter/src/FilterExternal/FilterExternal.vue +0 -121
- package/components/TableFilter/src/FilterSearchBox.vue +0 -65
- package/components/TableFilter/src/TableFilter.vue +0 -236
- package/components/TableFilter/src/components/FilterItem.vue +0 -76
- package/components/TableFilter/src/components/FilterTags.vue +0 -132
- package/components/TableFilter/src/components/FilterToggle.vue +0 -40
- package/components/TableFilter/src/components/FilterType.vue +0 -78
- package/components/TableFilter/src/components/containers/TagsSelect.vue +0 -89
- package/components/TableFilter/types.ts +0 -36
- package/index.ts +0 -25
- package/locale/index.ts +0 -11
- package/utils/common/index.ts +0 -24
- package/utils/hooks/useGlobalConfig.ts +0 -39
- package/utils/hooks/useLocal.ts +0 -61
- package/utils/index.ts +0 -2
- package/utils/vue/index.ts +0 -3
- package/utils/vue/install.ts +0 -18
- package/utils/vue/make-installer.ts +0 -16
- package/utils/vue/typescript.ts +0 -7
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-select v-model="model" style="width: 100%" :loading="formItem.loading || loading" :filterable="true" v-bind="selectProps" v-on="eventObject">
|
|
3
|
-
<el-option v-if="props.all && !props.multiple" value="" :label="t('el.form.all')"></el-option>
|
|
4
|
-
<el-checkbox v-if="props.all && props.multiple" v-model="checked" :label="t('el.form.allSelect')" class="schema-form-select-check" />
|
|
5
|
-
<template v-for="option in list" :key="option.value">
|
|
6
|
-
<el-option :value="option.value" :label="option.label" :disabled="option.disabled">
|
|
7
|
-
<div v-if="option.html" v-html="option.html"></div>
|
|
8
|
-
<template v-else>{{ option.label }}</template>
|
|
9
|
-
</el-option>
|
|
10
|
-
</template>
|
|
11
|
-
<template v-for="(item, key) in props?.slots" :key="key" #[key]>
|
|
12
|
-
<component :is="item" v-model="model" :formItem="formItem" :formModel="formModel" :props="props" :event-object="eventObject" />
|
|
13
|
-
</template>
|
|
14
|
-
</el-select>
|
|
15
|
-
</template>
|
|
16
|
-
<script lang="ts">
|
|
17
|
-
import { useLocale } from "easybill-ui"
|
|
18
|
-
import { computed, defineComponent, onMounted, ref, watch } from "vue"
|
|
19
|
-
import type { CurdFormOptionItem } from "../types"
|
|
20
|
-
import { FormItemProps } from "../types"
|
|
21
|
-
export default defineComponent({
|
|
22
|
-
name: "SchemaFormSelect",
|
|
23
|
-
components: {},
|
|
24
|
-
props: {
|
|
25
|
-
...FormItemProps,
|
|
26
|
-
modelValue: {
|
|
27
|
-
type: [String, Number, Boolean, Array],
|
|
28
|
-
default: null,
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
emits: ["update:modelValue"],
|
|
32
|
-
setup(props, { emit }) {
|
|
33
|
-
const model = computed({
|
|
34
|
-
get: () => props.modelValue,
|
|
35
|
-
set: (val) => emit("update:modelValue", val),
|
|
36
|
-
})
|
|
37
|
-
const { t } = useLocale()
|
|
38
|
-
const checked = computed({
|
|
39
|
-
get() {
|
|
40
|
-
return Array.isArray(model.value) && model.value.length && props.formItem?.options?.every((item) => Array.isArray(model.value) && model.value?.includes(item.value))
|
|
41
|
-
},
|
|
42
|
-
set(val) {
|
|
43
|
-
const options = props.formItem.options || []
|
|
44
|
-
model.value = val ? options.map((a) => a.value) : []
|
|
45
|
-
if (props?.eventObject?.change) props.eventObject.change(props.formModel, props.formItem)
|
|
46
|
-
},
|
|
47
|
-
})
|
|
48
|
-
const loading = ref(false)
|
|
49
|
-
// 有的options是从接口里拿的,掉接口需要时间,初始全选的时候全选的按钮没有勾选上,所以监听options
|
|
50
|
-
const list = ref(props.formItem.options)
|
|
51
|
-
watch(
|
|
52
|
-
() => props.formItem.options,
|
|
53
|
-
(val) => {
|
|
54
|
-
list.value = val
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
deep: true,
|
|
58
|
-
},
|
|
59
|
-
)
|
|
60
|
-
onMounted(() => {})
|
|
61
|
-
const { filterMethod, remoteMethod, ...selectProps } = props.props
|
|
62
|
-
// 前端筛选
|
|
63
|
-
if (filterMethod) {
|
|
64
|
-
selectProps.filterMethod = function (val: string) {
|
|
65
|
-
const remoteMehotd1 = filterMethod as (val: string, optionItem?: CurdFormOptionItem) => Promise<CurdFormOptionItem[]>
|
|
66
|
-
list.value = props.formItem?.options?.filter((a) => remoteMehotd1(val, a))
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
// 远程筛选
|
|
70
|
-
if (selectProps.remote && remoteMethod) {
|
|
71
|
-
selectProps.remoteMethod = function (val: string) {
|
|
72
|
-
loading.value = true
|
|
73
|
-
const remoteMehotd1 = remoteMethod as (val: string, optionItem?: CurdFormOptionItem) => Promise<CurdFormOptionItem[]>
|
|
74
|
-
remoteMehotd1(val)
|
|
75
|
-
.then((res) => {
|
|
76
|
-
list.value = res
|
|
77
|
-
})
|
|
78
|
-
.finally(() => {
|
|
79
|
-
loading.value = false
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
model,
|
|
85
|
-
checked,
|
|
86
|
-
selectProps,
|
|
87
|
-
list,
|
|
88
|
-
loading,
|
|
89
|
-
t,
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
})
|
|
93
|
-
</script>
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-switch v-model="model" v-bind="props" v-on="eventObject" />
|
|
3
|
-
</template>
|
|
4
|
-
<script lang="ts">
|
|
5
|
-
import { computed, defineComponent } from "vue"
|
|
6
|
-
import { FormItemProps } from "../types"
|
|
7
|
-
export default defineComponent({
|
|
8
|
-
name: "SchemaFormSwitch",
|
|
9
|
-
components: {},
|
|
10
|
-
props: {
|
|
11
|
-
...FormItemProps,
|
|
12
|
-
modelValue: {
|
|
13
|
-
type: [String, Number, Boolean],
|
|
14
|
-
default: null,
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
emits: ["update:modelValue"],
|
|
18
|
-
setup(props, { emit }) {
|
|
19
|
-
const model = computed({
|
|
20
|
-
get: () => props.modelValue,
|
|
21
|
-
set: (val) => emit("update:modelValue", val),
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
model,
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
})
|
|
29
|
-
</script>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-time-picker v-model="model" v-bind="props" v-on="eventObject">
|
|
3
|
-
<template v-for="(item, key) in props.slots" :key="key" #[key]="slotScope">
|
|
4
|
-
<component :is="item" v-model="model" v-bind="slotScope" :form-item="formItem" :form-model="formModel" :props="props" :event-object="eventObject" />
|
|
5
|
-
</template>
|
|
6
|
-
</el-time-picker>
|
|
7
|
-
</template>
|
|
8
|
-
<script lang="ts">
|
|
9
|
-
import { useLocale } from "easybill-ui"
|
|
10
|
-
import { type ModelValueType } from "element-plus"
|
|
11
|
-
import { computed, defineComponent, type PropType } from "vue"
|
|
12
|
-
import { FormItemProps } from "../types"
|
|
13
|
-
export default defineComponent({
|
|
14
|
-
name: "SchemaFormTimePicker",
|
|
15
|
-
components: {},
|
|
16
|
-
props: {
|
|
17
|
-
...FormItemProps,
|
|
18
|
-
modelValue: {
|
|
19
|
-
type: [Array, String] as PropType<ModelValueType>,
|
|
20
|
-
default: "",
|
|
21
|
-
}, // 表单项值
|
|
22
|
-
},
|
|
23
|
-
emits: ["update:modelValue"],
|
|
24
|
-
setup(props, { emit }) {
|
|
25
|
-
const model = computed({
|
|
26
|
-
get: () => props.modelValue,
|
|
27
|
-
set: (val) => emit("update:modelValue", val),
|
|
28
|
-
})
|
|
29
|
-
const { t } = useLocale()
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
model,
|
|
33
|
-
t,
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
})
|
|
37
|
-
</script>
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="schema-tree-select">
|
|
3
|
-
<div v-if="formItem.loading" class="loading" style="color: #999; font-size: 12px">
|
|
4
|
-
<el-icon class="is-loading"><Loading /></el-icon> {{ t("el.form.loading") }}
|
|
5
|
-
</div>
|
|
6
|
-
<el-tree-select v-if="!formItem.loading && formItem.options && formItem.options.length" v-model="model" :class="[props?.showType]" style="width: 100%" :data="formItem.options" v-bind="props" v-on="eventObject"> </el-tree-select>
|
|
7
|
-
<div v-if="!formItem.loading && !formItem.options?.length" class="empty">
|
|
8
|
-
<component :is="empty" v-if="empty" :form-model="formModel" :form-item="formItem" :props="props" />
|
|
9
|
-
<template v-else>
|
|
10
|
-
<el-icon><Warning /></el-icon> <span>{{ props.noDataText || t("el.form.nodata") }}</span>
|
|
11
|
-
</template>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
</template>
|
|
15
|
-
<script lang="ts">
|
|
16
|
-
import { Loading, Warning } from "@element-plus/icons-vue"
|
|
17
|
-
import { useLocale } from "easybill-ui"
|
|
18
|
-
import { computed, defineComponent, toRaw } from "vue"
|
|
19
|
-
import { FormItemProps } from "../types"
|
|
20
|
-
export default defineComponent({
|
|
21
|
-
name: "SchemaFormTreeSelect",
|
|
22
|
-
components: { Loading, Warning },
|
|
23
|
-
props: {
|
|
24
|
-
...FormItemProps,
|
|
25
|
-
modelValue: {
|
|
26
|
-
type: [String, Number, Boolean],
|
|
27
|
-
default: "",
|
|
28
|
-
}, // 表单项值
|
|
29
|
-
},
|
|
30
|
-
emits: ["update:modelValue"],
|
|
31
|
-
setup(props, { emit }) {
|
|
32
|
-
const model = computed({
|
|
33
|
-
get: () => props.modelValue,
|
|
34
|
-
set: (val) => emit("update:modelValue", val),
|
|
35
|
-
})
|
|
36
|
-
const { t } = useLocale()
|
|
37
|
-
|
|
38
|
-
return {
|
|
39
|
-
model,
|
|
40
|
-
empty: toRaw(props.props.empty) || "",
|
|
41
|
-
t,
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
})
|
|
45
|
-
</script>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div v-bind="props" v-html="model"></div>
|
|
3
|
-
</template>
|
|
4
|
-
<script lang="ts">
|
|
5
|
-
import { computed, defineComponent } from "vue"
|
|
6
|
-
import { FormItemProps } from "../types"
|
|
7
|
-
export default defineComponent({
|
|
8
|
-
name: "SchemaFormValue",
|
|
9
|
-
components: {},
|
|
10
|
-
props: {
|
|
11
|
-
...FormItemProps,
|
|
12
|
-
},
|
|
13
|
-
emits: ["update:modelValue"],
|
|
14
|
-
setup(props, { emit }) {
|
|
15
|
-
const model = computed({
|
|
16
|
-
get: () => props.modelValue,
|
|
17
|
-
set: (val) => emit("update:modelValue", val),
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
model,
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
})
|
|
25
|
-
</script>
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
function getInput(el: HTMLElement): HTMLInputElement {
|
|
2
|
-
let inputEle: HTMLInputElement
|
|
3
|
-
if (el.tagName !== "INPUT") {
|
|
4
|
-
inputEle = el.querySelector("input") as HTMLInputElement
|
|
5
|
-
} else {
|
|
6
|
-
inputEle = el as HTMLInputElement
|
|
7
|
-
}
|
|
8
|
-
return inputEle
|
|
9
|
-
}
|
|
10
|
-
function dispatchEvent(el: HTMLElement, type: string) {
|
|
11
|
-
const evt = document.createEvent("HTMLEvents")
|
|
12
|
-
evt.initEvent(type, true, true)
|
|
13
|
-
el.dispatchEvent(evt)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// 过滤前后空格的指令 v-trim
|
|
17
|
-
const directives = {
|
|
18
|
-
trim: {
|
|
19
|
-
mounted(el: El) {
|
|
20
|
-
const inputEle = getInput(el)
|
|
21
|
-
// console.log(inputEle, "trimInputEle")
|
|
22
|
-
const handler = function (event: FocusEvent) {
|
|
23
|
-
if (!event.target) return
|
|
24
|
-
const target = event.target as HTMLInputElement
|
|
25
|
-
const newVal = target.value.trim()
|
|
26
|
-
if (target.value !== newVal) {
|
|
27
|
-
target.value = newVal
|
|
28
|
-
dispatchEvent(inputEle, "input")
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
// 回车后过滤空格
|
|
32
|
-
const keydown = function (event: KeyboardEvent) {
|
|
33
|
-
if (event.key === "Enter") {
|
|
34
|
-
const target = event.target as HTMLInputElement
|
|
35
|
-
const newVal = target.value.trim()
|
|
36
|
-
if (target.value !== newVal) {
|
|
37
|
-
target.value = newVal
|
|
38
|
-
dispatchEvent(inputEle, "input")
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
el.inputEle = inputEle
|
|
43
|
-
el._blurHandler = handler
|
|
44
|
-
el._keyHandler = keydown
|
|
45
|
-
if (inputEle) inputEle.addEventListener("blur", handler)
|
|
46
|
-
if (inputEle) inputEle.addEventListener("keydown", keydown)
|
|
47
|
-
},
|
|
48
|
-
unmounted(el: El) {
|
|
49
|
-
const { inputEle } = el
|
|
50
|
-
if (inputEle) inputEle.removeEventListener("blur", el._blurHandler)
|
|
51
|
-
if (inputEle) inputEle.removeEventListener("keydown", el._keyHandler)
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
}
|
|
55
|
-
interface El extends HTMLElement {
|
|
56
|
-
inputEle: HTMLElement
|
|
57
|
-
_blurHandler: (event: FocusEvent) => void
|
|
58
|
-
_keyHandler: (event: KeyboardEvent) => void
|
|
59
|
-
}
|
|
60
|
-
export { directives }
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { ElForm, type FormItemRule, type FormRules } from "element-plus"
|
|
2
|
-
import type { Arrayable } from "element-plus/es/utils"
|
|
3
|
-
import { defineComponent, type PropType, type VNode } from "vue"
|
|
4
|
-
import type { OptionItem } from "../../ConstantStatus"
|
|
5
|
-
export interface FormSchema {
|
|
6
|
-
formItem: FormItem[]
|
|
7
|
-
rules?: FormRules | ((formModel: Fields, context: FormContext) => FormRules)
|
|
8
|
-
getRules?: (formModel: Fields, context: FormContext) => FormRules
|
|
9
|
-
labelPosition?: "left" | "right" | "top" | string
|
|
10
|
-
gutter?: number
|
|
11
|
-
labelWidth?: number | string
|
|
12
|
-
inline?: boolean
|
|
13
|
-
inlineMessage?: boolean
|
|
14
|
-
statusIcon?: boolean
|
|
15
|
-
showMessage?: boolean
|
|
16
|
-
size?: "default" | "small" | "large" | string
|
|
17
|
-
disabled?: boolean
|
|
18
|
-
validateOnRuleChange?: boolean
|
|
19
|
-
hideRequiredAsterisk?: boolean
|
|
20
|
-
scrollToError?: boolean
|
|
21
|
-
}
|
|
22
|
-
export interface FormItem {
|
|
23
|
-
prop: string
|
|
24
|
-
label?: string
|
|
25
|
-
type?: FormItemTypeEmun | ReturnType<typeof defineComponent>
|
|
26
|
-
value?: unknown
|
|
27
|
-
eventObject?: EventObject
|
|
28
|
-
slots?: Record<string, () => VNode[] | string | null>
|
|
29
|
-
options?: Array<CurdFormOptionItem>
|
|
30
|
-
asyncOptions?: (modelRef: Fields, formItem: FormItem, context: FormContext, config?: unknown) => Promise<Array<CurdFormOptionItem>>
|
|
31
|
-
loading?: boolean
|
|
32
|
-
hidden?: boolean | ((model: Fields) => boolean)
|
|
33
|
-
rules?: Arrayable<FormItemRule>
|
|
34
|
-
props?: FormItemPropObject | ((formModel: Fields, formItem: FormItem) => FormItemPropObject)
|
|
35
|
-
formItemProps?: FormItemPropObject | ((formModel: Fields, formItem: FormItem) => FormItemPropObject)
|
|
36
|
-
labelWidth?: string | number
|
|
37
|
-
labelPosition?: "left" | "right" | "top" | string
|
|
38
|
-
span?: number
|
|
39
|
-
disabled?: boolean
|
|
40
|
-
tooltip?: string | ((formModel: Fields, formItem: FormItem) => Partial<TooltipProps> | string) | Partial<TooltipProps>
|
|
41
|
-
autoload?: boolean
|
|
42
|
-
prefix?: string | unknown
|
|
43
|
-
suffix?: string | unknown
|
|
44
|
-
empty?: string | unknown
|
|
45
|
-
sortIndex?: number
|
|
46
|
-
}
|
|
47
|
-
export type FormItemTypeEmun = "input" | "select" | "radio" | "checkbox" | "input-number" | "switch" | "file" | "date-picker" | "time-picker" | "color-picker" | "value" | "tree-select" | "autocomplete" | "choose"
|
|
48
|
-
export interface FormItemPropObject extends Fields {
|
|
49
|
-
slots?: Record<string, (props?: FormItemPropObject) => VNode | VNode[] | string | null>
|
|
50
|
-
all?: boolean | OptionItem
|
|
51
|
-
empty?: string | VNode
|
|
52
|
-
noDataText?: string
|
|
53
|
-
style?: Record<string, string> | string
|
|
54
|
-
}
|
|
55
|
-
export interface TooltipProps extends Record<string, unknown> {
|
|
56
|
-
effect?: "dark" | "light" | string
|
|
57
|
-
content?: string
|
|
58
|
-
rawContent?: boolean
|
|
59
|
-
placement?: string
|
|
60
|
-
disabled?: boolean
|
|
61
|
-
offset?: number
|
|
62
|
-
transition?: string
|
|
63
|
-
popperOptions?: unknown
|
|
64
|
-
showAfter?: number
|
|
65
|
-
showArrow?: boolean
|
|
66
|
-
hideAfter?: number
|
|
67
|
-
autoClose?: number
|
|
68
|
-
popperClass?: string
|
|
69
|
-
enterable?: boolean
|
|
70
|
-
teleported?: boolean
|
|
71
|
-
trigger?: string | string[]
|
|
72
|
-
}
|
|
73
|
-
export interface FormContext {
|
|
74
|
-
loadOptions: (prop: string, config?: unknown) => void | Promise<CurdFormOptionItem[]> | CurdFormOptionItem[]
|
|
75
|
-
setOptions: (prop: string, options: CurdFormOptionItem[], config?: unknown) => void | Promise<void>
|
|
76
|
-
change: (formModel: Fields, formItem: FormItem) => void
|
|
77
|
-
formModel: Fields
|
|
78
|
-
formSchema: FormSchema
|
|
79
|
-
formRef: InstanceType<typeof ElForm> | undefined
|
|
80
|
-
components: Record<string, unknown>
|
|
81
|
-
findFormItem?: (prop: string) => FormItemSearchResult | undefined
|
|
82
|
-
hasFormItem?: (prop: string) => boolean
|
|
83
|
-
registerFormItems?: (provider: FormItemProvider) => () => void
|
|
84
|
-
refreshFormItems?: (providerId?: string | symbol) => void
|
|
85
|
-
}
|
|
86
|
-
export interface Fields {
|
|
87
|
-
[key: string]: unknown
|
|
88
|
-
}
|
|
89
|
-
export interface CurdFormOptionItem extends OptionItem {
|
|
90
|
-
component?: string | ReturnType<typeof defineComponent>
|
|
91
|
-
disabled?: boolean
|
|
92
|
-
type?: string | "radio" | "button"
|
|
93
|
-
rawContent?: boolean
|
|
94
|
-
/** 引用的表单项 prop 数组,用于 choose 类型 */
|
|
95
|
-
props?: string[]
|
|
96
|
-
/** 内联表单项定义,用于 choose 类型 */
|
|
97
|
-
items?: FormItem[]
|
|
98
|
-
}
|
|
99
|
-
export interface FormItemProvider {
|
|
100
|
-
id: string | symbol
|
|
101
|
-
getItems: () => FormItem[] | undefined | null
|
|
102
|
-
}
|
|
103
|
-
export interface FormItemSearchResult {
|
|
104
|
-
item: FormItem
|
|
105
|
-
parent?: FormItem
|
|
106
|
-
path: string
|
|
107
|
-
providerId?: string | symbol
|
|
108
|
-
}
|
|
109
|
-
// interface EventObjectDefault {
|
|
110
|
-
// change?: (formModel: Fields, formItem: FormItem, proxy: any) => void
|
|
111
|
-
// }
|
|
112
|
-
export type EventObjectHandler = (formModel: Fields, formItem: FormItem, context?: FormContext, ...args: unknown[]) => void | boolean
|
|
113
|
-
export interface EventObject {
|
|
114
|
-
change?: EventObjectHandler
|
|
115
|
-
optionLoaded?: EventObjectHandler
|
|
116
|
-
[key: string]: EventObjectHandler | undefined
|
|
117
|
-
}
|
|
118
|
-
// export interface OptionItem {
|
|
119
|
-
// label: string
|
|
120
|
-
// value: string | number | boolean
|
|
121
|
-
// disabled?: boolean
|
|
122
|
-
// tooltip?: string | ((formModel: Fields, formItem: FormItem) => string)
|
|
123
|
-
// [key: string]: any
|
|
124
|
-
// }
|
|
125
|
-
export const FormItemProps = {
|
|
126
|
-
formItem: {
|
|
127
|
-
type: Object as PropType<FormItem>,
|
|
128
|
-
default: () => ({}),
|
|
129
|
-
},
|
|
130
|
-
formModel: {
|
|
131
|
-
type: Object as PropType<Fields>,
|
|
132
|
-
default: () => ({}),
|
|
133
|
-
},
|
|
134
|
-
props: {
|
|
135
|
-
type: Object as PropType<FormItemPropObject>,
|
|
136
|
-
default: () => ({}),
|
|
137
|
-
},
|
|
138
|
-
eventObject: {
|
|
139
|
-
type: Object as PropType<EventObject>,
|
|
140
|
-
default: () => ({}),
|
|
141
|
-
},
|
|
142
|
-
modelValue: {
|
|
143
|
-
type: String,
|
|
144
|
-
default: "",
|
|
145
|
-
},
|
|
146
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
const SCOPE = "ElUpload"
|
|
2
|
-
|
|
3
|
-
export class UploadAjaxError extends Error {
|
|
4
|
-
name = "UploadAjaxError"
|
|
5
|
-
status: number
|
|
6
|
-
method: string
|
|
7
|
-
url: string
|
|
8
|
-
|
|
9
|
-
constructor(message: string, status: number, method: string, url: string) {
|
|
10
|
-
super(message)
|
|
11
|
-
this.status = status
|
|
12
|
-
this.method = method
|
|
13
|
-
this.url = url
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function getError(action: string, option: UploadRequestOptions, xhr: XMLHttpRequest) {
|
|
18
|
-
let msg: string
|
|
19
|
-
if (xhr.response) {
|
|
20
|
-
msg = `${xhr.response.error || xhr.response}`
|
|
21
|
-
} else if (xhr.responseText) {
|
|
22
|
-
msg = `${xhr.responseText}`
|
|
23
|
-
} else {
|
|
24
|
-
msg = `fail to ${option.method} ${action} ${xhr.status}`
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return new UploadAjaxError(msg, xhr.status, option.method, action)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function getBody(xhr: XMLHttpRequest): XMLHttpRequestResponseType {
|
|
31
|
-
const text = xhr.responseText || xhr.response
|
|
32
|
-
if (!text) {
|
|
33
|
-
return text
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
try {
|
|
37
|
-
return JSON.parse(text)
|
|
38
|
-
} catch {
|
|
39
|
-
return text
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export const ajaxUpload: UploadRequestHandler = (option) => {
|
|
44
|
-
if (typeof XMLHttpRequest === "undefined") throwError(SCOPE, "XMLHttpRequest is undefined")
|
|
45
|
-
|
|
46
|
-
const xhr = new XMLHttpRequest()
|
|
47
|
-
const action = option.action
|
|
48
|
-
|
|
49
|
-
if (xhr.upload) {
|
|
50
|
-
xhr.upload.addEventListener("progress", (evt) => {
|
|
51
|
-
const progressEvt = evt as UploadProgressEvent
|
|
52
|
-
progressEvt.percent = evt.total > 0 ? (evt.loaded / evt.total) * 100 : 0
|
|
53
|
-
option.onProgress(progressEvt)
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const formData = new FormData()
|
|
58
|
-
if (option.data) {
|
|
59
|
-
for (const [key, value] of Object.entries(option.data)) {
|
|
60
|
-
if (Array.isArray(value)) {
|
|
61
|
-
formData.append(key, value[0])
|
|
62
|
-
} else formData.append(key, value)
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
formData.append(option.filename, option.file, option.file.name)
|
|
66
|
-
|
|
67
|
-
xhr.addEventListener("error", () => {
|
|
68
|
-
option.onError(getError(action, option, xhr))
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
xhr.addEventListener("load", () => {
|
|
72
|
-
if (xhr.status < 200 || xhr.status >= 300) {
|
|
73
|
-
return option.onError(getError(action, option, xhr))
|
|
74
|
-
}
|
|
75
|
-
option.onSuccess(getBody(xhr))
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
xhr.open(option.method, action, true)
|
|
79
|
-
|
|
80
|
-
if (option.withCredentials && "withCredentials" in xhr) {
|
|
81
|
-
xhr.withCredentials = true
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const headers = option.headers || {}
|
|
85
|
-
if (headers instanceof Headers) {
|
|
86
|
-
headers.forEach((value, key) => xhr.setRequestHeader(key, value))
|
|
87
|
-
} else {
|
|
88
|
-
for (const [key, value] of Object.entries(headers)) {
|
|
89
|
-
if (isNil(value)) continue
|
|
90
|
-
xhr.setRequestHeader(key, String(value))
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
xhr.send(formData)
|
|
95
|
-
return xhr
|
|
96
|
-
}
|
|
97
|
-
class ElementPlusError extends Error {
|
|
98
|
-
constructor(m: string) {
|
|
99
|
-
super(m)
|
|
100
|
-
this.name = "CurdFormError"
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export function throwError(scope: string, m: string): never {
|
|
104
|
-
throw new ElementPlusError(`[${scope}] ${m}`)
|
|
105
|
-
}
|
|
106
|
-
function isNil(value: unknown) {
|
|
107
|
-
return value == null
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export interface UploadProgressEvent extends ProgressEvent {
|
|
111
|
-
percent: number
|
|
112
|
-
}
|
|
113
|
-
export type UploadRequestHandler = (options: UploadRequestOptions) => XMLHttpRequest | Promise<unknown>
|
|
114
|
-
export interface UploadRequestOptions {
|
|
115
|
-
action: string
|
|
116
|
-
method: string
|
|
117
|
-
data: Record<string, string | Blob | [string | Blob, string]>
|
|
118
|
-
filename: string
|
|
119
|
-
file: File
|
|
120
|
-
headers: Headers | Record<string, string | number | null | undefined>
|
|
121
|
-
onError: (evt: UploadAjaxError) => void
|
|
122
|
-
onProgress: (evt: UploadProgressEvent) => void
|
|
123
|
-
onSuccess: (response: XMLHttpRequestResponseType) => void
|
|
124
|
-
withCredentials: boolean
|
|
125
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export function deepClone<T extends Array<T> | unknown>(sourceData: T): T {
|
|
2
|
-
if (Array.isArray(sourceData)) {
|
|
3
|
-
return sourceData.map((item) => deepClone(item)) as T
|
|
4
|
-
}
|
|
5
|
-
if (typeof sourceData !== "object" || sourceData === null) {
|
|
6
|
-
return sourceData
|
|
7
|
-
}
|
|
8
|
-
const obj: T = {} as T
|
|
9
|
-
for (const key in sourceData) {
|
|
10
|
-
if (typeof sourceData[key] === "object" && sourceData[key] !== null) {
|
|
11
|
-
obj[key] = deepClone(sourceData[key])
|
|
12
|
-
} else {
|
|
13
|
-
obj[key] = sourceData[key]
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return obj
|
|
17
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<CurdFormGroup v-for="(item, index) in props.schema.items" v-show="!schemaItemHidden(item)" :key="index" :item="item" :title="item.groupName" :icon="item.icon" :label-position="item.labelPosition">
|
|
3
|
-
<template v-if="item.headerRight" #headerRight>
|
|
4
|
-
<component :is="item.headerRight" :schema="props.schema" :schemaItem="item" :form-model="form" />
|
|
5
|
-
</template>
|
|
6
|
-
<template v-if="item.headerTitle" #title>
|
|
7
|
-
<component :is="item.headerTitle" :schema="props.schema" :schemaItem="item" :form-model="form" />
|
|
8
|
-
</template>
|
|
9
|
-
<template v-if="item.headerBottom" #headerBottom>
|
|
10
|
-
<component :is="item.headerBottom" :schema="props.schema" :schemaItem="item" :form-model="form" />
|
|
11
|
-
</template>
|
|
12
|
-
<div class="curdform-group-content" data-instance-form-wrap>
|
|
13
|
-
<CurdForm
|
|
14
|
-
:ref="(el: Element | ComponentPublicInstance | null) => (formRef[(item.step || '') + item.groupName + index] = el as InstanceType<typeof CurdForm>)"
|
|
15
|
-
v-model="form"
|
|
16
|
-
:form-schema="item.schema"
|
|
17
|
-
:extend-context="extendContext"
|
|
18
|
-
:validateOnRuleChange="false"
|
|
19
|
-
:scroll-to-error="true"
|
|
20
|
-
@change="onChange"
|
|
21
|
-
/>
|
|
22
|
-
</div>
|
|
23
|
-
</CurdFormGroup>
|
|
24
|
-
</template>
|
|
25
|
-
|
|
26
|
-
<script lang="ts" setup>
|
|
27
|
-
import { CurdForm } from "easybill-ui"
|
|
28
|
-
import type { ComponentPublicInstance, PropType } from "vue"
|
|
29
|
-
import { watch } from "vue"
|
|
30
|
-
import type { CurdGroupFormSchema } from "../types"
|
|
31
|
-
import CurdFormGroup from "./components/CurdFormGroup.vue"
|
|
32
|
-
import { useFormHook } from "./hooks/useFormHook"
|
|
33
|
-
const props = defineProps({
|
|
34
|
-
modelValue: {
|
|
35
|
-
type: Object as PropType<Record<string, unknown>>,
|
|
36
|
-
default: () => ({}),
|
|
37
|
-
},
|
|
38
|
-
schema: {
|
|
39
|
-
type: Object as PropType<CurdGroupFormSchema>,
|
|
40
|
-
default: () => ({}),
|
|
41
|
-
},
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
const emits = defineEmits(["update:modelValue", "change", "loadOptions"])
|
|
45
|
-
const { form, formRef, schema: formSchema, validate, schemaItemHidden } = useFormHook()
|
|
46
|
-
const init = () => {
|
|
47
|
-
form.value = props.modelValue || {}
|
|
48
|
-
formSchema.value = props.schema
|
|
49
|
-
}
|
|
50
|
-
init()
|
|
51
|
-
watch(
|
|
52
|
-
() => props.schema,
|
|
53
|
-
() => {
|
|
54
|
-
formSchema.value = props.schema
|
|
55
|
-
},
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
watch(
|
|
59
|
-
() => props.modelValue,
|
|
60
|
-
() => {
|
|
61
|
-
if (form.value != props.modelValue) {
|
|
62
|
-
form.value = props.modelValue
|
|
63
|
-
// emits("update:modelValue", form.value)
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
const loadOptions = (prop: string, config?: unknown) => {
|
|
69
|
-
if (!props.schema) return
|
|
70
|
-
let has = false
|
|
71
|
-
for (const index in props.schema.items) {
|
|
72
|
-
const group = props.schema.items[index]
|
|
73
|
-
const form = formRef.value[(group.step || "") + group.groupName + index]
|
|
74
|
-
const hasFormItem = form?.hasFormItem ? form.hasFormItem(prop) : group.schema.formItem.some((item) => item.prop == prop)
|
|
75
|
-
if (hasFormItem) {
|
|
76
|
-
has = true
|
|
77
|
-
form?.loadOptions(prop, config)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (!has) {
|
|
81
|
-
emits("loadOptions", prop)
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
const extendContext = {
|
|
85
|
-
loadOptions,
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const onChange = (v: unknown, l: unknown) => {
|
|
89
|
-
emits("change", v, l)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
defineExpose({ loadOptions, validate })
|
|
93
|
-
</script>
|