Skip to content

Commit 42c97f6

Browse files
authored
feat: Add dialog component (#7553)
1 parent b719383 commit 42c97f6

File tree

49 files changed

+205
-380
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+205
-380
lines changed

frontend/src/components/backup/index.vue

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,11 @@
6767
</template>
6868
</DrawerPro>
6969

70-
<el-dialog
70+
<DialogPro
7171
v-model="open"
7272
:title="isBackup ? $t('commons.button.backup') : $t('commons.button.recover') + ' - ' + name"
73-
width="30%"
74-
:close-on-click-modal="false"
75-
:before-close="handleBackupClose"
73+
size="small"
74+
@close="handleBackupClose"
7675
>
7776
<el-form ref="backupForm" label-position="left" v-loading="loading">
7877
<el-form-item
@@ -93,7 +92,7 @@
9392
</el-button>
9493
</span>
9594
</template>
96-
</el-dialog>
95+
</DialogPro>
9796

9897
<OpDialog ref="opRef" @search="search" />
9998
<TaskLog ref="taskLogRef" @close="search" />

frontend/src/components/confirm-dialog/index.vue

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
<template>
2-
<el-dialog v-model="submitVisible" :destroy-on-close="true" :close-on-click-modal="false" width="20%">
3-
<template #header>
4-
<div class="card-header">
5-
<span>{{ header }}</span>
6-
</div>
7-
</template>
2+
<DialogPro v-model="submitVisible" :title="header" size="mini">
83
<div>
94
<span v-if="operationInfo" style="font-size: 12px">{{ operationInfo }}</span>
105
<div :style="{ 'margin-top': operationInfo ? '10px' : '0px' }">
@@ -23,7 +18,7 @@
2318
</el-button>
2419
</span>
2520
</template>
26-
</el-dialog>
21+
</DialogPro>
2722
</template>
2823

2924
<script lang="ts" setup>

frontend/src/components/del-dialog/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<div>
3-
<el-dialog v-model="open" :title="form.title" width="30%" :close-on-click-modal="false" @close="handleClose">
3+
<DialogPro v-model="open" :title="form.title" size="small" @close="handleClose">
44
<div v-loading="loading">
55
<el-row type="flex" justify="center">
66
<el-col :span="22">
@@ -30,7 +30,7 @@
3030
</el-button>
3131
</span>
3232
</template>
33-
</el-dialog>
33+
</DialogPro>
3434
</div>
3535
</template>
3636

frontend/src/components/dialog-pro/index.vue

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44
v-model="dialogVisible"
55
:destroy-on-close="true"
66
:close-on-click-modal="false"
7+
:show-close="showClose"
78
:width="size"
9+
:open="open"
10+
@opened="opened"
11+
:before-close="handleBeforeClose"
812
>
13+
<slot name="header"></slot>
914
<div v-if="slots.content">
1015
<slot name="content"></slot>
1116
</div>
@@ -27,6 +32,10 @@ defineOptions({ name: 'DrawerPro' });
2732
2833
const props = defineProps({
2934
title: String,
35+
showClose: {
36+
type: Boolean,
37+
default: true,
38+
},
3039
size: {
3140
type: String,
3241
default: 'normal',
@@ -39,10 +48,12 @@ const props = defineProps({
3948
4049
const slots = useSlots();
4150
42-
const emit = defineEmits(['update:modelValue', 'close']);
51+
const emit = defineEmits(['update:modelValue', 'close', 'open', 'opened']);
4352
4453
const size = computed(() => {
4554
switch (props.size) {
55+
case 'mini':
56+
return '20%';
4657
case 'small':
4758
return '30%';
4859
case 'normal':
@@ -51,8 +62,12 @@ const size = computed(() => {
5162
return '50%';
5263
case 'full':
5364
return '100%';
54-
case '60%':
65+
case 'w-60':
5566
return '60%';
67+
case 'w-70':
68+
return '70%';
69+
case 'w-90':
70+
return '90%';
5671
default:
5772
return '50%';
5873
}
@@ -66,4 +81,14 @@ const dialogVisible = computed({
6681
emit('update:modelValue', value);
6782
},
6883
});
84+
85+
const handleBeforeClose = () => {
86+
emit('close');
87+
};
88+
const open = () => {
89+
emit('open');
90+
};
91+
const opened = () => {
92+
emit('opened');
93+
};
6994
</script>

frontend/src/components/license-import/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<template>
22
<div>
3-
<el-dialog class="level-up-pro" v-model="open" :close-on-click-modal="false" @close="handleClose">
3+
<DialogPro v-model="open" class="level-up-pro" @close="handleClose">
44
<div style="text-align: center" v-loading="loading">
55
<span class="text-3xl font-medium title">{{ $t('license.levelUpPro') }}</span>
66
<el-row type="flex" justify="center" class="mt-6">
@@ -36,7 +36,7 @@
3636
<el-button text type="primary" @click="toHalo">{{ $t('license.knowMorePro') }}</el-button>
3737
</div>
3838
</div>
39-
</el-dialog>
39+
</DialogPro>
4040
</div>
4141
</template>
4242

frontend/src/components/port-jump/index.vue

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
11
<template>
22
<div>
3-
<el-dialog
4-
v-model="dialogVisible"
5-
:title="$t('app.checkTitle')"
6-
width="30%"
7-
:close-on-click-modal="false"
8-
:destroy-on-close="true"
9-
>
3+
<DialogPro v-model="open" :title="$t('app.checkTitle')" size="small">
104
<el-alert :closable="false" :title="$t('setting.systemIPWarning')" type="info">
115
<el-link icon="Position" @click="goRouter('/settings/panel')" type="primary">
126
{{ $t('firewall.quickJump') }}
137
</el-link>
148
</el-alert>
159
<template #footer>
1610
<span class="dialog-footer">
17-
<el-button @click="dialogVisible = false">{{ $t('commons.button.cancel') }}</el-button>
11+
<el-button @click="open = false">{{ $t('commons.button.cancel') }}</el-button>
1812
</span>
1913
</template>
20-
</el-dialog>
14+
</DialogPro>
2115
</div>
2216
</template>
2317
<script lang="ts" setup>
@@ -28,7 +22,7 @@ import { MsgError, MsgWarning } from '@/utils/message';
2822
import { useRouter } from 'vue-router';
2923
const router = useRouter();
3024
31-
const dialogVisible = ref();
25+
const open = ref();
3226
3327
interface DialogProps {
3428
port: any;
@@ -44,7 +38,7 @@ const acceptParams = async (params: DialogProps): Promise<void> => {
4438
let protocol = params.protocol === 'https' ? 'https' : 'http';
4539
const res = await getSettingInfo();
4640
if (!res.data.systemIP) {
47-
dialogVisible.value = true;
41+
open.value = true;
4842
return;
4943
}
5044
if (res.data.systemIP.indexOf(':') === -1) {

frontend/src/components/upload/index.vue

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,13 +104,7 @@
104104
</template>
105105
</DrawerPro>
106106

107-
<el-dialog
108-
v-model="open"
109-
:title="$t('commons.button.recover') + ' - ' + name"
110-
width="40%"
111-
:close-on-click-modal="false"
112-
:before-close="handleBackupClose"
113-
>
107+
<DialogPro v-model="open" :title="$t('commons.button.recover') + ' - ' + name" @close="handleBackupClose">
114108
<el-form ref="backupForm" label-position="left" v-loading="loading">
115109
<el-form-item
116110
:label="$t('setting.compressPassword')"
@@ -130,7 +124,7 @@
130124
</el-button>
131125
</span>
132126
</template>
133-
</el-dialog>
127+
</DialogPro>
134128

135129
<OpDialog ref="opRef" @search="search" />
136130
</div>

frontend/src/components/vscode-open/index.vue

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
<template>
22
<div>
3-
<el-dialog
4-
v-model="dialogVisible"
5-
:title="$t('app.checkTitle')"
6-
width="30%"
7-
:close-on-click-modal="false"
8-
:destroy-on-close="true"
9-
>
3+
<DialogPro v-model="open" :title="$t('app.checkTitle')" size="small">
104
<el-row>
115
<el-col :span="22" :offset="1">
126
<el-alert :closable="false" :title="$t('file.vscodeHelper')" type="info"></el-alert>
@@ -37,14 +31,14 @@
3731
</el-button>
3832
</span>
3933
</template>
40-
</el-dialog>
34+
</DialogPro>
4135
</div>
4236
</template>
4337
<script lang="ts" setup>
4438
import { reactive, ref } from 'vue';
4539
import { FormInstance } from 'element-plus';
4640
47-
const dialogVisible = ref();
41+
const open = ref();
4842
4943
interface DialogProps {
5044
path: string;
@@ -60,7 +54,7 @@ const addForm = reactive({
6054
6155
const em = defineEmits(['close']);
6256
const handleClose = () => {
63-
dialogVisible.value = false;
57+
open.value = false;
6458
if (vscodeConnectInfoForm.value) {
6559
vscodeConnectInfoForm.value.resetFields();
6660
}
@@ -73,7 +67,7 @@ const submit = async (formEl: FormInstance | undefined) => {
7367
return;
7468
}
7569
localStorage.setItem('VscodeConnectInfo', JSON.stringify(addForm));
76-
dialogVisible.value = false;
70+
open.value = false;
7771
const vscodeUrl = `vscode://vscode-remote/ssh-remote+${addForm.username}@${addForm.host}:${addForm.port}${addForm.path}?windowId=_blank`;
7872
window.open(vscodeUrl);
7973
});
@@ -91,7 +85,7 @@ const acceptParams = async (params: DialogProps): Promise<void> => {
9185
}
9286
9387
addForm.path = params.path;
94-
dialogVisible.value = true;
88+
open.value = true;
9589
};
9690
9791
defineExpose({ acceptParams });

frontend/src/views/app-store/installed/check/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<el-dialog v-model="open" :title="$t('app.checkTitle')" width="50%" :close-on-click-modal="false">
2+
<DialogPro v-model="open" :title="$t('app.checkTitle')" size="large">
33
<el-row>
44
<el-col :span="20" :offset="2" v-if="open">
55
<el-alert
@@ -37,7 +37,7 @@
3737
</el-button>
3838
</span>
3939
</template>
40-
</el-dialog>
40+
</DialogPro>
4141
</template>
4242
<script lang="ts" setup>
4343
import { App } from '@/api/interface/app';

frontend/src/views/app-store/installed/delete/index.vue

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
<template>
2-
<el-dialog
3-
v-model="open"
4-
:title="$t('commons.button.delete') + ' - ' + appInstallName"
5-
width="40%"
6-
:close-on-click-modal="false"
7-
:before-close="handleClose"
8-
>
2+
<DialogPro v-model="open" :title="$t('commons.button.delete') + ' - ' + appInstallName" @close="handleClose">
93
<el-form ref="deleteForm" label-position="left" v-loading="loading">
104
<el-form-item>
115
<el-checkbox v-model="deleteReq.forceDelete" :label="$t('app.forceDelete')" />
@@ -46,7 +40,7 @@
4640
</el-button>
4741
</span>
4842
</template>
49-
</el-dialog>
43+
</DialogPro>
5044
<TaskLog ref="taskLogRef" @close="handleClose" />
5145
</template>
5246
<script lang="ts" setup>

0 commit comments

Comments
 (0)