v1.2.0 bug修复

This commit is contained in:
2025-08-15 17:33:35 +08:00
parent e50db2f719
commit 88ae7714b5
30 changed files with 463 additions and 370 deletions

View File

@@ -194,7 +194,7 @@ export const AccessMiningPool_en = {
estimatedTimeDgbs:"≈ 10 minutes",
estimatedTimeDgbq:"≈ 10 minutes",
estimatedTimeDgbo:"≈ 10 minutes",
estimatedTimeMona:"≈ 25 hours",
estimatedTimeMona:"≈ 2.5 hours",
estimatedTimeAlph:" 500 minutes",
estimatedTimeEnx:"",
describeNexa:"For example, if a 1,000,000 NEXA reward was earned on 1-1, that reward will be paid out approximately 7 days later (1-8), depending on actual block heights",

View File

@@ -150,7 +150,22 @@ export const backendSystem_zh = {
selectCurrency:"选择币种",
pleaseSelectCurrency2:"添加挖矿教程,请选择币种",
pleaseInputTitle:"请输入标题",
searchResult:"搜索结果",
returnSearch:"返回搜索",
keyword:"关键词",
find:"找到",
relatedResults:"条相关结果",
documentIcon:"文档图标",
preview:"预览",
noResult:"未找到相关结果",
keyword2:"关键词",
noMatch:"没有找到匹配的文档",
resetSearch:"重新搜索",
类型:"类型",
创建时间:"创建时间",
创建者:"创建者",
}
}
@@ -307,7 +322,20 @@ export const backendSystem_en = {
pleaseSelectCurrency2:"Please select a currency when adding mining tutorials",
pleaseInputContent2:"Please input content",
pleaseInputTitle:"Please input title",
searchResult:"Search Result",
returnSearch:"Return Search",
keyword:"Keyword",
find:"Find",
relatedResults:"Items",
documentIcon:"Document Icon",
preview:"Preview",
noResult:"No Related Results",
keyword2:"Keyword",
noMatch:"No Matching Document",
resetSearch:"Reset Search",
类型:"Type",
创建时间:"Create Time",
创建者:"Create User",
}
}

View File

