ljc 4 kuukautta sitten
commit
595f730f54
100 muutettua tiedostoa jossa 1908 lisäystä ja 0 poistoa
  1. 13 0
      .editorconfig
  2. 7 0
      .env
  3. 6 0
      .env.development
  4. 6 0
      .env.production
  5. 8 0
      .env.test
  6. 20 0
      .eslintignore
  7. 79 0
      .eslintrc.js
  8. 25 0
      .gitignore
  9. 9 0
      .prettierignore
  10. 20 0
      .prettierrc.json
  11. 0 0
      README.md
  12. 46 0
      index.html
  13. 111 0
      package.json
  14. 0 0
      public/css/element-ui.css
  15. 0 0
      public/css/element@2.12.2.css
  16. BIN
      public/css/fonts/element-icons.woff
  17. 153 0
      public/css/index.css
  18. 76 0
      public/css/preloading.css
  19. BIN
      public/favicon.ico
  20. 38 0
      public/index.html
  21. 7 0
      shims-vue.d.ts
  22. 56 0
      src/App.vue
  23. 44 0
      src/api/errorCodeType.ts
  24. 62 0
      src/api/request.ts
  25. 9 0
      src/api/user.ts
  26. BIN
      src/assets/403_images/403.png
  27. BIN
      src/assets/403_images/403_cloud.png
  28. BIN
      src/assets/404_images/404.png
  29. BIN
      src/assets/404_images/404_bg.png
  30. BIN
      src/assets/404_images/404_cloud.png
  31. 124 0
      src/assets/css/default.scss
  32. BIN
      src/assets/iconfont/iconfont.eot
  33. 0 0
      src/assets/iconfont/iconfont.js
  34. 758 0
      src/assets/iconfont/iconfont.json
  35. 3 0
      src/assets/iconfont/iconfont.scss
  36. 34 0
      src/assets/iconfont/iconfont.svg
  37. BIN
      src/assets/iconfont/iconfont.ttf
  38. BIN
      src/assets/iconfont/iconfont.woff
  39. BIN
      src/assets/iconfont/iconfont.woff2
  40. BIN
      src/assets/image/allow.png
  41. BIN
      src/assets/image/avatar.png
  42. BIN
      src/assets/image/berserk.jpg
  43. BIN
      src/assets/image/card/globalOrder/AUD.png
  44. BIN
      src/assets/image/card/globalOrder/BDT.png
  45. BIN
      src/assets/image/card/globalOrder/CAD.png
  46. BIN
      src/assets/image/card/globalOrder/CNY.png
  47. BIN
      src/assets/image/card/globalOrder/EUR.png
  48. BIN
      src/assets/image/card/globalOrder/GBP.png
  49. BIN
      src/assets/image/card/globalOrder/HKD.png
  50. BIN
      src/assets/image/card/globalOrder/IDR.png
  51. BIN
      src/assets/image/card/globalOrder/INR.png
  52. BIN
      src/assets/image/card/globalOrder/JPY.png
  53. BIN
      src/assets/image/card/globalOrder/KRW.png
  54. BIN
      src/assets/image/card/globalOrder/MNT.png
  55. BIN
      src/assets/image/card/globalOrder/MYR.png
  56. BIN
      src/assets/image/card/globalOrder/NZD.png
  57. BIN
      src/assets/image/card/globalOrder/PHP.png
  58. BIN
      src/assets/image/card/globalOrder/SGD.png
  59. BIN
      src/assets/image/card/globalOrder/THB.png
  60. BIN
      src/assets/image/card/globalOrder/TWD.png
  61. BIN
      src/assets/image/card/globalOrder/USD.png
  62. BIN
      src/assets/image/card/globalOrder/VND.png
  63. BIN
      src/assets/image/card/globalOrder/icon-USD.png
  64. 18 0
      src/assets/image/card/globalOrder/icon-arrow.svg
  65. 6 0
      src/assets/image/card/globalOrder/icon-copy.svg
  66. BIN
      src/assets/image/card/icon-visa.png
  67. BIN
      src/assets/image/center-inner1.png
  68. BIN
      src/assets/image/charts/1-1-bg.png
  69. BIN
      src/assets/image/circle-bg.png
  70. BIN
      src/assets/image/cro-avatar.jpg
  71. BIN
      src/assets/image/dashboard-profile-default.png
  72. BIN
      src/assets/image/login/CN.jpg
  73. BIN
      src/assets/image/login/EN.jpg
  74. BIN
      src/assets/image/login/admin_LOGO12.png
  75. BIN
      src/assets/image/login/qrcode-icon.png
  76. BIN
      src/assets/image/login/side-logo.png
  77. BIN
      src/assets/image/logo.png
  78. BIN
      src/assets/image/logo2.png
  79. 29 0
      src/assets/images/cwg-logo-01.svg
  80. BIN
      src/assets/images/cwg-logo.png
  81. BIN
      src/assets/images/lang_AR.jpg
  82. BIN
      src/assets/images/lang_CN.jpg
  83. BIN
      src/assets/images/lang_DE.jpg
  84. BIN
      src/assets/images/lang_EN.jpg
  85. BIN
      src/assets/images/lang_ES.jpg
  86. BIN
      src/assets/images/lang_FA.png
  87. BIN
      src/assets/images/lang_Indonesian.jpg
  88. BIN
      src/assets/images/lang_MS.jpg
  89. BIN
      src/assets/images/lang_PT.png
  90. BIN
      src/assets/images/lang_TH.jpg
  91. BIN
      src/assets/images/lang_TR.png
  92. BIN
      src/assets/images/lang_VN.jpg
  93. BIN
      src/assets/images/lang_ko.png
  94. BIN
      src/assets/images/login-bg.gif
  95. BIN
      src/assets/images/trust-pilot.png
  96. BIN
      src/assets/theme/fonts/element-icons.ttf
  97. BIN
      src/assets/theme/fonts/element-icons.woff
  98. 0 0
      src/assets/theme/index.scss
  99. 21 0
      src/components/BreadCrumb.vue
  100. 120 0
      src/components/CodeMirror/index.vue

+ 13 - 0
.editorconfig

@@ -0,0 +1,13 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+max_line_length = off
+trim_trailing_whitespace = false

+ 7 - 0
.env

@@ -0,0 +1,7 @@
+
+# port
+VITE_PORT = 8100
+
+
+VITE_APP_I18N_LOCALE=en
+VITE_APP_I18N_FALLBACK_LOCALE=en

+ 6 - 0
.env.development

@@ -0,0 +1,6 @@
+# 本地环境
+NODE_ENV = 'development'
+
+# 本地环境接口地址
+VITE_APP_BASE_API = '/api'
+VITE_APP_ENV = 'development'

+ 6 - 0
.env.production

@@ -0,0 +1,6 @@
+# 线上环境
+NODE_ENV = "production"
+
+# 线上环境接口地址
+VITE_APP_BASE_API = '/api'
+VITE_APP_ENV=production

+ 8 - 0
.env.test

@@ -0,0 +1,8 @@
+# 测试环境
+NODE_ENV = "test"
+
+
+# 测试环境接口地址
+VITE_APP_BASE_API = '/api'
+VITE_APP_ENV=test
+VITE_NODE_ENV=production

+ 20 - 0
.eslintignore

@@ -0,0 +1,20 @@
+
+*.sh
+node_modules
+*.css
+*.jpg
+*.jpeg
+*.png
+*.gif
+*.md
+*.woff
+*.ttf
+.vscode
+.idea
+dist
+/public
+/docs
+.husky
+.local
+/bin
+Dockerfile

+ 79 - 0
.eslintrc.js

