fix: Fix issue with failure to disable website cache (#8113)

This commit is contained in:
zhengkunwang 2025-03-10 18:36:46 +08:00 committed by GitHub
parent 63631b1118
commit 1f842b49cc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 154 additions and 126 deletions

View file

@ -2384,6 +2384,7 @@ const message = {
volcengine: 'Volcengine',
runtimePortHelper: 'The current runtime environment has multiple ports. Please select a proxy port.',
runtimePortWarn: 'The current runtime environment has no ports, unable to proxy',
cacheWarn: 'Please turn off the cache switch in the reverse proxy first',
},
php: {
short_open_tag: 'Short tag support',

View file

@ -2242,6 +2242,7 @@ const message = {
volcengine: 'volcengine',
runtimePortHelper: '現在の実行環境には複数のポートがありますプロキシポートを選択してください',
runtimePortWarn: '現在の実行環境にはポートがありませんプロキシできません',
cacheWarn: 'まずリバースプロキシのキャッシュスイッチをオフにしてください',
},
php: {
short_open_tag: '短いタグサポート',

View file

@ -2206,6 +2206,7 @@ const message = {
volcengine: 'volcengine',
runtimePortHelper: '현재 실행 환경에 여러 포트가 있습니다. 프록시 포트를 선택하세요.',
runtimePortWarn: '현재 실행 환경에 포트가 없습니다. 프록시할 없습니다',
cacheWarn: '먼저 리버스 프록시의 캐시 스위치를 끄십시오',
},
php: {
short_open_tag: '짧은 태그 지원',

View file

@ -2297,6 +2297,7 @@ const message = {
volcengine: 'Volcengine',
runtimePortHelper: 'Persekitaran runtime semasa mempunyai beberapa port. Sila pilih port proksi.',
runtimePortWarn: 'Persekitaran runtime semasa tidak mempunyai port, tidak dapat proksi',
cacheWarn: 'Sila matikan suis cache dalam pembalikan proksi terlebih dahulu',
},
php: {
short_open_tag: 'Sokongan tag pendek',

View file

@ -2292,6 +2292,7 @@ const message = {
volcengine: 'Volcengine',
runtimePortHelper: 'O ambiente de runtime atual possui várias portas. Por favor, selecione uma porta de proxy.',
runtimePortWarn: 'O ambiente de execução atual não possui portos, não é possível proxiar',
cacheWarn: 'Por favor, desligue o interruptor de cache no proxy reverso primeiro',
},
php: {
short_open_tag: 'Suporte para short tags',

View file

@ -2294,6 +2294,7 @@ const message = {
volcengine: 'Volcengine',
runtimePortHelper: 'O ambiente de runtime atual possui várias portas. Por favor, selecione uma porta de proxy.',
runtimePortWarn: 'В текущей среде выполнения нет портов, невозможно проксировать',
cacheWarn: 'Пожалуйста, сначала выключите кэш в обратном прокси',
},
php: {
short_open_tag: 'Поддержка коротких тегов',

View file

@ -2211,6 +2211,7 @@ const message = {
volcengine: 'Volcengine',
runtimePortHelper: '當前運行環境存在多個端口請選擇一個代理端口',
runtimePortWarn: '當前運行環境沒有端口無法代理',
cacheWarn: '請先關閉反代中的緩存開關',
},
php: {
short_open_tag: '短標簽支持',

View file

@ -2201,6 +2201,7 @@ const message = {
volcengine: '火山引擎',
runtimePortHelper: '当前运行环境存在多个端口请选择一个代理端口',
runtimePortWarn: '当前运行环境没有端口无法代理',
cacheWarn: '请先关闭反代中的缓存开关',
},
php: {
short_open_tag: '短标签支持',

View file

@ -2,7 +2,7 @@
<DialogPro v-model="open" size="w-70" @opened="onOpen" :show-close="false" :top="'5vh'" :fullscreen="isFullscreen">
<template #header>
<div ref="dialogHeader" class="flex items-center justify-between">
<span>{{ $t('commons.button.edit') + ' - ' + form.path }}</span>
<span class="truncate-text">{{ $t('commons.button.edit') + ' - ' + form.path }}</span>
<el-space alignment="center" :size="1" class="dialog-header-icon">
<el-tooltip :content="loadTooltip()" placement="top">
<el-button
@ -20,128 +20,135 @@
</el-space>
</div>
</template>
<div ref="dialogForm">
<el-form :inline="true" :model="config" class="mt-1.5">
<el-form-item :label="$t('file.theme')">
<el-select v-model="config.theme" @change="changeTheme()" class="p-w-200">
<el-option v-for="item in themes" :key="item.label" :value="item.value" :label="item.label" />
</el-select>
</el-form-item>
<el-form-item :label="$t('file.language')">
<el-select v-model="config.language" @change="changeLanguage()" class="!w-32">
<el-option
v-for="lang in Languages"
:key="lang.label"
:value="lang.label"
:label="lang.label"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('file.eol')">
<el-select v-model="config.eol" @change="changeEOL()" class="p-w-150">
<el-option v-for="eol in eols" :key="eol.label" :value="eol.value" :label="eol.label" />
</el-select>
</el-form-item>
<el-form-item :label="$t('file.wordWrap')">
<el-select v-model="config.wordWrap" @change="changeWarp()" class="p-w-100">
<el-option :label="$t('commons.button.enable')" value="on"></el-option>
<el-option :label="$t('commons.button.disable')" value="off"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('file.minimap')">
<el-select v-model="config.minimap" @change="changeMinimap()" class="p-w-100">
<el-option :label="$t('commons.button.enable')" :value="true"></el-option>
<el-option :label="$t('commons.button.disable')" :value="false"></el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div v-loading="loading">
<div class="flex">
<div class="monaco-editor sm:w-48 w-1/3 monaco-editor-background border-0 tree-container" v-if="isShow">
<div class="flex items-center justify-between pl-1 sm:pr-4 pr-1 pt-1">
<el-tooltip :content="$t('file.top')" placement="top">
<el-text size="small" @click="getUpData()" class="cursor-pointer">
<el-icon>
<Top />
</el-icon>
<span class="sm:inline hidden pl-1">{{ $t('file.up') }}</span>
</el-text>
</el-tooltip>
<el-tooltip :content="$t('commons.button.refresh')" placement="top">
<el-text size="small" @click="getRefresh(directoryPath)" class="cursor-pointer">
<el-icon>
<Refresh />
</el-icon>
<span class="sm:inline hidden pl-1">{{ $t('commons.button.refresh') }}</span>
</el-text>
</el-tooltip>
</div>
<el-divider class="!my-1" />
<el-tree-v2
ref="treeRef"
:data="treeData"
:props="treeProps"
@node-expand="handleNodeExpand"
class="monaco-editor-tree monaco-editor-background"
:height="treeHeight"
:indent="6"
:item-size="24"
highlight-current
>
<template #default="{ node, data }">
<!-- 目录 -->
<span v-if="data.isDir" style="display: inline-flex; align-items: center">
<svg-icon className="table-icon" iconName="p-file-folder"></svg-icon>
<small :title="node.label">{{ node.label }}</small>
</span>
<!-- 文档 -->
<span
v-else
style="display: inline-flex; align-items: center"
@click="getContent(data.path, data.extension)"
>
<svg-icon className="table-icon" :iconName="getIconName(data.extension)"></svg-icon>
<small :title="node.label" class="min-w-32">{{ node.label }}</small>
</span>
</template>
</el-tree-v2>
</div>
<div class="relative">
<el-divider
v-if="isShow"
direction="vertical"
:style="{ height: codeHeight }"
class="!m-0 p-0"
:class="isShow ? 'opacity-100' : 'opacity-0'"
></el-divider>
<el-icon
v-if="isShow"
class="cursor-pointer absolute bg-gray-100 py-2 rounded-l-sm block top-1/3 -left-[9px]"
size="9"
@click="toggleShow"
>
<DArrowLeft />
</el-icon>
<el-icon
v-else
class="cursor-pointer absolute bg-gray-100 py-2 rounded-r-sm block top-1/3 right-[7px]"
size="9"
@click="toggleShow"
>
<DArrowRight />
</el-icon>
</div>
<div
ref="codeBox"
id="codeBox"
:style="{ height: codeHeight }"
class="flex-1 sm:w-4/5 w-2/3 relative"
></div>
<template #content>
<div ref="dialogForm">
<el-form :inline="true" :model="config" class="mt-1.5">
<el-form-item :label="$t('file.theme')">
<el-select v-model="config.theme" @change="changeTheme()" class="p-w-200">
<el-option
v-for="item in themes"
:key="item.label"
:value="item.value"
:label="item.label"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('file.language')">
<el-select v-model="config.language" @change="changeLanguage()" class="!w-32">
<el-option
v-for="lang in Languages"
:key="lang.label"
:value="lang.label"
:label="lang.label"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('file.eol')">
<el-select v-model="config.eol" @change="changeEOL()" class="p-w-150">
<el-option v-for="eol in eols" :key="eol.label" :value="eol.value" :label="eol.label" />
</el-select>
</el-form-item>
<el-form-item :label="$t('file.wordWrap')">
<el-select v-model="config.wordWrap" @change="changeWarp()" class="p-w-100">
<el-option :label="$t('commons.button.enable')" value="on"></el-option>
<el-option :label="$t('commons.button.disable')" value="off"></el-option>
</el-select>
</el-form-item>
<el-form-item :label="$t('file.minimap')">
<el-select v-model="config.minimap" @change="changeMinimap()" class="p-w-100">
<el-option :label="$t('commons.button.enable')" :value="true"></el-option>
<el-option :label="$t('commons.button.disable')" :value="false"></el-option>
</el-select>
</el-form-item>
</el-form>
</div>
</div>
<div v-loading="loading">
<div class="flex">
<div
class="monaco-editor sm:w-48 w-1/3 monaco-editor-background border-0 tree-container"
v-if="isShow"
>
<div class="flex items-center justify-between pl-1 sm:pr-4 pr-1 pt-1">
<el-tooltip :content="$t('file.top')" placement="top">
<el-text size="small" @click="getUpData()" class="cursor-pointer">
<el-icon>
<Top />
</el-icon>
<span class="sm:inline hidden pl-1">{{ $t('file.up') }}</span>
</el-text>
</el-tooltip>
<el-tooltip :content="$t('commons.button.refresh')" placement="top">
<el-text size="small" @click="getRefresh(directoryPath)" class="cursor-pointer">
<el-icon>
<Refresh />
</el-icon>
<span class="sm:inline hidden pl-1">{{ $t('commons.button.refresh') }}</span>
</el-text>
</el-tooltip>
</div>
<el-divider class="!my-1" />
<el-tree-v2
ref="treeRef"
:data="treeData"
:props="treeProps"
@node-expand="handleNodeExpand"
class="monaco-editor-tree monaco-editor-background"
:height="treeHeight"
:indent="6"
:item-size="24"
highlight-current
>
<template #default="{ node, data }">
<span v-if="data.isDir" style="display: inline-flex; align-items: center">
<svg-icon className="table-icon" iconName="p-file-folder"></svg-icon>
<small :title="node.label">{{ node.label }}</small>
</span>
<span
v-else
style="display: inline-flex; align-items: center"
@click="getContent(data.path, data.extension)"
>
<svg-icon className="table-icon" :iconName="getIconName(data.extension)"></svg-icon>
<small :title="node.label" class="min-w-32">{{ node.label }}</small>
</span>
</template>
</el-tree-v2>
</div>
<div class="relative">
<el-divider
v-if="isShow"
direction="vertical"
:style="{ height: codeHeight }"
class="!m-0 p-0"
:class="isShow ? 'opacity-100' : 'opacity-0'"
></el-divider>
<el-icon
v-if="isShow"
class="cursor-pointer absolute bg-gray-100 py-2 rounded-l-sm block top-1/3 -left-[9px]"
size="9"
@click="toggleShow"
>
<DArrowLeft />
</el-icon>
<el-icon
v-else
class="cursor-pointer absolute bg-gray-100 py-2 rounded-r-sm block top-1/3 right-[7px]"
size="9"
@click="toggleShow"
>
<DArrowRight />
</el-icon>
</div>
<div
ref="codeBox"
id="codeBox"
:style="{ height: codeHeight }"
class="flex-1 sm:w-4/5 w-2/3 relative"
></div>
</div>
</div>
</template>
<template #footer>
<div class="dialog-footer" ref="dialogFooter">
<el-button @click="handleReset">{{ $t('commons.button.reset') }}</el-button>
@ -710,4 +717,12 @@ defineExpose({ acceptParams });
.tree-widget {
background-color: var(--el-button--primary);
}
.truncate-text {
display: inline-block;
max-width: 800px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>

View file

@ -10,7 +10,8 @@
:validate-on-rule-change="false"
>
<el-form-item :label="$t('commons.button.start')" prop="open">
<el-switch v-model="req.open"></el-switch>
<el-switch v-model="req.open" :disabled="hasCache"></el-switch>
<span class="input-help" v-if="hasCache">{{ $t('website.cacheWarn') }}</span>
</el-form-item>
<el-form-item :label="$t('website.cacheLimit')" prop="cacheLimit">
<el-input v-model.number="req.cacheLimit" class="p-w-200">
@ -78,6 +79,7 @@ import i18n from '@/lang';
const open = ref(false);
const loading = ref(false);
const proxyForm = ref<FormInstance>();
const hasCache = ref(false);
const req = reactive({
open: false,
@ -100,8 +102,9 @@ const handleClose = () => {
open.value = false;
};
const acceptParams = (websiteID: number) => {
const acceptParams = (websiteID: number, cache: boolean) => {
req.websiteID = websiteID;
hasCache.value = cache;
get();
open.value = true;
};

View file

@ -68,6 +68,7 @@ const createRef = ref();
const fileRef = ref();
const opRef = ref();
const cacheRef = ref();
const hasCache = ref(false);
const buttons = [
{
@ -117,7 +118,7 @@ const openCreate = () => {
};
const openCache = () => {
cacheRef.value.acceptParams(id.value);
cacheRef.value.acceptParams(id.value, hasCache.value);
};
const openEdit = (proxyConfig: Website.ProxyConfig) => {
@ -195,6 +196,7 @@ const search = async () => {
loading.value = true;
const res = await getProxyConfig({ id: id.value });
data.value = res.data || [];
hasCache.value = data.value.some((item: Website.ProxyConfig) => item.cache);
} catch (error) {
} finally {
loading.value = false;

View file

@ -39,7 +39,7 @@ const props = defineProps({
const isEver = (time: string) => {
const expireDate = new Date(time);
return expireDate < new Date('1970-01-02');
return expireDate > new Date('9999-12-30');
};
</script>