协议问题解决

This commit is contained in:
2026-01-12 11:45:37 +08:00
parent 6336f89f0d
commit 26df740dd0
16 changed files with 728 additions and 243 deletions

View File

@@ -28,6 +28,9 @@ INSERT INTO `tb_sys_config` (`id`, `config_key`, `config_name`, `config_value`,
('103', 'system.logo.home', '首页Logo', '', 'string', 'imgupload', '基础配置', '首页Logo', NULL, '存储文件ID建议尺寸36x36px', NULL, NULL, NULL, NULL, NULL, 103, 1, '1', now()), ('103', 'system.logo.home', '首页Logo', '', 'string', 'imgupload', '基础配置', '首页Logo', NULL, '存储文件ID建议尺寸36x36px', NULL, NULL, NULL, NULL, NULL, 103, 1, '1', now()),
('104', 'system.logo.admin', '管理后台Logo', '', 'string', 'imgupload', '基础配置', '管理后台Logo', NULL, '存储文件ID建议尺寸36x36px', NULL, NULL, NULL, NULL, NULL, 104, 1, '1', now()), ('104', 'system.logo.admin', '管理后台Logo', '', 'string', 'imgupload', '基础配置', '管理后台Logo', NULL, '存储文件ID建议尺寸36x36px', NULL, NULL, NULL, NULL, NULL, 104, 1, '1', now()),
('105', 'system.favicon', '网站图标', '', 'string', 'imgupload', '基础配置', '网站图标', NULL, '存储文件ID建议格式ico/png尺寸36x36px', NULL, NULL, NULL, NULL, NULL, 105, 1, '1', now()), ('105', 'system.favicon', '网站图标', '', 'string', 'imgupload', '基础配置', '网站图标', NULL, '存储文件ID建议格式ico/png尺寸36x36px', NULL, NULL, NULL, NULL, NULL, 105, 1, '1', now()),
('106', 'system.agreement.platform', '平台协议', '', 'string', 'fileupload', '基础配置', '平台协议文件', NULL, '支持PDF、TXT格式用户点击后新开页面查看', NULL, NULL, NULL, NULL, NULL, 106, 1, '1', now()),
('107', 'system.agreement.user', '用户协议', '', 'string', 'fileupload', '基础配置', '用户协议文件', NULL, '支持PDF、TXT格式用户点击后新开页面查看', NULL, NULL, NULL, NULL, NULL, 107, 1, '1', now()),
('108', 'system.agreement.privacy', '隐私协议', '', 'string', 'fileupload', '基础配置', '隐私协议文件', NULL, '支持PDF、TXT格式用户点击后新开页面查看', NULL, NULL, NULL, NULL, NULL, 108, 1, '1', now()),
-- 邮件配置 -- 邮件配置
('40', 'email.login.enabled', '启用邮箱登录', 'false', 'boolean', 'switch', '邮件配置', '是否启用邮箱登录', NULL, '关闭后登录页将不显示邮箱登录选项', NULL, NULL, NULL, NULL, NULL, 40, 1, '1', now()), ('40', 'email.login.enabled', '启用邮箱登录', 'false', 'boolean', 'switch', '邮件配置', '是否启用邮箱登录', NULL, '关闭后登录页将不显示邮箱登录选项', NULL, NULL, NULL, NULL, NULL, 40, 1, '1', now()),

View File

@@ -387,6 +387,11 @@ public class SysConfigServiceImpl implements SysConfigService {
baseInfo.put("adminLogo", getStringConfig("system.logo.admin")); baseInfo.put("adminLogo", getStringConfig("system.logo.admin"));
baseInfo.put("favicon", getStringConfig("system.favicon")); baseInfo.put("favicon", getStringConfig("system.favicon"));
// 登录协议文件ID
baseInfo.put("platformAgreement", getStringConfig("system.agreement.platform"));
baseInfo.put("userAgreement", getStringConfig("system.agreement.user"));
baseInfo.put("privacyAgreement", getStringConfig("system.agreement.privacy"));
// 登录相关开关(从各自分组获取) // 登录相关开关(从各自分组获取)
baseInfo.put("smsLoginEnabled", getBooleanConfig("sms.login.enabled")); baseInfo.put("smsLoginEnabled", getBooleanConfig("sms.login.enabled"));
baseInfo.put("emailLoginEnabled", getBooleanConfig("email.login.enabled")); baseInfo.put("emailLoginEnabled", getBooleanConfig("email.login.enabled"));

View File

@@ -12,9 +12,11 @@
"core-js": "^3.8.3", "core-js": "^3.8.3",
"echarts": "^6.0.0", "echarts": "^6.0.0",
"element-plus": "^2.11.4", "element-plus": "^2.11.4",
"pdfjs-dist": "^5.4.530",
"quill": "^2.0.3", "quill": "^2.0.3",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"vue": "^3.5.22", "vue": "^3.5.22",
"vue-pdf-embed": "^2.1.3",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },
@@ -2269,6 +2271,256 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@napi-rs/canvas": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas/-/canvas-0.1.88.tgz",
"integrity": "sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==",
"license": "MIT",
"optional": true,
"workspaces": [
"e2e/*"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
},
"optionalDependencies": {
"@napi-rs/canvas-android-arm64": "0.1.88",
"@napi-rs/canvas-darwin-arm64": "0.1.88",
"@napi-rs/canvas-darwin-x64": "0.1.88",
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.88",
"@napi-rs/canvas-linux-arm64-gnu": "0.1.88",
"@napi-rs/canvas-linux-arm64-musl": "0.1.88",
"@napi-rs/canvas-linux-riscv64-gnu": "0.1.88",
"@napi-rs/canvas-linux-x64-gnu": "0.1.88",
"@napi-rs/canvas-linux-x64-musl": "0.1.88",
"@napi-rs/canvas-win32-arm64-msvc": "0.1.88",
"@napi-rs/canvas-win32-x64-msvc": "0.1.88"
}
},
"node_modules/@napi-rs/canvas-android-arm64": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.88.tgz",
"integrity": "sha512-KEaClPnZuVxJ8smUWjV1wWFkByBO/D+vy4lN+Dm5DFH514oqwukxKGeck9xcKJhaWJGjfruGmYGiwRe//+/zQQ==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-darwin-arm64": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.88.tgz",
"integrity": "sha512-Xgywz0dDxOKSgx3eZnK85WgGMmGrQEW7ZLA/E7raZdlEE+xXCozobgqz2ZvYigpB6DJFYkqnwHjqCOTSDGlFdg==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-darwin-x64": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.88.tgz",
"integrity": "sha512-Yz4wSCIQOUgNucgk+8NFtQxQxZV5NO8VKRl9ePKE6XoNyNVC8JDqtvhh3b3TPqKK8W5p2EQpAr1rjjm0mfBxdg==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.88.tgz",
"integrity": "sha512-9gQM2SlTo76hYhxHi2XxWTAqpTOb+JtxMPEIr+H5nAhHhyEtNmTSDRtz93SP7mGd2G3Ojf2oF5tP9OdgtgXyKg==",
"cpu": [
"arm"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-linux-arm64-gnu": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.88.tgz",
"integrity": "sha512-7qgaOBMXuVRk9Fzztzr3BchQKXDxGbY+nwsovD3I/Sx81e+sX0ReEDYHTItNb0Je4NHbAl7D0MKyd4SvUc04sg==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-linux-arm64-musl": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.88.tgz",
"integrity": "sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.88.tgz",
"integrity": "sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==",
"cpu": [
"riscv64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-linux-x64-gnu": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.88.tgz",
"integrity": "sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-linux-x64-musl": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.88.tgz",
"integrity": "sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-win32-arm64-msvc": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.88.tgz",
"integrity": "sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@napi-rs/canvas-win32-x64-msvc": {
"version": "0.1.88",
"resolved": "https://registry.npmmirror.com/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.88.tgz",
"integrity": "sha512-ROVqbfS4QyZxYkqmaIBBpbz/BQvAR+05FXM5PAtTYVc0uyY8Y4BHJSMdGAaMf6TdIVRsQsiq+FG/dH9XhvWCFQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Brooooooklyn"
}
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -6286,6 +6538,18 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/pdfjs-dist": {
"version": "5.4.530",
"resolved": "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-5.4.530.tgz",
"integrity": "sha512-r1hWsSIGGmyYUAHR26zSXkxYWLXLMd6AwqcaFYG9YUZ0GBf5GvcjJSeo512tabM4GYFhxhl5pMCmPr7Q72Rq2Q==",
"license": "Apache-2.0",
"engines": {
"node": ">=20.16.0 || >=22.3.0"
},
"optionalDependencies": {
"@napi-rs/canvas": "^0.1.84"
}
},
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
@@ -8305,6 +8569,30 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/vue-pdf-embed": {
"version": "2.1.3",
"resolved": "https://registry.npmmirror.com/vue-pdf-embed/-/vue-pdf-embed-2.1.3.tgz",
"integrity": "sha512-EGgZNb8HRrAloBpb8p8CugDpJpoPbQ8CFfAYdWZgq2e5qBMP9JSeLzVQIAJkXsclHXRIS3O9fp3WQbP9T5Inwg==",
"license": "MIT",
"dependencies": {
"pdfjs-dist": "^4.10.38"
},
"peerDependencies": {
"vue": "^3.3.0"
}
},
"node_modules/vue-pdf-embed/node_modules/pdfjs-dist": {
"version": "4.10.38",
"resolved": "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz",
"integrity": "sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==",
"license": "Apache-2.0",
"engines": {
"node": ">=20"
},
"optionalDependencies": {
"@napi-rs/canvas": "^0.1.65"
}
},
"node_modules/vue-router": { "node_modules/vue-router": {
"version": "4.5.1", "version": "4.5.1",
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz",

View File

@@ -15,9 +15,11 @@
"core-js": "^3.8.3", "core-js": "^3.8.3",
"echarts": "^6.0.0", "echarts": "^6.0.0",
"element-plus": "^2.11.4", "element-plus": "^2.11.4",
"pdfjs-dist": "^5.4.530",
"quill": "^2.0.3", "quill": "^2.0.3",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"vue": "^3.5.22", "vue": "^3.5.22",
"vue-pdf-embed": "^2.1.3",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vuex": "^4.1.0" "vuex": "^4.1.0"
}, },

