From 1e9399ae37b106f0ca5980287e4fd8425fee48e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sat, 23 Aug 2025 03:18:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8E=BB=E6=8E=89=E6=B2=A1=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/common/ServiceStatus.vue | 4 - web/src/views/app/IndexView.vue | 16 +- web/src/views/apps/codeserver/IndexView.vue | 1 - web/src/views/apps/docker/IndexView.vue | 1 - web/src/views/apps/fail2ban/IndexView.vue | 12 +- web/src/views/apps/frp/IndexView.vue | 2 - web/src/views/apps/gitea/IndexView.vue | 1 - web/src/views/apps/memcached/IndexView.vue | 1 - web/src/views/apps/minio/IndexView.vue | 1 - web/src/views/apps/mysql/IndexView.vue | 3 - web/src/views/apps/nginx/IndexView.vue | 2 - web/src/views/apps/php/PhpView.vue | 11 +- web/src/views/apps/phpmyadmin/IndexView.vue | 2 - web/src/views/apps/podman/IndexView.vue | 2 - web/src/views/apps/postgresql/IndexView.vue | 3 - web/src/views/apps/pureftpd/IndexView.vue | 10 +- web/src/views/apps/redis/IndexView.vue | 1 - web/src/views/apps/rsync/IndexView.vue | 10 +- web/src/views/apps/s3fs/IndexView.vue | 5 +- web/src/views/apps/supervisor/IndexView.vue | 22 +- web/src/views/backup/ListView.vue | 7 +- web/src/views/cert/IndexView.vue | 4 - web/src/views/dashboard/UpdateView.vue | 1 - web/src/views/database/DatabaseList.vue | 4 +- web/src/views/database/IndexView.vue | 3 - web/src/views/database/ServerList.vue | 10 +- web/src/views/database/UserList.vue | 7 +- web/src/views/firewall/ForwardView.vue | 6 +- web/src/views/firewall/IpRuleView.vue | 6 +- web/src/views/firewall/RuleView.vue | 6 +- web/src/views/monitor/IndexView.vue | 1 - web/src/views/setting/IndexView.vue | 3 - web/src/views/setting/SettingUser.vue | 11 +- web/src/views/setting/TokenModal.vue | 8 +- web/src/views/ssh/IndexView.vue | 2 - web/src/views/task/CronView.vue | 11 +- web/src/views/task/IndexView.vue | 2 - web/src/views/task/SystemView.vue | 5 +- web/src/views/task/TaskView.vue | 8 +- web/src/views/website/EditView.vue | 5 - web/src/views/website/IndexView.vue | 617 +------------------- web/src/views/website/PhpView.vue | 538 +++++++++++++++++ web/src/views/website/SettingView.vue | 117 ++++ 43 files changed, 718 insertions(+), 774 deletions(-) create mode 100644 web/src/views/website/PhpView.vue create mode 100644 web/src/views/website/SettingView.vue diff --git a/web/src/components/common/ServiceStatus.vue b/web/src/components/common/ServiceStatus.vue index 63d1bd7b..d1efc05f 100644 --- a/web/src/components/common/ServiceStatus.vue +++ b/web/src/components/common/ServiceStatus.vue @@ -148,20 +148,17 @@ onMounted(() => { - {{ $gettext('Start') }} {{ $gettext('Are you sure you want to stop %{ service }?', { service: props.service }) }} - {{ $gettext('Restart') }} { v-model:disabled="fetchingStatus" @click="handleReload" > - {{ $gettext('Reload') }} diff --git a/web/src/views/app/IndexView.vue b/web/src/views/app/IndexView.vue index 406a0515..83ffb30b 100644 --- a/web/src/views/app/IndexView.vue +++ b/web/src/views/app/IndexView.vue @@ -11,7 +11,6 @@ import { useGettext } from 'vue3-gettext' import app from '@/api/panel/app' import TheIcon from '@/components/custom/TheIcon.vue' import { router } from '@/router' -import { renderIcon } from '@/utils' const { $gettext } = useGettext() @@ -93,10 +92,7 @@ const columns: any = [ type: 'warning' }, { - default: () => $gettext('Update'), - icon: renderIcon('material-symbols:arrow-circle-up-outline-rounded', { - size: 14 - }) + default: () => $gettext('Update') } ) } @@ -112,8 +108,7 @@ const columns: any = [ onClick: () => handleManage(row.slug) }, { - default: () => $gettext('Manage'), - icon: renderIcon('material-symbols:settings-outline', { size: 14 }) + default: () => $gettext('Manage') } ) : null, @@ -135,8 +130,7 @@ const columns: any = [ type: 'error' }, { - default: () => $gettext('Uninstall'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Uninstall') } ) } @@ -156,8 +150,7 @@ const columns: any = [ } }, { - default: () => $gettext('Install'), - icon: renderIcon('material-symbols:download-rounded', { size: 14 }) + default: () => $gettext('Install') } ) : null @@ -220,7 +213,6 @@ onMounted(() => { diff --git a/web/src/views/apps/codeserver/IndexView.vue b/web/src/views/apps/codeserver/IndexView.vue index 11862441..ab80146e 100644 --- a/web/src/views/apps/codeserver/IndexView.vue +++ b/web/src/views/apps/codeserver/IndexView.vue @@ -35,7 +35,6 @@ const handleSaveConfig = () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} diff --git a/web/src/views/apps/docker/IndexView.vue b/web/src/views/apps/docker/IndexView.vue index c895c18c..6b05a423 100644 --- a/web/src/views/apps/docker/IndexView.vue +++ b/web/src/views/apps/docker/IndexView.vue @@ -35,7 +35,6 @@ const handleSaveConfig = () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} diff --git a/web/src/views/apps/fail2ban/IndexView.vue b/web/src/views/apps/fail2ban/IndexView.vue index d1fd19c4..b037cfea 100644 --- a/web/src/views/apps/fail2ban/IndexView.vue +++ b/web/src/views/apps/fail2ban/IndexView.vue @@ -10,7 +10,6 @@ import fail2ban from '@/api/apps/fail2ban' import app from '@/api/panel/app' import website from '@/api/panel/website' import ServiceStatus from '@/components/common/ServiceStatus.vue' -import { renderIcon } from '@/utils' const { $gettext } = useGettext() const currentTab = ref('status') @@ -75,8 +74,7 @@ const jailsColumns: any = [ } }, { - default: () => $gettext('View'), - icon: renderIcon('material-symbols:visibility', { size: 14 }) + default: () => $gettext('View') } ), h( @@ -97,8 +95,7 @@ const jailsColumns: any = [ style: 'margin-left: 15px' }, { - default: () => $gettext('Delete'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Delete') } ) } @@ -141,8 +138,7 @@ const banedIPColumns: any = [ type: 'error' }, { - default: () => $gettext('Unban'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Unban') } ) } @@ -235,7 +231,6 @@ onMounted(() => { type="primary" @click="handleSaveWhiteList" > - {{ $gettext('Save Whitelist') }} { type="primary" @click="addJailModal = true" > - {{ $gettext('Add Rule') }} diff --git a/web/src/views/apps/frp/IndexView.vue b/web/src/views/apps/frp/IndexView.vue index 88e18904..f369d971 100644 --- a/web/src/views/apps/frp/IndexView.vue +++ b/web/src/views/apps/frp/IndexView.vue @@ -44,7 +44,6 @@ onMounted(() => { @@ -69,7 +68,6 @@ onMounted(() => { diff --git a/web/src/views/apps/gitea/IndexView.vue b/web/src/views/apps/gitea/IndexView.vue index 69fd9866..e8f003fc 100644 --- a/web/src/views/apps/gitea/IndexView.vue +++ b/web/src/views/apps/gitea/IndexView.vue @@ -33,7 +33,6 @@ const handleSaveConfig = () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} diff --git a/web/src/views/apps/memcached/IndexView.vue b/web/src/views/apps/memcached/IndexView.vue index f5d5e340..5fba1e4f 100644 --- a/web/src/views/apps/memcached/IndexView.vue +++ b/web/src/views/apps/memcached/IndexView.vue @@ -55,7 +55,6 @@ const handleSaveConfig = () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} diff --git a/web/src/views/apps/minio/IndexView.vue b/web/src/views/apps/minio/IndexView.vue index e472295b..656f6085 100644 --- a/web/src/views/apps/minio/IndexView.vue +++ b/web/src/views/apps/minio/IndexView.vue @@ -28,7 +28,6 @@ const handleSaveEnv = () => { diff --git a/web/src/views/apps/mysql/IndexView.vue b/web/src/views/apps/mysql/IndexView.vue index 3ac4b1b2..ddcbc6ac 100644 --- a/web/src/views/apps/mysql/IndexView.vue +++ b/web/src/views/apps/mysql/IndexView.vue @@ -75,7 +75,6 @@ const handleSetRootPassword = async () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} { type="primary" @click="handleClearErrorLog" > - {{ $gettext('Clear Log') }} { type="primary" @click="handleClearSlowLog" > - {{ $gettext('Clear Slow Log') }} diff --git a/web/src/views/apps/nginx/IndexView.vue b/web/src/views/apps/nginx/IndexView.vue index ec2cba71..d096dd2f 100644 --- a/web/src/views/apps/nginx/IndexView.vue +++ b/web/src/views/apps/nginx/IndexView.vue @@ -61,7 +61,6 @@ const handleClearErrorLog = () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} { type="primary" @click="handleClearErrorLog" > - {{ $gettext('Clear Log') }} diff --git a/web/src/views/apps/php/PhpView.vue b/web/src/views/apps/php/PhpView.vue index d4f7fe48..a55a3fae 100644 --- a/web/src/views/apps/php/PhpView.vue +++ b/web/src/views/apps/php/PhpView.vue @@ -5,7 +5,6 @@ import { useGettext } from 'vue3-gettext' import php from '@/api/apps/php' import ServiceStatus from '@/components/common/ServiceStatus.vue' -import { renderIcon } from '@/utils' const { $gettext } = useGettext() const props = defineProps({ @@ -78,8 +77,7 @@ const extensionColumns: any = [ type: 'info' }, { - default: () => $gettext('Install'), - icon: renderIcon('material-symbols:download-rounded', { size: 14 }) + default: () => $gettext('Install') } ) } @@ -106,8 +104,7 @@ const extensionColumns: any = [ type: 'error' }, { - default: () => $gettext('Delete'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Delete') } ) } @@ -190,7 +187,6 @@ const handleUninstallExtension = async (name: string) => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} { type="primary" @click="handleSaveFPMConfig" > - {{ $gettext('Save') }} { type="primary" @click="handleClearErrorLog" > - {{ $gettext('Clear Error Log') }} { type="primary" @click="handleClearSlowLog" > - {{ $gettext('Clear Slow Log') }} diff --git a/web/src/views/apps/phpmyadmin/IndexView.vue b/web/src/views/apps/phpmyadmin/IndexView.vue index 69c4a046..bd51d9ea 100644 --- a/web/src/views/apps/phpmyadmin/IndexView.vue +++ b/web/src/views/apps/phpmyadmin/IndexView.vue @@ -54,7 +54,6 @@ onMounted(() => { diff --git a/web/src/views/apps/podman/IndexView.vue b/web/src/views/apps/podman/IndexView.vue index 441c4d38..57f45125 100644 --- a/web/src/views/apps/podman/IndexView.vue +++ b/web/src/views/apps/podman/IndexView.vue @@ -43,7 +43,6 @@ const handleSaveStorageConfig = () => { type="primary" @click="handleSaveRegistryConfig" > - {{ $gettext('Save') }} { type="primary" @click="handleSaveStorageConfig" > - {{ $gettext('Save') }} diff --git a/web/src/views/apps/postgresql/IndexView.vue b/web/src/views/apps/postgresql/IndexView.vue index 1659a509..83e0e2e1 100644 --- a/web/src/views/apps/postgresql/IndexView.vue +++ b/web/src/views/apps/postgresql/IndexView.vue @@ -67,7 +67,6 @@ const handleClearLog = async () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} { type="primary" @click="handleSaveUserConfig" > - {{ $gettext('Save') }} - {{ $gettext('Clear Log') }} diff --git a/web/src/views/apps/pureftpd/IndexView.vue b/web/src/views/apps/pureftpd/IndexView.vue index bb8d18dd..8d923c87 100644 --- a/web/src/views/apps/pureftpd/IndexView.vue +++ b/web/src/views/apps/pureftpd/IndexView.vue @@ -8,7 +8,7 @@ import { useGettext } from 'vue3-gettext' import pureftpd from '@/api/apps/pureftpd' import ServiceStatus from '@/components/common/ServiceStatus.vue' -import { generateRandomString, renderIcon } from '@/utils' +import { generateRandomString } from '@/utils' const { $gettext } = useGettext() const currentTab = ref('status') @@ -62,8 +62,7 @@ const userColumns: any = [ } }, { - default: () => $gettext('Change Password'), - icon: renderIcon('material-symbols:key-outline', { size: 14 }) + default: () => $gettext('Change Password') } ), h( @@ -86,8 +85,7 @@ const userColumns: any = [ style: 'margin-left: 15px' }, { - default: () => $gettext('Delete'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Delete') } ) } @@ -158,7 +156,6 @@ onMounted(() => { diff --git a/web/src/views/apps/redis/IndexView.vue b/web/src/views/apps/redis/IndexView.vue index 26186dd5..f71727e1 100644 --- a/web/src/views/apps/redis/IndexView.vue +++ b/web/src/views/apps/redis/IndexView.vue @@ -52,7 +52,6 @@ const handleSaveConfig = () => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} diff --git a/web/src/views/apps/rsync/IndexView.vue b/web/src/views/apps/rsync/IndexView.vue index 9a88fb72..a4d80fae 100644 --- a/web/src/views/apps/rsync/IndexView.vue +++ b/web/src/views/apps/rsync/IndexView.vue @@ -9,7 +9,7 @@ import { useGettext } from 'vue3-gettext' import rsync from '@/api/apps/rsync' import ServiceStatus from '@/components/common/ServiceStatus.vue' -import { generateRandomString, renderIcon } from '@/utils' +import { generateRandomString } from '@/utils' const { $gettext } = useGettext() const currentTab = ref('status') @@ -80,8 +80,7 @@ const processColumns: any = [ onClick: () => handleModelEdit(row) }, { - default: () => $gettext('Configure'), - icon: renderIcon('material-symbols:settings-outline', { size: 14 }) + default: () => $gettext('Configure') } ), h( @@ -104,8 +103,7 @@ const processColumns: any = [ style: 'margin-left: 15px' }, { - default: () => $gettext('Delete'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Delete') } ) } @@ -197,7 +195,6 @@ onMounted(() => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} { type="primary" @click="addModuleModal = true" > - {{ $gettext('Add Module') }} diff --git a/web/src/views/apps/s3fs/IndexView.vue b/web/src/views/apps/s3fs/IndexView.vue index ae14876f..c65ea527 100644 --- a/web/src/views/apps/s3fs/IndexView.vue +++ b/web/src/views/apps/s3fs/IndexView.vue @@ -7,7 +7,6 @@ import { NButton, NDataTable, NInput, NPopconfirm } from 'naive-ui' import { useGettext } from 'vue3-gettext' import s3fs from '@/api/apps/s3fs' -import { renderIcon } from '@/utils' const { $gettext } = useGettext() const addMountModal = ref(false) @@ -55,8 +54,7 @@ const columns: any = [ type: 'error' }, { - default: () => $gettext('Unmount'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Unmount') } ) } @@ -101,7 +99,6 @@ onMounted(() => { diff --git a/web/src/views/apps/supervisor/IndexView.vue b/web/src/views/apps/supervisor/IndexView.vue index 422f5731..54489a46 100644 --- a/web/src/views/apps/supervisor/IndexView.vue +++ b/web/src/views/apps/supervisor/IndexView.vue @@ -9,7 +9,6 @@ import { useGettext } from 'vue3-gettext' import supervisor from '@/api/apps/supervisor' import ServiceStatus from '@/components/common/ServiceStatus.vue' -import { renderIcon } from '@/utils' const { $gettext } = useGettext() const currentTab = ref('status') @@ -88,8 +87,7 @@ const processColumns: any = [ onClick: () => handleShowProcessLog(row) }, { - default: () => $gettext('Logs'), - icon: renderIcon('material-symbols:visibility', { size: 14 }) + default: () => $gettext('Logs') } ), h( @@ -101,8 +99,7 @@ const processColumns: any = [ onClick: () => handleEditProcess(row.name) }, { - default: () => $gettext('Configure'), - icon: renderIcon('material-symbols:settings-outline', { size: 14 }) + default: () => $gettext('Configure') } ), row.status != 'RUNNING' @@ -116,8 +113,7 @@ const processColumns: any = [ onClick: () => handleProcessStart(row.name) }, { - default: () => $gettext('Start'), - icon: renderIcon('material-symbols:play-arrow-outline', { size: 18 }) + default: () => $gettext('Start') } ) : null, @@ -142,8 +138,7 @@ const processColumns: any = [ style: 'margin-left: 15px' }, { - default: () => $gettext('Stop'), - icon: renderIcon('material-symbols:stop-outline', { size: 18 }) + default: () => $gettext('Stop') } ) } @@ -171,8 +166,7 @@ const processColumns: any = [ style: 'margin-left: 15px' }, { - default: () => $gettext('Restart'), - icon: renderIcon('material-symbols:replay', { size: 18 }) + default: () => $gettext('Restart') } ) } @@ -199,8 +193,7 @@ const processColumns: any = [ style: 'margin-left: 15px' }, { - default: () => $gettext('Delete'), - icon: renderIcon('material-symbols:delete-outline', { size: 14 }) + default: () => $gettext('Delete') } ) } @@ -309,7 +302,6 @@ onUnmounted(() => { type="primary" @click="handleSaveConfig" > - {{ $gettext('Save') }} { type="primary" @click="createProcessModal = true" > - {{ $gettext('Add Process') }} - {{ $gettext('Clear Log') }} diff --git a/web/src/views/backup/ListView.vue b/web/src/views/backup/ListView.vue index 7698ba54..89570e5e 100644 --- a/web/src/views/backup/ListView.vue +++ b/web/src/views/backup/ListView.vue @@ -1,6 +1,5 @@ diff --git a/web/src/views/website/PhpView.vue b/web/src/views/website/PhpView.vue new file mode 100644 index 00000000..357c03d3 --- /dev/null +++ b/web/src/views/website/PhpView.vue @@ -0,0 +1,538 @@ + + + diff --git a/web/src/views/website/SettingView.vue b/web/src/views/website/SettingView.vue new file mode 100644 index 00000000..efaf6186 --- /dev/null +++ b/web/src/views/website/SettingView.vue @@ -0,0 +1,117 @@ + + + + +