@dt-frames/ui 1.0.7 → 1.0.10
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/es/components/forms/src/types/form.type.d.ts +3 -3
- package/es/components/index.d.ts +3 -2
- package/es/components/source/src/hooks/useFetch.d.ts +1 -2
- package/es/components/source/src/hooks/useSource.d.ts +4 -4
- package/es/components/source/src/types/source.type.d.ts +1 -9
- package/es/components/source/src/types/table.type.d.ts +1 -1
- package/es/components/table/src/components/TableActions.d.ts +2 -2
- package/es/components/table/src/components/setting/Download.d.ts +2 -2
- package/es/components/table/src/components/setting/Size.d.ts +2 -2
- package/es/components/table/src/index.d.ts +2 -2
- package/es/components/tree/index.d.ts +2 -0
- package/es/components/tree/src/hooks/useTree.d.ts +14 -0
- package/es/components/tree/src/props.d.ts +101 -0
- package/es/components/tree/src/type/tree.d.ts +85 -0
- package/es/components/tree/src/utils/tree.d.ts +5 -0
- package/es/components/upload/index.d.ts +3 -0
- package/es/components/upload/src/helper.d.ts +4 -0
- package/es/components/upload/src/index.d.ts +2784 -0
- package/es/components/upload/src/props.d.ts +40 -0
- package/es/components/upload/src/upload.d.ts +1630 -0
- package/es/index.js +1705 -235
- package/es/style/components/table/index.less +2 -2
- package/es/style/components/tree/index.less +41 -0
- package/es/style/components/upload/index.less +43 -0
- package/es/theme/sider/components/basic-menu/basic-menu.d.ts +3 -3
- package/es/theme/tabs/components/TabContent.d.ts +2 -2
- package/package.json +2 -1
- package/src/components/curd/src/hooks/useCurd.tsx +1 -1
- package/src/components/forms/src/components/formItem.vue +15 -2
- package/src/components/forms/src/hooks/useFormEvents.ts +4 -3
- package/src/components/forms/src/hooks/useFormValues.ts +1 -1
- package/src/components/forms/src/types/form.type.ts +3 -3
- package/src/components/index.ts +9 -3
- package/src/components/modal/src/index.vue +1 -1
- package/src/components/source/src/hooks/useFetch.ts +13 -42
- package/src/components/source/src/hooks/useSource.ts +30 -10
- package/src/components/source/src/types/source.type.ts +1 -21
- package/src/components/source/src/types/table.type.ts +1 -1
- package/src/components/table/index.less +2 -2
- package/src/components/table/src/components/TableRender.vue +1 -3
- package/src/components/table/src/hooks/useDataSource.ts +0 -13
- package/src/components/tree/index.less +41 -0
- package/src/components/tree/index.ts +5 -0
- package/src/components/tree/src/components/TreeHeader.vue +97 -0
- package/src/components/tree/src/hooks/useTree.ts +239 -0
- package/src/components/tree/src/index.vue +392 -0
- package/src/components/tree/src/props.ts +133 -0
- package/src/components/tree/src/type/tree.ts +105 -0
- package/src/components/tree/src/utils/tree.ts +73 -0
- package/src/components/upload/index.less +43 -0
- package/src/components/upload/index.ts +7 -0
- package/src/components/upload/src/helper.ts +32 -0
- package/src/components/upload/src/index.vue +38 -0
- package/src/components/upload/src/props.ts +48 -0
- package/src/components/upload/src/upload.vue +166 -0
- package/src/theme/header/helper/menu-tree.ts +2 -2
- package/src/theme/sider/helper/split-menu.ts +2 -2
- package/es/components/dialog/index.d.ts +0 -2
- package/es/components/dialog/src/hooks/useDialog.d.ts +0 -3
- package/src/components/dialog/index.ts +0 -5
- package/src/components/dialog/src/hooks/useDialog.ts +0 -85
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
.dt-upload-wrap{
|
|
2
|
+
height: 350px;
|
|
3
|
+
padding: 10px 20px;
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
|
|
7
|
+
.ant-table-wrapper{
|
|
8
|
+
flex: 1;
|
|
9
|
+
.ant-table-body{
|
|
10
|
+
border-bottom: 1px solid #e7e7e7;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.file-header{
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: row;
|
|
18
|
+
justify-content: space-between;
|
|
19
|
+
&>div{
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: row;
|
|
22
|
+
button{
|
|
23
|
+
margin-right: 10px;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.file-type-tips{
|
|
29
|
+
line-height: 24px;
|
|
30
|
+
padding: 5px 10px;
|
|
31
|
+
font-size: 12px;
|
|
32
|
+
display: flex;
|
|
33
|
+
margin: 10px 0;
|
|
34
|
+
border: 1px dashed @primary-color;
|
|
35
|
+
cursor: inherit;
|
|
36
|
+
span i{
|
|
37
|
+
color: @primary-color;
|
|
38
|
+
margin-right: 7px;
|
|
39
|
+
}
|
|
40
|
+
i{
|
|
41
|
+
color: #666;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { computed, Ref, unref } from "vue"
|
|
2
|
+
|
|
3
|
+
export function useHelpers(
|
|
4
|
+
acceptRef: Ref<string[]>,
|
|
5
|
+
helpTextRef: Ref<string>,
|
|
6
|
+
maxNumberRef: Ref<number>,
|
|
7
|
+
maxSizeRef: Ref<number>
|
|
8
|
+
) {
|
|
9
|
+
// 文件类型
|
|
10
|
+
const getAccept = computed(() => {
|
|
11
|
+
const accept = unref(acceptRef);
|
|
12
|
+
if (accept && accept.length > 0) {
|
|
13
|
+
return accept;
|
|
14
|
+
}
|
|
15
|
+
return [];
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
const getStringAccept = computed(() => {
|
|
19
|
+
return unref(getAccept)
|
|
20
|
+
.map((item) => {
|
|
21
|
+
if (item.indexOf('/') > 0 || item.startsWith('.')) {
|
|
22
|
+
return item
|
|
23
|
+
}
|
|
24
|
+
return `.${item}`
|
|
25
|
+
})
|
|
26
|
+
.join(',')
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
getStringAccept
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<DtModal
|
|
3
|
+
@save="handleSave()"
|
|
4
|
+
@register="register"
|
|
5
|
+
>
|
|
6
|
+
<div class="dt-upload-wrap">
|
|
7
|
+
<DtUpload ref="uploadRef" :defaultFiles="defaultFiles">
|
|
8
|
+
111
|
|
9
|
+
</DtUpload>
|
|
10
|
+
</div>
|
|
11
|
+
</DtModal>
|
|
12
|
+
</template>
|
|
13
|
+
|
|
14
|
+
<script lang="ts" setup>
|
|
15
|
+
import { ref } from 'vue'
|
|
16
|
+
import { DtModal, useModal } from '../../modal'
|
|
17
|
+
import DtUpload from './upload.vue'
|
|
18
|
+
|
|
19
|
+
const uploadRef = ref(null)
|
|
20
|
+
const emites = defineEmits(['register'])
|
|
21
|
+
|
|
22
|
+
// 注册弹框
|
|
23
|
+
const [register] = useModal({
|
|
24
|
+
width: '700px',
|
|
25
|
+
title: '文件上传',
|
|
26
|
+
maskClosable: false,
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
const defaultFiles = [
|
|
30
|
+
{ fileName: '叮咚发票667.09.pdf', fileId: '1' }
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
// 保存
|
|
34
|
+
function handleSave() {
|
|
35
|
+
console.log(uploadRef.value.allFilesRef)
|
|
36
|
+
alert("s-s-s-")
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Fn } from "@vueuse/core"
|
|
2
|
+
import { PropType } from "vue"
|
|
3
|
+
|
|
4
|
+
export type FileType = {
|
|
5
|
+
fileName: String
|
|
6
|
+
[key: string]: any
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const basicUploadProps = {
|
|
10
|
+
// 是否显示模板下载
|
|
11
|
+
showTemplateDownload: {
|
|
12
|
+
type: Boolean,
|
|
13
|
+
default: false,
|
|
14
|
+
},
|
|
15
|
+
// 模板下载
|
|
16
|
+
templateDownload: {
|
|
17
|
+
type: Function as PropType<Fn>,
|
|
18
|
+
default: () => {}
|
|
19
|
+
},
|
|
20
|
+
helpText: {
|
|
21
|
+
type: String as PropType<string>,
|
|
22
|
+
default: '',
|
|
23
|
+
},
|
|
24
|
+
// 是否支持批量上传
|
|
25
|
+
multiple: {
|
|
26
|
+
type: Boolean as PropType<boolean>,
|
|
27
|
+
default: true,
|
|
28
|
+
},
|
|
29
|
+
// 文件支持的类型
|
|
30
|
+
accept: {
|
|
31
|
+
type: Array as PropType<string[]>,
|
|
32
|
+
default: () => [],
|
|
33
|
+
},
|
|
34
|
+
// 文件最大多少MB
|
|
35
|
+
maxSize: {
|
|
36
|
+
type: Number as PropType<number>,
|
|
37
|
+
default: 2,
|
|
38
|
+
},
|
|
39
|
+
// 最大数量的文件,Infinity不限制
|
|
40
|
+
maxNumber: {
|
|
41
|
+
type: Number as PropType<number>,
|
|
42
|
+
default: Infinity,
|
|
43
|
+
},
|
|
44
|
+
defaultFiles: {
|
|
45
|
+
type: Array as PropType<FileType[]>,
|
|
46
|
+
default: []
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="file-header">
|
|
3
|
+
<div>
|
|
4
|
+
<Upload
|
|
5
|
+
:accept="getStringAccept"
|
|
6
|
+
:multiple="multiple"
|
|
7
|
+
:before-upload="beforeUpload"
|
|
8
|
+
:show-upload-list="false"
|
|
9
|
+
>
|
|
10
|
+
<Button type="primary">
|
|
11
|
+
<span v-icon="'ic:baseline-file-upload'"></span>
|
|
12
|
+
文件上传
|
|
13
|
+
</Button>
|
|
14
|
+
</Upload>
|
|
15
|
+
<Button type="primary" v-if="showTemplateDownload" @click="templateDownload">
|
|
16
|
+
<span v-icon="'ic:baseline-file-download'"></span>
|
|
17
|
+
模板下载
|
|
18
|
+
</Button>
|
|
19
|
+
</div>
|
|
20
|
+
<slot></slot>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div class="file-type-tips ant-alert-info">
|
|
24
|
+
<span v-icon="'ant-design:info-circle-outlined'"></span>
|
|
25
|
+
<i>请上传pptx、doc、jpg、jpeg、png、bmp、gif、xls、xlsx、txt、rar、zip、7z、tar、gz格式文件</i>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<DtTable @register="registerTable"></DtTable>
|
|
29
|
+
|
|
30
|
+
<Image
|
|
31
|
+
:width="200"
|
|
32
|
+
:style="{ display: 'none' }"
|
|
33
|
+
:preview="{
|
|
34
|
+
visible: imgVisable,
|
|
35
|
+
onVisibleChange: setImgVisible,
|
|
36
|
+
}"
|
|
37
|
+
src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
|
|
38
|
+
></Image>
|
|
39
|
+
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<script lang="ts" setup>
|
|
43
|
+
import { h, ref, toRefs, watchEffect } from 'vue'
|
|
44
|
+
import { Button, Upload, Image } from 'ant-design-vue'
|
|
45
|
+
import { DtTable, useTable } from '../../table'
|
|
46
|
+
import { basicUploadProps } from './props'
|
|
47
|
+
import { useHelpers } from './helper'
|
|
48
|
+
import { useMessage } from '@dt-frames/core'
|
|
49
|
+
import * as SparkMD5 from 'spark-md5'
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const { message } = useMessage()
|
|
53
|
+
|
|
54
|
+
const filesRef = ref([])
|
|
55
|
+
const historyFilesRef = ref([])
|
|
56
|
+
const allFilesRef = ref([])
|
|
57
|
+
|
|
58
|
+
// 控制图片预览显示隐藏
|
|
59
|
+
const imgVisable = ref( false )
|
|
60
|
+
const setImgVisible = (value) => imgVisable.value = value
|
|
61
|
+
|
|
62
|
+
const props = defineProps( basicUploadProps )
|
|
63
|
+
|
|
64
|
+
const { accept, helpText, maxNumber, maxSize } = toRefs(props)
|
|
65
|
+
const { getStringAccept } = useHelpers( accept, helpText, maxNumber, maxSize )
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
const [registerTable, { }] = useTable({
|
|
69
|
+
tableSetting: false,
|
|
70
|
+
pagination: false,
|
|
71
|
+
dataSource: allFilesRef,
|
|
72
|
+
columns: [
|
|
73
|
+
{ title: '文件名称', dataIndex: 'fileName' },
|
|
74
|
+
{ title: '上传状态', dataIndex: 'fileStatue', render(row) {
|
|
75
|
+
return h('span', {
|
|
76
|
+
style: `color: ${ row.status === 0 ? 'orange' : 'green' }`,
|
|
77
|
+
}, row.fileStatue)
|
|
78
|
+
} },
|
|
79
|
+
],
|
|
80
|
+
operations: {
|
|
81
|
+
expand: true,
|
|
82
|
+
btns: [
|
|
83
|
+
{ title: '预览', icon: 'ic:baseline-remove-red-eye',
|
|
84
|
+
ifShow(row) {
|
|
85
|
+
const supportFileTypes = ['pdf', 'jpg', 'jpeg', 'png', 'bmp', 'gif']
|
|
86
|
+
return supportFileTypes.includes( row.fileName.split('.').pop() )
|
|
87
|
+
},
|
|
88
|
+
action: () => {
|
|
89
|
+
setImgVisible(true)
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{ title: '编辑', icon: 'mdi:text-box-edit-outline' },
|
|
93
|
+
{ title: '删除', icon: 'mdi:delete-outline' }
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
watchEffect(() => {
|
|
100
|
+
historyFilesRef.value = props.defaultFiles.map(file => {
|
|
101
|
+
return {
|
|
102
|
+
...file,
|
|
103
|
+
fileName: file.fileName,
|
|
104
|
+
status: 0,
|
|
105
|
+
fileStatue: '历史上传'
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
allFilesRef.value = [...historyFilesRef.value, ...filesRef.value]
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
function beforeUpload(file: File) {
|
|
114
|
+
const { maxSize } = props
|
|
115
|
+
|
|
116
|
+
if( maxSize && file.size / 1024 / 1024 >= maxSize ) {
|
|
117
|
+
message.error(`只能上传不超过${ maxSize }MB的文件!`)
|
|
118
|
+
return false
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
addFile( file )
|
|
122
|
+
|
|
123
|
+
return false
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 添加文件
|
|
127
|
+
function addFile(file: File) {
|
|
128
|
+
let blobSlice = File.prototype.slice || (File.prototype as any).mozSlice || (File.prototype as any).webkitSlice
|
|
129
|
+
let chunkSize = 2097152,
|
|
130
|
+
chunks = Math.ceil(file.size / chunkSize),
|
|
131
|
+
currentChunk = 0,
|
|
132
|
+
spark = new SparkMD5.ArrayBuffer(),
|
|
133
|
+
fileReader = new FileReader()
|
|
134
|
+
|
|
135
|
+
fileReader.onload = function (e) {
|
|
136
|
+
spark.append(e.target['result']);
|
|
137
|
+
currentChunk++;
|
|
138
|
+
|
|
139
|
+
if (currentChunk < chunks) {
|
|
140
|
+
loadNext();
|
|
141
|
+
} else {
|
|
142
|
+
filesRef.value.push({
|
|
143
|
+
fileName: file.name,
|
|
144
|
+
fileId: spark.end(),
|
|
145
|
+
file,
|
|
146
|
+
status: 1,
|
|
147
|
+
fileStatue: '待上传'
|
|
148
|
+
})
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function loadNext() {
|
|
153
|
+
var start = currentChunk * chunkSize,
|
|
154
|
+
end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize
|
|
155
|
+
|
|
156
|
+
fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
loadNext()
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
defineExpose({
|
|
164
|
+
allFilesRef
|
|
165
|
+
})
|
|
166
|
+
</script>
|
|
@@ -13,7 +13,7 @@ function deleteChildrenProp( menu: any ) {
|
|
|
13
13
|
|
|
14
14
|
// 获取当前路由的面包屑
|
|
15
15
|
export function getBreadCrumb(path: string, menus?: Menus[]) {
|
|
16
|
-
const _menus = menus || DtCache.getLocal(CacheKey.MENUS) || []
|
|
16
|
+
const _menus = menus || DtCache.getLocal(CacheKey.MENUS)?.children || []
|
|
17
17
|
|
|
18
18
|
let routes: Menus[] = []
|
|
19
19
|
|
|
@@ -58,7 +58,7 @@ export function getFilterMenu( filter: string = '', flag: boolean = false) {
|
|
|
58
58
|
} )
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
getTargetMenus( DtCache.getLocal(CacheKey.MENUS) );
|
|
61
|
+
getTargetMenus( DtCache.getLocal(CacheKey.MENUS)?.children );
|
|
62
62
|
|
|
63
63
|
return _menus;
|
|
64
64
|
}
|
|
@@ -67,7 +67,7 @@ export function useSplitMenu( splitType: Ref<MenuSplitTye> ) {
|
|
|
67
67
|
|
|
68
68
|
async function getMenus() {
|
|
69
69
|
if (unref(normalType)) {
|
|
70
|
-
menusRef.value = DtCache.getLocal(CacheKey.MENUS)
|
|
70
|
+
menusRef.value = DtCache.getLocal(CacheKey.MENUS)?.children
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -85,7 +85,7 @@ export function useSplitMenu( splitType: Ref<MenuSplitTye> ) {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
async function getMenus() { return DtCache.getLocal(CacheKey.MENUS) }
|
|
88
|
+
async function getMenus() { return DtCache.getLocal(CacheKey.MENUS)?.children }
|
|
89
89
|
|
|
90
90
|
function getFirstMenuPath(item: Menus) {
|
|
91
91
|
let isFind = false, path = ''
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ModalProps, Recordable } from "@dt-frames/core"
|
|
2
|
-
import { VNode, h, createVNode, render as vueRender, Component } from "vue"
|
|
3
|
-
|
|
4
|
-
export function useDialog() {
|
|
5
|
-
function createDialog( component: any, options: any ) {
|
|
6
|
-
return new Promise( resolve => {
|
|
7
|
-
const div = document.createElement('div');
|
|
8
|
-
document.body.appendChild(div);
|
|
9
|
-
|
|
10
|
-
const wrapper = () => {
|
|
11
|
-
return h(component, {
|
|
12
|
-
params: {
|
|
13
|
-
...options,
|
|
14
|
-
afterClose: ( data: any ) => destroy( data )
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
})
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
let dialogInstance = render();
|
|
21
|
-
|
|
22
|
-
function render() {
|
|
23
|
-
const vm = createVNode(component.children[0]);
|
|
24
|
-
vueRender(vm, div);
|
|
25
|
-
return vm;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function destroy( data: any ) {
|
|
29
|
-
if (dialogInstance && div.parentNode) {
|
|
30
|
-
vueRender(null, div);
|
|
31
|
-
dialogInstance.component.update();
|
|
32
|
-
dialogInstance = null;
|
|
33
|
-
div.parentNode.removeChild(div);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
resolve( data );
|
|
37
|
-
}
|
|
38
|
-
} )
|
|
39
|
-
}
|
|
40
|
-
// function createDialog(component: any, props?: ModalProps) {
|
|
41
|
-
// const afterClose = (rsp: Recordable) => { }
|
|
42
|
-
|
|
43
|
-
// const div = document.createElement('div')
|
|
44
|
-
// document.body.appendChild(div)
|
|
45
|
-
|
|
46
|
-
// const wrapper = () => {
|
|
47
|
-
// return (
|
|
48
|
-
// h(component, {
|
|
49
|
-
// params: {
|
|
50
|
-
// ...props,
|
|
51
|
-
// afterClose: ( data: Recordable ) => destroy( data )
|
|
52
|
-
// }
|
|
53
|
-
// })
|
|
54
|
-
// )
|
|
55
|
-
// }
|
|
56
|
-
|
|
57
|
-
// let dialogInstance = render()
|
|
58
|
-
|
|
59
|
-
// function render(){
|
|
60
|
-
// const vm = createVNode(wrapper)
|
|
61
|
-
// vueRender(vm, div)
|
|
62
|
-
// return vm
|
|
63
|
-
// }
|
|
64
|
-
|
|
65
|
-
// const destroy = ( data: Recordable ) => {
|
|
66
|
-
// if (dialogInstance && div.parentNode) {
|
|
67
|
-
// vueRender(null, div)
|
|
68
|
-
// dialogInstance.component.update()
|
|
69
|
-
// dialogInstance = null
|
|
70
|
-
// div.parentNode.removeChild(div)
|
|
71
|
-
// }
|
|
72
|
-
|
|
73
|
-
// afterClose( data )
|
|
74
|
-
// }
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// return {
|
|
78
|
-
// afterClose
|
|
79
|
-
// }
|
|
80
|
-
// }
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
createDialog
|
|
84
|
-
}
|
|
85
|
-
}
|