@@ -42,6 +42,19 @@ Vue.prototype.$isMobile = isNarrowScreen
/**
* 全局处理未捕获的 Promise 拒绝(仅限网络类错误),
* 防止错误遮罩层把页面完全遮挡。不影响其他错误的默认行为。
*/
window.addEventListener('unhandledrejection', (event) => {
const reason = event && event.reason;
const message = typeof reason === 'string' ? reason : (reason && reason.message);
if (message && (message === 'Network Error' || message.includes('timeout'))) {
event.preventDefault();
console.warn('[unhandledrejection] blocked network error:', message);
}
});
// 在路由守卫中设置
router.beforeEach((to, from, next) => {
// 从路由中获取语言参数

View File

@@ -30,6 +30,12 @@ export function getAllValidPaths() {
'/BKWorkDetails',
'/dataDisplay',
'/alerts',
'/helpCenter',
'/commonProblem',
'/announcementDetails',
'/searchResult',
'/announcements',
'/announcementDetails',
// 个人中心子页面
'/personalCenter',

View File

@@ -1,4 +1,10 @@
import { documentsList,findDataInfo} from '../../api/documentManagement'
/**
* 本地存储选中的问题ID的键名
* @type {string}
*/
const SELECTED_PROBLEM_ID_KEY = 'announcementDetails:selectedId'
export default {
data() {
return {
@@ -34,11 +40,11 @@ export default {
};
},
mounted() {
this.DetailsParams.id = this.$route.query.id;
console.log(this.$route.query.id,"this.DetailsParams.id");
if (this.DetailsParams.id) {
this.fetchProblemDetails(this.DetailsParams)
}
// this.DetailsParams.id = this.$route.query.id;
// console.log(this.$route.query.id,"this.DetailsParams.id");
// if (this.DetailsParams.id) {
// this.fetchProblemDetails(this.DetailsParams)
// }
this.fetchProblemsList(this.listParams)
},
methods: {
@@ -47,8 +53,33 @@ export default {
const res = await documentsList(params)
if(res && res.code === 200){
this.problems = res.rows;
// this.DetailsParams.id = this.problems[0].id;
// this.fetchProblemDetails(this.DetailsParams)
// 优先级URL 参数 > 本地存储 > 列表首项
const routeId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : ''
const savedId = this.getSavedSelectedId()
let resolvedId = routeId || savedId || ''
if (!resolvedId && this.problems && this.problems.length > 0) {
resolvedId = String(this.problems[0].id)
}
// 如果存在但不在当前列表中,则回退到首项
if (resolvedId) {
const existsInList = (this.problems || []).some(item => String(item.id) === String(resolvedId))
if (!existsInList && this.problems && this.problems.length > 0) {
resolvedId = String(this.problems[0].id)
}
}
this.DetailsParams.id = resolvedId
// 同步到URL与本地存储
this.persistSelectedId(this.DetailsParams.id)
this.updateRouteQueryId(this.DetailsParams.id)
if (this.DetailsParams.id) {
this.fetchProblemDetails(this.DetailsParams)
}
}
this.setLoading('problemLoading', false);
},
@@ -71,9 +102,65 @@ export default {
* @param {number} id 问题ID
*/
handleClick(id) {
this.DetailsParams.id = id;
// 更新当前选中ID
this.DetailsParams.id = id
// 持久化并同步URL
this.persistSelectedId(this.DetailsParams.id)
this.updateRouteQueryId(this.DetailsParams.id)
// 获取详情
this.fetchProblemDetails(this.DetailsParams)
},
/**
* 将选中的问题ID持久化到本地存储
* @param {string|number} id 问题ID
* @returns {void}
*/
persistSelectedId(id) {
try {
window.localStorage.setItem(SELECTED_PROBLEM_ID_KEY, String(id))
} catch (error) {
// 上报或静默处理本地存储异常
console.error('persistSelectedId error', error)
}
},
/**
* 读取本地存储中保存的选中问题ID
* @returns {string}
*/
getSavedSelectedId() {
try {
return window.localStorage.getItem(SELECTED_PROBLEM_ID_KEY) || ''
} catch (error) {
console.error('getSavedSelectedId error', error)
return ''
}
},
/**
* 使用 replace 同步更新当前路由的查询参数中的 id
* 避免产生新的历史记录条目
* @param {string|number} id 问题ID
* @returns {void}
*/
updateRouteQueryId(id) {
try {
if (!this.$route) return
const targetId = String(id)
const currentId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : ''
if (currentId === targetId) return
const nextQuery = { ...(this.$route.query || {}), id: targetId }
if (this.$router && typeof this.$router.replace === 'function') {
const maybePromise = this.$router.replace({ query: nextQuery })
if (maybePromise && typeof maybePromise.catch === 'function') {
maybePromise.catch(() => {})
}
}
} catch (error) {
console.error('updateRouteQueryId error', error)
}
},
},
};

View File

@@ -164,6 +164,12 @@ export default {
return
}
// 验证每个路径是否以/开头
const invalidPaths = pathArray.filter(path => !path.startsWith('/'));
if (invalidPaths.length > 0) {
this.$message.error(`路径必须以 / 开头: ${invalidPaths.join(', ')}`);
return
}
if (this.addParams.buttonContent) {
// 兼容中英文逗号分割
@@ -187,14 +193,6 @@ export default {
}
// 验证每个路径是否有效
const invalidPaths = pathArray.filter(path => !isValidPath(path));
if (invalidPaths.length > 0) {
const suggestions = getPathSuggestions(invalidPaths[0]);
this.$message.error(`${this.$t("backendSystem.invalidPath")}: ${invalidPaths.join(', ')}${this.$t("backendSystem.invalidPathSuggestions")}: ${suggestions.slice(0, 3).join(', ')}`);
return
}
// 验证通过,保持字符串格式传给后端(不转换为数组)
// this.addParams.buttonPath 保持原始字符串格式
}
@@ -254,14 +252,12 @@ export default {
return
}
// 验证每个路径是否有效
const invalidPaths = pathArray.filter(path => !isValidPath(path));
// 验证每个路径是否以/开头
const invalidPaths = pathArray.filter(path => !path.startsWith('/'));
if (invalidPaths.length > 0) {
const suggestions = getPathSuggestions(invalidPaths[0]);
this.$message.error(`${this.$t("backendSystem.invalidPath")}: ${invalidPaths.join(', ')}${this.$t("backendSystem.invalidPathSuggestions")}: ${suggestions.slice(0, 3).join(', ')}`);
this.$message.error(`路径必须以 / 开头: ${invalidPaths.join(', ')}`);
return
}
}
} else {
this.$message.warning(this.$t("backendSystem.pleaseInputButtonContentAndPath"))
@@ -363,23 +359,19 @@ export default {
* @returns {Array} 路径建议列表
*/
getValidPathSuggestions() {
return getPathSuggestions('').slice(0, 8); // 返回前8个常用路径
// 移除路径建议,返回空数组
return [];
},
/**
* 显示路径使用帮助
*/
showPathHelp() {
const suggestions = this.getValidPathSuggestions();
const helpMessage = `
常用路径示例:
${suggestions.slice(0, 10).join('\n')}
路径规则:
• 多个路径用逗号分隔
• 路径必须以 / 开头
• 支持动态路由参数
• 不要包含域名,只写路径部分
• 路径格式自由,不做严格验证
• 支持任意路径格式
`;
this.$alert(helpMessage, '路径格式说明', {
@@ -399,7 +391,7 @@ export default {
return [];
}
return buttonContent
.split(',')
.split(/[,]/)
.map(btn => btn.trim())
.filter(btn => btn);
},
@@ -414,7 +406,7 @@ export default {
return [];
}
return buttonPath
.split(',')
.split(/[,]/)
.map(path => path.trim())
.filter(path => path);
},

View File

@@ -1,4 +1,10 @@
import { documentsList,findDataInfo} from '../../api/documentManagement'
/**
* 本地存储选中的问题ID的键名常见问题页
* @type {string}
*/
const SELECTED_PROBLEM_ID_KEY = 'commonProblem:selectedId'
export default {
data() {
return {
@@ -46,14 +52,29 @@ export default {
const res = await documentsList(params)
if(res && res.code === 200){
this.problems = res.rows;
if (this.$route.query.id) {
this.DetailsParams.id = this.$route.query.id
}else if(this.problems.length > 0){
this.DetailsParams.id = this.problems[0].id;
}
this.fetchProblemDetails(this.DetailsParams)
// 优先级URL 参数 > 本地存储 > 列表首项
const routeId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : ''
const savedId = this.getSavedSelectedId()
let resolvedId = routeId || savedId || ''
if (!resolvedId && this.problems && this.problems.length > 0) {
resolvedId = String(this.problems[0].id)
}
if (resolvedId) {
const existsInList = (this.problems || []).some(item => String(item.id) === String(resolvedId))
if (!existsInList && this.problems && this.problems.length > 0) {
resolvedId = String(this.problems[0].id)
}
}
this.DetailsParams.id = resolvedId
this.persistSelectedId(this.DetailsParams.id)
this.updateRouteQueryId(this.DetailsParams.id)
if (this.DetailsParams.id) {
this.fetchProblemDetails(this.DetailsParams)
}
}
this.setLoading('problemLoading', false);
},
@@ -76,9 +97,61 @@ export default {
* @param {number} id 问题ID
*/
handleClick(id) {
this.DetailsParams.id = id;
this.persistSelectedId(this.DetailsParams.id)
this.updateRouteQueryId(this.DetailsParams.id)
this.fetchProblemDetails(this.DetailsParams)
},
/**
* 将选中的问题ID持久化到本地存储
* @param {string|number} id 问题ID
* @returns {void}
*/
persistSelectedId(id) {
try {
window.localStorage.setItem(SELECTED_PROBLEM_ID_KEY, String(id))
} catch (error) {
console.error('persistSelectedId error', error)
}
},
/**
* 读取本地存储中保存的选中问题ID
* @returns {string}
*/
getSavedSelectedId() {
try {
return window.localStorage.getItem(SELECTED_PROBLEM_ID_KEY) || ''
} catch (error) {
console.error('getSavedSelectedId error', error)
return ''
}
},
/**
* 使用 replace 同步更新当前路由的查询参数中的 id
* 避免产生新的历史记录条目
* @param {string|number} id 问题ID
* @returns {void}
*/
updateRouteQueryId(id) {
try {
if (!this.$route) return
const targetId = String(id)
const currentId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : ''
if (currentId === targetId) return
const nextQuery = { ...(this.$route.query || {}), id: targetId }
if (this.$router && typeof this.$router.replace === 'function') {
const maybePromise = this.$router.replace({ query: nextQuery })
if (maybePromise && typeof maybePromise.catch === 'function') {
maybePromise.catch(() => {})
}
}
} catch (error) {
console.error('updateRouteQueryId error', error)
}
},
},
};

View File

@@ -380,7 +380,7 @@ export default Vue.extend({
this.$message.success(this.$t("backendSystem.updateSuccess"));
// 发布成功后清除本地草稿
const LOCAL_STORAGE_KEY = "editor_draft_add";
localStorage.removeItem(LOCAL_STORAGE_KEY);
sessionStorage.removeItem(LOCAL_STORAGE_KEY);
this.$router.push({ path: `/${this.$i18n.locale}/documentManagement` });
for (const key in this.addParams) {
this.addParams[key] = "";
@@ -409,7 +409,7 @@ export default Vue.extend({
},
handelAddDocument() {
this.addParams.title = this.addParams.title.trim();
// 强制同步编辑器内容
if (this.editor) {
this.addParams.content = this.editor.txt.html();
@@ -426,6 +426,17 @@ export default Vue.extend({
});
return;
}
if (!this.addParams.title) {
this.$message({
message:
this.$t("backendSystem.pleaseInputTitle") ||
"请输入标题",
type: "warning",
duration: 4000,
showClose: true,
});
return;
}
console.log(this.addParams.type,this.typeArray, "this.addParams.type");
if (!this.addParams.type ) {
@@ -449,18 +460,9 @@ export default Vue.extend({
});
return;
}
if (!this.addParams.title) {
this.$message({
message:
this.$t("backendSystem.pleaseInputTitle") ||
"请输入标题",
type: "warning",
duration: 4000,
showClose: true,
});
return;
}
if (this.addParams.type == "1" && !this.screenCurrency) {
this.$message({
@@ -598,7 +600,7 @@ export default Vue.extend({
};
const LOCAL_STORAGE_KEY = "editor_draft_add";
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(saveData));
sessionStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(saveData));
this.lastSaveTime = saveData.timestamp;
this.isSaving = false;
} catch (error) {
@@ -610,7 +612,7 @@ export default Vue.extend({
loadFromLocalStorage() {
try {
const LOCAL_STORAGE_KEY = "editor_draft_add";
const savedData = localStorage.getItem(LOCAL_STORAGE_KEY);
const savedData = sessionStorage.getItem(LOCAL_STORAGE_KEY);
if (savedData) {
const data = JSON.parse(savedData);
console.log(data, "data");
@@ -621,7 +623,7 @@ export default Vue.extend({
if (isExpired) {
console.log("本地数据已过期,清除缓存");
localStorage.removeItem(LOCAL_STORAGE_KEY);
sessionStorage.removeItem(LOCAL_STORAGE_KEY);
return;
}
@@ -632,10 +634,11 @@ export default Vue.extend({
this.addParams.title = data.title || "";
this.addParams.content = data.content || "";
this.addParams.type = data.type || "1";
this.addParams.type = data.type || "";
this.addParams.imageUrl = data.imageUrl || "";
this.lastSaveTime = data.timestamp || "";
console.log(data.type,this.typeArray, "data.type");
this.typeArray = [data.type];
// 如果编辑器已经创建,直接设置内容
if (this.editor) {
this.editor.txt.html(data.content || "");
@@ -651,7 +654,7 @@ export default Vue.extend({
clearDraft() {
const LOCAL_STORAGE_KEY = "editor_draft_add";
localStorage.removeItem(LOCAL_STORAGE_KEY);
sessionStorage.removeItem(LOCAL_STORAGE_KEY);
this.lastSaveTime = "";
this.isSaving = false;
},
@@ -779,7 +782,7 @@ export default Vue.extend({
}
// 清除本地草稿
const LOCAL_STORAGE_KEY = "editor_draft_add";
localStorage.removeItem(LOCAL_STORAGE_KEY);
sessionStorage.removeItem(LOCAL_STORAGE_KEY);
this.$message.success(
this.$t("backendSystem.contentReset") || "内容已重置"
);

View File

@@ -63,7 +63,7 @@ export default {
{//公告中心
value:"3",
label:"backendSystem.announcementCenter",
articleUrl:"announcementDetails"
articleUrl:"announcements"
},
{//其他
value:"0",

View File

@@ -375,7 +375,7 @@ export default Vue.extend({
if (this.editor) {
this.addParams.content = this.editor.txt.html();
}
console.log(this.addParams.content, "this.addParams.content");
this.addParams.title = this.addParams.title.trim();
if (!this.addParams.content.trim()) {
this.$message({
message:
@@ -610,10 +610,10 @@ export default Vue.extend({
this.addParams.title = data.title || "";
this.addParams.content = data.content || "";
this.addParams.type = data.type || "1";
this.addParams.type = data.type || "";
this.addParams.imageUrl = data.imageUrl || "";
this.lastSaveTime = data.timestamp || "";
this.typeArray = [data.type];
// 如果编辑器已经创建,直接设置内容
if (this.editor) {
this.editor.txt.html(data.content || "");

View File

@@ -69,32 +69,47 @@ export default{
pageSize:10
},
TypeList:[
{
value:"1",
label:"挖矿教程"
{//挖矿教程
value:"1",
label:"backendSystem.miningTutorial",
articleUrl:"AccessMiningPool"
},
{
value:"2",
label:"常见问题"
{//常见问题
value:"2",
label:"backendSystem.commonProblems",
articleUrl:"commonProblem"
},
{
value:"3",
label:"公告中心"
{//公告中心
value:"3",
label:"backendSystem.announcementCenter",
articleUrl:"announcements"
},
{
value:"0",
label:"其他"
},
]
{//其他
value:"0",
label:"backendSystem.other",
articleUrl:"",
children:[{
value:"1",
label:"home.serviceTerms",
articleUrl:"serviceTerms"
},{
value:"2",
label:"home.rate",
articleUrl:"rate"
},{
value:"3",
label:"home.APIfile",
articleUrl:"apiFile"
}
]
}
],
}
},
mounted(){
try {
this.TypeList = JSON.parse(localStorage.getItem('TypeList'))
} catch (error) {
console.log(error);
}
this.$addStorageEvent(1, "TypeList", JSON.stringify(this.TypeList));
this.fetchActivityList(this.activeParams)
},
methods: {

View File

@@ -2,11 +2,11 @@
<div class="help-center">
<!-- 顶部蓝色渐变背景区域 -->
<div class="top-section">
<div class="filter-icon">
<!-- <div class="filter-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 7H21L15 13V19L9 15V13L3 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
</div> -->
<!-- 搜索框 -->
<div class="search-container">

View File

@@ -1546,6 +1546,7 @@ export default {
this.showCalculator = false
},
changeSelection(scope) {
let brand = scope
for (let index in this.currencyList) {
@@ -1584,6 +1585,32 @@ export default {
this.$router.push(cleanPath);
}
},
handelJumpBroadcast(url){
if (url === '/AccessMiningPool') {
const coin = this.currencyList.find(item => item.value === this.params.coin);
if (!coin) return;
// let jumpName = coin.path.charAt(0).toUpperCase() + coin.path.slice(1) //name跳转 首字母大写
let url = `/${this.lang}/AccessMiningPool`
// 使用 name 进行导航,避免重复的路由参数
this.$router.push({
name:'AccessMiningPool',
params: {
coin: this.params.coin,
imgUrl: this.currencyPath
},
replace: false // 保留历史记录,允许回退
});
} else {
this.$router.push(`/${this.lang}${url}`)
}
},
handelCalculation() {
this.calculateIncome()

View File

@@ -69,7 +69,7 @@
:title="buttonText"
:key="`button-${item.id}-${buttonIndex}`"
class="view"
@click.stop="handelJump(item.buttonPath[buttonIndex])"
@click.stop="handelJumpBroadcast(item.buttonPath[buttonIndex])"
>
{{ buttonText || $t(`home.view`) }}
</span>
@@ -506,7 +506,7 @@
:title="buttonText"
:key="`button-${item.id}-${buttonIndex}`"
class="view"
@click.stop="handelJump(item.buttonPath[buttonIndex])"
@click.stop="handelJumpBroadcast(item.buttonPath[buttonIndex])"
>
{{ buttonText || $t(`home.view`) }}
</span>
@@ -1485,6 +1485,9 @@ export default {
margin-left: 8px;
color: #6e3edb;
// background: palegoldenrod;
text-transform: uppercase ;
}
.view:hover {
color: #000;
@@ -1553,6 +1556,7 @@ export default {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-transform: capitalize;
&:hover {
@@ -2074,6 +2078,8 @@ export default {
margin-left: 8px;
color: #6e3edb;
// background: palegoldenrod;
text-transform: capitalize;
}
.view:hover {
color: #000;
@@ -2142,6 +2148,7 @@ export default {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-transform: capitalize;
&:hover {
@@ -2769,7 +2776,7 @@ export default {
}
span {
margin-top: 10px;
text-transform: uppercase;
text-transform: capitalize;
}
}
.computationalPower {
@@ -3403,7 +3410,7 @@ export default {
// }
// span {
// text-transform: uppercase;
// text-transform: capitalize;
// // margin-top: 5px;
// // background: gold;
// width: 90%;
@@ -3474,6 +3481,8 @@ export default {
margin-left: 8px;
color: #6e3edb;
// background: palegoldenrod;
text-transform: capitalize;
}
.view:hover {
color: #000;
@@ -3555,6 +3564,8 @@ i {
margin-left: 8px;
color: #6e3edb;
// background: palegoldenrod;
text-transform: capitalize;
}
.view:hover {
color: #000;
@@ -3589,6 +3600,7 @@ i {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-transform: capitalize;
&:hover {

View File

@@ -109,6 +109,8 @@ export default {
* 获取文档类型名称
*/
getDocumentTypeName(type) {
console.log(type,"typ俯瞰风景分开发饭饭登记费记得发e",this.documentTypes);
try {
let label = this.documentTypes.find(item => item.value == type)?.label
return this.$t(label)

View File

@@ -4,15 +4,15 @@
<div class="result-header">
<div class="header-container">
<div class="header-left">
<h1 class="page-title">搜索结果</h1>
<h1 class="page-title">{{ $t(`backendSystem.searchResult`) || `搜索结果` }} </h1>
<p class="search-info" v-if="searchResults.length > 0">
关键词 "<strong>{{ searchKeyword }}</strong>" 找到 <strong>{{ totalCount }}</strong> 条相关结果
{{ $t(`backendSystem.keyword`) || `关键词` }} "<strong>{{ searchKeyword }}</strong>" {{ $t(`backendSystem.find`) || `找到` }} <strong>{{ totalCount }}</strong> {{ $t(`backendSystem.relatedResults`) || `条相关结果` }}
</p>
</div>
<div class="header-right">
<el-button type="primary" @click="goBack">
<i class="el-icon-arrow-left"></i>
返回搜索
{{ $t(`backendSystem.returnSearch`) || `返回搜索` }}
</el-button>
</div>
</div>
@@ -73,7 +73,7 @@
@click.stop="handlePreview(item)"
>
<i class="el-icon-view"></i>
预览
{{ $t(`backendSystem.preview`) || `预览` }}
</el-button>
</div>
@@ -85,9 +85,9 @@
<div class="no-result-icon">
<i class="el-icon-search"></i>
</div>
<h3>未找到相关结果</h3>
<p>关键词 "<strong>{{ searchKeyword }}</strong>" 没有找到匹配的文档</p>
<el-button type="primary" @click="goBack">重新搜索</el-button>
<h3>{{ $t(`backendSystem.noResult`) || `未找到相关结果` }}</h3>
<p>{{ $t(`backendSystem.keyword`) || `关键词` }} "<strong>{{ searchKeyword }}</strong>" {{ $t(`backendSystem.noMatch`) || `没有找到匹配的文档` }}</p>
<el-button type="primary" @click="goBack">{{ $t(`backendSystem.resetSearch`) || `重新搜索` }}</el-button>
</div>
<!-- 分页组件 -->
@@ -107,7 +107,7 @@
<!-- 预览对话框 -->
<el-dialog
title="文档预览"
:title="$t(`backendSystem.documentPreview`) || `文档预览`"
:visible.sync="previewVisible"
width="80%"
:before-close="handlePreviewClose"
@@ -116,9 +116,9 @@
<div class="preview-content" v-if="previewData">
<h2>{{ previewData.title }}</h2>
<div class="preview-meta">
<span>类型{{ getDocumentTypeName(previewData.type) }}</span>
<span>创建时间{{ formatDate(previewData.createTime) }}</span>
<span>创建者{{ previewData.createUser }}</span>
<span>{{ $t(`backendSystem.type`) || `类型` }}{{ getDocumentTypeName(previewData.type) }}</span>
<span>{{ $t(`backendSystem.createTime`) || `创建时间` }}{{ formatDate(previewData.createTime) }}</span>
<span>{{ $t(`backendSystem.createUser`) || `创建者` }}{{ previewData.createUser }}</span>
</div>
<div class="preview-body" v-html="previewData.content"></div>
</div>