View File

@@ -122,18 +122,6 @@
</div> </div>
</div> </div>
</div> </div>
<!-- 上传按钮 -->
<div v-if="selectedFiles.length > 0" class="upload-actions">
<el-button
type="primary"
@click="handleUpload"
:loading="uploading"
:disabled="selectedFiles.length === 0"
>
{{ uploading ? '上传中...' : '确定上传' }}
</el-button>
</div>
</div> </div>
<el-dialog <el-dialog
@@ -362,10 +350,8 @@ function handleFileSelect(event: Event) {
// 清空 input允许重复选择同一文件 // 清空 input允许重复选择同一文件
input.value = ''; input.value = '';
// cover模式下选择文件后立即上传 // 选择文件后立即上传
if (props.listType === 'cover') { handleUpload();
handleUpload();
}
} }
} }

View File

@@ -10,9 +10,10 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.blank-layout { .blank-layout {
width: 100vw; width: 100%;
height: 100vh; height: 100vh;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
overflow-x: hidden;
} }
</style> </style>

View File

@@ -24,6 +24,23 @@ export const routes: Array<RouteRecordRaw> = [
requiresAuth: false, requiresAuth: false,
menuType: 3, menuType: 3,
}), }),
// 协议预览页面
{
path: "/agreement/:type",
component: () => import("@/layouts/BlankLayout.vue"),
children: [
{
path: "",
name: "Agreement",
component: () => import("@/views/public/agreement/AgreementView.vue"),
meta: {
title: "协议",
requiresAuth: false,
menuType: 3,
},
}
],
},
// 首页(显示在导航栏) // 首页(显示在导航栏)
// { // {
// path: "/home", // path: "/home",