@@ -0,0 +1,79 @@
+module.exports = {
+  env: {
+    browser: true,
+    es2021: true,
+    node: true,
+  },
+  extends: [
+    'plugin:vue/vue3-recommended',
+    'eslint:recommended',
+    'plugin:vue/vue3-essential',
+    'plugin:@typescript-eslint/recommended',
+    'plugin:prettier/recommended',
+  ],
+  parser: 'vue-eslint-parser',
+  parserOptions: {
+    ecmaVersion: 'latest',
+    parser: '@typescript-eslint/parser',
+    sourceType: 'module',
+    ecmaFeatures: {
+      jsx: true,
+    },
+  },
+  plugins: ['vue', '@typescript-eslint'],
+  globals: {
+    defineProps: 'readonly',
+    defineEmits: 'readonly',
+  },
+  rules: {
+    'no-console': 'off', // 禁止调用console对象的方法。
+    '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
+    'no-use-before-define': 'off',
+    '@typescript-eslint/no-use-before-define': 'off',
+    '@typescript-eslint/ban-ts-comment': 'off',
+    '@typescript-eslint/no-empty-function': ['off'], // 关闭空函数警告
+    '@typescript-eslint/no-inferrable-types': 'off', // 可以轻松推断的显式类型可能会增加不必要的冗长
+    '@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间
+    '@typescript-eslint/ban-types': 'off', // 禁止使用特定类型
+    'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
+    'vue/no-v-html': 'off', // 禁止使用 v-html
+    'no-undef': 'off',
+    'no-redeclare': 'off',
+    'no-self-assign': 'off',
+    'no-sparse-arrays': 'off',
+    'vue/valid-v-for': 'off',
+    'vue/no-unused-vars': 'off',
+    'vue/require-v-for-key': 'off',
+    'no-useless-escape': 'off',
+    'vue/require-explicit-emits': 'off',
+    'no-case-declarations': 'off', // 不允许在 case 子句中使用词法声明
+    //禁止非空断言非空断言是在变量后面添加一个感叹号(!),表示该变量一定存在,不会为 null 或 undefined
+    '@typescript-eslint/no-non-null-assertion': 'off',
+    'vue/require-prop-types': 'off',
+    '@typescript-eslint/no-this-alias': 'off',
+    'no-async-promise-executor': 'off',
+    'vue/no-template-shadow': 'off',
+    'vue/require-default-prop': 'off', // 此规则要求为每个 prop 为必填时,必须提供默认值
+    '@typescript-eslint/no-unused-vars': [
+      // // 禁止定义未使用的变量
+      'off',
+      {
+        argsIgnorePattern: '^_',
+        varsIgnorePattern: '^_',
+      },
+    ],
+    // Prettier 格式规则
+    'prettier/prettier': [
+      'error',
+      {
+        tabWidth: 2,
+        useTabs: false,
+        singleQuote: true,
+        semi: false,
+        trailingComma: 'es5',
+        bracketSpacing: true,
+        endOfLine: 'auto',
+      },
+    ],
+  },
+}

+ 25 - 0
.gitignore

@@ -0,0 +1,25 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist-ssr
+dist
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+package-lock.json

+ 9 - 0
.prettierignore

@@ -0,0 +1,9 @@
+/dist/*
+.local
+.output.js
+/node_modules/**
+
+**/*.svg
+**/*.sh
+
+/public/*

+ 20 - 0
.prettierrc.json

@@ -0,0 +1,20 @@
+{
+  "printWidth": 100,
+  "tabWidth": 2,
+  "useTabs": false,
+  "semi": false,
+  "singleQuote": true,
+  "trailingComma": "es5",
+  "bracketSpacing": true,
+  "arrowParens": "always",
+  "endOfLine": "auto",
+  "vueIndentScriptAndStyle": true,
+  "overrides": [
+    {
+      "files": "*.vue",
+      "options": {
+        "vueIndentScriptAndStyle": true
+      }
+    }
+  ]
+}

+ 0 - 0
README.md


+ 46 - 0
index.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <link rel="icon" href="/favicon.ico" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no"
+    />
+    <link href="/css/preloading.css" rel="stylesheet" type="text/css">
+    <title>CWGMarkets</title>
+  </head>
+  <body>
+  <noscript>
+    <strong>
+      We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
+      properly without JavaScript enabled. Please enable it to
+      continue.
+    </strong>
+  </noscript>
+  <div id="app">
+    <div
+      id="pre"
+      style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 100000; "
+    >
+      <div
+        style="background-color: rgba(0, 0, 0, .8); width: 100%; height: 100%;"
+      >
+        <div
+          style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);"
+        >
+          <div class="line-scale">
+            <div></div>
+            <div></div>
+            <div></div>
+            <div></div>
+            <div></div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>

+ 111 - 0
package.json

@@ -0,0 +1,111 @@
+{
+  "name": "vue-admin-perfect",
+  "private": true,
+  "version": "0.0.0",
+  "scripts": {
+    "dev": "vite",
+    "build:dev": "vite build --mode development",
+    "build:test": "vite build --mode test",
+    "build:prod": "vite build --mode production",
+    "commit": "git add -A && czg && git push",
+    "build": "vite build",
+    "preview": "vite preview",
+    "build:ts": "vue-tsc --noEmit --skipLibCheck && vite build",
+    "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx",
+    "lint:fix": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix",
+    "lint:prettier": "prettier --write  \"src/**/*.{js,json,tsx,css,less,scss,vue,html,md}\"",
+    "prepare": "husky install"
+  },
+  "dependencies": {
+    "@better-scroll/core": "^2.4.2",
+    "@vue/runtime-dom": "^3.5.24",
+    "@vueuse/core": "^9.13.0",
+    "axios": "^0.27.2",
+    "clipboard": "^2.0.10",
+    "codemirror": "^5.65.9",
+    "core-js": "^3.6.5",
+    "crypto-js": "^4.2.0",
+    "dayjs": "^1.11.4",
+    "echarts": "^5.3.1",
+    "element-plus": "^2.11.7",
+    "exceljs": "^4.3.0",
+    "file-saver": "^2.0.5",
+    "fuse.js": "^6.6.2",
+    "jszip": "^3.9.1",
+    "lodash": "4.17.23",
+    "lodash-es": "4.17.23",
+    "mavon-editor": "^2.10.4",
+    "md-editor-v3": "^1.11.3",
+    "nprogress": "^0.2.0",
+    "path-browserify": "^1.0.1",
+    "path-to-regexp": "^6.2.0",
+    "pinia": "^2.0.21",
+    "pinia-plugin-persistedstate": "^2.1.1",
+    "pinyin-pro": "^3.27.0",
+    "print-js": "^1.6.0",
+    "qrcodejs2": "^0.0.2",
+    "qrcodejs2-fix": "^0.0.1",
+    "raf": "^3.4.1",
+    "resize-observer-polyfill": "^1.5.1",
+    "sass": "^1.54.0",
+    "splitpanes": "^3.1.1",
+    "svg-sprite-loader": "^6.0.11",
+    "vue": "^3.2.39",
+    "vue-cropper": "^1.0.3",
+    "vue-cropperjs": "^5.0.0",
+    "vue-fuse": "^4.1.1",
+    "vue-i18n": "^11.1.12",
+    "vue-mugen-scroll": "^0.2.6",
+    "vue-qr": "^4.0.6",
+    "vue-router": "^4.1.6",
+    "vue-splitpane": "^1.0.6",
+    "vue3-text-clamp": "^0.1.1",
+    "vuedraggable": "^4.1.0",
+    "vuex": "^4.0.0-0",
+    "xlsx": "^0.18.5"
+  },
+  "devDependencies": {
+    "@element-plus/icons-vue": "^2.3.1",
+    "@typescript-eslint/eslint-plugin": "^5.32.0",
+    "@typescript-eslint/parser": "^5.32.0",
+    "@vitejs/plugin-vue": "^3.0.0",
+    "@vue/eslint-config-typescript": "^12.0.0",
+    "commitizen": "^4.2.5",
+    "consola": "^2.15.3",
+    "cz-git": "^1.3.12",
+    "czg": "^1.3.12",
+    "dart-sass": "^1.25.0",
+    "eslint": "^8.21.0",
+    "eslint-config-prettier": "^8.5.0",
+    "eslint-plugin-prettier": "^4.2.1",
+    "eslint-plugin-vue": "^9.3.0",
+    "fast-glob": "^3.2.11",
+    "husky": "^7.0.4",
+    "lint-staged": "^12.3.4",
+    "mrm": "^3.0.10",
+    "prettier": "^2.7.1",
+    "sass-loader": "^10.5.2",
+    "typescript": "^4.6.4",
+    "unplugin-auto-import": "^0.10.3",
+    "unplugin-vue-components": "^0.21.2",
+    "unplugin-vue-define-options": "^0.7.3",
+    "vite": "^3.0.0",
+    "vite-plugin-compression": "^0.5.1",
+    "vite-plugin-style-import": "^2.0.0",
+    "vite-plugin-svg-icons": "^2.0.1",
+    "vite-plugin-vue-setup-extend": "^0.4.0",
+    "vue-tsc": "^0.38.4"
+  },
+  "config": {
+    "commitizen": {
+      "path": "node_modules/cz-git"
+    }
+  },
+  "lint-staged": {
+    "src/**/*.{vue,js,ts,jsx,tsx}": [
+      "npm run lint:prettier",
+      "npm run lint:fix",
+      "git add ."
+    ]
+  }
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
public/css/element-ui.css


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
public/css/element@2.12.2.css


