refactor: update package.json and improve ESLint configuration

- Removed outdated Vue CLI plugins and added new ESLint rules and plugins for better TypeScript support.
- Enhanced ESLint configuration with parser options and overrides for Vue files.

feat: refactor router configuration for improved readability

- Reformatted router configuration for better structure and clarity.
- Ensured consistent use of async component imports and updated route definitions.

chore: update TypeScript configuration for better compatibility

- Adjusted tsconfig.json to target ES2020 and include necessary libraries.
- Added a new tsconfig.node.json for Node.js specific configurations.

fix: update Vite configuration for proper asset handling

- Modified vite.config.js to specify input for Rollup, ensuring correct asset management.
This commit is contained in:
bighuixiang
2025-06-18 21:25:25 +08:00
parent 3a52cc1e53
commit 5f4e1176f0
10 changed files with 1135 additions and 8815 deletions

View File

@@ -1,72 +1,66 @@
module.exports = { module.exports = {
root: true, // 停止在父级目录中寻找 root: true,
env: { env: {
es6: true, // 启用 ES6 语法支持以及新的 ES6 全局变量或类型 se6: true,
node: true, // Node.js 全局变量和 Node.js 作用域 node: true,
}, },
extends: ['plugin:vue/essential'], extends: ["plugin:vue/essential"],
rules: { rules: {
'no-alert': 0, // 禁止使用alert confirm prompt "no-alert": 0, // 禁止使用alert confirm prompt
'no-console': 0, // 禁止使用console "no-console": 0, // 禁止使用console
'no-debugger': 0, // 禁止使用debugger "no-debugger": 0, // 禁止使用debugger
'prefer-const': 0, // 建议使用 const 关闭 "prefer-const": 0, // 建议使用 const 关闭
'no-dupe-keys': 2, // 在创建对象字面量时不允许键重复 {a:1,a:1} "no-dupe-keys": 2, // 在创建对象字面量时不允许键重复 {a:1,a:1}
'no-dupe-args': 2, // 函数参数不能重复 "no-dupe-args": 2, // 函数参数不能重复
'no-duplicate-imports': [ "no-duplicate-imports": [
1, 1,
{
includeExports: true
}
], // 不允许重复导入
'no-duplicate-case': 2, // switch中的case标签不能重复
'padded-blocks': 0, // 块语句内行首行尾是否要空行
'space-after-keywords': [0, 'always'], // 关键字后面是否要空一格
'space-before-blocks': [0, 'always'], // 不以新行开始的块{前面要不要有空格
'space-before-function-paren': [0, 'always'], // 函数定义时括号前面要不要有空格
'space-in-parens': [0, 'never'], // 小括号里面要不要有空格
'space-infix-ops': 0, // 中缀操作符周围要不要有空格
eqeqeq: 0, // 必须使用全等
'no-var': 0, // 禁用var用let和const代替
'no-inline-comments': 0, // 禁止行内备注
indent: 0,
'vue/script-indent': 0,
'vue/require-prop-type-constructor': 0,
'vue/no-use-v-if-with-v-for': 0,
'no-trailing-spaces': 0, // 一行结束后面不要有空格
'no-multiple-empty-lines': 0, // [1, {"max": 2}],空行最多不能超过2行
'no-extra-boolean-cast': 0, // 禁止不必要的bool转换
'valid-jsdoc': 0,
'one-var': 0, // 连续声明
semi: 0, // 语句强制分号结尾
'semi-spacing': [0, { before: false, after: true }], // 分号前后空格
'no-new': 0, // 禁止在使用new构造一个实例后不赋值
'no-extra-semi': 0, // 禁止多余的冒号
'keyword-spacing': 0,
'arrow-parens': 0, // 箭头函数用小括号括起来 - 关闭
'generator-star-spacing': 0, // 生成器函数*的前后空格
'no-mixed-operators': 0,
'eol-last': 0, // 文件以单一的换行符结束 - 关闭
'object-curly-spacing': 0, // 大括号内是否允许不必要的空格
'no-callback-literal': 0,
'multiline-ternary': 0,
'no-self-assign':'off',
'vue/multi-word-component-names': "off",
"vue/no-v-model-argument": "off",
},
plugins:[
'vue'
],
parserOptions: {
parser: 'babel-eslint',
"requireConfigFile": false,
},
overrides: [
{ {
files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'], includeExports: true,
env: { },
jest: true ], // 不允许重复导入
}
"no-duplicate-case": 2, // switch中的case标签不能重复
"padded-blocks": 0, // 块语句内行首行尾是否要空行
"space-after-keywords": [0, "always"], // 关键字后面是否要空一格
"space-before-blocks": [0, "always"], // 不以新行开始的块{前面要不要有空格
"space-before-function-paren": [0, "always"], // 函数定义时括号前面要不要有空格
"space-in-parens": [0, "never"], // 小括号里面要不要有空格
"space-infix-ops": 0, // 中缀操作符周围要不要有空格
eqeqeq: 0, // 必须使用全等
"no-var": 0, // 禁用var用let和const代替
"no-inline-comments": 0, // 禁止行内备注
indent: 0,
"vue/script-indent": 0,
"vue/require-prop-type-constructor": 0,
"vue/no-use-v-if-with-v-for": 0,
"no-trailing-spaces": 0, // 一行结束后面不要有空格
"no-multiple-empty-lines": 0, // [1, {"max": 2}],空行最多不能超过2行
"no-extra-boolean-cast": 0, // 禁止不必要的bool转换
"valid-jsdoc": 0,
"one-var": 0, // 连续声明
semi: 0, // 语句强制分号结尾
"semi-spacing": [0, { before: false, after: true }], // 分号前后空格
"no-new": 0, // 禁止在使用new构造一个实例后不赋值
"no-extra-semi": 0, // 禁止多余的冒号
"keyword-spacing": 0,
"arrow-parens": 0, // 箭头函数用小括号括起来 - 关闭
"generator-star-spacing": 0, // 生成器函数*的前后空格
"no-mixed-operators": 0,
"eol-last": 0, // 文件以单一的换行符结束 - 关闭
"object-curly-spacing": 0, // 大括号内是否允许不必要的空格
"no-callback-literal": 0,
"multiline-ternary": 0,
"no-self-assign": "off",
"vue/multi-word-component-names": "off",
"vue/no-v-model-argument": "off",
},
plugins:['vue'],
overrides: [
{
files: ['**/__tests__/*.{j,t}s?(x)', '**/tests/unit/**/*.spec.{j,t}s?(x)'],
env: {
jest: true
} }
] }
}; ]s
};

