easybill-ui 1.4.0 → 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 +61 -32
- 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,39 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="curdform-group" :style="props.item.style" :class="props.item.class">
|
|
3
|
-
<div v-if="props.title || $slots.title" class="curdform-group-head">
|
|
4
|
-
<div class="left">
|
|
5
|
-
<span v-if="props.icon" class="icon"><i v-if="typeof props.icon == 'string'" :class="props.icon"></i><component v-else :is="props.icon"></component></span>
|
|
6
|
-
<div v-if="!$slots.title" class="title">{{ props.title }}</div>
|
|
7
|
-
<slot name="title"></slot>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="right">
|
|
10
|
-
<slot name="headerRight"></slot>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
<div v-if="props.item.desc" class="curdform-group-desc">{{ props.item.desc }}</div>
|
|
14
|
-
<slot name="headerBottom"></slot>
|
|
15
|
-
<div v-if="$slots.default" class="curdform-group-body">
|
|
16
|
-
<slot></slot>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
</template>
|
|
20
|
-
|
|
21
|
-
<script lang="ts" setup>
|
|
22
|
-
import type { PropType } from "vue"
|
|
23
|
-
import type { CurdGroupFormSchemaItem } from "../../types"
|
|
24
|
-
|
|
25
|
-
const props = defineProps({
|
|
26
|
-
title: {
|
|
27
|
-
type: String,
|
|
28
|
-
default: "",
|
|
29
|
-
},
|
|
30
|
-
icon: {
|
|
31
|
-
type: String,
|
|
32
|
-
default: "",
|
|
33
|
-
},
|
|
34
|
-
item: {
|
|
35
|
-
type: Object as PropType<CurdGroupFormSchemaItem>,
|
|
36
|
-
default: () => ({}),
|
|
37
|
-
},
|
|
38
|
-
})
|
|
39
|
-
</script>
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { CurdForm } from "easybill-ui"
|
|
2
|
-
import { ref, type Ref } from "vue"
|
|
3
|
-
import type { CurdGroupFormSchema, CurdGroupFormSchemaItem } from "../../types"
|
|
4
|
-
|
|
5
|
-
export const useFormHook = (): {
|
|
6
|
-
form: Ref<Record<string, unknown>>
|
|
7
|
-
formRef: Ref<Record<string, InstanceType<typeof CurdForm>>>
|
|
8
|
-
submit: () => void
|
|
9
|
-
schema: Ref<CurdGroupFormSchema | undefined>
|
|
10
|
-
validate: (callback: (valid: boolean) => void) => void
|
|
11
|
-
loading: Ref<boolean>
|
|
12
|
-
schemaItemHidden: (item: CurdGroupFormSchemaItem) => boolean
|
|
13
|
-
} => {
|
|
14
|
-
const formRef = ref<Record<string, InstanceType<typeof CurdForm>>>({})
|
|
15
|
-
const form = ref<Record<string, unknown>>({})
|
|
16
|
-
const schema = ref<CurdGroupFormSchema>()
|
|
17
|
-
const loading = ref(false)
|
|
18
|
-
const schemaItemHidden = (item: CurdGroupFormSchemaItem) => {
|
|
19
|
-
if (item?.hidden && item?.hidden instanceof Function) {
|
|
20
|
-
return item.hidden(form.value, item)
|
|
21
|
-
}
|
|
22
|
-
return !!item?.hidden
|
|
23
|
-
}
|
|
24
|
-
const validate = (callback: (valid: boolean) => void) => {
|
|
25
|
-
const validMap: boolean[] = []
|
|
26
|
-
for (const i in formRef.value) {
|
|
27
|
-
const curSchema = schema.value?.items.find((a, index) => (a.step || "") + a.groupName + index == i)
|
|
28
|
-
// 如果当前item隐藏了,则直接跳过校验
|
|
29
|
-
if (curSchema && schemaItemHidden(curSchema)) {
|
|
30
|
-
validMap.push(true)
|
|
31
|
-
continue
|
|
32
|
-
}
|
|
33
|
-
const cur = formRef.value[i]
|
|
34
|
-
cur.validate((valid: boolean) => {
|
|
35
|
-
validMap.push(valid)
|
|
36
|
-
if (validMap.length >= Object.keys(formRef.value).length && callback) callback(validMap.every((a) => a))
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
const submit = () => {
|
|
41
|
-
validate((valid) => {
|
|
42
|
-
if (!valid) return
|
|
43
|
-
})
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return {
|
|
47
|
-
form,
|
|
48
|
-
formRef,
|
|
49
|
-
submit,
|
|
50
|
-
schema,
|
|
51
|
-
validate,
|
|
52
|
-
loading,
|
|
53
|
-
schemaItemHidden,
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Fields, FormSchema } from "easybill-ui"
|
|
2
|
-
import type { Component, VNode } from "vue"
|
|
3
|
-
export interface CurdGroupFormSchema {
|
|
4
|
-
items: CurdGroupFormSchemaItem[]
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export interface CurdGroupFormSchemaItem {
|
|
8
|
-
groupName: string
|
|
9
|
-
schema: FormSchema
|
|
10
|
-
icon?: string
|
|
11
|
-
prop?: string // 唯一标识 不可修改
|
|
12
|
-
desc?: string
|
|
13
|
-
step?: string
|
|
14
|
-
stepIndex?: number
|
|
15
|
-
class?: string
|
|
16
|
-
style?: string
|
|
17
|
-
labelPosition?: string | "left" | "right" | "top"
|
|
18
|
-
hidden?: boolean | ((form: Fields, schemaItem: CurdGroupFormSchemaItem) => boolean)
|
|
19
|
-
headerRight?: Component | ((props: { schema: CurdGroupFormSchema; schemaItem: CurdGroupFormSchemaItem; formModel: Fields }) => VNode | VNode[])
|
|
20
|
-
headerBottom?: Component | ((props: { schema: CurdGroupFormSchema; schemaItem: CurdGroupFormSchemaItem; formModel: Fields }) => VNode | VNode[])
|
|
21
|
-
headerTitle?: Component | ((props: { schema: CurdGroupFormSchema; schemaItem: CurdGroupFormSchemaItem; formModel: Fields }) => VNode | VNode[])
|
|
22
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { withInstall, type SFCWithInstall } from "../../utils"
|
|
2
|
-
import Instance from "./src/CurdTable.vue"
|
|
3
|
-
export const CurdTable: SFCWithInstall<typeof Instance> = withInstall("CurdTable", Instance)
|
|
4
|
-
export default CurdTable as SFCWithInstall<typeof Instance>
|
|
5
|
-
export * from "./src/types"
|
|
@@ -1,470 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="table-container">
|
|
3
|
-
<STableFilter v-if="selectParams.length && filterVisible" ref="sTableFilter" :list-query="search" @search="onSearch" />
|
|
4
|
-
<div v-if="!option.hideMenu" class="table-control">
|
|
5
|
-
<div class="btn-control">
|
|
6
|
-
<el-button v-if="!option.hideMenuAdd && props.fetchCreate" type="primary" :icon="Plus" @click="create()">{{ t("el.table.create") }}</el-button>
|
|
7
|
-
<slot name="menuLeft"></slot>
|
|
8
|
-
</div>
|
|
9
|
-
<div class="min-control">
|
|
10
|
-
<slot name="menuRight"></slot>
|
|
11
|
-
<STableMenu v-if="!option.hideMenuRight" ref="tableMenuRef" :filter-visible="filterVisible" @operation="onMenuOption" />
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
<div class="table-wrapper">
|
|
15
|
-
<el-table ref="tableRef" v-loading="loading" stripe :data="list" scrollbar-always-on v-bind="{ ...$attrs, ...tableAttrs }" @row-click="onRowClick" @selection-change="selectionChange">
|
|
16
|
-
<slot name="default"></slot>
|
|
17
|
-
<el-table-column v-if="$attrs.index !== undefined" type="index" />
|
|
18
|
-
<el-table-column v-if="$attrs.selection !== undefined && $attrs.selection !== false" type="selection" v-bind="option.selectionProps" />
|
|
19
|
-
<template v-for="item in tableColumns" :key="item.label">
|
|
20
|
-
<el-table-column v-if="item.type == 'index'" type="index" v-bind="item" />
|
|
21
|
-
<el-table-column v-else-if="item.type == 'selection'" type="selection" v-bind="item" />
|
|
22
|
-
<STableItem v-else :ref="getTableItemRef(item.prop)" :schema="item" :is-slot="!!$slots[item.prop]" :is-slot-header="!!$slots[item.prop + 'Header']" :option="option" @search="onItemChange">
|
|
23
|
-
<template v-for="(_slot, key) in $slots" :key="key" #[key]="scopeChild">
|
|
24
|
-
<slot :name="key" v-bind="normalizeSlotScope(scopeChild)"></slot>
|
|
25
|
-
</template>
|
|
26
|
-
</STableItem>
|
|
27
|
-
</template>
|
|
28
|
-
<el-table-column v-if="!option.hideOperation" :label="t('el.table.operation')" fixed="right" :width="option.operationWidth || '200'" align="left">
|
|
29
|
-
<template #default="scope">
|
|
30
|
-
<slot name="operation" v-bind="scope"></slot>
|
|
31
|
-
<template v-if="!$slots.operationBtn">
|
|
32
|
-
<el-button v-if="!option.hideOperationEdit && props.fetchEdit" type="primary" link :icon="Edit" @click.stop="create(scope.row)">{{ t("el.table.edit") }}</el-button>
|
|
33
|
-
<el-button v-if="!option.hideOperationDetail" type="primary" link :icon="Document" @click.stop="detail(scope.row)">{{ t("el.table.detail") }}</el-button>
|
|
34
|
-
<el-button v-if="!option.hideOperationDelete && props.fetchRemove" type="danger" link :icon="Delete" @click.stop="startremove(scope)">{{ t("el.table.delete") }}</el-button>
|
|
35
|
-
</template>
|
|
36
|
-
<template v-else>
|
|
37
|
-
<el-dropdown trigger="click" popper-class="curd-table-dropdown-menu">
|
|
38
|
-
<el-button type="primary" link>
|
|
39
|
-
{{ option.operationBtnTitle || "更多" }}
|
|
40
|
-
<el-icon>
|
|
41
|
-
<ArrowDown />
|
|
42
|
-
</el-icon>
|
|
43
|
-
</el-button>
|
|
44
|
-
<template #dropdown>
|
|
45
|
-
<el-dropdown-menu>
|
|
46
|
-
<slot name="operationBtn" v-bind="scope"></slot>
|
|
47
|
-
<el-dropdown-item v-if="!option.hideOperationEdit && props.fetchEdit">
|
|
48
|
-
<el-button type="primary" link @click.stop="create(scope.row, scope.$index)">编辑</el-button>
|
|
49
|
-
</el-dropdown-item>
|
|
50
|
-
<el-dropdown-item v-if="!option.hideOperationDetail">
|
|
51
|
-
<el-button type="primary" link @click.stop="detail(scope.row)">详情</el-button>
|
|
52
|
-
</el-dropdown-item>
|
|
53
|
-
<el-dropdown-item v-if="!option.hideOperationDelete && props.fetchRemove">
|
|
54
|
-
<el-button type="danger" link @click.stop="startremove(scope)">删除 </el-button>
|
|
55
|
-
</el-dropdown-item>
|
|
56
|
-
</el-dropdown-menu>
|
|
57
|
-
</template>
|
|
58
|
-
</el-dropdown>
|
|
59
|
-
</template>
|
|
60
|
-
</template>
|
|
61
|
-
</el-table-column>
|
|
62
|
-
<template #empty>
|
|
63
|
-
<slot name="empty"></slot>
|
|
64
|
-
<el-empty v-if="!$slots.empty" :image-size="30" />
|
|
65
|
-
</template>
|
|
66
|
-
</el-table>
|
|
67
|
-
</div>
|
|
68
|
-
<div v-if="$slots.pageLeft || $slots.pageRight || !option.hidePage" class="table-pager">
|
|
69
|
-
<div class="page-left"><slot name="pageLeft"></slot></div>
|
|
70
|
-
<el-pagination
|
|
71
|
-
v-if="!option.hidePage"
|
|
72
|
-
v-model:current-page="listQuery.pageIndex"
|
|
73
|
-
v-model:page-size="listQuery.pageSize"
|
|
74
|
-
class="pagination"
|
|
75
|
-
background
|
|
76
|
-
layout="total, sizes, prev, pager, next, jumper"
|
|
77
|
-
:total="total"
|
|
78
|
-
v-bind="option.pageProps"
|
|
79
|
-
@current-change="fetchData"
|
|
80
|
-
@size-change="fetchData"
|
|
81
|
-
></el-pagination>
|
|
82
|
-
<slot name="pageRight" :list-query="listQuery" :total="total"></slot>
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<STableDetail ref="STableDetailRef" />
|
|
86
|
-
</div>
|
|
87
|
-
</template>
|
|
88
|
-
|
|
89
|
-
<script lang="ts" setup>
|
|
90
|
-
import { ArrowDown, Delete, Document, Edit, Plus } from "@element-plus/icons-vue"
|
|
91
|
-
import { FormDialog, useGlobalConfig, useLocale } from "easybill-ui"
|
|
92
|
-
import { ElLoading, ElMessage, ElMessageBox, ElTable } from "element-plus"
|
|
93
|
-
import { computed, getCurrentInstance, onActivated, onMounted, type PropType, provide, reactive, ref, type Ref, watch } from "vue"
|
|
94
|
-
import type { Fields, FormItem, FormSchema } from "../../CurdForm"
|
|
95
|
-
import type { FilterItem, ListQuery } from "../../TableFilter"
|
|
96
|
-
import { deepClone } from "../utils/common"
|
|
97
|
-
import { exportExcel } from "../utils/tabelToExcel"
|
|
98
|
-
import { useColumnHook } from "./hooks/useColumnHook"
|
|
99
|
-
import STableDetail from "./STableDetail.vue"
|
|
100
|
-
import STableFilter from "./STableFilter.vue"
|
|
101
|
-
import STableItem from "./STableItem.vue"
|
|
102
|
-
import STableMenu from "./STableMenu.vue"
|
|
103
|
-
import type { ColumnItem, FeachDataParam, FetchDataOpt, FormAttrs, MenuEventKey, PropOption } from "./types"
|
|
104
|
-
|
|
105
|
-
const props = defineProps({
|
|
106
|
-
// 表格的数据
|
|
107
|
-
data: {
|
|
108
|
-
type: Array as PropType<Record<string, unknown>[]>,
|
|
109
|
-
default() {
|
|
110
|
-
return []
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
// 表格列模型
|
|
114
|
-
columns: {
|
|
115
|
-
type: Array as PropType<Array<ColumnItem<Record<string, unknown>>>>,
|
|
116
|
-
default() {
|
|
117
|
-
return []
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
pageOptions: {
|
|
121
|
-
type: Object as PropType<{ pageIndex?: number; pageSize?: number; total?: number } & Fields>,
|
|
122
|
-
default() {
|
|
123
|
-
return {
|
|
124
|
-
pageIndex: 1,
|
|
125
|
-
pageSize: 10,
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
// 调用接口获取数据
|
|
130
|
-
fetchData: {
|
|
131
|
-
type: Function as PropType<(opt: FeachDataParam) => Promise<{ total?: number; list?: Record<string, unknown>[] } | void>>,
|
|
132
|
-
default: null,
|
|
133
|
-
},
|
|
134
|
-
// 自定义创建函数
|
|
135
|
-
fetchCreate: {
|
|
136
|
-
type: Function as PropType<(formModel: Fields) => void | boolean | Promise<void | boolean>>,
|
|
137
|
-
default: null,
|
|
138
|
-
},
|
|
139
|
-
// 自定义编辑函数
|
|
140
|
-
fetchEdit: {
|
|
141
|
-
type: Function as PropType<(formModel: Fields, row: Record<string, unknown>, index?: number) => void | boolean | Promise<void | boolean>>,
|
|
142
|
-
|
|
143
|
-
default: null,
|
|
144
|
-
},
|
|
145
|
-
// 自定义删除函数
|
|
146
|
-
fetchRemove: {
|
|
147
|
-
type: Function as PropType<(row: unknown, index: number) => Promise<void>>,
|
|
148
|
-
default: null,
|
|
149
|
-
},
|
|
150
|
-
// 专门配置一些公共的参数
|
|
151
|
-
option: {
|
|
152
|
-
type: Object as PropType<Partial<PropOption>>,
|
|
153
|
-
default() {
|
|
154
|
-
return {}
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
})
|
|
158
|
-
const { t } = useLocale()
|
|
159
|
-
const defaultOption = {
|
|
160
|
-
operationWidth: 200,
|
|
161
|
-
operationBtnTitle: t("el.table.more"),
|
|
162
|
-
hideMenu: false, // 是否隐藏右侧工具菜单
|
|
163
|
-
hideMenuAdd: false, // 是否隐藏菜单中添加按钮
|
|
164
|
-
hideMenuRight: false, // 是否隐藏菜单右侧
|
|
165
|
-
hideOperation: false, // 是否隐藏操作列
|
|
166
|
-
hideOperationEdit: false, // 是否隐藏操作列中的编辑按钮
|
|
167
|
-
hideOperationDetail: false, // 是否隐藏操作列中的详情按钮
|
|
168
|
-
hideOperationDelete: false, // 是否隐藏操作列中的删除按钮
|
|
169
|
-
hidePage: false, // 是否隐藏分页器
|
|
170
|
-
excelTitle: "", //导出表格的文件名
|
|
171
|
-
selectionProps: null,
|
|
172
|
-
downloadMod: false,
|
|
173
|
-
pageProps: null,
|
|
174
|
-
filterVisible: true,
|
|
175
|
-
autoload: true,
|
|
176
|
-
customActivatedFetch: false, // 自定义执行onActivated内部的fetch执行,完全交由父组件控制 false 是自动的,true 开发者自己控制
|
|
177
|
-
}
|
|
178
|
-
const emits = defineEmits(["selectionChange", "row-click"])
|
|
179
|
-
const list = ref(props.data)
|
|
180
|
-
watch(
|
|
181
|
-
() => props.data,
|
|
182
|
-
(val) => {
|
|
183
|
-
list.value = val
|
|
184
|
-
},
|
|
185
|
-
{ deep: true },
|
|
186
|
-
)
|
|
187
|
-
const globalConfig = useGlobalConfig()
|
|
188
|
-
const tableAttrs = ref({ size: globalConfig.value.size || "default" })
|
|
189
|
-
const listQuery = reactive({
|
|
190
|
-
pageIndex: 1,
|
|
191
|
-
pageSize: props.pageOptions?.pageSize || 10,
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
// 调用接口获取数据
|
|
195
|
-
const setPageIndex = (pageIndex: number) => {
|
|
196
|
-
listQuery.pageIndex = pageIndex
|
|
197
|
-
}
|
|
198
|
-
const search = reactive<ListQuery>(
|
|
199
|
-
(() => {
|
|
200
|
-
const { pageIndex, pageSize, total, ...args } = deepClone(props.pageOptions || {})
|
|
201
|
-
return args
|
|
202
|
-
})(),
|
|
203
|
-
)
|
|
204
|
-
const option: PropOption = reactive(Object.assign(defaultOption, props.option))
|
|
205
|
-
provide("search", search)
|
|
206
|
-
provide("option", option)
|
|
207
|
-
watch(
|
|
208
|
-
() => props.option,
|
|
209
|
-
(val) => {
|
|
210
|
-
Object.assign(option, val)
|
|
211
|
-
},
|
|
212
|
-
{ deep: true },
|
|
213
|
-
)
|
|
214
|
-
const filterVisible = ref(typeof option?.filterVisible == "undefined" ? true : option?.filterVisible)
|
|
215
|
-
const loading = ref(false)
|
|
216
|
-
const listTotal = ref(0)
|
|
217
|
-
const setTotal = (num: number) => {
|
|
218
|
-
listTotal.value = num
|
|
219
|
-
}
|
|
220
|
-
// 总数量由外面决定
|
|
221
|
-
const total = computed(() => listTotal.value || (typeof props.pageOptions.total == "undefined" ? props.data.length || 0 : props.pageOptions.total))
|
|
222
|
-
const fetchData = async (opt?: FetchDataOpt) => {
|
|
223
|
-
if (props.fetchData) {
|
|
224
|
-
if (!(opt && opt.showLoading == false)) {
|
|
225
|
-
loading.value = true
|
|
226
|
-
}
|
|
227
|
-
if (opt && opt.resetPageIndex) {
|
|
228
|
-
listQuery.pageIndex = 1
|
|
229
|
-
}
|
|
230
|
-
const optQuery = (opt && opt.query) || {}
|
|
231
|
-
// 外面指定了筛选条件
|
|
232
|
-
for (let i in optQuery) {
|
|
233
|
-
search[i] = optQuery[i]
|
|
234
|
-
// 更新tableFilter组件
|
|
235
|
-
sTableFilter.value?.setItem(i)
|
|
236
|
-
if (tableItemRefs.value[i]) tableItemRefs.value[i].search({ listQuery: search })
|
|
237
|
-
}
|
|
238
|
-
const params: Fields & { pageIndex: number; pageSize: number } = { ...listQuery, ...search }
|
|
239
|
-
const fetchDataRes = await props.fetchData({ listQuery: params }).finally(() => {
|
|
240
|
-
loading.value = false
|
|
241
|
-
})
|
|
242
|
-
if (fetchDataRes && typeof fetchDataRes.total !== "undefined") {
|
|
243
|
-
listTotal.value = fetchDataRes.total
|
|
244
|
-
}
|
|
245
|
-
if (fetchDataRes && typeof fetchDataRes.list !== "undefined") {
|
|
246
|
-
list.value = fetchDataRes.list
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
const tableItemRefs: Ref<Record<string, InstanceType<typeof STableItem>>> = ref({})
|
|
251
|
-
const normalizeSlotScope = (scope: unknown) => (scope && typeof scope === "object" ? scope : {})
|
|
252
|
-
const getTableItemRef = (prop: string) => {
|
|
253
|
-
return (el: unknown) => {
|
|
254
|
-
if (el) {
|
|
255
|
-
tableItemRefs.value[prop] = el as InstanceType<typeof STableItem>
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
// 搜索
|
|
260
|
-
const onSearch = (params?: ListQuery) => {
|
|
261
|
-
if (params) {
|
|
262
|
-
for (let i in params) {
|
|
263
|
-
search[i] = params[i]
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
listQuery.pageIndex = 1
|
|
267
|
-
fetchData()
|
|
268
|
-
for (let i in tableItemRefs.value) {
|
|
269
|
-
if (tableItemRefs.value[i]) tableItemRefs.value[i].search({ listQuery: params || {} })
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
const sTableFilter: Ref<InstanceType<typeof STableFilter> | undefined> = ref()
|
|
273
|
-
const onItemChange = (prop: string, value: string, filter: FilterItem) => {
|
|
274
|
-
sTableFilter.value?.setItem(prop, filter)
|
|
275
|
-
search[prop] = value
|
|
276
|
-
|
|
277
|
-
listQuery.pageIndex = 1
|
|
278
|
-
fetchData()
|
|
279
|
-
}
|
|
280
|
-
let hasInit = false
|
|
281
|
-
onActivated(() => {
|
|
282
|
-
// option?.customActivatedFetch为true时,参考/system/partner/account/vendor写法
|
|
283
|
-
if (!option?.customActivatedFetch && hasInit) {
|
|
284
|
-
fetchData()
|
|
285
|
-
} else {
|
|
286
|
-
hasInit = true
|
|
287
|
-
}
|
|
288
|
-
})
|
|
289
|
-
// filter内部有一些初始化的操作,比如操作value初始值,需要等子组件初始化后再执行列表数据fetch操作
|
|
290
|
-
onMounted(() => {
|
|
291
|
-
if (option.autoload) fetchData()
|
|
292
|
-
provide("tableFilter", sTableFilter.value)
|
|
293
|
-
})
|
|
294
|
-
// 组装columns
|
|
295
|
-
const { tableColumns, selectParams, initColumn } = useColumnHook<Record<string, unknown>>()
|
|
296
|
-
initColumn(props.columns)
|
|
297
|
-
watch(
|
|
298
|
-
() => props.columns,
|
|
299
|
-
(val) => {
|
|
300
|
-
initColumn(val)
|
|
301
|
-
},
|
|
302
|
-
)
|
|
303
|
-
// 菜单点击事件
|
|
304
|
-
const onMenuOption = (optionKey: MenuEventKey, val: string) => {
|
|
305
|
-
const f = option.menuEvent && option.menuEvent[optionKey]
|
|
306
|
-
if (f) {
|
|
307
|
-
return f()
|
|
308
|
-
}
|
|
309
|
-
switch (optionKey) {
|
|
310
|
-
case "refresh":
|
|
311
|
-
fetchData()
|
|
312
|
-
break
|
|
313
|
-
case "searchToggle":
|
|
314
|
-
filterVisible.value = !filterVisible.value
|
|
315
|
-
break
|
|
316
|
-
case "size": {
|
|
317
|
-
if (val == "small" || val == "default" || val == "large") {
|
|
318
|
-
tableAttrs.value.size = val
|
|
319
|
-
}
|
|
320
|
-
break
|
|
321
|
-
}
|
|
322
|
-
case "export": {
|
|
323
|
-
const getTableValue = (val: unknown, schema: ColumnItem<Record<string, unknown>>, row: Record<string, unknown>, i: number): string | number => {
|
|
324
|
-
if (schema.options) {
|
|
325
|
-
const vals = String(val).split(",")
|
|
326
|
-
const curs = vals.map((item) => {
|
|
327
|
-
const cur = schema.options?.find((a) => a.value == item)
|
|
328
|
-
return (cur && cur.label) || item
|
|
329
|
-
})
|
|
330
|
-
return curs.join(",")
|
|
331
|
-
}
|
|
332
|
-
if (schema.formatter) {
|
|
333
|
-
let result = schema.formatter(row, schema, val, i) as string
|
|
334
|
-
if (/^[0-9\.,+-]+\.[0-9]{2}$/.test(String(result)) && String(result).split(".").length < 3) {
|
|
335
|
-
const resultNum = +parseFloat(String(result).replace(/,|$|¥/g, ""))
|
|
336
|
-
return resultNum
|
|
337
|
-
}
|
|
338
|
-
return result === "--" ? "" : result
|
|
339
|
-
}
|
|
340
|
-
if (/^[0-9\.,+-]+\.[0-9]{2}$/.test(String(val)) && String(val).split(".").length < 3) {
|
|
341
|
-
val = +parseFloat(String(val).replace(/,|$|¥/g, ""))
|
|
342
|
-
}
|
|
343
|
-
return val as string
|
|
344
|
-
}
|
|
345
|
-
const data = list.value.map((a) => tableColumns.value.filter((b) => !b.hidden && !b.neverShow).map((b, i) => getTableValue(a[b.prop], b, a, i)))
|
|
346
|
-
const header = tableColumns.value.filter((b) => !b.hidden && !b.neverShow).map((a) => a.label)
|
|
347
|
-
const tabledata = [header, ...data]
|
|
348
|
-
const filename = "data"
|
|
349
|
-
exportExcel(tabledata, "data", (option.excelTitle || filename) + ".xls")
|
|
350
|
-
ElMessage.success(t("el.table.exportSuccess"))
|
|
351
|
-
break
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// 添加/编辑
|
|
357
|
-
const create = (row?: Record<string, unknown>, index?: number) => {
|
|
358
|
-
const formAttrs: FormAttrs | undefined = option.formAttrs
|
|
359
|
-
const formSchema: FormSchema = {
|
|
360
|
-
formItem: [],
|
|
361
|
-
rules: {},
|
|
362
|
-
labelWidth: "110px",
|
|
363
|
-
...formAttrs,
|
|
364
|
-
}
|
|
365
|
-
const setItem = (a: ColumnItem<Record<string, unknown>>) => {
|
|
366
|
-
if (!a.form) return
|
|
367
|
-
let formValue: Partial<FormItem>
|
|
368
|
-
if (a.form instanceof Function) {
|
|
369
|
-
const row1 = row || {}
|
|
370
|
-
formValue = a.form(a, row1, search)
|
|
371
|
-
} else {
|
|
372
|
-
formValue = a.form
|
|
373
|
-
}
|
|
374
|
-
const { rules, prop, ...formProps } = formValue
|
|
375
|
-
const item: FormItem = {
|
|
376
|
-
span: 24,
|
|
377
|
-
label: a.label,
|
|
378
|
-
options: a.options,
|
|
379
|
-
asyncOptions: a.asyncOptions,
|
|
380
|
-
...formProps,
|
|
381
|
-
prop: prop || a.prop,
|
|
382
|
-
}
|
|
383
|
-
formSchema.formItem.push(item)
|
|
384
|
-
if (rules) {
|
|
385
|
-
if (!formSchema.rules) formSchema.rules = {}
|
|
386
|
-
if (typeof formSchema.rules !== "function") {
|
|
387
|
-
formSchema.rules[item.prop] = rules
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
tableColumns.value.map((a) => {
|
|
392
|
-
if (a.children && a.children.length) {
|
|
393
|
-
for (let i in a.children) {
|
|
394
|
-
if (a.children[i].form) setItem(a.children[i])
|
|
395
|
-
}
|
|
396
|
-
} else if (a.form) {
|
|
397
|
-
setItem(a)
|
|
398
|
-
}
|
|
399
|
-
})
|
|
400
|
-
formSchema.formItem.sort((a, b) => (b.sortIndex || 0) - (a.sortIndex || 0))
|
|
401
|
-
const eoptions = row ? option.editOptions : option.createOptions
|
|
402
|
-
FormDialog.show({
|
|
403
|
-
title: row ? t("el.table.edit") : t("el.table.create"),
|
|
404
|
-
formSchema: formSchema,
|
|
405
|
-
fields: row as Fields,
|
|
406
|
-
width: formAttrs?.width || 600,
|
|
407
|
-
handleOk: async (modelRef: Fields) => {
|
|
408
|
-
if (row) {
|
|
409
|
-
return await props.fetchEdit?.(modelRef, row, index)
|
|
410
|
-
}
|
|
411
|
-
return await props.fetchCreate?.(modelRef)
|
|
412
|
-
},
|
|
413
|
-
...eoptions,
|
|
414
|
-
})
|
|
415
|
-
}
|
|
416
|
-
const instance = getCurrentInstance()
|
|
417
|
-
const startremove = (scope: { row: unknown; $index: number }) => {
|
|
418
|
-
ElMessageBox.confirm(t("el.table.deleteConfirm"), t("el.table.tip"), {
|
|
419
|
-
type: "warning",
|
|
420
|
-
}).then(async () => {
|
|
421
|
-
const loading = ElLoading.service({ fullscreen: true })
|
|
422
|
-
await (props.fetchRemove && props.fetchRemove(scope.row, scope.$index)).finally(() => {
|
|
423
|
-
loading.close()
|
|
424
|
-
})
|
|
425
|
-
ElMessage({ type: "success", message: t("el.table.deleteSuccess") })
|
|
426
|
-
})
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// 详情
|
|
430
|
-
const STableDetailRef = ref()
|
|
431
|
-
const detail = (row: unknown) => {
|
|
432
|
-
STableDetailRef.value.open({ data: row, columns: tableColumns.value })
|
|
433
|
-
}
|
|
434
|
-
// 行点击事件
|
|
435
|
-
const onRowClick = (row: unknown, column: ColumnItem, event: Event) => {
|
|
436
|
-
if (instance && typeof instance.attrs["click-row-to-view"] !== "undefined") {
|
|
437
|
-
detail(row)
|
|
438
|
-
}
|
|
439
|
-
emits("row-click", row, column, event)
|
|
440
|
-
}
|
|
441
|
-
// 多选事件
|
|
442
|
-
const selectionChange = (rows: unknown[]) => {
|
|
443
|
-
emits("selectionChange", rows)
|
|
444
|
-
}
|
|
445
|
-
const tableRef = ref<InstanceType<typeof ElTable>>() // 表格的实例
|
|
446
|
-
|
|
447
|
-
const toggleRowSelection = (row: unknown, isChecked?: boolean) => {
|
|
448
|
-
setTimeout(() => {
|
|
449
|
-
tableRef.value?.toggleRowSelection(row, !!isChecked)
|
|
450
|
-
})
|
|
451
|
-
}
|
|
452
|
-
const tableMenuRef = ref()
|
|
453
|
-
defineExpose({
|
|
454
|
-
fetchData,
|
|
455
|
-
tableRef,
|
|
456
|
-
tableFilterRef: sTableFilter,
|
|
457
|
-
tableMenuRef,
|
|
458
|
-
toggleRowSelection,
|
|
459
|
-
setPageIndex,
|
|
460
|
-
setTotal,
|
|
461
|
-
search,
|
|
462
|
-
listQuery,
|
|
463
|
-
fetchCreate: create,
|
|
464
|
-
fetchEdit: create,
|
|
465
|
-
fetchRemove: startremove,
|
|
466
|
-
getEl() {
|
|
467
|
-
return instance?.proxy?.$el
|
|
468
|
-
},
|
|
469
|
-
})
|
|
470
|
-
</script>
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-drawer v-model="visible" :title="t('el.table.columnSet')" size="40%" append-to-body>
|
|
3
|
-
<el-table :data="columnDatas">
|
|
4
|
-
<el-table-column property="label" :label="t('el.table.columnName')"></el-table-column>
|
|
5
|
-
<el-table-column property="hidden" :label="t('el.table.show')" width="60">
|
|
6
|
-
<template #default="scope">
|
|
7
|
-
<el-switch v-model="scope.row.hidden" :active-value="false" :inactive-value="true" size="small" @change="onChangeHidden()"></el-switch>
|
|
8
|
-
</template>
|
|
9
|
-
</el-table-column>
|
|
10
|
-
<el-table-column property="fixed" :label="t('el.table.fixShow')" width="160" align="center">
|
|
11
|
-
<template #default="scope">
|
|
12
|
-
<el-button-group>
|
|
13
|
-
<el-tooltip v-for="item in fixedMap" :key="item.value" :content="item.label">
|
|
14
|
-
<el-button :type="(!scope.row.fixed && item.value == '') || scope.row.fixed == item.value ? 'primary' : ''" size="small" @click="selectFixed(scope.row, item.value)">
|
|
15
|
-
<el-icon><component :is="item.icon" /></el-icon>
|
|
16
|
-
</el-button>
|
|
17
|
-
</el-tooltip>
|
|
18
|
-
</el-button-group>
|
|
19
|
-
</template>
|
|
20
|
-
</el-table-column>
|
|
21
|
-
</el-table>
|
|
22
|
-
</el-drawer>
|
|
23
|
-
</template>
|
|
24
|
-
<script lang="ts" setup>
|
|
25
|
-
import { CaretLeft, CaretRight, VideoPause } from "@element-plus/icons-vue"
|
|
26
|
-
import { computed, inject, ref, shallowRef, triggerRef, watch, type PropType, type Ref } from "vue"
|
|
27
|
-
import { useLocale } from "easybill-ui"
|
|
28
|
-
import type { ColumnItem } from "./types"
|
|
29
|
-
const props = defineProps({
|
|
30
|
-
visible: {
|
|
31
|
-
type: Boolean as PropType<boolean>,
|
|
32
|
-
default: false,
|
|
33
|
-
},
|
|
34
|
-
})
|
|
35
|
-
const emits = defineEmits(["update:visible", "change"])
|
|
36
|
-
const { t } = useLocale()
|
|
37
|
-
const columns = inject<Ref<Array<ColumnItem>>>("columns") || ref([])
|
|
38
|
-
const visible = computed({
|
|
39
|
-
get() {
|
|
40
|
-
return props.visible
|
|
41
|
-
},
|
|
42
|
-
set(val) {
|
|
43
|
-
emits("update:visible", val)
|
|
44
|
-
},
|
|
45
|
-
})
|
|
46
|
-
watch(
|
|
47
|
-
() => props.visible,
|
|
48
|
-
(val) => {
|
|
49
|
-
visible.value = val
|
|
50
|
-
},
|
|
51
|
-
)
|
|
52
|
-
const columnDatas = computed(() => {
|
|
53
|
-
const result = []
|
|
54
|
-
for (const i in columns.value) {
|
|
55
|
-
const column = columns.value[i]
|
|
56
|
-
if (column.children) {
|
|
57
|
-
for (const j in column.children) {
|
|
58
|
-
const child = column.children[j]
|
|
59
|
-
if (!child.neverShow) {
|
|
60
|
-
result.push(child)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
continue
|
|
64
|
-
} else if (!column.neverShow) {
|
|
65
|
-
result.push(column)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return result
|
|
69
|
-
})
|
|
70
|
-
const fixedMap = shallowRef([
|
|
71
|
-
{ value: "left", label: t("el.table.fixLeft"), icon: CaretLeft },
|
|
72
|
-
{ value: "", label: t("el.table.fixNone"), icon: VideoPause },
|
|
73
|
-
{ value: "right", label: t("el.table.fixRight"), icon: CaretRight },
|
|
74
|
-
])
|
|
75
|
-
const selectFixed = (row: Record<string, unknown>, val: string) => {
|
|
76
|
-
if (val) {
|
|
77
|
-
row.fixed = val
|
|
78
|
-
} else {
|
|
79
|
-
delete row.fixed
|
|
80
|
-
}
|
|
81
|
-
triggerRef(columns)
|
|
82
|
-
emits("change")
|
|
83
|
-
}
|
|
84
|
-
const onChangeHidden = () => {
|
|
85
|
-
triggerRef(columns)
|
|
86
|
-
emits("change")
|
|
87
|
-
}
|
|
88
|
-
</script>
|