BIN
public/css/fonts/element-icons.woff


+ 153 - 0
public/css/index.css

@@ -0,0 +1,153 @@
+html,body{
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    margin: 0;
+    padding: 0;
+}
+.container{
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    overflow-y: auto;
+    box-sizing: border-box;
+}
+.Va-document{
+    width: 100%;
+    height: auto;
+    box-sizing: border-box;
+    font-size: 12px;
+}
+.Va-document .title-head{
+    width: 100%;
+    background-color: #EB3F57;
+    text-align: center;
+    line-height: 2.5;
+    color: #ffffff;
+}
+.Va-document .content-info{
+    width: 100%;
+    padding: 15px;
+    box-sizing: border-box;
+}
+.Va-document .content-info .only-head{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+}
+.Va-document .content-info .only-head .divider{
+    flex: 1;
+    height: 1px;
+    background-color: #C5C5C9;
+    margin: 0 5px;
+}
+.Va-document .content-info .my-form-item-label .des{
+    color: #949494;
+}
+.Va-document .content-info .avatar-uploader {
+    border: 1px dashed #C4C4C4;
+    margin: 10px;
+    width: 150px;
+    height: 80px;
+    line-height: 80px;
+    display: inline-block;
+    overflow: hidden;
+}
+.Va-document .content-info .avatar-uploader .el-upload {
+    width: 100%;
+    text-align: center;
+}
+div.menu-logo {
+    margin: 0 6px;
+    cursor: pointer;
+    user-select: none;
+}
+.menu-logo.chooseLang{
+    border: 1px solid #C5C5C9;
+    width: 130px;
+    margin-bottom: 10px;
+    text-align: center;
+}
+
+.s-btn{
+    background-color: #EB3F57;
+    border-color: #EB3F57;
+}
+.el-button--primary:active,.el-button:focus,.el-button--primary:hover{
+    background-color: #EB3F57;
+    border-color: #EB3F57;
+    opacity: 0.8;
+}
+.el-input__inner:focus{
+    border-color: #EB3F57;
+}
+
+.el-upload{
+    width: 100%;
+    height: 100%;
+}
+
+.avatar-uploaderOther.fileOther {
+    display: inline-block;
+    margin-bottom: 20px;
+}
+.avatar-uploaderOther.fileOthe .el-upload{
+    display: inline-block;
+}
+.avatar-uploaderOther.fileOthe .el-button--primary{
+
+}
+
+#files{
+    width: 150px;
+    height: 80px;
+    margin-bottom: 20px;
+    display: flex;
+}
+#files .options{
+    flex: 1;
+    padding: 8px;
+    box-sizing: border-box;
+    display: flex;
+    justify-content: center;
+    align-content: center;
+    align-items: center;
+}
+#files .options .el-button{
+    min-width: 100px;
+    max-height: 30px;
+    padding: 0;
+    line-height: 30px;
+    background-color: #EB3F57;
+}
+.avatar-uploaderOther.fileOther .el-button--primary{
+    background-color: #EB3F57!important;
+    border-color: #EB3F57!important;
+}
+#files .options .el-button span,a{
+    display: inline-block;
+    height: 100%;
+    width: 100%;
+}
+
+.avatar-uploaderOther.fileOthers {
+    display: block;
+    width: 150px;
+    height: 80px;
+    border: 1px dashed #C5C5C9;
+}
+.avatar-uploaderOther.fileOthers .el-upload{
+    display: inline-block;
+    width: 100%;
+    height: 100%;
+}
+
+.global-fit {
+    color: #4CB01A;
+}
+.pwd-resetTrading li{
+    list-style-type: disc;
+    /*height: 20px;*/
+    line-height: 20px;
+    color: #979797;
+}

+ 76 - 0
public/css/preloading.css