View File

@@ -1,5 +0,0 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

8733
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -48,42 +48,56 @@
"@typescript-eslint/eslint-plugin": "^5.4.0", "@typescript-eslint/eslint-plugin": "^5.4.0",
"@typescript-eslint/parser": "^5.4.0", "@typescript-eslint/parser": "^5.4.0",
"@vitejs/plugin-vue": "^5.2.4", "@vitejs/plugin-vue": "^5.2.4",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-typescript": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"@vue/eslint-config-typescript": "^9.1.0", "@vue/eslint-config-typescript": "^9.1.0",
"babel-eslint": "^10.1.0",
"eslint": "^7.32.0", "eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3", "eslint-plugin-vue": "^8.0.3",
"less": "^4.1.3", "less": "^4.1.3",
"less-loader": "^11.0.0", "less-loader": "^11.0.0",
"style-resources-loader": "^1.5.0",
"typescript": "~4.5.5", "typescript": "~4.5.5",
"unplugin-auto-import": "^19.3.0", "unplugin-auto-import": "^19.3.0",
"unplugin-element-plus": "^0.8.0", "unplugin-element-plus": "^0.8.0",
"unplugin-vue-components": "^28.7.0", "unplugin-vue-components": "^28.7.0",
"vite": "^6.3.5", "vite": "^6.3.5",
"vite-plugin-svg-icons": "^2.0.1", "vite-plugin-svg-icons": "^2.0.1",
"vue-cli-plugin-style-resources-loader": "^0.1.5",
"vue-lazyload": "^3.0.0-rc.2" "vue-lazyload": "^3.0.0-rc.2"
}, },
"eslintConfig": { "eslintConfig": {
"root": true, "root": true,
"env": { "env": {
"node": true "node": true,
"browser": true,
"es2021": true
}, },
"extends": [ "extends": [
"plugin:vue/vue3-essential", "plugin:vue/vue3-essential",
"eslint:recommended", "eslint:recommended",
"@vue/typescript/recommended" "@vue/typescript/recommended"
], ],
"parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"ecmaVersion": 2020 "ecmaVersion": 2020,
"sourceType": "module"
}, },
"rules": {} "plugins": [
"@typescript-eslint",
"vue"
],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unused-vars": "off",
"vue/multi-word-component-names": "off"
},
"overrides": [
{
"files": [
"*.vue"
],
"parser": "vue-eslint-parser",
"parserOptions": {
"parser": "@typescript-eslint/parser"
}
}
]
}, },
"browserslist": [ "browserslist": [
"> 1%", "> 1%",

View File

@@ -1,433 +1,475 @@
import { createRouter, createWebHistory, RouteRecordRaw, createWebHashHistory } from 'vue-router' import {
import { defineAsyncComponent } from 'vue' createRouter,
import store from "@/store" createWebHistory,
RouteRecordRaw,
createWebHashHistory,
} from "vue-router";
import { defineAsyncComponent } from "vue";
import store from "@/store";
import { useStore } from "vuex"; import { useStore } from "vuex";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import { getCookie, setCookie } from "@/tool/cookie"; import { getCookie, setCookie } from "@/tool/cookie";
const _import = (path: string) => () => import(`../views/${path}.vue`); const _import = (path: string) => () => import(`../views/${path}.vue`);
const _import_component = (path : string) => () => import(`../component/${path}`); const _import_component = (path: string) => () =>
const _import_custom = (path : string) => () => import(`../views/${path}`); import(`../component/${path}`);
const _import_custom = (path: string) => () => import(`../views/${path}`);
// defineAsyncComponent(import(`../views/${path}.vue`)) // defineAsyncComponent(import(`../views/${path}.vue`))
const routes: Array<RouteRecordRaw> = [ const routes: Array<RouteRecordRaw> = [
{ {
path: "/", path: "/",
// redirect重定向 // redirect重定向
meta:{enter:'all',}, meta: { enter: "all" },
redirect: "/Square" redirect: "/Square",
// redirect: "/upgrade" // redirect: "/upgrade"
},
}, {
{ path: "/login",
path: '/login', name: "login",
name: 'login', meta: { enter: "all" },
meta:{enter:'all',}, component: _import("Login"),
component: _import('Login') // component: _import('LoginPage')
// component: _import('LoginPage') },
},{ {
path: '/schoolLogin', path: "/schoolLogin",
name: 'schoolLogin', name: "schoolLogin",
meta:{enter:'all',}, meta: { enter: "all" },
component: _import('LoginPageSchool') component: _import("LoginPageSchool"),
},{ },
path: '/enterpriseLogin', {
name: 'enterpriseLogin', path: "/enterpriseLogin",
meta:{enter:'all',}, name: "enterpriseLogin",
component: _import('LoginPageEnterprise') meta: { enter: "all" },
}, component: _import("LoginPageEnterprise"),
{ },
path: '/test', {
name: 'test1', path: "/test",
meta:{enter:'all',}, name: "test1",
component: _import('test') meta: { enter: "all" },
}, component: _import("test"),
{ },
path: '/register', {
name: 'register', path: "/register",
meta:{enter:'all',}, name: "register",
component: _import('Register') meta: { enter: "all" },
}, component: _import("Register"),
{ },
path: '/upgrade', {
name: 'upgrade', path: "/upgrade",
meta:{enter:'all',}, name: "upgrade",
component: _import('Upgrade'), meta: { enter: "all" },
}, component: _import("Upgrade"),
{ },
path: '/home', {
name: 'home', path: "/home",
meta:{enter:'all',}, name: "home",
component: _import('HomeMain'), meta: { enter: "all" },
children:[ component: _import("HomeMain"),
// { children: [
// path: "", // {
// name:'HomeChil', // path: "",
// redirect: "/home/homePage" // name:'HomeChil',
// }, // redirect: "/home/homePage"
{ // },
path:'tools', {
name:'tools', path: "tools",
meta:{enter:'all',}, name: "tools",
component: _import_custom('HomeView/Tools.vue'), meta: { enter: "all" },
},{ component: _import_custom("HomeView/Tools.vue"),
path:'homePage', },
name:'homePage', {
meta:{enter:'all',}, path: "homePage",
component: _import_custom('HomeView/HomeView.vue'), name: "homePage",
},{ meta: { enter: "all" },
path:'library', component: _import_custom("HomeView/HomeView.vue"),
name:'library', },
meta:{enter:'all',}, {
component: _import_custom('HomeView/library.vue'), path: "library",
},{ name: "library",
path:'history', meta: { enter: "all" },
name:'history', component: _import_custom("HomeView/library.vue"),
meta:{enter:'all',}, },
component: _import_custom('HomeView/history.vue'), {
},{ path: "history",
path:'works', name: "history",
name:'works', meta: { enter: "all" },
meta:{enter:'all',}, component: _import_custom("HomeView/history.vue"),
component: _import_custom('HomeView/Works.vue'), },
},{ {
path:'events', path: "works",
name:'events', name: "works",
meta:{enter:'all',}, meta: { enter: "all" },
component: _import_custom('HomeView/Events.vue'), component: _import_custom("HomeView/Works.vue"),
},{ },
path:'cloud', {
name:'cloud', path: "events",
meta:{enter:'all',}, name: "events",
component: _import_custom('HomeView/cloudGeneration.vue'), meta: { enter: "all" },
},{ component: _import_custom("HomeView/Events.vue"),
path:'eventsDetail', },
name:'eventsDetail', {
meta:{enter:'all',}, path: "cloud",
component: _import_component('Events/eventsDetail.vue'), name: "cloud",
},{ meta: { enter: "all" },
path:'account', component: _import_custom("HomeView/cloudGeneration.vue"),
name:'account', },
meta:{enter:'all',}, {
component: _import_component('Account/account.vue'), path: "eventsDetail",
children:[ name: "eventsDetail",
{ meta: { enter: "all" },
path: "", component: _import_component("Events/eventsDetail.vue"),
name:'accountChil', },
meta:{enter:'all',}, {
redirect: "/home/account/frontPage" path: "account",
}, name: "account",
{ meta: { enter: "all" },
path:'frontPage', component: _import_component("Account/account.vue"),
name:'frontPage', children: [
meta:{enter:'all',}, {
component: _import_component('Account/frontPage.vue'), path: "",
}, name: "accountChil",
{ meta: { enter: "all" },
path:'accountMessage', redirect: "/home/account/frontPage",
name:'accountMessage', },
meta:{enter:'all',}, {
component: _import_component('Account/accountMessage.vue'), path: "frontPage",
}, name: "frontPage",
{ meta: { enter: "all" },
path:'accountFollowFans', component: _import_component("Account/frontPage.vue"),
name:'accountFollowFans', },
meta:{enter:'all',}, {
component: _import_component('Account/accountFollowFans.vue'), path: "accountMessage",
} name: "accountMessage",
] meta: { enter: "all" },
},{ component: _import_component("Account/accountMessage.vue"),
path:'otherUsers', },
name:'otherUsers', {
meta:{enter:'all',}, path: "accountFollowFans",
component: _import_component('Account/otherUsers.vue'), name: "accountFollowFans",
} meta: { enter: "all" },
] component: _import_component("Account/accountFollowFans.vue"),
}, },
{ ],
path: '/Square', },
name: "HomeRecommend", {
meta:{enter:'all',}, path: "otherUsers",
component: _import('HomeRecommend'), name: "otherUsers",
}, meta: { enter: "all" },
{ component: _import_component("Account/otherUsers.vue"),
path: '/administrator', },
name: 'administrator', ],
meta:{enter:3,}, },
component: _import('Administrator'), {
children:[ path: "/Square",
name: "HomeRecommend",
{ meta: { enter: "all" },
path:'allUser', component: _import("HomeRecommend"),
name:'allUser', },
meta:{enter:3,}, {
component: _import_component('Administrator/allUser.vue'), path: "/administrator",
}, name: "administrator",
{ meta: { enter: 3 },
path:'coupons', component: _import("Administrator"),
name:'coupons', children: [
meta:{enter:3,}, {
component: _import_component('Administrator/coupons/index.vue'), path: "allUser",
}, name: "allUser",
{ meta: { enter: 3 },
path:'testClickData', component: _import_component("Administrator/allUser.vue"),
name:'testClickData', },
meta:{enter:3,}, {
component: _import_component('Administrator/TestClickData.vue'), path: "coupons",
}, name: "coupons",
{ meta: { enter: 3 },
path:'trialApproval', component: _import_component("Administrator/coupons/index.vue"),
name:'trialApproval', },
meta:{enter:3,}, {
component: _import_component('Administrator/trialApproval.vue'), path: "testClickData",
},{ name: "testClickData",
path:'questionnaire', meta: { enter: 3 },
name:'questionnaire', component: _import_component("Administrator/TestClickData.vue"),
meta:{enter:3,}, },
component: _import_component('Administrator/questionnaire.vue'), {
},{ path: "trialApproval",
path:'recentActiveChart', name: "trialApproval",
name:'recentActiveChart', meta: { enter: 3 },
meta:{enter:3,}, component: _import_component("Administrator/trialApproval.vue"),
component: _import_component('Administrator/recentActiveChart.vue'), },
},{ {
path:'recentActiveUser', path: "questionnaire",
name:'recentActiveUser', name: "questionnaire",
meta:{enter:3,}, meta: { enter: 3 },
component: _import_component('Administrator/recentActiveUser.vue'), component: _import_component("Administrator/questionnaire.vue"),
},{ },
path:'recentActiveUserChart', {
name:'recentActiveUserChart', path: "recentActiveChart",
meta:{enter:3,}, name: "recentActiveChart",
component: _import_component('Administrator/recentActiveUserChart.vue'), meta: { enter: 3 },
},{ component: _import_component("Administrator/recentActiveChart.vue"),
path:'recentNewUser', },
name:'recentNewUser', {
meta:{enter:3,}, path: "recentActiveUser",
component: _import_component('Administrator/recentNewUser.vue'), name: "recentActiveUser",
},{ meta: { enter: 3 },
path:'recentNewUserChart', component: _import_component("Administrator/recentActiveUser.vue"),
name:'recentNewUserChart', },
meta:{enter:3,}, {
component: _import_component('Administrator/recentNewUserChart.vue'), path: "recentActiveUserChart",
},{ name: "recentActiveUserChart",
path:'trialUserCountry', meta: { enter: 3 },
name:'trialUserCountry', component: _import_component("Administrator/recentActiveUserChart.vue"),
meta:{enter:3,}, },
component: _import_component('Administrator/trialUserCountry.vue'), {
},{ path: "recentNewUser",
path:'trialUserConversionRateChart', name: "recentNewUser",
name:'trialUserConversionRateChart', meta: { enter: 3 },
meta:{enter:3,}, component: _import_component("Administrator/recentNewUser.vue"),
component: _import_component('Administrator/trialUserConversionRateChart.vue'), },
},{ {
path:'trialAllUser', path: "recentNewUserChart",
name:'trialAllUser', name: "recentNewUserChart",
meta:{enter:3,}, meta: { enter: 3 },
component: _import_component('Administrator/trialAllUser.vue'), component: _import_component("Administrator/recentNewUserChart.vue"),
},{ },
path:'affiliateAudit', {
name:'affiliateAudit', path: "trialUserCountry",
meta:{enter:3,}, name: "trialUserCountry",
component: _import_component('Administrator/affiliate/affiliateAudit.vue'), meta: { enter: 3 },
},{ component: _import_component("Administrator/trialUserCountry.vue"),
path:'TransactionTable', },
name:'TransactionTable', {
meta:{enter:3,}, path: "trialUserConversionRateChart",
component: _import_component('Administrator/Transaction/TransactionTable.vue'), name: "trialUserConversionRateChart",
},{ meta: { enter: 3 },
path:'organization', component: _import_component(
name:'organization', "Administrator/trialUserConversionRateChart.vue"
meta:{enter:3,}, ),
component: _import_component('Administrator/organization/organization.vue'), },
}, {
//企业版教育管理员页面 path: "trialAllUser",
{ name: "trialAllUser",
path:'allUserSE', meta: { enter: 3 },
name:'allUserSE', component: _import_component("Administrator/trialAllUser.vue"),
meta:{enter:3,}, },
component: _import_component('Administrator/SE/allUser/index.vue'), {
}, path: "affiliateAudit",
{ name: "affiliateAudit",
path:'testClickDataSE', meta: { enter: 3 },
name:'testClickDataSE', component: _import_component(
meta:{enter:3,}, "Administrator/affiliate/affiliateAudit.vue"
component: _import_component('Administrator/SE/designDetailList/index.vue'), ),
}, },
{ {
path:'generateFrequencySE', path: "TransactionTable",
name:'generateFrequencySE', name: "TransactionTable",
meta:{enter:3,}, meta: { enter: 3 },
component: _import_component('Administrator/SE/getGenerateFrequency/index.vue'), component: _import_component(
}, "Administrator/Transaction/TransactionTable.vue"
] ),
}, },
{ {
path: '/paySucceed', path: "organization",
name: 'paySucceed', name: "organization",
meta:{ meta: { enter: 3 },
enter:'all', component: _import_component(
}, "Administrator/organization/organization.vue"
component: _import('paySucceed') ),
}, },
{ //企业版教育管理员页面
path: '/affiliate', {
name: 'affiliate', path: "allUserSE",
meta:{ name: "allUserSE",
enter:2, meta: { enter: 3 },
}, component: _import_component("Administrator/SE/allUser/index.vue"),
component: _import('affiliate/affiliatePage'), },
children:[ {
{ path: "testClickDataSE",
path: "/affiliate", name: "testClickDataSE",
name:'affiliateHome', meta: { enter: 3 },
meta:{ component: _import_component(
enter:2, "Administrator/SE/designDetailList/index.vue"
}, ),
component: _import_component('affiliate/home'), },
}, {
] path: "generateFrequencySE",
},{ name: "generateFrequencySE",
path: '/affiliateRegister', meta: { enter: 3 },
name: 'affiliateRegister', component: _import_component(
meta:{ "Administrator/SE/getGenerateFrequency/index.vue"
enter:'all', ),
}, },
component: _import('affiliate/affiliateRegister'), ],
}, },
{ {
path: '/setIdentification', path: "/paySucceed",
name: 'setIdentification', name: "paySucceed",
meta:{ meta: {
enter:'all', enter: "all",
}, },
component: _import('setIdentification') component: _import("paySucceed"),
}, },
{ {
path: '/feedbackSurvey', path: "/affiliate",
name: 'feedbackSurvey', name: "affiliate",
meta:{ meta: {
enter:'all', enter: 2,
}, },
component: _import('feedbackSurvey'), component: _import("affiliate/affiliatePage"),
}, children: [
{ {
path: '/feedbackSurveyCN', path: "/affiliate",
name: 'feedbackSurveyCN', name: "affiliateHome",
meta:{ meta: {
enter:'all', enter: 2,
}, },
component: _import('feedbackSurveyCN'), component: _import_component("affiliate/home"),
}, },
{ ],
path: '/404', },
name: '404', {
meta:{ path: "/affiliateRegister",
enter:'all', name: "affiliateRegister",
}, meta: {
component: _import('404') enter: "all",
}, },
{ component: _import("affiliate/affiliateRegister"),
path: "/:catchAll(.*)", },
redirect: "/404", {
}, path: "/setIdentification",
name: "setIdentification",
] meta: {
enter: "all",
},
component: _import("setIdentification"),
},
{
path: "/feedbackSurvey",
name: "feedbackSurvey",
meta: {
enter: "all",
},
component: _import("feedbackSurvey"),
},
{
path: "/feedbackSurveyCN",
name: "feedbackSurveyCN",
meta: {
enter: "all",
},
component: _import("feedbackSurveyCN"),
},
{
path: "/404",
name: "404",
meta: {
enter: "all",
},
component: _import("404"),
},
{
path: "/:catchAll(.*)",
redirect: "/404",
},
];
const router = createRouter({ const router = createRouter({
history: createWebHistory(process.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
// history: createWebHashHistory(), // history: createWebHashHistory(),
routes routes,
}) });
// 刷新保存数据- // 刷新保存数据-
let state:any = store.state let state: any = store.state;
window.addEventListener("beforeunload", (e) => { window.addEventListener("beforeunload", (e) => {
localStorage.setItem( localStorage.setItem(
"vuex_setUserDetail", "vuex_setUserDetail",
JSON.stringify(state.UserHabit.userDetail) JSON.stringify(state.UserHabit.userDetail)
); );
}); });
var vuex_setUserDetail:any = localStorage.getItem("vuex_setUserDetail"); var vuex_setUserDetail: any = localStorage.getItem("vuex_setUserDetail");
if (vuex_setUserDetail) { if (vuex_setUserDetail) {
if(JSON.parse(vuex_setUserDetail).email != '-------------'){ if (JSON.parse(vuex_setUserDetail).email != "-------------") {
store.commit("setUserDetail", JSON.parse(vuex_setUserDetail)); store.commit("setUserDetail", JSON.parse(vuex_setUserDetail));
} }
// localStorage.removeItem("vuex_setUserDetail"); // localStorage.removeItem("vuex_setUserDetail");
} }
let setMurmur = (id:any)=> { let setMurmur = (id: any) => {
let murmurStr: any = localStorage.getItem('murmurStr') let murmurStr: any = localStorage.getItem("murmurStr");
// let isSxis = false // let isSxis = false
let data = { let data = {
browserIdentifiers: murmurStr, browserIdentifiers: murmurStr,
id:id id: id,
} };
if(data.id){ if (data.id) {
Https.axiosPost(Https.httpUrls.noLoginRequired, data) Https.axiosPost(Https.httpUrls.noLoginRequired, data)
.then((rv) => { .then((rv) => {
let isTest = rv.systemUser == 3 ? true : false let isTest = rv.systemUser == 3 ? true : false;
let isBeginner = rv.isBeginner == 1 ? true : false let isBeginner = rv.isBeginner == 1 ? true : false;
setCookie("isMurmur", true); setCookie("isMurmur", true);
setCookie("token", rv.token); setCookie("token", rv.token);
setCookie("isTest", isTest); setCookie("isTest", isTest);
setCookie("isBeginner", isBeginner); setCookie("isBeginner", isBeginner);
setCookie("isBeginnerNum", 0);//从第一步开始,机器人开始的话就是从第二部开始 setCookie("isBeginnerNum", 0); //从第一步开始,机器人开始的话就是从第二部开始
setCookie("userInfo", JSON.stringify(rv)); setCookie("userInfo", JSON.stringify(rv));
let userid = { let userid = {
ueserId:rv.userId, ueserId: rv.userId,
systemUser:rv.systemUser systemUser: rv.systemUser,
} };
store.commit("upUserDetail", userid); store.commit("upUserDetail", userid);
sessionStorage.setItem('isTimeOne', JSON.stringify(false));//是否需要公告 提示 弹窗 sessionStorage.setItem("isTimeOne", JSON.stringify(false)); //是否需要公告 提示 弹窗
let randomNum: any = Math.floor(Math.random() * 9000000000000000) + 1000000000000000; let randomNum: any =
sessionStorage.setItem('sessionId', randomNum); Math.floor(Math.random() * 9000000000000000) + 1000000000000000;
router.push("/home"); sessionStorage.setItem("sessionId", randomNum);
router.push("/home");
}) })
.catch((res) => { .catch((res) => {
// router.push('/Square') // router.push('/Square')
}); });
} }
} };
const setViewsIncrease = (value:any)=>{ const setViewsIncrease = (value: any) => {
sessionStorage.setItem('affiliateRef', value); sessionStorage.setItem("affiliateRef", value);
let data = { let data = {
id:value id: value,
} };
Https.axiosGet(Https.httpUrls.viewsIncrease,{params:data}).then((rv)=>{}) Https.axiosGet(Https.httpUrls.viewsIncrease, { params: data }).then(
} (rv) => {}
let upgradeList = ['/feedbackSurvey','/feedbackSurveyCN','emailVerify']//指定页面系统维护也可以访问 );
router.beforeEach((to:any, from, next) => { };
// 系统维护 let upgradeList = ["/feedbackSurvey", "/feedbackSurveyCN", "emailVerify"]; //指定页面系统维护也可以访问
// const toName = to.name === 'upgrade'; router.beforeEach((to: any, from, next) => {
// if(upgradeList.indexOf(to.path) > -1){ // 系统维护
// next(); // const toName = to.name === 'upgrade';
// }else{ // if(upgradeList.indexOf(to.path) > -1){
// if (toName) { // next();
// next(); // }else{
// } else { // if (toName) {
// next({ name: 'upgrade' }); // next();
// } // } else {
// } // next({ name: 'upgrade' });
// return // }
// 机房用户 // }
let herfData = window.location.search.substring(1) // return
if(herfData.split('=')[0] == 'noLogin' && to.name != 'homePage'){ // 机房用户
setMurmur(herfData.split('=')[1]) let herfData = window.location.search.substring(1);
return if (herfData.split("=")[0] == "noLogin" && to.name != "homePage") {
} setMurmur(herfData.split("=")[1]);
let affiliateRef = sessionStorage.getItem('affiliateRef'); return;
if(to.query.order)sessionStorage.setItem('orderId', to.query.order);//记录是否点击跳转订单链接 }
if(to.query.ref && affiliateRef != to.query.ref)setViewsIncrease(to.query.ref) let affiliateRef = sessionStorage.getItem("affiliateRef");
if (to.query.order) sessionStorage.setItem("orderId", to.query.order); //记录是否点击跳转订单链接
if(to.meta.enter == 'all'){ if (to.query.ref && affiliateRef != to.query.ref)
next(); setViewsIncrease(to.query.ref);
}else if(state.UserHabit.userDetail.systemList.indexOf(to.meta.enter) > -1){
next()
}else{
next('/404');
}
// if(systemUser == 0){//游客用户只能进入这两个页面
if (to.meta.enter == "all") {
next();
} else if (
state.UserHabit.userDetail.systemList.indexOf(to.meta.enter) > -1
) {
next();
} else {
next("/404");
}
// if(systemUser == 0){//游客用户只能进入这两个页面
}); });
export default router export default router;

57
src/shims-vue.d.ts vendored
View File

@@ -1,21 +1,38 @@
/* eslint-disable */ /// <reference types="vite/client" />
declare module '*.vue' {
import type { DefineComponent } from 'vue' declare module "*.vue" {
const component: DefineComponent<{}, {}, any> import type { DefineComponent } from "vue";
export default component const component: DefineComponent<{}, {}, any>;
export default component;
}
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string;
readonly VITE_APP_BASE_URL: string;
readonly BASE_URL: string;
// 更多环境变量...
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}
// 第三方库声明
declare module "@ans1998/vue3-color";
declare module "three";
declare module "three/examples/jsm/controls/OrbitControls";
declare module "three/examples/jsm/postprocessing/EffectComposer";
declare module "three/examples/jsm/postprocessing/RenderPass";
declare module "three/examples/jsm/postprocessing/OutlinePass";
// 全局变量声明
declare global {
var ColorThief: any;
var EyeDropper: any;
interface Window {
ColorThief: any;
EyeDropper: any;
google: any;
gc?: () => void;
}
} }
// declare module '@vue/runtime-core' {
// //全局this注册方法或者公用属性
// interface ComponentCustomProperties {
// // 调整成你要使用到的属性,在这里进行注册
// // GO: any
// }
// }
declare module '@ans1998/vue3-color'
declare var ColorThief: any;
declare var EyeDropper: any;
declare module 'three'
declare module 'OrbitControls'
declare module 'EffectComposer'
declare module 'RenderPass'
declare module 'OutlinePass'

View File

@@ -1,49 +1,53 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "esnext", "target": "ES2020",
"module": "esnext", "useDefineForClassFields": true,
"strict": true, "lib": [
"jsx": "preserve", "ES2020",
"moduleResolution": "node", "DOM",
"experimentalDecorators": true, "DOM.Iterable"
"skipLibCheck": true, ],
"esModuleInterop": true, "module": "ESNext",
"allowSyntheticDefaultImports": true, "skipLibCheck": true,
"forceConsistentCasingInFileNames": true, /* Bundler mode */
"useDefineForClassFields": true, "moduleResolution": "bundler",
"resolveJsonModule": true,//引入json文件 "allowImportingTsExtensions": true,
"esModuleInterop": true,//引入json文件 "resolveJsonModule": true,
"sourceMap": true, "isolatedModules": true,
"allowJs": true, //编译时允许有js "noEmit": true,
"baseUrl": ".", "jsx": "preserve",
"outDir": "./", /* Linting */
"types": [ "strict": true,
"webpack-env" "noUnusedLocals": false,
"noUnusedParameters": false,
"noFallthroughCasesInSwitch": true,
/* Path mapping */
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
]
},
/* Additional options for Vue 3 */
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true
},
"include": [
"src/**/*.ts",
"src/**/*.d.ts",
"src/**/*.tsx",
"src/**/*.vue"
], ],
"paths": { "exclude": [
"@/*": [ "node_modules",
"src/*" "dist"
], ],
"three/ *": ["three/addons/postprocessing/*"] "references": [
}, {
"lib": [ "path": "./tsconfig.node.json"
"esnext", }
"dom",
"dom.iterable",
"scripthost"
] ]
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx",
"src/**/*.js",
"src/**/*.svg",
"src/**/*.gif",
],
"exclude": [
"node_modules"
]
} }

12
tsconfig.node.json Normal file
View File

@@ -0,0 +1,12 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": [
"vite.config.js"
]
}

View File

@@ -97,6 +97,7 @@ export default defineConfig(({ mode }) => {
assetsDir: "assets", assetsDir: "assets",
// 分包策略 // 分包策略
rollupOptions: { rollupOptions: {
input: path.resolve(__dirname, "public/index.html"),
output: { output: {
manualChunks: { manualChunks: {
vendor: ["vue", "vue-router", "vuex"], vendor: ["vue", "vue-router", "vuex"],