View File

@@ -47,6 +47,22 @@ export default {
faviconUrl: (state: SystemState) => { faviconUrl: (state: SystemState) => {
const fileId = state.baseInfo?.favicon; const fileId = state.baseInfo?.favicon;
return (fileId && fileId.trim()) ? `${FILE_DOWNLOAD_URL}${fileId}` : '/favicon.ico'; return (fileId && fileId.trim()) ? `${FILE_DOWNLOAD_URL}${fileId}` : '/favicon.ico';
},
// 协议文件URL
platformAgreementUrl: (state: SystemState) => {
const fileId = state.baseInfo?.platformAgreement;
return (fileId && fileId.trim()) ? `${FILE_DOWNLOAD_URL}${fileId}` : '';
},
userAgreementUrl: (state: SystemState) => {
const fileId = state.baseInfo?.userAgreement;
return (fileId && fileId.trim()) ? `${FILE_DOWNLOAD_URL}${fileId}` : '';
},
privacyAgreementUrl: (state: SystemState) => {
const fileId = state.baseInfo?.privacyAgreement;
return (fileId && fileId.trim()) ? `${FILE_DOWNLOAD_URL}${fileId}` : '';
} }
}, },

View File

@@ -10,6 +10,11 @@ export interface SystemBaseInfo {
adminLogo: string; // 管理后台LogofileId adminLogo: string; // 管理后台LogofileId
favicon: string; // 网站图标fileId favicon: string; // 网站图标fileId
// 登录协议文件ID
platformAgreement: string; // 平台协议fileId
userAgreement: string; // 用户协议fileId
privacyAgreement: string; // 隐私协议fileId
// 登录开关(来自不同分组) // 登录开关(来自不同分组)
smsLoginEnabled: boolean; // 短信登录开关sms分组 smsLoginEnabled: boolean; // 短信登录开关sms分组
emailLoginEnabled: boolean; // 邮箱登录开关email分组 emailLoginEnabled: boolean; // 邮箱登录开关email分组

View File

@@ -122,6 +122,44 @@
:tip="item.remark || '点击上传图片支持jpg、png格式'" :tip="item.remark || '点击上传图片支持jpg、png格式'"
/> />
</el-form-item> </el-form-item>
<!-- 文件上传(协议文档等) -->
<el-form-item
v-else-if="getRenderType(item) === 'fileupload'"
:label="item.configName || item.configKey"
:prop="item.configKey"
>
<div class="file-upload-wrapper">
<FileUpload
:as-dialog="false"
:multiple="false"
accept=".pdf,.txt"
:max-size="100"
module="system"
:tip="item.remark || '支持PDF、TXT格式不超过100MB'"
@success="(files) => handleFileUploadSuccess(files, group.groupKey, item.configKey)"
/>
<div v-if="configData[group.groupKey][item.configKey]" class="uploaded-file-info">
<el-tag type="success" size="small">已上传</el-tag>
<el-button
type="primary"
link
size="small"
@click="previewAgreementFile(configData[group.groupKey][item.configKey])"
>
预览文件
</el-button>
<el-button
type="danger"
link
size="small"
@click="configData[group.groupKey][item.configKey] = ''"
>
删除
</el-button>
</div>
</div>
</el-form-item>
</template> </template>
<!-- 操作按钮 --> <!-- 操作按钮 -->
@@ -149,7 +187,6 @@ import { ElMessage } from 'element-plus';
import { configApi } from '@/apis/system'; import { configApi } from '@/apis/system';
import type { ConfigItem } from '@/types/system/config'; import type { ConfigItem } from '@/types/system/config';
import FileUpload from '@/components/file/FileUpload.vue'; import FileUpload from '@/components/file/FileUpload.vue';
defineOptions({ defineOptions({
name: 'SystemConfigView' name: 'SystemConfigView'
}); });
@@ -358,6 +395,26 @@ function handleCoverUpdate(url: string, groupKey: string, configKey: string) {
configData[groupKey][configKey] = url; configData[groupKey][configKey] = url;
} }
/**
* 处理文件上传成功(协议文档等)
*/
function handleFileUploadSuccess(files: any[], groupKey: string, configKey: string) {
if (files && files.length > 0) {
configData[groupKey][configKey] = files[0].fileID || '';
}
}
/**
* 预览协议文件新开tab页
*/
function previewAgreementFile(fileId: string) {
if (fileId) {
// 使用文件下载URL在新标签页打开
const url = `${import.meta.env.VITE_API_BASE_URL || ''}/api/file/preview/${fileId}`;
window.open(url, '_blank');
}
}
/** /**
* 保存指定分组的配置 * 保存指定分组的配置
*/ */
@@ -440,5 +497,16 @@ async function saveConfig(groupKey: string) {
color: #606266; color: #606266;
font-size: 14px; font-size: 14px;
} }
.file-upload-wrapper {
width: 100%;
.uploaded-file-info {
margin-top: 10px;
display: flex;
align-items: center;
gap: 12px;
}
}
} }
</style> </style>

View File

@@ -0,0 +1,230 @@
<template>
<div class="agreement-container">
<div class="agreement-header">
<h1 class="agreement-title">{{ title }}</h1>
</div>
<div class="agreement-content" v-loading="loading">
<!-- PDF预览 -->
<div v-if="fileType === 'pdf'" class="pdf-viewer">
<VuePdfEmbed
:source="pdfSource"
:page="currentPage"
@loaded="onPdfLoaded"
@rendered="onPdfRendered"
/>
<!-- PDF分页控制 -->
<div v-if="totalPages > 1" class="pdf-pagination">
<el-button :disabled="currentPage <= 1" @click="currentPage--">上一页</el-button>
<span class="page-info">{{ currentPage }} / {{ totalPages }}</span>
<el-button :disabled="currentPage >= totalPages" @click="currentPage++">下一页</el-button>
</div>
</div>
<!-- TXT预览 -->
<div v-else-if="fileType === 'txt'" class="txt-viewer">
<pre>{{ textContent }}</pre>
</div>
<!-- 无内容 -->
<div v-else-if="!loading" class="empty-content">
<el-empty description="协议内容暂未上传" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
import { useRoute } from 'vue-router';
import { useStore } from 'vuex';
import { FILE_DOWNLOAD_URL } from '@/config';
import VuePdfEmbed from 'vue-pdf-embed';
const route = useRoute();
const store = useStore();
const loading = ref(true);
const textContent = ref('');
const fileType = ref<'pdf' | 'txt' | ''>('');
const pdfSource = ref<string>('');
const currentPage = ref(1);
const totalPages = ref(0);
// 协议类型对应的标题
const titleMap: Record<string, string> = {
platform: '红色思政智能体平台协议',
user: '用户协议',
privacy: '隐私协议'
};
// 获取协议类型
const agreementType = computed(() => route.params.type as string);
// 标题
const title = computed(() => titleMap[agreementType.value] || '协议');
// 获取文件ID
const fileId = computed(() => {
const baseInfo = store.state.system.baseInfo;
if (!baseInfo) return '';
switch (agreementType.value) {
case 'platform':
return baseInfo.platformAgreement || '';
case 'user':
return baseInfo.userAgreement || '';
case 'privacy':
return baseInfo.privacyAgreement || '';
default:
return '';
}
});
// 文件URL
const fileUrl = computed(() => {
if (!fileId.value) return '';
return `${FILE_DOWNLOAD_URL}${fileId.value}`;
});
// PDF加载完成
function onPdfLoaded(pdf: any) {
totalPages.value = pdf.numPages;
}
// PDF渲染完成
function onPdfRendered() {
loading.value = false;
}
onMounted(async () => {
// 确保系统配置已加载
if (!store.state.system.baseInfo) {
await store.dispatch('system/loadBaseInfo');
}
if (!fileId.value) {
loading.value = false;
return;
}
// 根据文件URL判断类型并加载
try {
const response = await fetch(fileUrl.value);
const contentType = response.headers.get('content-type') || '';
const contentDisposition = response.headers.get('content-disposition') || '';
// 判断是否为PDF
const isPdf = contentType.includes('pdf') ||
contentDisposition.includes('.pdf') ||
fileUrl.value.toLowerCase().includes('.pdf');
if (isPdf) {
fileType.value = 'pdf';
// 获取PDF的blob URL
const blob = await response.blob();
pdfSource.value = URL.createObjectURL(blob);
} else {
// 作为文本处理
fileType.value = 'txt';
textContent.value = await response.text();
loading.value = false;
}
} catch (error) {
console.error('加载协议文件失败:', error);
loading.value = false;
}
});
</script>
<style lang="scss" scoped>
.agreement-container {
min-height: 100vh;
background: #f5f5f5;
display: flex;
flex-direction: column;
}
.agreement-header {
background: #fff;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
.agreement-title {
margin: 0;
font-size: 20px;
font-weight: 600;
color: #333;
text-align: center;
}
}
.agreement-content {
flex: 1;
padding: 20px;
display: flex;
flex-direction: column;
}
.pdf-viewer {
flex: 1;
background: #fff;
border-radius: 8px;
padding: 20px;
overflow-x: hidden;
overflow-y: auto;
:deep(.vue-pdf-embed) {
display: flex;
justify-content: center;
}
:deep(canvas) {
max-width: 100%;
height: auto !important;
display: block;
}
}
.pdf-pagination {
display: flex;
justify-content: center;
align-items: center;
gap: 16px;
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid #eee;
.page-info {
font-size: 14px;
color: #666;
}
}
.txt-viewer {
flex: 1;
background: #fff;
border-radius: 8px;
padding: 24px;
overflow: auto;
pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
font-size: 14px;
line-height: 1.8;
color: #333;
}
}
.empty-content {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
background: #fff;
border-radius: 8px;
}
</style>

View File

@@ -181,8 +181,8 @@
<div class="agreement-wrapper"> <div class="agreement-wrapper">
<el-checkbox v-model="loginForm.agree" /> <el-checkbox v-model="loginForm.agree" />
<span class="agreement-text"> <span class="agreement-text">
登录即为同意&nbsp;<span class="agreement-link">红色思政智能体平台</span><span class="agreement-link">用户协议</span> 登录即为同意&nbsp;<span class="agreement-link" @click="openAgreement('platform')">红色思政智能体平台</span><span class="agreement-link" @click="openAgreement('user')">用户协议</span>
<span class="agreement-link">隐私协议</span> <span class="agreement-link" @click="openAgreement('privacy')">隐私协议</span>
</span> </span>
</div> </div>
</el-form-item> </el-form-item>
@@ -519,6 +519,15 @@ function goToForgotPassword() {
router.push('/forgot-password'); router.push('/forgot-password');
} }
/**
* 打开协议文件(新标签页)
*/
function openAgreement(type: 'platform' | 'user' | 'privacy') {
// 跳转到协议预览页面
const url = router.resolve({ path: `/agreement/${type}` }).href;
window.open(url, '_blank');
}
// 组件挂载时检查是否需要显示验证码 // 组件挂载时检查是否需要显示验证码
onMounted(() => { onMounted(() => {
// 可以根据需要决定是否默认显示验证码 // 可以根据需要决定是否默认显示验证码

View File

@@ -181,9 +181,9 @@
<div class="agreement-wrapper"> <div class="agreement-wrapper">
<el-checkbox v-model="loginForm.agree" /> <el-checkbox v-model="loginForm.agree" />
<span class="agreement-text"> <span class="agreement-text">
登录即为同意&nbsp;<span class="agreement-link">红色思政智能体平台</span> 登录即为同意&nbsp;<span class="agreement-link" @click="openAgreement('platform')">红色思政智能体平台</span>
<span class="agreement-link">用户协议</span> <span class="agreement-link" @click="openAgreement('user')">用户协议</span>
<span class="agreement-link">隐私协议</span> <span class="agreement-link" @click="openAgreement('privacy')">隐私协议</span>
</span> </span>
</div> </div>
</el-form-item> </el-form-item>
@@ -521,6 +521,15 @@ function goToForgotPassword() {
router.push('/forgot-password'); router.push('/forgot-password');
} }
/**
* 打开协议文件(新标签页)
*/
function openAgreement(type: 'platform' | 'user' | 'privacy') {
// 跳转到协议预览页面
const url = router.resolve({ path: `/agreement/${type}` }).href;
window.open(url, '_blank');
}
// 组件挂载时检查是否需要显示验证码 // 组件挂载时检查是否需要显示验证码
onMounted(() => { onMounted(() => {
// 可以根据需要决定是否默认显示验证码 // 可以根据需要决定是否默认显示验证码

View File

@@ -167,8 +167,8 @@
<div class="agreement-wrapper"> <div class="agreement-wrapper">
<el-checkbox v-model="registerForm.agree" /> <el-checkbox v-model="registerForm.agree" />
<span class="agreement-text"> <span class="agreement-text">
注册即为同意&nbsp;<span class="agreement-link">《红色思政智能体平台》</span><span class="agreement-link">《用户协议》</span> 注册即为同意&nbsp;<span class="agreement-link" @click="openAgreement('platform')">《红色思政智能体平台》</span><span class="agreement-link" @click="openAgreement('user')">《用户协议》</span>
<span class="agreement-link">《隐私协议》</span> <span class="agreement-link" @click="openAgreement('privacy')">《隐私协议》</span>
</span> </span>
</div> </div>
</el-form-item> </el-form-item>
@@ -515,6 +515,15 @@ onUnmounted(() => {
clearInterval(emailTimer); clearInterval(emailTimer);
} }
}); });
/**
* 打开协议文件(新标签页)
*/
function openAgreement(type: 'platform' | 'user' | 'privacy') {
// 跳转到协议预览页面
const url = router.resolve({ path: `/agreement/${type}` }).href;
window.open(url, '_blank');
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

View File

@@ -174,8 +174,8 @@
<div class="agreement-wrapper"> <div class="agreement-wrapper">
<el-checkbox v-model="registerForm.agree" /> <el-checkbox v-model="registerForm.agree" />
<span class="agreement-text"> <span class="agreement-text">
注册即为同意&nbsp;<span class="agreement-link">红色思政智能体平台</span><span class="agreement-link">用户协议</span> 注册即为同意&nbsp;<span class="agreement-link" @click="openAgreement('platform')">红色思政智能体平台</span><span class="agreement-link" @click="openAgreement('user')">用户协议</span>
<span class="agreement-link">隐私协议</span> <span class="agreement-link" @click="openAgreement('privacy')">隐私协议</span>
</span> </span>
</div> </div>
</el-form-item> </el-form-item>
@@ -522,6 +522,15 @@ function goToLogin() {
router.push('/login'); router.push('/login');
} }
/**
* 打开协议文件(新标签页)
*/
function openAgreement(type: 'platform' | 'user' | 'privacy') {
// 跳转到协议预览页面
const url = router.resolve({ path: `/agreement/${type}` }).href;
window.open(url, '_blank');
}
// 组件卸载时清除定时器 // 组件卸载时清除定时器
import { onUnmounted } from 'vue'; import { onUnmounted } from 'vue';
onUnmounted(() => { onUnmounted(() => {

View File

@@ -825,116 +825,6 @@
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz" resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz"
integrity sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A== integrity sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==
"@esbuild/aix-ppc64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz"
integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
"@esbuild/android-arm@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz"
integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
"@esbuild/android-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz"
integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
"@esbuild/android-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz"
integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
"@esbuild/darwin-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz"
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
"@esbuild/darwin-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz"
integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
"@esbuild/freebsd-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz"
integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
"@esbuild/freebsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz"
integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
"@esbuild/linux-arm@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz"
integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
"@esbuild/linux-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz"
integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
"@esbuild/linux-ia32@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz"
integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
"@esbuild/linux-loong64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz"
integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
"@esbuild/linux-mips64el@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz"
integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
"@esbuild/linux-ppc64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz"
integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
"@esbuild/linux-riscv64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz"
integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
"@esbuild/linux-s390x@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz"
integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
"@esbuild/linux-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz"
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
"@esbuild/netbsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz"
integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
"@esbuild/openbsd-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz"
integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
"@esbuild/sunos-x64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz"
integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
"@esbuild/win32-arm64@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz"
integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
"@esbuild/win32-ia32@0.21.5":
version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz"
integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
"@esbuild/win32-x64@0.21.5": "@esbuild/win32-x64@0.21.5":
version "0.21.5" version "0.21.5"
resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz" resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz"
@@ -1043,6 +933,28 @@
"@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14" "@jridgewell/sourcemap-codec" "^1.4.14"
"@napi-rs/canvas-win32-x64-msvc@0.1.88":
version "0.1.88"
resolved "https://registry.npmmirror.com/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.88.tgz"
integrity sha512-ROVqbfS4QyZxYkqmaIBBpbz/BQvAR+05FXM5PAtTYVc0uyY8Y4BHJSMdGAaMf6TdIVRsQsiq+FG/dH9XhvWCFQ==
"@napi-rs/canvas@^0.1.65", "@napi-rs/canvas@^0.1.84":
version "0.1.88"
resolved "https://registry.npmmirror.com/@napi-rs/canvas/-/canvas-0.1.88.tgz"
integrity sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==
optionalDependencies:
"@napi-rs/canvas-android-arm64" "0.1.88"
"@napi-rs/canvas-darwin-arm64" "0.1.88"
"@napi-rs/canvas-darwin-x64" "0.1.88"
"@napi-rs/canvas-linux-arm-gnueabihf" "0.1.88"
"@napi-rs/canvas-linux-arm64-gnu" "0.1.88"
"@napi-rs/canvas-linux-arm64-musl" "0.1.88"
"@napi-rs/canvas-linux-riscv64-gnu" "0.1.88"
"@napi-rs/canvas-linux-x64-gnu" "0.1.88"
"@napi-rs/canvas-linux-x64-musl" "0.1.88"
"@napi-rs/canvas-win32-arm64-msvc" "0.1.88"
"@napi-rs/canvas-win32-x64-msvc" "0.1.88"
"@nodelib/fs.scandir@2.1.5": "@nodelib/fs.scandir@2.1.5":
version "2.1.5" version "2.1.5"
resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
@@ -1152,106 +1064,6 @@
estree-walker "^2.0.2" estree-walker "^2.0.2"
picomatch "^4.0.2" picomatch "^4.0.2"
"@rollup/rollup-android-arm-eabi@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz"
integrity sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==
"@rollup/rollup-android-arm64@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz"
integrity sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==
"@rollup/rollup-darwin-arm64@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz"
integrity sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==
"@rollup/rollup-darwin-x64@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz"
integrity sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==
"@rollup/rollup-freebsd-arm64@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz"
integrity sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==
"@rollup/rollup-freebsd-x64@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz"
integrity sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==
"@rollup/rollup-linux-arm-gnueabihf@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz"
integrity sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==
"@rollup/rollup-linux-arm-musleabihf@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz"
integrity sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==
"@rollup/rollup-linux-arm64-gnu@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz"
integrity sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==
"@rollup/rollup-linux-arm64-musl@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz"
integrity sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==
"@rollup/rollup-linux-loong64-gnu@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz"
integrity sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==
"@rollup/rollup-linux-ppc64-gnu@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz"
integrity sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==
"@rollup/rollup-linux-riscv64-gnu@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz"
integrity sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==
"@rollup/rollup-linux-riscv64-musl@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz"
integrity sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==
"@rollup/rollup-linux-s390x-gnu@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz"
integrity sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==
"@rollup/rollup-linux-x64-gnu@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz"
integrity sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==
"@rollup/rollup-linux-x64-musl@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz"
integrity sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==
"@rollup/rollup-openharmony-arm64@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz"
integrity sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==
"@rollup/rollup-win32-arm64-msvc@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz"
integrity sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==
"@rollup/rollup-win32-ia32-msvc@4.52.4":
version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz"
integrity sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==
"@rollup/rollup-win32-x64-gnu@4.52.4": "@rollup/rollup-win32-x64-gnu@4.52.4":
version "4.52.4" version "4.52.4"
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz" resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz"
@@ -2508,11 +2320,6 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz" resolved "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
fsevents@~2.3.2, fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.2: function-bind@^1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz" resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz"
@@ -3294,6 +3101,20 @@ path-type@^4.0.0:
resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz" resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pdfjs-dist@^4.10.38:
version "4.10.38"
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-4.10.38.tgz"
integrity sha512-/Y3fcFrXEAsMjJXeL9J8+ZG9U01LbuWaYypvDW2ycW1jL269L3js3DVBjDJ0Up9Np1uqDXsDrRihHANhZOlwdQ==
optionalDependencies:
"@napi-rs/canvas" "^0.1.65"
pdfjs-dist@^5.4.530:
version "5.4.530"
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-5.4.530.tgz"
integrity sha512-r1hWsSIGGmyYUAHR26zSXkxYWLXLMd6AwqcaFYG9YUZ0GBf5GvcjJSeo512tabM4GYFhxhl5pMCmPr7Q72Rq2Q==
optionalDependencies:
"@napi-rs/canvas" "^0.1.84"
picocolors@^1.0.0, picocolors@^1.1.1: picocolors@^1.0.0, picocolors@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz" resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz"
@@ -4115,6 +3936,13 @@ vue-eslint-parser@^8.0.0, vue-eslint-parser@^8.0.1:
lodash "^4.17.21" lodash "^4.17.21"
semver "^7.3.5" semver "^7.3.5"
vue-pdf-embed@^2.1.3:
version "2.1.3"
resolved "https://registry.npmmirror.com/vue-pdf-embed/-/vue-pdf-embed-2.1.3.tgz"
integrity sha512-EGgZNb8HRrAloBpb8p8CugDpJpoPbQ8CFfAYdWZgq2e5qBMP9JSeLzVQIAJkXsclHXRIS3O9fp3WQbP9T5Inwg==
dependencies:
pdfjs-dist "^4.10.38"
vue-router@^4.5.1: vue-router@^4.5.1:
version "4.5.1" version "4.5.1"
resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz" resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz"
@@ -4122,7 +3950,7 @@ vue-router@^4.5.1:
dependencies: dependencies:
"@vue/devtools-api" "^6.6.4" "@vue/devtools-api" "^6.6.4"
"vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.5.22, vue@3.5.22: "vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.3.0, vue@^3.5.22, vue@3.5.22:
version "3.5.22" version "3.5.22"
resolved "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz" resolved "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz"
integrity sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ== integrity sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==