@@ -0,0 +1,76 @@
+.line-scale-party>div,
+.line-scale-pulse-out-rapid>div,
+.line-scale-pulse-out>div,
+.line-scale>div {
+  width: 4px;
+  height: 35px;
+  display: inline-block
+}
+
+.line-scale-party>div,
+.line-scale-pulse-out-rapid>div,
+.line-scale-pulse-out>div,
+.line-scale>div,
+.line-spin-fade-loader>div {
+  border-radius: 2px;
+  margin: 2px;
+  background-color: #fff
+}
+
+@-webkit-keyframes line-scale {
+
+  0%,
+  100% {
+    -webkit-transform: scaley(1);
+    transform: scaley(1)
+  }
+
+  50% {
+    -webkit-transform: scaley(.4);
+    transform: scaley(.4)
+  }
+}
+
+@keyframes line-scale {
+
+  0%,
+  100% {
+    -webkit-transform: scaley(1);
+    transform: scaley(1)
+  }
+
+  50% {
+    -webkit-transform: scaley(.4);
+    transform: scaley(.4)
+  }
+}
+
+.line-scale>div:nth-child(1) {
+  -webkit-animation: line-scale 1s -.4s infinite cubic-bezier(.2, .68, .18, 1.08);
+  animation: line-scale 1s -.4s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(2) {
+  -webkit-animation: line-scale 1s -.3s infinite cubic-bezier(.2, .68, .18, 1.08);
+  animation: line-scale 1s -.3s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(3) {
+  -webkit-animation: line-scale 1s -.2s infinite cubic-bezier(.2, .68, .18, 1.08);
+  animation: line-scale 1s -.2s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(4) {
+  -webkit-animation: line-scale 1s -.1s infinite cubic-bezier(.2, .68, .18, 1.08);
+  animation: line-scale 1s -.1s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div:nth-child(5) {
+  -webkit-animation: line-scale 1s 0s infinite cubic-bezier(.2, .68, .18, 1.08);
+  animation: line-scale 1s 0s infinite cubic-bezier(.2, .68, .18, 1.08)
+}
+
+.line-scale>div {
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both
+}

BIN
public/favicon.ico


+ 38 - 0
public/index.html

@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+  <link href="/css/preloading.css" rel="stylesheet" type="text/css">
+  <title>CWG-管理系统</title>
+
+</head>
+<body>
+<noscript>
+  <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
+    Please enable it to continue.</strong>
+</noscript>
+
+<div id="app">
+  <!-- preloadidng -->
+  <div id="pre" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 100000; ">
+    <div style="background-color: rgba(0, 0, 0, .8); width: 100%; height: 100%;">
+      <div style="position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);">
+        <div class="line-scale">
+          <div></div>
+          <div></div>
+          <div></div>
+          <div></div>
+          <div></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<!-- built files will be auto injected -->
+
+
+</body>
+</html>

+ 7 - 0
shims-vue.d.ts

@@ -0,0 +1,7 @@
+/// <reference types="vite/client" />
+
+declare module '*.vue' {
+  import type { DefineComponent } from 'vue'
+  const component: DefineComponent<{}, {}, any>
+  export default component
+}

+ 56 - 0
src/App.vue

@@ -0,0 +1,56 @@
+<template>
+  <el-config-provider :size="globalComSize" :locale="currentLocale">
+    <router-view v-if="isRouterAlive"></router-view>
+  </el-config-provider>
+</template>
+
+<script lang="ts" setup>
+  import { computed, provide, nextTick, onMounted, ref, getCurrentInstance } from 'vue'
+  import zhCn from 'element-plus/es/locale/lang/zh-cn'
+  import en from 'element-plus/es/locale/lang/en'
+  import { useSettingStore } from '@/store/modules/setting'
+  import Pigeon from './lib/pigeon.js'
+  import Session from './lib/session.js'
+  import { useStore } from 'vuex'
+
+  const store = useStore()
+  // 切换语言
+  const currentLocale = computed(() => {
+    return store.state.home.locale === 'cn' ? zhCn : en
+  })
+
+  let isRouterAlive = ref(true)
+  const SettingStore = useSettingStore()
+  // 配置全局组件大小
+  const globalComSize = computed((): string => SettingStore.themeConfig.globalComSize)
+  const reload = () => {
+    isRouterAlive.value = false
+    nextTick(function () {
+      isRouterAlive.value = true
+    })
+  }
+  const { proxy } = getCurrentInstance()
+  // 注册全局弹窗组件
+  const pigeon = new Pigeon()
+  provide('reload', reload)
+  provide('pigeon', pigeon)
+  provide('session', Session)
+
+  onMounted(() => {
+    window.document.documentElement.setAttribute('data-theme', 'theme1')
+  })
+</script>
+
+<style lang="scss">
+  #app {
+    font-family: robots, 'Avenir', Helvetica, Arial, sans-serif;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    text-align: center;
+    width: 100%;
+    height: 100%;
+    // min-width: 1080px;
+    overflow: hidden;
+    overflow-x: auto;
+  }
+</style>

+ 44 - 0
src/api/errorCodeType.ts

@@ -0,0 +1,44 @@
+export const errorCodeType = function (code: string): string {
+  let errMessage = '未知错误'
+  switch (code) {
+    case 400:
+      errMessage = '请求失败!请您稍后重试'
+      break
+    case 401:
+      errMessage = '未授权,请重新登录'
+      break
+    case 403:
+      errMessage = '当前账号无权限访问!'
+      break
+    case 404:
+      errMessage = '你所访问的资源不存在!'
+      break
+    case 405:
+      errMessage = '请求方式错误!请您稍后重试'
+      break
+    case 408:
+      errMessage = '请求超时!请您稍后重试'
+      break
+    case 500:
+      errMessage = '服务器端出错'
+      break
+    case 501:
+      errMessage = '网络未实现'
+      break
+    case 502:
+      errMessage = '网络错误'
+      break
+    case 503:
+      errMessage = '服务不可用'
+      break
+    case 504:
+      errMessage = '网络超时'
+      break
+    case 505:
+      errMessage = 'http版本不支持该请求'
+      break
+    default:
+      errMessage = `其他连接错误 --${code}`
+  }
+  return errMessage
+}

+ 62 - 0
src/api/request.ts

@@ -0,0 +1,62 @@
+import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
+import { ElMessage } from 'element-plus'
+import { useUserStore } from '@/store/modules/user'
+// 创建axios实例 进行基本参数配置
+const service = axios.create({
+  // 默认请求地址,根据环境的不同可在.env 文件中进行修改
+  baseURL: import.meta.env.VITE_APP_BASE_API,
+  // 设置接口访问超时时间
+  timeout: 3000000, // request timeout,
+  // 跨域时候允许携带凭证
+  withCredentials: true,
+})
+
+//  request interceptor 接口请求拦截
+service.interceptors.request.use(
+  (config: AxiosRequestConfig) => {
+    /**
+     * 用户登录之后获取服务端返回的token,后面每次请求都在请求头中带上token进行JWT校验
+     * token 存储在本地储存中(storage)、vuex、pinia
+     */
+    const userStore = useUserStore()
+    const token: string = userStore.token
+    // 自定义请求头
+    if (token) {
+      config.headers['Authorization'] = token
+    }
+    return config
+  },
+  (error: AxiosError) => {
+    // 请求错误,这里可以用全局提示框进行提示
+    return Promise.reject(error)
+  }
+)
+
+//  response interceptor 接口响应拦截
+service.interceptors.response.use(
+  (response: AxiosResponse) => {
+    // 直接返回res,当然你也可以只返回res.data
+    // 系统如果有自定义code也可以在这里处理
+    return response
+  },
+  (error: AxiosError) => {
+    return Promise.reject(error)
+  }
+)
+
+// /**
+//  * @description 显示错误消息
+//  * opt 传入参数
+//  * err 错误信息
+//  * type 消息类型
+//  * duration 消息持续时间
+//  */
+// function showErrMessage(opt, err, type: any = 'error', duration = 5000) {
+//   ElMessage({
+//     message: err.msg,
+//     type: type,
+//     duration: duration,
+//   });
+// }
+
+export default service

+ 9 - 0
src/api/user.ts

@@ -0,0 +1,9 @@
+import request from './request'
+
+export function login(data) {
+  return request({
+    url: '/vue-element-perfect/user/login',
+    method: 'post',
+    data,
+  })
+}

BIN
src/assets/403_images/403.png


BIN
src/assets/403_images/403_cloud.png


BIN
src/assets/404_images/404.png


BIN
src/assets/404_images/404_bg.png


BIN
src/assets/404_images/404_cloud.png


+ 124 - 0
src/assets/css/default.scss

@@ -0,0 +1,124 @@
+/* component style */
+.vue-slider-disabled {
+  opacity: 0.5;
+  cursor: not-allowed;
+}
+
+/* rail style */
+.vue-slider-rail {
+  background-color: #ccc;
+  border-radius: 15px;
+}
+
+/* process style */
+.vue-slider-process {
+  background-color: #3498db;
+  border-radius: 15px;
+}
+
+/* mark style */
+.vue-slider-mark {
+  z-index: 4;
+}
+.vue-slider-mark:first-child .vue-slider-mark-step, .vue-slider-mark:last-child .vue-slider-mark-step {
+  display: none;
+}
+.vue-slider-mark-step {
+  width: 100%;
+  height: 100%;
+  border-radius: 50%;
+  background-color: rgba(0, 0, 0, 0.16);
+}
+.vue-slider-mark-label {
+  font-size: 14px;
+  white-space: nowrap;
+}
+/* dot style */
+.vue-slider-dot-handle {
+  cursor: pointer;
+  width: 100%;
+  height: 100%;
+  border-radius: 50%;
+  background-color: #fff;
+  box-sizing: border-box;
+  box-shadow: 0.5px 0.5px 2px 1px rgba(0, 0, 0, 0.32);
+}
+.vue-slider-dot-handle-focus {
+  box-shadow: 0px 0px 1px 2px rgba(52, 152, 219, 0.36);
+}
+
+.vue-slider-dot-handle-disabled {
+  cursor: not-allowed;
+  background-color: #ccc;
+}
+
+.vue-slider-dot-tooltip-inner {
+  font-size: 14px;
+  white-space: nowrap;
+  padding: 2px 5px;
+  min-width: 20px;
+  text-align: center;
+  color: #fff;
+  border-radius: 5px;
+  border-color: #3498db;
+  background-color: #3498db;
+  box-sizing: content-box;
+}
+.vue-slider-dot-tooltip-inner::after {
+  content: "";
+  position: absolute;
+}
+.vue-slider-dot-tooltip-inner-top::after {
+  top: 100%;
+  left: 50%;
+  transform: translate(-50%, 0);
+  height: 0;
+  width: 0;
+  border-color: transparent;
+  border-style: solid;
+  border-width: 5px;
+  border-top-color: inherit;
+}
+.vue-slider-dot-tooltip-inner-bottom::after {
+  bottom: 100%;
+  left: 50%;
+  transform: translate(-50%, 0);
+  height: 0;
+  width: 0;
+  border-color: transparent;
+  border-style: solid;
+  border-width: 5px;
+  border-bottom-color: inherit;
+}
+.vue-slider-dot-tooltip-inner-left::after {
+  left: 100%;
+  top: 50%;
+  transform: translate(0, -50%);
+  height: 0;
+  width: 0;
+  border-color: transparent;
+  border-style: solid;
+  border-width: 5px;
+  border-left-color: inherit;
+}
+.vue-slider-dot-tooltip-inner-right::after {
+  right: 100%;
+  top: 50%;
+  transform: translate(0, -50%);
+  height: 0;
+  width: 0;
+  border-color: transparent;
+  border-style: solid;
+  border-width: 5px;
+  border-right-color: inherit;
+}
+
+.vue-slider-dot-tooltip-wrapper {
+  opacity: 0;
+  transition: all 0.3s;
+}
+.vue-slider-dot-tooltip-wrapper-show {
+  opacity: 1;
+}
+
+/*# sourceMappingURL=default.css.map */

BIN
src/assets/iconfont/iconfont.eot


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/assets/iconfont/iconfont.js


+ 758 - 0
src/assets/iconfont/iconfont.json

@@ -0,0 +1,758 @@
+{
+  "id": "1913866",
+  "name": "Admin",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "后台管理图标",
+  "glyphs": [
+    {
+      "icon_id": "875544",
+      "name": "FaceBook",
+      "font_class": "tian7_facebook",
+      "unicode": "e624",
+      "unicode_decimal": 58916
+    },
+    {
+      "icon_id": "7221902",
+      "name": "you-tube",
+      "font_class": "you-tube",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "11357802",
+      "name": "ins",
+      "font_class": "tmp",
+      "unicode": "e63c",
+      "unicode_decimal": 58940
+    },
+    {
+      "icon_id": "11988493",
+      "name": "地址 (1)",
+      "font_class": "dizhi",
+      "unicode": "e661",
+      "unicode_decimal": 58977
+    },
+    {
+      "icon_id": "12852320",
+      "name": "TW",
+      "font_class": "TW",
+      "unicode": "e651",
+      "unicode_decimal": 58961
+    },
+    {
+      "icon_id": "9265415",
+      "name": "服务器",
+      "font_class": "fuwuqi",
+      "unicode": "e718",
+      "unicode_decimal": 59160
+    },
+    {
+      "icon_id": "488591",
+      "name": "电脑",
+      "font_class": "diannao",
+      "unicode": "e64e",
+      "unicode_decimal": 58958
+    },
+    {
+      "icon_id": "3771278",
+      "name": "失败",
+      "font_class": "shibai",
+      "unicode": "e660",
+      "unicode_decimal": 58976
+    },
+    {
+      "icon_id": "9282498",
+      "name": "YouTube",
+      "font_class": "YouTube",
+      "unicode": "e63b",
+      "unicode_decimal": 58939
+    },
+    {
+      "icon_id": "9162746",
+      "name": "完善资料",
+      "font_class": "ziliao",
+      "unicode": "e623",
+      "unicode_decimal": 58915
+    },
+    {
+      "icon_id": "9145505",
+      "name": "密码",
+      "font_class": "mima",
+      "unicode": "e66c",
+      "unicode_decimal": 58988
+    },
+    {
+      "icon_id": "965156",
+      "name": "钱包",
+      "font_class": "wallet",
+      "unicode": "e632",
+      "unicode_decimal": 58930
+    },
+    {
+      "icon_id": "12996475",
+      "name": "会员取款",
+      "font_class": "huiyuanqukuan",
+      "unicode": "e6d5",
+      "unicode_decimal": 59093
+    },
+    {
+      "icon_id": "3109732",
+      "name": "警示",
+      "font_class": "jingshi",
+      "unicode": "e622",
+      "unicode_decimal": 58914
+    },
+    {
+      "icon_id": "614996",
+      "name": "iconfont-arrowdown",
+      "font_class": "iconfontarrowdown-copy",
+      "unicode": "e618",
+      "unicode_decimal": 58904
+    },
+    {
+      "icon_id": "2247612",
+      "name": "链接",
+      "font_class": "lianjie",
+      "unicode": "e619",
+      "unicode_decimal": 58905
+    },
+    {
+      "icon_id": "3004828",
+      "name": "成功",
+      "font_class": "chenggong",
+      "unicode": "eaed",
+      "unicode_decimal": 60141
+    },
+    {
+      "icon_id": "5315870",
+      "name": "等待",
+      "font_class": "dengdai",
+      "unicode": "e63a",
+      "unicode_decimal": 58938
+    },
+    {
+      "icon_id": "5360978",
+      "name": "灯泡",
+      "font_class": "dengpao",
+      "unicode": "e61e",
+      "unicode_decimal": 58910
+    },
+    {
+      "icon_id": "9697021",
+      "name": "向右箭头",
+      "font_class": "shaixuanjiantou-you",
+      "unicode": "e620",
+      "unicode_decimal": 58912
+    },
+    {
+      "icon_id": "11136487",
+      "name": "五角星 星型 ",
+      "font_class": "wujiaoxingxingxing",
+      "unicode": "e630",
+      "unicode_decimal": 58928
+    },
+    {
+      "icon_id": "11150109",
+      "name": "标签",
+      "font_class": "biaoqian",
+      "unicode": "e654",
+      "unicode_decimal": 58964
+    },
+    {
+      "icon_id": "11177050",
+      "name": "五角星 星型 收藏",
+      "font_class": "wujiaoxingxingxingshoucang",
+      "unicode": "e6a0",
+      "unicode_decimal": 59040
+    },
+    {
+      "icon_id": "11639950",
+      "name": "五角星 星型 收藏",
+      "font_class": "wujiaoxingxingxingshoucang1",
+      "unicode": "e621",
+      "unicode_decimal": 58913
+    },
+    {
+      "icon_id": "13704691",
+      "name": "上传",
+      "font_class": "-shangchuan",
+      "unicode": "e6b9",
+      "unicode_decimal": 59065
+    },
+    {
+      "icon_id": "11175072",
+      "name": "待办  等待 审核",
+      "font_class": "daibandengdaishenhe",
+      "unicode": "e67b",
+      "unicode_decimal": 59003
+    },
+    {
+      "icon_id": "7324218",
+      "name": "资料补充",
+      "font_class": "ziliaobuchong",
+      "unicode": "e677",
+      "unicode_decimal": 58999
+    },
+    {
+      "icon_id": "2242817",
+      "name": "二维码",
+      "font_class": "erweima",
+      "unicode": "e614",
+      "unicode_decimal": 58900
+    },
+    {
+      "icon_id": "2779009",
+      "name": "加号",
+      "font_class": "jiahao",
+      "unicode": "e9c8",
+      "unicode_decimal": 59848
+    },
+    {
+      "icon_id": "3461113",
+      "name": "手机",
+      "font_class": "shouji1",
+      "unicode": "e616",
+      "unicode_decimal": 58902
+    },
+    {
+      "icon_id": "5101420",
+      "name": "加号",
+      "font_class": "jiahao1",
+      "unicode": "e617",
+      "unicode_decimal": 58903
+    },
+    {
+      "icon_id": "125852",
+      "name": "i",
+      "font_class": "i",
+      "unicode": "e615",
+      "unicode_decimal": 58901
+    },
+    {
+      "icon_id": "9668011",
+      "name": "图片上传",
+      "font_class": "tupianshangchuan",
+      "unicode": "e62f",
+      "unicode_decimal": 58927
+    },
+    {
+      "icon_id": "420834",
+      "name": "身份核验须知",
+      "font_class": "shenfenheyanxuzhi",
+      "unicode": "e613",
+      "unicode_decimal": 58899
+    },
+    {
+      "icon_id": "2739055",
+      "name": "个人信息",
+      "font_class": "iconcopy",
+      "unicode": "e682",
+      "unicode_decimal": 59010
+    },
+    {
+      "icon_id": "4734189",
+      "name": "知识",
+      "font_class": "zhishi",
+      "unicode": "e66d",
+      "unicode_decimal": 58989
+    },
+    {
+      "icon_id": "934735",
+      "name": "箭头",
+      "font_class": "jiantou1",
+      "unicode": "e6c5",
+      "unicode_decimal": 59077
+    },
+    {
+      "icon_id": "1035716",
+      "name": "箭头",
+      "font_class": "jiantou-copy",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "2715703",
+      "name": "箭头",
+      "font_class": "arrow-round-r",
+      "unicode": "e61c",
+      "unicode_decimal": 58908
+    },
+    {
+      "icon_id": "8360731",
+      "name": "刷新",
+      "font_class": "shuaxin2",
+      "unicode": "e6f6",
+      "unicode_decimal": 59126
+    },
+    {
+      "icon_id": "8731683",
+      "name": "发布时间",
+      "font_class": "fabushijian",
+      "unicode": "e650",
+      "unicode_decimal": 58960
+    },
+    {
+      "icon_id": "13435768",
+      "name": "参数",
+      "font_class": "canshu",
+      "unicode": "e65f",
+      "unicode_decimal": 58975
+    },
+    {
+      "icon_id": "867560",
+      "name": "交易账户",
+      "font_class": "tradingbook",
+      "unicode": "e61b",
+      "unicode_decimal": 58907
+    },
+    {
+      "icon_id": "964047",
+      "name": "个人信息 (1)",
+      "font_class": "gerenxinxi1",
+      "unicode": "e6a2",
+      "unicode_decimal": 59042
+    },
+    {
+      "icon_id": "1614132",
+      "name": "退出",
+      "font_class": "icon-system-signout",
+      "unicode": "e643",
+      "unicode_decimal": 58947
+    },
+    {
+      "icon_id": "4065700",
+      "name": "安全",
+      "font_class": "anquan",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    },
+    {
+      "icon_id": "10321609",
+      "name": "文件管理",
+      "font_class": "wenjianguanli",
+      "unicode": "e690",
+      "unicode_decimal": 59024
+    },
+    {
+      "icon_id": "6541936",
+      "name": "客服",
+      "font_class": "kefu",
+      "unicode": "e79c",
+      "unicode_decimal": 59292
+    },
+    {
+      "icon_id": "8386515",
+      "name": "用户",
+      "font_class": "yonghu",
+      "unicode": "e62e",
+      "unicode_decimal": 58926
+    },
+    {
+      "icon_id": "2258114",
+      "name": "邮箱",
+      "font_class": "youxiang1",
+      "unicode": "e9b2",
+      "unicode_decimal": 59826
+    },
+    {
+      "icon_id": "14420910",
+      "name": "定位",
+      "font_class": "dingwei",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "959702",
+      "name": "验证码",
+      "font_class": "yanzhengma",
+      "unicode": "e730",
+      "unicode_decimal": 59184
+    },
+    {
+      "icon_id": "14386940",
+      "name": "手机",
+      "font_class": "shouji",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    },
+    {
+      "icon_id": "12614697",
+      "name": "首 页-01",
+      "font_class": "shouye-",
+      "unicode": "e633",
+      "unicode_decimal": 58931
+    },
+    {
+      "icon_id": "13020783",
+      "name": "空",
+      "font_class": "kong",
+      "unicode": "e6c8",
+      "unicode_decimal": 59080
+    },
+    {
+      "icon_id": "940196",
+      "name": "入金",
+      "font_class": "Deposit",
+      "unicode": "e62c",
+      "unicode_decimal": 58924
+    },
+    {
+      "icon_id": "7881674",
+      "name": "钻石",
+      "font_class": "zuanshi",
+      "unicode": "e64d",
+      "unicode_decimal": 58957
+    },
+    {
+      "icon_id": "8225242",
+      "name": "代理",
+      "font_class": "daili",
+      "unicode": "e60f",
+      "unicode_decimal": 58895
+    },
+    {
+      "icon_id": "3528787",
+      "name": "下载",
+      "font_class": "xiazai",
+      "unicode": "e60b",
+      "unicode_decimal": 58891
+    },
+    {
+      "icon_id": "4909541",
+      "name": "眼睛",
+      "font_class": "yanjing",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
+      "icon_id": "7766772",
+      "name": "icon_photo",
+      "font_class": "icon_photo",
+      "unicode": "eb9a",
+      "unicode_decimal": 60314
+    },
+    {
+      "icon_id": "8790047",
+      "name": "眼睛",
+      "font_class": "eye",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "11738959",
+      "name": "选择框-部分选择",
+      "font_class": "xuanzekuang-bufenxuanze",
+      "unicode": "e681",
+      "unicode_decimal": 59009
+    },
+    {
+      "icon_id": "12188792",
+      "name": "选中框",
+      "font_class": "xuanzhongkuang",
+      "unicode": "e65d",
+      "unicode_decimal": 58973
+    },
+    {
+      "icon_id": "12346863",
+      "name": "未选中框",
+      "font_class": "weixuanzhongkuang",
+      "unicode": "e62b",
+      "unicode_decimal": 58923
+    },
+    {
+      "icon_id": "14195997",
+      "name": "上 传",
+      "font_class": "shangchuan",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "10909705",
+      "name": "邮箱",
+      "font_class": "youxiang",
+      "unicode": "e609",
+      "unicode_decimal": 58889
+    },
+    {
+      "icon_id": "8019560",
+      "name": "箭头",
+      "font_class": "jiantou",
+      "unicode": "e627",
+      "unicode_decimal": 58919
+    },
+    {
+      "icon_id": "8196664",
+      "name": "搜索",
+      "font_class": "icon_sousuo",
+      "unicode": "e607",
+      "unicode_decimal": 58887
+    },
+    {
+      "icon_id": "10728910",
+      "name": "排序",
+      "font_class": "paixu",
+      "unicode": "e6a7",
+      "unicode_decimal": 59047
+    },
+    {
+      "icon_id": "147012",
+      "name": "刷新",
+      "font_class": "shuaxin",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "287187",
+      "name": "下拉箭头",
+      "font_class": "xialajiantou",
+      "unicode": "e638",
+      "unicode_decimal": 58936
+    },
+    {
+      "icon_id": "608098",
+      "name": "刷新",
+      "font_class": "shuaxin1",
+      "unicode": "e653",
+      "unicode_decimal": 58963
+    },
+    {
+      "icon_id": "663949",
+      "name": "详细",
+      "font_class": "xiangxi",
+      "unicode": "e65b",
+      "unicode_decimal": 58971
+    },
+    {
+      "icon_id": "1143156",
+      "name": "菜单",
+      "font_class": "caidan",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "2197046",
+      "name": "铃铛",
+      "font_class": "lingdang",
+      "unicode": "e6fb",
+      "unicode_decimal": 59131
+    },
+    {
+      "icon_id": "2204665",
+      "name": "申请管理",
+      "font_class": "shenqingguanli",
+      "unicode": "e646",
+      "unicode_decimal": 58950
+    },
+    {
+      "icon_id": "2845887",
+      "name": "全屏",
+      "font_class": "quanping",
+      "unicode": "e672",
+      "unicode_decimal": 58994
+    },
+    {
+      "icon_id": "3454265",
+      "name": "对勾",
+      "font_class": "duigou-",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "3500380",
+      "name": "下拉箭头",
+      "font_class": "xialajiantou1",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    },
+    {
+      "icon_id": "3613399",
+      "name": "编辑",
+      "font_class": "bianji",
+      "unicode": "e608",
+      "unicode_decimal": 58888
+    },
+    {
+      "icon_id": "3790527",
+      "name": "错误",
+      "font_class": "cuowu",
+      "unicode": "e6e9",
+      "unicode_decimal": 59113
+    },
+    {
+      "icon_id": "3976155",
+      "name": "错误 (1)",
+      "font_class": "cuowu1",
+      "unicode": "e65c",
+      "unicode_decimal": 58972
+    },
+    {
+      "icon_id": "4253728",
+      "name": "编辑",
+      "font_class": "bianji1",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "4734749",
+      "name": "编辑",
+      "font_class": "bianji2",
+      "unicode": "e64c",
+      "unicode_decimal": 58956
+    },
+    {
+      "icon_id": "5868863",
+      "name": "客户管理",
+      "font_class": "kehu",
+      "unicode": "e65e",
+      "unicode_decimal": 58974
+    },
+    {
+      "icon_id": "6499103",
+      "name": "网站管理",
+      "font_class": "wangzhanguanli",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "7543006",
+      "name": "收起",
+      "font_class": "shouqi",
+      "unicode": "e64a",
+      "unicode_decimal": 58954
+    },
+    {
+      "icon_id": "8148592",
+      "name": "时间",
+      "font_class": "shijian",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
+    {
+      "icon_id": "8589223",
+      "name": "错误",
+      "font_class": "cuowu2",
+      "unicode": "e62d",
+      "unicode_decimal": 58925
+    },
+    {
+      "icon_id": "8590304",
+      "name": "日历",
+      "font_class": "rili",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "8927678",
+      "name": "展 开",
+      "font_class": "zhankai",
+      "unicode": "e603",
+      "unicode_decimal": 58883
+    },
+    {
+      "icon_id": "9217729",
+      "name": "潜在客户",
+      "font_class": "qianzaikehu",
+      "unicode": "e6f1",
+      "unicode_decimal": 59121
+    },
+    {
+      "icon_id": "9609922",
+      "name": "关  闭",
+      "font_class": "guanbi",
+      "unicode": "e61f",
+      "unicode_decimal": 58911
+    },
+    {
+      "icon_id": "10138843",
+      "name": "报告",
+      "font_class": "baogao",
+      "unicode": "e6b4",
+      "unicode_decimal": 59060
+    },
+    {
+      "icon_id": "10262279",
+      "name": "头像 男",
+      "font_class": "touxiangnan",
+      "unicode": "e64f",
+      "unicode_decimal": 58959
+    },
+    {
+      "icon_id": "10551463",
+      "name": "增加 新增",
+      "font_class": "zengjiaxinzeng",
+      "unicode": "e726",
+      "unicode_decimal": 59174
+    },
+    {
+      "icon_id": "10874401",
+      "name": "对勾",
+      "font_class": "duigou",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    },
+    {
+      "icon_id": "12467926",
+      "name": "财务管理",
+      "font_class": "caiwu",
+      "unicode": "e604",
+      "unicode_decimal": 58884
+    },
+    {
+      "icon_id": "12602851",
+      "name": "控制台",
+      "font_class": "kongzhitai",
+      "unicode": "e7cc",
+      "unicode_decimal": 59340
+    },
+    {
+      "icon_id": "12711837",
+      "name": "用户管理",
+      "font_class": "yonghuguanli",
+      "unicode": "e61a",
+      "unicode_decimal": 58906
+    },
+    {
+      "icon_id": "12953634",
+      "name": "报告",
+      "font_class": "baogao1",
+      "unicode": "e652",
+      "unicode_decimal": 58962
+    },
+    {
+      "icon_id": "13087809",
+      "name": "设 置",
+      "font_class": "shezhi",
+      "unicode": "e674",
+      "unicode_decimal": 58996
+    },
+    {
+      "icon_id": "13200958",
+      "name": "删 除",
+      "font_class": "shanchu",
+      "unicode": "e73f",
+      "unicode_decimal": 59199
+    },
+    {
+      "icon_id": "13283692",
+      "name": "收 起",
+      "font_class": "zhankai1",
+      "unicode": "e6a6",
+      "unicode_decimal": 59046
+    },
+    {
+      "icon_id": "14020019",
+      "name": "收 起",
+      "font_class": "zhankai2",
+      "unicode": "e606",
+      "unicode_decimal": 58886
+    },
+    {
+      "icon_id": "14513234",
+      "name": "编 辑",
+      "font_class": "bianji3",
+      "unicode": "e60a",
+      "unicode_decimal": 58890
+    }
+  ]
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 3 - 0
src/assets/iconfont/iconfont.scss


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 34 - 0
src/assets/iconfont/iconfont.svg


BIN
src/assets/iconfont/iconfont.ttf


BIN
src/assets/iconfont/iconfont.woff


BIN
src/assets/iconfont/iconfont.woff2


BIN
src/assets/image/allow.png


BIN
src/assets/image/avatar.png


BIN
src/assets/image/berserk.jpg


BIN
src/assets/image/card/globalOrder/AUD.png


BIN
src/assets/image/card/globalOrder/BDT.png


BIN
src/assets/image/card/globalOrder/CAD.png


BIN
src/assets/image/card/globalOrder/CNY.png


BIN
src/assets/image/card/globalOrder/EUR.png


BIN
src/assets/image/card/globalOrder/GBP.png


BIN
src/assets/image/card/globalOrder/HKD.png


BIN
src/assets/image/card/globalOrder/IDR.png


BIN
src/assets/image/card/globalOrder/INR.png


BIN
src/assets/image/card/globalOrder/JPY.png


BIN
src/assets/image/card/globalOrder/KRW.png


BIN
src/assets/image/card/globalOrder/MNT.png


BIN
src/assets/image/card/globalOrder/MYR.png


BIN
src/assets/image/card/globalOrder/NZD.png


BIN
src/assets/image/card/globalOrder/PHP.png


BIN
src/assets/image/card/globalOrder/SGD.png


BIN
src/assets/image/card/globalOrder/THB.png


BIN
src/assets/image/card/globalOrder/TWD.png


BIN
src/assets/image/card/globalOrder/USD.png


BIN
src/assets/image/card/globalOrder/VND.png


BIN
src/assets/image/card/globalOrder/icon-USD.png


+ 18 - 0
src/assets/image/card/globalOrder/icon-arrow.svg

@@ -0,0 +1,18 @@
+<svg width="57" height="57" viewBox="0 0 57 57" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g filter="url(#filter0_d_946_656)">
+<circle cx="28.1238" cy="27.1863" r="24.3739" fill="white"/>
+</g>
+<path d="M15.9368 27.6546H39.3732L31.4048 19.6862" stroke="#1FB949" stroke-width="3.74983" stroke-linecap="round"/>
+<defs>
+<filter id="filter0_d_946_656" x="4.74453e-05" y="5.06639e-06" width="56.2475" height="56.2475" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="0.937458"/>
+<feGaussianBlur stdDeviation="1.87492"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_946_656"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_946_656" result="shape"/>
+</filter>
+</defs>
+</svg>

+ 6 - 0
src/assets/image/card/globalOrder/icon-copy.svg

@@ -0,0 +1,6 @@
+<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="19" height="19" rx="4" fill="#777777"/>
+<rect x="3" y="4" width="9" height="2" rx="1" fill="white"/>
+<rect x="3" y="8" width="13" height="2" rx="1" fill="white"/>
+<rect x="3" y="12" width="13" height="2" rx="1" fill="white"/>
+</svg>

BIN
src/assets/image/card/icon-visa.png


BIN
src/assets/image/center-inner1.png


BIN
src/assets/image/charts/1-1-bg.png


BIN
src/assets/image/circle-bg.png


BIN
src/assets/image/cro-avatar.jpg


BIN
src/assets/image/dashboard-profile-default.png


BIN
src/assets/image/login/CN.jpg


BIN
src/assets/image/login/EN.jpg


BIN
src/assets/image/login/admin_LOGO12.png


BIN
src/assets/image/login/qrcode-icon.png


BIN
src/assets/image/login/side-logo.png


BIN
src/assets/image/logo.png


BIN
src/assets/image/logo2.png


+ 29 - 0
src/assets/images/cwg-logo-01.svg

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1152.78 167.73">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: #fff;
+      }
+
+      .cls-1, .cls-2, .cls-3 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #040000;
+      }
+
+      .cls-3 {
+        fill: #e61f21;
+      }
+    </style>
+  </defs>
+  <g>
+    <path class="cls-3" d="m35.79,2.4h102.44c16.98,0,30.87,13.89,30.87,30.87v102.44c0,16.98-13.89,30.87-30.87,30.87H35.79c-16.98,0-30.87-13.89-30.87-30.87V33.27C4.92,16.29,18.81,2.4,35.79,2.4h0Z"/>
+    <path class="cls-1" d="m93.13,29.14c17.42,0,32.95,8.05,43.1,20.63l-2.33,2.08-15.01,13.45c-5.86-7.85-15.21-12.93-25.76-12.93-17.74,0-32.12,14.38-32.12,32.12s14.38,32.12,32.12,32.12c10.54,0,19.9-5.08,25.76-12.93l15.01,13.45,2.33,2.08c-10.15,12.58-25.68,20.63-43.1,20.63-30.56,0-55.35-24.79-55.35-55.35s24.79-55.35,55.35-55.35h0Zm-.25,4.26c-28.1.14-50.84,22.96-50.84,51.09s22.74,50.95,50.84,51.09v-14.71c-19.97-.13-36.13-16.37-36.13-36.38s16.16-36.24,36.13-36.38v-14.71h0Zm-.63,23.72c-14.66.54-26.36,12.6-26.36,27.37s11.7,26.83,26.36,27.37v-4.45c-12.28-.47-22.06-10.58-22.06-22.92s9.77-22.46,22.06-22.92v-4.45h0Zm-4.41-18.39c-22.96,2.62-40.77,22.12-40.77,45.76s17.82,43.13,40.77,45.75v-4.68c-20.38-2.6-36.13-20.02-36.13-41.08s15.75-38.48,36.13-41.08v-4.68h0Z"/>
+  </g>
+  <path class="cls-2" d="m459.02,106.11l-35.79-80.54h23.61l38.18,86.03c2.98,6.68,5.97,10.6,13.54,10.6s10.93-3.18,14.09-9.55l43.3-87.07h22.82l-46.77,96.26c-6.73,13.83-17.88,21.45-33.28,21.45-11.78,0-21.23-4.72-28.09-13.91-6.81,9.56-17.2,13.93-28.83,13.91-16.24-.03-27.13-8.91-33.61-23.48l-41.88-94.23h23.6l38.18,86.03c2.99,6.68,5.98,10.6,13.55,10.6s10.9-3.21,14.09-9.55l3.28-6.53h0Z"/>
+  <path class="cls-2" d="m711.47,121.4v-41.2h21.86v63.23h-91.71c-40.4,0-56.27-19.69-56.27-58.93s15.85-58.93,56.27-58.93h91.71v21.86h-91.71c-27.26,0-33.42,11.59-33.42,37.08s6.29,36.91,33.42,36.91h69.86Z"/>
+  <path class="cls-2" d="m347.77,25.55v21.86h-91.71c-27.27,0-33.42,11.59-33.42,37.08s6.29,36.91,33.42,36.91h91.71v22.02h-91.71c-40.4,0-56.27-19.69-56.27-58.93s15.85-58.93,56.27-58.93h91.71Z"/>
+</svg>

BIN
src/assets/images/cwg-logo.png


BIN
src/assets/images/lang_AR.jpg


BIN
src/assets/images/lang_CN.jpg


BIN
src/assets/images/lang_DE.jpg


BIN
src/assets/images/lang_EN.jpg


BIN
src/assets/images/lang_ES.jpg


BIN
src/assets/images/lang_FA.png


BIN
src/assets/images/lang_Indonesian.jpg


BIN
src/assets/images/lang_MS.jpg


BIN
src/assets/images/lang_PT.png


BIN
src/assets/images/lang_TH.jpg


BIN
src/assets/images/lang_TR.png


BIN
src/assets/images/lang_VN.jpg


BIN
src/assets/images/lang_ko.png


BIN
src/assets/images/login-bg.gif


BIN
src/assets/images/trust-pilot.png


BIN
src/assets/theme/fonts/element-icons.ttf


BIN
src/assets/theme/fonts/element-icons.woff


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
src/assets/theme/index.scss


+ 21 - 0
src/components/BreadCrumb.vue

@@ -0,0 +1,21 @@
+<template>
+  <el-breadcrumb separator="/">
+    <el-breadcrumb-item v-for="(item, key) in breadCrumbs" :key="key">{{
+      $t(item.name)
+    }}</el-breadcrumb-item>
+  </el-breadcrumb>
+</template>
+
+<script lang="ts" setup>
+  import { useRoute } from 'vue-router'
+  import { computed } from 'vue'
+
+  const route = useRoute()
+  const breadCrumbs = computed(() => {
+    return route.matched.filter((item) => {
+      if (item.meta.OnBreadCrumb) return true
+    })
+  })
+</script>
+
+<style scoped lang="scss"></style>

+ 120 - 0
src/components/CodeMirror/index.vue

@@ -0,0 +1,120 @@
+<template>
+  <textarea ref="codeEditor" placeholder="请输入..."></textarea>
+</template>
+
+<script>
+  import { defineComponent, onBeforeUnmount, onMounted, ref, toRefs, watch } from 'vue'
+  // codemirror基础资源引入
+  import _CodeMirror from 'codemirror'
+  import 'codemirror/lib/codemirror.css'
+  // language
+  import 'codemirror/mode/javascript/javascript.js'
+
+  // theme css
+  import 'codemirror/theme/monokai.css'
+  // 折叠资源引入:开始
+  import 'codemirror/addon/fold/foldgutter.css'
+  import 'codemirror/addon/fold/foldcode.js'
+  import 'codemirror/addon/fold/brace-fold.js'
+  import 'codemirror/addon/fold/comment-fold.js'
+  import 'codemirror/addon/fold/indent-fold.js'
+  import 'codemirror/addon/fold/foldgutter.js'
+  // 折叠资源引入:结束
+
+  // 搜索资源引入:开始
+  import 'codemirror/addon/scroll/annotatescrollbar.js'
+  import 'codemirror/addon/search/matchesonscrollbar.js'
+  import 'codemirror/addon/search/match-highlighter.js'
+  import 'codemirror/addon/search/jump-to-line.js'
+
+  import 'codemirror/addon/dialog/dialog.js'
+  import 'codemirror/addon/dialog/dialog.css'
+  import 'codemirror/addon/search/searchcursor.js'
+  import 'codemirror/addon/search/search.js'
+  // 搜索资源引入:结束
+
+  // 启用placeholder
+  import 'codemirror/addon/display/placeholder.js'
+
+  import 'codemirror/addon/selection/active-line.js' //光标行背景高亮,配置里面也需要styleActiveLine设置为true
+
+  const CodeMirror = window.CodeMirror || _CodeMirror
+
+  export default defineComponent({
+    props: {
+      modelValue: String,
+      defaultValue: String,
+      readOnly: {
+        type: Boolean,
+        default: false,
+      },
+    },
+    setup(props, context) {
+      const { modelValue, defaultValue, readOnly } = toRefs(props)
+      const codeEditor = ref()
+      let editor
+      watch(modelValue, () => {
+        if (null != editor && modelValue.value && modelValue.value !== editor.getValue()) {
+          // 触发v-model的双向绑定
+          editor.setValue(modelValue.value)
+        }
+      })
+      watch(readOnly, () => {
+        if (null != editor) {
+          editor.setOption('readOnly', readOnly.value)
+        }
+      })
+      onMounted(() => {
+        editor = CodeMirror.fromTextArea(codeEditor.value, {
+          value: modelValue.value,
+          // mime: "text/javascript",
+          mode: 'application/json',
+          indentWithTabs: false, // 在缩进时,是否需要把 n*tab宽度个空格替换成n个tab字符,默认为false
+          smartIndent: true, // 自动缩进,设置是否根据上下文自动缩进(和上一行相同的缩进量)。默认为true
+          lineNumbers: true, // 是否在编辑器左侧显示行号
+          matchBrackets: true, // 括号匹配
+          readOnly: readOnly.value,
+          // 启用代码折叠相关功能:开始
+          foldGutter: true,
+          lineWrapping: true, //是否自动换行
+          gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'],
+          // 启用代码折叠相关功能:结束
+          styleActiveLine: false, // 光标行高亮
+        })
+        // 监听编辑器的change事件
+        editor.on('change', () => {
+          // 触发v-model的双向绑定
+          context.emit('update:modelValue', editor.getValue())
+        })
+        if (defaultValue.value) {
+          editor.setValue(defaultValue.value)
+        }
+      })
+      onBeforeUnmount(() => {
+        if (null !== editor) {
+          editor.toTextArea()
+          editor = null
+        }
+      })
+      return { codeEditor }
+    },
+  })
+</script>
+
+<!-- Add "scoped" attribute to limit CSS to this component only -->
+<style lang="scss">
+  .CodeMirror-wrap {
+    height: 100%;
+  }
+
+  .CodeMirror-gutters {
+    position: absolute;
+    top: 0;
+    left: 0;
+    z-index: 3;
+    min-height: 100%;
+    white-space: nowrap;
+    background-color: transparent;
+    border-right: 1px solid #ddd;
+  }
+</style>

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä