提交
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
# 【开发】环境变量
|
||||||
|
|
||||||
|
# 网站地址前缀
|
||||||
|
VITE_BASE_URL = /
|
||||||
|
|
||||||
|
# API 地址前缀
|
||||||
|
# VITE_API_URL = https://m1.apifoxmock.com/m1/6400575-6097373-default
|
||||||
|
# VITE_API_URL = https://bsh.yw.server.hnzhwlkj.cn
|
||||||
|
VITE_API_URL = https://bsh.info.yw.hnzhwlkj.cn
|
||||||
|
# VITE_API_URL = https://fdesk.hnxinyouhe.com
|
||||||
|
# VITE_API_URL = https://x-server.hnxinyouhe.com
|
||||||
|
|
||||||
|
# VITE_API_URL_WSS = wss://mzl.dev.hnxinyouhe.com
|
||||||
|
# VITE_API_URL_WSS = wss://fdesk.hnxinyouhe.com
|
||||||
|
# VITE_API_URL_WSS = wss://x-server.hnxinyouhe.com
|
||||||
|
# Delete console
|
||||||
|
VITE_DROP_CONSOLE = false
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
# 【生产】环境变量
|
||||||
|
|
||||||
|
# 网站地址前缀
|
||||||
|
VITE_BASE_URL = /
|
||||||
|
|
||||||
|
# API 地址前缀
|
||||||
|
# VITE_API_URL = https://fdesk.hnxinyouhe.com
|
||||||
|
# VITE_API_URL = https://mzl.dev.hnxinyouhe.com
|
||||||
|
VITE_API_URL = https://bsh.info.yw.hnzhwlkj.cn
|
||||||
|
# VITE_API_URL_WSS = wss://fdesk.hnxinyouhe.com
|
||||||
|
# VITE_API_URL_WSS = wss://x-server.hnxinyouhe.com
|
||||||
|
# Delete console
|
||||||
|
VITE_DROP_CONSOLE = true
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
*.html linguist-detectable=false
|
||||||
|
*.vue linguist-detectable=true
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
*.env
|
||||||
|
.cursorrules
|
||||||
|
src/types/components.d.ts
|
||||||
|
src/types/auto-imports.d.ts
|
||||||
|
.vscode
|
||||||
|
.auto-import.json
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
/node_modules/*
|
||||||
|
/dist/*
|
||||||
|
/src/main.ts
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"printWidth": 100,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"useTabs": false,
|
||||||
|
"semi": false,
|
||||||
|
"vueIndentScriptAndStyle": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"quoteProps": "as-needed",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"bracketSameLine": false,
|
||||||
|
"jsxSingleQuote": false,
|
||||||
|
"arrowParens": "always",
|
||||||
|
"insertPragma": false,
|
||||||
|
"requirePragma": false,
|
||||||
|
"proseWrap": "never",
|
||||||
|
"htmlWhitespaceSensitivity": "strict",
|
||||||
|
"endOfLine": "auto",
|
||||||
|
"rangeStart": 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
dist
|
||||||
|
node_modules
|
||||||
|
public
|
||||||
|
.husky
|
||||||
|
.vscode
|
||||||
|
|
||||||
|
src/components/Layout/MenuLeft/index.vue
|
||||||
|
src/assets
|
||||||
|
stats.html
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
module.exports = {
|
||||||
|
// 继承推荐规范配置
|
||||||
|
extends: [
|
||||||
|
'stylelint-config-standard',
|
||||||
|
'stylelint-config-recommended-scss',
|
||||||
|
'stylelint-config-recommended-vue/scss',
|
||||||
|
'stylelint-config-html/vue',
|
||||||
|
'stylelint-config-recess-order'
|
||||||
|
],
|
||||||
|
// 指定不同文件对应的解析器
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['**/*.{vue,html}'],
|
||||||
|
customSyntax: 'postcss-html'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ['**/*.{css,scss}'],
|
||||||
|
customSyntax: 'postcss-scss'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 自定义规则
|
||||||
|
rules: {
|
||||||
|
'import-notation': 'string', // 指定导入CSS文件的方式("string"|"url")
|
||||||
|
'selector-class-pattern': null, // 选择器类名命名规则
|
||||||
|
'custom-property-pattern': null, // 自定义属性命名规则
|
||||||
|
'keyframes-name-pattern': null, // 动画帧节点样式命名规则
|
||||||
|
'no-descending-specificity': null, // 允许无降序特异性
|
||||||
|
'no-empty-source': null, // 允许空样式
|
||||||
|
// 允许 global 、export 、deep伪类
|
||||||
|
'selector-pseudo-class-no-unknown': [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
ignorePseudoClasses: ['global', 'export', 'deep']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 允许未知属性
|
||||||
|
'property-no-unknown': [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
ignoreProperties: []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// 允许未知规则
|
||||||
|
'at-rule-no-unknown': [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
ignoreAtRules: [
|
||||||
|
'apply',
|
||||||
|
'use',
|
||||||
|
'mixin',
|
||||||
|
'include',
|
||||||
|
'extend',
|
||||||
|
'each',
|
||||||
|
'if',
|
||||||
|
'else',
|
||||||
|
'for',
|
||||||
|
'while'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
/**
|
||||||
|
* commitlint 配置文件
|
||||||
|
* 文档
|
||||||
|
* https://commitlint.js.org/#/reference-rules
|
||||||
|
* https://cz-git.qbb.sh/zh/guide/
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
// 继承的规则
|
||||||
|
extends: ['@commitlint/config-conventional'],
|
||||||
|
// 自定义规则
|
||||||
|
rules: {
|
||||||
|
// 提交类型枚举,git提交type必须是以下类型
|
||||||
|
'type-enum': [
|
||||||
|
2,
|
||||||
|
'always',
|
||||||
|
[
|
||||||
|
'feat', // 新增功能
|
||||||
|
'fix', // 修复缺陷
|
||||||
|
'docs', // 文档变更
|
||||||
|
'style', // 代码格式(不影响功能,例如空格、分号等格式修正)
|
||||||
|
'refactor', // 代码重构(不包括 bug 修复、功能新增)
|
||||||
|
'perf', // 性能优化
|
||||||
|
'test', // 添加疏漏测试或已有测试改动
|
||||||
|
'build', // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)
|
||||||
|
'ci', // 修改 CI 配置、脚本
|
||||||
|
'revert', // 回滚 commit
|
||||||
|
'chore', // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
|
||||||
|
'wip' // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
|
||||||
|
]
|
||||||
|
],
|
||||||
|
'subject-case': [0] // subject大小写不做校验
|
||||||
|
},
|
||||||
|
|
||||||
|
prompt: {
|
||||||
|
messages: {
|
||||||
|
type: '选择你要提交的类型 :',
|
||||||
|
scope: '选择一个提交范围(可选):',
|
||||||
|
customScope: '请输入自定义的提交范围 :',
|
||||||
|
subject: '填写简短精炼的变更描述 :\n',
|
||||||
|
body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
|
||||||
|
breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
|
||||||
|
footerPrefixesSelect: '选择关联issue前缀(可选):',
|
||||||
|
customFooterPrefix: '输入自定义issue前缀 :',
|
||||||
|
footer: '列举关联issue (可选) 例如: #31, #I3244 :\n',
|
||||||
|
generatingByAI: '正在通过 AI 生成你的提交简短描述...',
|
||||||
|
generatedSelectByAI: '选择一个 AI 生成的简短描述:',
|
||||||
|
confirmCommit: '是否提交或修改commit ?'
|
||||||
|
},
|
||||||
|
// prettier-ignore
|
||||||
|
types: [
|
||||||
|
{ value: "feat", name: "特性: 新增功能" },
|
||||||
|
{ value: "fix", name: "修复: 修复缺陷" },
|
||||||
|
{ value: "docs", name: "文档: 文档变更(更新README文件,或者注释)" },
|
||||||
|
{ value: "style", name: "格式: 代码格式(空格、格式化、缺失的分号等)" },
|
||||||
|
{ value: "refactor", name: "重构: 代码重构(不修复错误也不添加特性的代码更改)" },
|
||||||
|
{ value: "perf", name: "性能: 性能优化" },
|
||||||
|
{ value: "test", name: "测试: 添加疏漏测试或已有测试改动" },
|
||||||
|
{ value: "build", name: "构建: 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)" },
|
||||||
|
{ value: "ci", name: "集成: 修改 CI 配置、脚本" },
|
||||||
|
{ value: "revert", name: "回退: 回滚 commit" },
|
||||||
|
{ value: "chore", name: "其他: 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)" },
|
||||||
|
],
|
||||||
|
useEmoji: true,
|
||||||
|
emojiAlign: 'center',
|
||||||
|
useAI: false,
|
||||||
|
aiNumber: 1,
|
||||||
|
themeColorCode: '',
|
||||||
|
scopes: [],
|
||||||
|
allowCustomScopes: true,
|
||||||
|
allowEmptyScopes: true,
|
||||||
|
customScopesAlign: 'bottom',
|
||||||
|
customScopesAlias: 'custom',
|
||||||
|
emptyScopesAlias: 'empty',
|
||||||
|
upperCaseSubject: false,
|
||||||
|
markBreakingChangeMode: false,
|
||||||
|
allowBreakingChanges: ['feat', 'fix'],
|
||||||
|
breaklineNumber: 100,
|
||||||
|
breaklineChar: '|',
|
||||||
|
skipQuestions: ['breaking', 'footerPrefix', 'footer'], // 跳过的步骤
|
||||||
|
issuePrefixes: [{ value: 'closed', name: 'closed: ISSUES has been processed' }],
|
||||||
|
customIssuePrefixAlign: 'top',
|
||||||
|
emptyIssuePrefixAlias: 'skip',
|
||||||
|
customIssuePrefixAlias: 'custom',
|
||||||
|
allowCustomIssuePrefix: true,
|
||||||
|
allowEmptyIssuePrefix: true,
|
||||||
|
confirmColorize: true,
|
||||||
|
maxHeaderLength: Infinity,
|
||||||
|
maxSubjectLength: Infinity,
|
||||||
|
minSubjectLength: 0,
|
||||||
|
scopeOverrides: undefined,
|
||||||
|
defaultBody: '',
|
||||||
|
defaultIssues: '',
|
||||||
|
defaultScope: '',
|
||||||
|
defaultSubject: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
Vendored
+70
@@ -0,0 +1,70 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
// @ts-nocheck
|
||||||
|
// Generated by unplugin-vue-components
|
||||||
|
// Read more: https://github.com/vuejs/core/pull/3399
|
||||||
|
export {}
|
||||||
|
|
||||||
|
/* prettier-ignore */
|
||||||
|
declare module 'vue' {
|
||||||
|
export interface GlobalComponents {
|
||||||
|
ArtBackToTop: typeof import('./src/components/core/base/ArtBackToTop.vue')['default']
|
||||||
|
ArtBarChart: typeof import('./src/components/core/charts/ArtBarChart.vue')['default']
|
||||||
|
ArtBarChartCard: typeof import('./src/components/core/cards/ArtBarChartCard.vue')['default']
|
||||||
|
ArtBasicBanner: typeof import('./src/components/core/banners/ArtBasicBanner.vue')['default']
|
||||||
|
ArtBreadcrumb: typeof import('./src/components/core/layouts/art-breadcrumb/index.vue')['default']
|
||||||
|
ArtButtonMore: typeof import('./src/components/core/forms/ArtButtonMore.vue')['default']
|
||||||
|
ArtButtonTable: typeof import('./src/components/core/forms/ArtButtonTable.vue')['default']
|
||||||
|
ArtCardBanner: typeof import('./src/components/core/banners/ArtCardBanner.vue')['default']
|
||||||
|
ArtChatWindow: typeof import('./src/components/core/layouts/art-chat-window/index.vue')['default']
|
||||||
|
ArtCutterImg: typeof import('./src/components/core/media/ArtCutterImg.vue')['default']
|
||||||
|
ArtDataListCard: typeof import('./src/components/core/cards/ArtDataListCard.vue')['default']
|
||||||
|
ArtDonutChartCard: typeof import('./src/components/core/cards/ArtDonutChartCard.vue')['default']
|
||||||
|
ArtDragVerify: typeof import('./src/components/core/forms/ArtDragVerify.vue')['default']
|
||||||
|
ArtDualBarCompareChart: typeof import('./src/components/core/charts/ArtDualBarCompareChart.vue')['default']
|
||||||
|
ArtExcelExport: typeof import('./src/components/core/forms/ArtExcelExport.vue')['default']
|
||||||
|
ArtExcelImport: typeof import('./src/components/core/forms/ArtExcelImport.vue')['default']
|
||||||
|
ArtException: typeof import('./src/components/core/views/exception/ArtException.vue')['default']
|
||||||
|
ArtFastEnter: typeof import('./src/components/core/layouts/art-fast-enter/index.vue')['default']
|
||||||
|
ArtFestivalTextScroll: typeof import('./src/components/core/text-effect/ArtFestivalTextScroll.vue')['default']
|
||||||
|
ArtFireworksEffect: typeof import('./src/components/core/layouts/art-fireworks-effect/index.vue')['default']
|
||||||
|
ArtFormInput: typeof import('./src/components/core/forms/ArtFormInput.vue')['default']
|
||||||
|
ArtFormSelect: typeof import('./src/components/core/forms/ArtFormSelect.vue')['default']
|
||||||
|
ArtGlobalSearch: typeof import('./src/components/core/layouts/art-global-search/index.vue')['default']
|
||||||
|
ArtHBarChart: typeof import('./src/components/core/charts/ArtHBarChart.vue')['default']
|
||||||
|
ArtHeaderBar: typeof import('./src/components/core/layouts/art-header-bar/index.vue')['default']
|
||||||
|
ArtHorizontalMenu: typeof import('./src/components/core/layouts/art-menus/art-horizontal-menu/index.vue')['default']
|
||||||
|
ArtIconSelector: typeof import('./src/components/core/base/ArtIconSelector.vue')['default']
|
||||||
|
ArtImageCard: typeof import('./src/components/core/cards/ArtImageCard.vue')['default']
|
||||||
|
ArtKLineChart: typeof import('./src/components/core/charts/ArtKLineChart.vue')['default']
|
||||||
|
ArtLineChart: typeof import('./src/components/core/charts/ArtLineChart.vue')['default']
|
||||||
|
ArtLineChartCard: typeof import('./src/components/core/cards/ArtLineChartCard.vue')['default']
|
||||||
|
ArtMapChart: typeof import('./src/components/core/charts/ArtMapChart.vue')['default']
|
||||||
|
ArtMenuRight: typeof import('./src/components/core/others/ArtMenuRight.vue')['default']
|
||||||
|
ArtMixedMenu: typeof import('./src/components/core/layouts/art-menus/art-mixed-menu/index.vue')['default']
|
||||||
|
ArtNetwork: typeof import('./src/components/core/base/ArtNetwork.vue')['default']
|
||||||
|
ArtNotification: typeof import('./src/components/core/layouts/art-notification/index.vue')['default']
|
||||||
|
ArtPageContent: typeof import('./src/components/core/layouts/art-page-content/index.vue')['default']
|
||||||
|
ArtProgressCard: typeof import('./src/components/core/cards/ArtProgressCard.vue')['default']
|
||||||
|
ArtRadarChart: typeof import('./src/components/core/charts/ArtRadarChart.vue')['default']
|
||||||
|
ArtRingChart: typeof import('./src/components/core/charts/ArtRingChart.vue')['default']
|
||||||
|
ArtScatterChart: typeof import('./src/components/core/charts/ArtScatterChart.vue')['default']
|
||||||
|
ArtScreenLock: typeof import('./src/components/core/layouts/art-screen-lock/index.vue')['default']
|
||||||
|
ArtSettingsPanel: typeof import('./src/components/core/layouts/art-settings-panel/index.vue')['default']
|
||||||
|
ArtSidebarMenu: typeof import('./src/components/core/layouts/art-menus/art-sidebar-menu/index.vue')['default']
|
||||||
|
ArtStatsCard: typeof import('./src/components/core/cards/ArtStatsCard.vue')['default']
|
||||||
|
ArtTable: typeof import('./src/components/core/tables/ArtTable.vue')['default']
|
||||||
|
ArtTableBar: typeof import('./src/components/core/tables/ArtTableBar.vue')['default']
|
||||||
|
ArtTextScroll: typeof import('./src/components/core/text-effect/ArtTextScroll.vue')['default']
|
||||||
|
ArtTimelineListCard: typeof import('./src/components/core/cards/ArtTimelineListCard.vue')['default']
|
||||||
|
ArtVideoPlayer: typeof import('./src/components/core/media/ArtVideoPlayer.vue')['default']
|
||||||
|
ArtWangEditor: typeof import('./src/components/core/forms/ArtWangEditor.vue')['default']
|
||||||
|
ArtWatermark: typeof import('./src/components/core/others/ArtWatermark.vue')['default']
|
||||||
|
ArtWorkTab: typeof import('./src/components/core/layouts/art-work-tab/index.vue')['default']
|
||||||
|
BannerWidget: typeof import('./src/components/core/BannerWidget.vue')['default']
|
||||||
|
HorizontalSubmenu: typeof import('./src/components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue')['default']
|
||||||
|
LoginLeftView: typeof import('./src/components/core/views/login/LoginLeftView.vue')['default']
|
||||||
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
|
SidebarSubmenu: typeof import('./src/components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue')['default']
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
// 从 URL 和路径模块中导入必要的功能
|
||||||
|
import fs from 'fs'
|
||||||
|
import path, { dirname } from 'path'
|
||||||
|
import { fileURLToPath } from 'url'
|
||||||
|
|
||||||
|
// 从 ESLint 插件中导入推荐配置
|
||||||
|
import pluginJs from '@eslint/js'
|
||||||
|
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
|
||||||
|
import pluginVue from 'eslint-plugin-vue'
|
||||||
|
import globals from 'globals'
|
||||||
|
import tseslint from 'typescript-eslint'
|
||||||
|
|
||||||
|
// 使用 import.meta.url 获取当前模块的路径
|
||||||
|
const __filename = fileURLToPath(import.meta.url)
|
||||||
|
const __dirname = dirname(__filename)
|
||||||
|
|
||||||
|
// 读取 .auto-import.json 文件的内容,并将其解析为 JSON 对象
|
||||||
|
const autoImportConfig = JSON.parse(
|
||||||
|
fs.readFileSync(path.resolve(__dirname, '.auto-import.json'), 'utf-8')
|
||||||
|
)
|
||||||
|
|
||||||
|
export default [
|
||||||
|
// 指定文件匹配规则
|
||||||
|
{
|
||||||
|
files: ['**/*.{js,mjs,cjs,ts,vue}']
|
||||||
|
},
|
||||||
|
// 指定全局变量和环境
|
||||||
|
{
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
...globals.browser,
|
||||||
|
...globals.node
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 扩展配置
|
||||||
|
pluginJs.configs.recommended,
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
...pluginVue.configs['flat/essential'],
|
||||||
|
// 自定义规则
|
||||||
|
{
|
||||||
|
// 针对所有 JavaScript、TypeScript 和 Vue 文件应用以下配置
|
||||||
|
files: ['**/*.{js,mjs,cjs,ts,vue}'],
|
||||||
|
|
||||||
|
languageOptions: {
|
||||||
|
globals: {
|
||||||
|
// 合并从 autoImportConfig 中读取的全局变量配置
|
||||||
|
...autoImportConfig.globals
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
quotes: ['error', 'single'], // 使用单引号
|
||||||
|
semi: ['error', 'never'], // 语句末尾不加分号
|
||||||
|
'no-var': 'error', // 要求使用 let 或 const 而不是 var
|
||||||
|
'@typescript-eslint/no-explicit-any': 'off', // 禁用 any 检查
|
||||||
|
'vue/multi-word-component-names': 'off', // 禁用对 Vue 组件名称的多词要求检查
|
||||||
|
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
|
||||||
|
'no-unexpected-multiline': 'error' // 禁止空余的多行
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// vue 规则
|
||||||
|
{
|
||||||
|
files: ['**/*.vue'],
|
||||||
|
languageOptions: {
|
||||||
|
parserOptions: { parser: tseslint.parser }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 忽略文件
|
||||||
|
{
|
||||||
|
ignores: [
|
||||||
|
'node_modules',
|
||||||
|
'dist',
|
||||||
|
'public',
|
||||||
|
'.vscode/**',
|
||||||
|
'src/assets/**',
|
||||||
|
'src/utils/console.ts'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// prettier 配置
|
||||||
|
eslintPluginPrettierRecommended
|
||||||
|
]
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>系统管理</title>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="src/assets/img/favicon.ico" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.ts"></script>
|
||||||
|
<script src="https://lf-package-cn.feishucdn.com/obj/feishu-static/lark/passport/qrcode/LarkSSOSDKWebQRCode-1.0.3.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user