杨磊
昨天 00594e3e14d02377aef8319ae1c11ed79bfc5ee7
v3 firstSubmit
133个文件已添加
9277 ■■■■■ 已修改文件
.gitattributes 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.prettierrc.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/extensions.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jsconfig.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json 5611 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/base.css 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/shoucang.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/testImg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/tianmaologo2.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/京东icon-01.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/当当网.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/default-book-img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/default_avatar.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/delete.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/index/bookListBg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/boxBg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/pageBg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/weChartIcon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/officialAccount.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/packDown.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/packUp.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageFooter/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageFooter/wechatCode.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageFooter/weiboCode.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/pageHeader/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/choose.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/examine.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/noPass.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/pass.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/arrow.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/electronicBooks.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/paperCopies.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/sample.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/teaching/teacher.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/tuijian-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/about_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/about_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/beijing.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/beijing@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/dizhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/dizhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/email@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/fazhan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/fazhan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/footer-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/footer-bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/phone.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/phone@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/website.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/website@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/wenhua_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/wenhua_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/yinhao.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zizhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zizhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zongzhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/zongzhi@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/“@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/about/关于我们_slices.zip 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/Audio.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/Audio@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/PPT.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/PPT@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/details_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/details_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/img@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shijuan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shijuan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shixun.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/shixun@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/tuozhan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/tuozhan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/video.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/video@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/ziliao.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/ziliao@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/detail/数字教材详情_slices.zip 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame(2).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame@2x(1).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame@2x(2).png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Frame@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_302.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_302@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_303.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/Group_303@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/banner.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/banner@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/caozuoshouce.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/caozuoshouce@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/footer-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/footer-bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/jiaoshirenzheng.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/jiaoshirenzheng@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/xiehe/home/tuijian-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/config.js 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/iframe.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/WebMiddleGroundApi.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/app.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/edu.js 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/file.js 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/identity.js 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/job.js 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/resource.js 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/store.js 879 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/ugc.js 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/tool.js 423 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/toolClass.js 567 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/userAction.js 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/logo.svg 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/main.css 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/baseLayout.vue 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/footerPage.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/headerPage.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugin/axios/index.ts 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/stores/counter.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitattributes
New file
@@ -0,0 +1 @@
* text=auto eol=lf
.gitignore
New file
@@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo
.prettierrc.json
New file
@@ -0,0 +1,6 @@
{
  "$schema": "https://json.schemastore.org/prettierrc",
  "semi": false,
  "singleQuote": true,
  "printWidth": 100
}
.vscode/extensions.json
New file
@@ -0,0 +1,3 @@
{
  "recommendations": ["Vue.volar", "esbenp.prettier-vscode"]
}
README.md
New file
@@ -0,0 +1,29 @@
# xiehe
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
## Customize configuration
See [Vite Configuration Reference](https://vite.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```
index.html
New file
@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>
jsconfig.json
New file
@@ -0,0 +1,8 @@
{
  "compilerOptions": {
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "exclude": ["node_modules", "dist"]
}
package-lock.json
New file
Diff too large
package.json
New file
@@ -0,0 +1,31 @@
{
  "name": "xiehe",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "engines": {
    "node": "^20.19.0 || >=22.12.0"
  },
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview",
    "format": "prettier --write src/"
  },
  "dependencies": {
    "axios": "^1.11.0",
    "element-plus": "^2.10.7",
    "less": "^4.4.0",
    "moment": "^2.30.1",
    "pinia": "^3.0.3",
    "spark-md5": "^3.0.2",
    "vue": "^3.5.18",
    "vue-router": "^4.5.1"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^6.0.1",
    "prettier": "3.6.2",
    "vite": "^7.0.6",
    "vite-plugin-vue-devtools": "^8.0.0"
  }
}
public/favicon.ico
src/App.vue
New file
@@ -0,0 +1,13 @@
<script setup>
import { RouterView } from 'vue-router'
</script>
<template>
  <RouterView />
</template>
<style scoped>
#app {
  width: 100%;
}
</style>
src/assets/base.css
New file
@@ -0,0 +1,86 @@
/* color palette from <https://github.com/vuejs/theme> */
:root {
  --vt-c-white: #ffffff;
  --vt-c-white-soft: #f8f8f8;
  --vt-c-white-mute: #f2f2f2;
  --vt-c-black: #181818;
  --vt-c-black-soft: #222222;
  --vt-c-black-mute: #282828;
  --vt-c-indigo: #2c3e50;
  --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
  --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
  --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
  --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
  --vt-c-text-light-1: var(--vt-c-indigo);
  --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
  --vt-c-text-dark-1: var(--vt-c-white);
  --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
}
/* semantic color variables for this project */
:root {
  --color-background: var(--vt-c-white);
  --color-background-soft: var(--vt-c-white-soft);
  --color-background-mute: var(--vt-c-white-mute);
  --color-border: var(--vt-c-divider-light-2);
  --color-border-hover: var(--vt-c-divider-light-1);
  --color-heading: var(--vt-c-text-light-1);
  --color-text: var(--vt-c-text-light-1);
  --section-gap: 160px;
}
@media (prefers-color-scheme: dark) {
  :root {
    --color-background: var(--vt-c-black);
    --color-background-soft: var(--vt-c-black-soft);
    --color-background-mute: var(--vt-c-black-mute);
    --color-border: var(--vt-c-divider-dark-2);
    --color-border-hover: var(--vt-c-divider-dark-1);
    --color-heading: var(--vt-c-text-dark-1);
    --color-text: var(--vt-c-text-dark-2);
  }
}
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  font-weight: normal;
}
body {
  min-height: 100vh;
  color: var(--color-text);
  background: var(--color-background);
  transition:
    color 0.5s,
    background-color 0.5s;
  line-height: 1.6;
  font-family:
    Inter,
    -apple-system,
    BlinkMacSystemFont,
    'Segoe UI',
    Roboto,
    Oxygen,
    Ubuntu,
    Cantarell,
    'Fira Sans',
    'Droid Sans',
    'Helvetica Neue',
    sans-serif;
  font-size: 15px;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
src/assets/images/bookStore/shoucang.svg
New file
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1669360744685" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1168" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M766.976 692.224h-190.464c-14.336 0-26.112-11.776-26.112-26.112s11.776-26.112 26.112-26.112h190.464c14.336 0 26.112 11.776 26.112 26.112s-11.776 26.112-26.112 26.112z" fill="#009A44" p-id="1169"></path><path d="M645.632 761.344v-190.464c0-14.336 11.776-26.112 26.112-26.112s26.112 11.776 26.112 26.112v190.464c0 14.336-11.776 26.112-26.112 26.112s-26.112-11.776-26.112-26.112zM508.928 855.552c-6.656 0-12.8-2.56-17.92-7.168l-299.008-299.008c-43.008-43.008-67.072-100.864-67.072-161.792s24.064-118.784 67.072-161.792c42.496-42.496 103.424-58.368 171.008-45.056 57.856 11.264 116.736 43.52 161.28 88.064 9.728 9.728 9.728 26.112 0 35.84-9.728 9.728-26.112 9.728-35.84 0C415.232 231.424 294.912 194.048 227.84 261.12c-33.792 33.792-52.224 78.336-52.224 125.952s18.432 92.672 52.224 125.952l299.008 299.008c9.728 9.728 9.728 26.112 0 35.84-5.12 5.632-11.264 7.68-17.92 7.68z" fill="#009A44" p-id="1170"></path><path d="M812.544 556.544c-6.656 0-12.8-2.56-17.92-7.168-9.728-9.728-9.728-26.112 0-35.84 33.792-33.792 52.224-78.336 52.224-125.952s-18.432-92.672-52.224-125.952c-41.472-41.472-98.816-38.4-129.536-33.28-50.176 8.704-101.888 35.84-138.24 72.192-9.728 9.728-26.112 9.728-35.84 0-9.728-9.728-9.728-26.112 0-35.84 44.032-44.032 104.448-75.776 165.376-86.016 69.632-12.288 131.584 4.608 174.08 47.104 43.008 43.008 67.072 100.864 67.072 161.792 0 60.928-23.552 118.784-67.072 161.792-5.12 4.608-11.776 7.168-17.92 7.168z" fill="#009A44" p-id="1171"></path></svg>
src/assets/images/bookStore/testImg.png
src/assets/images/bookStore/tianmaologo2.svg
New file
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1679558961529" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3002" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M461.842647 631.286804l22.067598-39.22128c-100.392478-56.483432-154.764829-113.929796-170.871669-182.065616l169.512718 0 0-45.008077-174.657902 0-0.050142-17.422811 0-77.797877 156.564825 0 0-44.99989L106.133226 224.771253l0 44.99989 156.709111 0 0 77.738525-0.042979 17.482163L88.473007 364.991832l0 45.008077 169.181167 0c-16.114003 68.13582-70.487378 125.583207-170.879855 182.065616l22.075785 39.22128c61.946864-34.853809 139.065266-86.675058 176.499853-165.742858 9.695826 20.555152 22.449291 40.244586 38.34226 58.924018C355.600951 561.991578 400.796292 596.934414 461.842647 631.286804z" fill="#DA1726" p-id="3003"></path><path d="M640.32976 432.744935c0.144286-50.42546 0.296759-98.048083-0.152473-132.307352-0.288572-21.99085-7.302313-39.795355-20.85191-52.950979-25.157983-24.414039-64.714907-23.735587-85.975117-23.378453-2.181689 0.041956-4.177136 0.076748-5.943362 0.076748l0 45.01217c1.995447 0 4.245697-0.047072 6.707772-0.089028 14.721283-0.25071 42.129516-0.713244 53.862745 10.68127 1.732457 1.681292 7.004531 6.7968 7.190773 21.22644 0.067538 4.924149 0.119727 10.163477 0.161682 15.631002l-69.910233 41.692564 23.059182 38.644135 46.986127-28.018124c-0.00921 15.945157-0.050142 32.81129-0.102331 50.127677l-69.944002 41.72224 23.059182 38.657438 46.731324-27.883047c-0.025583 12.905938-0.042979 25.735128-0.042979 38.300304 0 10.31595-6.070252 26.736944-13.270235 35.846416-20.886703 26.447349-56.478316 46.867424-56.809867 47.062875l22.159696 39.167045c1.765203-1.001817 43.522236-24.852014 69.969585-58.337663 13.525038-17.116843 22.957875-43.326784 22.957875-63.73765C640.176264 484.715587 640.253012 458.462666 640.32976 432.744935z" fill="#DA1726" p-id="3004"></path><path d="M708.015326 333.907882 753.032612 333.907882 753.032612 297.712519 848.710718 297.712519 848.710718 333.907882 893.719818 333.907882 893.719818 297.712519 937.080372 297.712519 937.080372 252.704442 893.719818 252.704442 893.719818 223.412302 848.710718 223.412302 848.710718 252.704442 753.032612 252.704442 753.032612 223.412302 708.015326 223.412302 708.015326 252.704442 665.621796 252.704442 665.621796 297.712519 708.015326 297.712519Z" fill="#DA1726" p-id="3005"></path><path d="M732.450854 633.655757l137.800459 0c36.763298 0 66.829058-30.072923 66.829058-66.833151L937.080372 391.660214l0-27.865651L665.621796 363.794563l0 45.008077L665.621796 566.822606C665.621796 603.582835 695.687556 633.655757 732.450854 633.655757zM823.851541 408.80264l68.220754 0 0 67.082838-68.220754 0L823.851541 408.80264zM823.851541 520.889461l68.220754 0 0 45.933145c0 11.831466-9.993608 21.820981-21.819958 21.820981l-46.400796 0L823.851541 520.889461zM710.639083 408.79343l68.212568 0 0 67.082838L710.639083 475.876268 710.639083 408.79343zM710.630896 520.889461l68.220754 0 0 67.754127-46.400796 0c-11.827373 0-21.820981-9.989515-21.820981-21.820981L710.629873 520.889461z" fill="#DA1726" p-id="3006"></path><path d="M392.713196 689.854711c-17.32969 0-23.51967 18.356067-23.51967 18.356067l-36.814464 92.37692 19.044752 0 15.341407-39.115879 50.544163 0 15.105023 39.115879 20.623713 0-36.797068-92.37692C416.241053 708.210777 410.092006 689.854711 392.713196 689.854711zM374.017392 743.5394l10.714016-26.091238c0 0 2.12336-5.866614 7.981788-5.866614 6.053879 0 7.997138 5.866614 7.997138 5.866614l9.399067 24.957415 0.424672 1.133823L374.017392 743.5394z" fill="#DA1726" p-id="3007"></path><path d="M88.201831 707.030905 132.99706 707.030905 132.99706 800.527322 133.00627 800.527322 151.642722 800.527322 151.642722 707.030905 196.447161 707.030905 196.447161 689.582511 88.201831 689.582511Z" fill="#DA1726" p-id="3008"></path><path d="M478.178707 763.26772l0-73.446779-18.525935 0 0 18.415418 0 63.628156c0 16.650215 11.538801 28.621874 29.079292 28.621874l22.534226 0 0-18.314111c0 0-4.168949 0.025583-13.71128 0.025583C485.123886 782.196839 478.178707 779.916912 478.178707 763.26772z" fill="#DA1726" p-id="3009"></path><path d="M541.924543 763.26772l0-73.446779-18.526959 0 0 18.415418 0 63.628156c0 16.650215 11.54801 28.621874 29.096688 28.621874l22.51683 0 0-18.314111c0 0-4.15974 0.025583-13.721513 0.025583C548.869722 782.196839 541.924543 779.916912 541.924543 763.26772z" fill="#DA1726" p-id="3010"></path><path d="M309.921585 690.321338c-6.180769-2.505054-11.92868 2.105964-13.066597 3.001357-8.126075 6.39771-16.887622 15.923668-32.815383 15.923668l-0.629333 0-0.194428 0-0.620124 0c-15.936971 0-24.698518-9.525957-32.815383-15.923668-1.137916-0.895393-6.894014-5.506411-13.075807-3.001357-5.782703 2.335185-6.691399 7.879458-6.691399 12.277628 0 8.468882 0.017396 57.319473 0.017396 97.836259l18.500353 0 0-83.249029c6.121418 3.378957 18.891256 11.759835 34.275641 11.759835l1.019213 0c14.629185 0 28.146037-8.379854 34.259268-11.759835l0 83.249029 18.517749 0c0.016373-40.516786 0.024559-89.366354 0.024559-97.836259C316.629357 698.200796 315.696102 692.656523 309.921585 690.321338z" fill="#DA1726" p-id="3011"></path><path d="M930.508699 690.321338c-6.180769-2.505054-11.92868 2.105964-13.066597 3.001357-8.117888 6.39771-16.879436 15.923668-32.807197 15.923668l-0.62831 0-0.203638 0-0.610914 0c-15.935947 0-24.707728-9.525957-32.816406-15.923668-1.136893-0.895393-6.894014-5.506411-13.075807-3.001357-5.78168 2.335185-6.690376 7.879458-6.690376 12.277628 0 8.468882 0.017396 57.319473 0.017396 97.836259l18.500353 0 0-83.249029c6.121418 3.378957 18.891256 11.759835 34.267455 11.759835l1.019213 0c14.637372 0 28.154223-8.379854 34.267455-11.759835l0 83.249029L937.199075 800.435225c0.016373-40.516786 0.025583-89.366354 0.025583-97.836259C937.224658 698.200796 936.282193 692.656523 930.508699 690.321338z" fill="#DA1726" p-id="3012"></path><path d="M603.888803 782.018783c-5.111414 0-9.271154 4.139274-9.271154 9.246595 0 5.111414 4.15974 9.254781 9.271154 9.254781 5.111414 0 9.254781-4.143367 9.254781-9.254781C613.142561 786.158057 609.000218 782.018783 603.888803 782.018783z" fill="#DA1726" p-id="3013"></path><path d="M766.642584 689.922249c-13.338796 0-24.800849 3.981684-34.097586 11.835559-11.114129 9.432837-16.759709 24.062022-16.759709 43.462884 0 17.685801 4.728698 31.465642 14.018272 40.941458 9.314133 9.517771 21.701255 14.366196 36.840046 14.366196 9.373485 0 18.178011-2.194992 26.158776-6.504134 7.964392-4.325515 14.119579-10.489912 18.331507-18.339694 4.13518-7.79043 6.214539-18.535145 6.214539-31.907711 0-16.666588-4.762467-29.946033-14.178931-39.455617C793.743826 694.774767 781.449825 689.922249 766.642584 689.922249zM789.829679 773.761726c-6.231935 6.049786-14.043854 9.122775-23.187095 9.122775-9.43386 0-17.057491-2.954285-23.331381-9.051143-6.376221-6.245238-9.628288-15.860223-9.628288-28.612665 0-12.744255 3.252067-22.338774 9.628288-28.53694 6.180769-5.985318 14.042831-9.025561 23.331381-9.025561 9.136078 0 16.921391 3.043313 23.13593 9.067516 6.4192 6.198166 9.679453 15.597233 9.679453 27.925003C799.457967 757.727541 796.222273 767.529791 789.829679 773.761726z" fill="#DA1726" p-id="3014"></path><path d="M675.395394 706.776102c9.136078 0 16.912182 3.039219 23.12672 9.05933 0.432859 0.424672 0.849344 0.865717 1.264806 1.324158l10.384511-15.401782c-9.16166-8.439206-20.862143-12.718673-34.777061-12.718673-13.338796 0-24.801872 3.973498-34.098609 11.831466-11.122315 9.42465-16.760732 24.066115-16.760732 43.454698 0 17.689894 4.720511 31.473829 14.018272 40.941458 9.305947 9.531074 21.693068 14.370289 36.84107 14.370289 9.364275 0 18.168802-2.199085 26.15059-6.512321 1.952468-1.061169 3.795443-2.232854 5.536087-3.510964l-8.277524-16.968463c-0.076748 0.076748-0.144286 0.152473-0.230244 0.229221-6.223748 6.053879-14.026458 9.126868-23.178909 9.126868-9.43386 0-17.066701-2.963495-23.332405-9.05933-6.376221-6.249331-9.627265-15.852036-9.627265-28.616758 0-12.740162 3.251044-22.334681 9.627265-28.523637C658.244782 709.797925 666.097634 706.776102 675.395394 706.776102z" fill="#DA1726" p-id="3015"></path></svg>
src/assets/images/bookStore/¾©¶«icon-01.svg
New file
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1666837514634" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1889" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M442.5 699.7H285.8v21.4h156.7v-21.4zM663.6 220c-3.5-0.3-7.1-0.7-10.6-0.9-4-0.4-7.9-0.8-11.8-1.4 3.9 0.6 7.9 1 11.8 1.4 3.5 0.2 7 0.7 10.6 0.9z" fill="#E12319" p-id="1890"></path><path d="M767.2 83.4H213.1c-78.7 0-142.5 63.8-142.5 142.5V780c0 78.7 63.8 142.5 142.5 142.5h554.1c78.7 0 142.5-63.8 142.5-142.5V225.9c0-78.7-63.8-142.5-142.5-142.5zM228 323.3c1.8-4.8 3.3-9.6 5.5-14.2 2.8-5.8 6.3-11.2 10.4-16.2 10.2-12.4 17.2-26.6 23.1-41.5 3.4-8.4 7.1-16.7 10.5-25.2 3.9-9.7 12.4-11.4 21-8.8 4.2 1.3 8 3.6 11.3 6.4 6.4 5.4 13.7 9.6 20.7 14.3 1.2 0.8 2.1 1.2 3.4-0.2 13.4-14.5 30.1-24.2 47.9-32 35.1-15.6 71.9-25.7 109.7-32 30.8-5.1 61.8-6.1 93-4.6 0.6 0 1.2-0.1 1.8-0.1 1.8-1.7 3.4-1 5.1 0.2 1.2 0.4 2.4 0.5 3.6 0.3 0.8-0.7 1.5-0.7 2.2 0.2 4.4 0.4 8.7 0.9 13.1 1.3 0.8-0.7 1.5-0.6 2.1 0.2 1.5 0.2 2.9 0.3 4.4 0.5 0.6-0.6 1-0.5 1.4 0.2 0.9 0.4 1.9 0.6 2.9 0.4 1.2-1 2.2-0.7 3.1 0.5 7.3 1.6 14.7 3 22 4.8 19.9 4.9 39.1 11.5 55.4 24.7 13.1 10.6 18.2 23.9 15.5 40.9-3.7 22.9-11.7 44-23 64.1-1.4 2.5-3.9 3.8-5.6 5.9 0.8 3.9-3 5.8-3.9 9-0.8 2.7-3.2 4.4-4.9 6.5-0.1 0.4-0.2 0.9-0.8 0.6 0 0.5 0.2 1.3-0.7 0.7 0.6 1.6-1 2.3-1.7 3.2-10.5 13.9-23.5 25.2-37.2 35.8-28.5 22.1-61.1 35.1-96.5 41.2-8.8 1.5-17.7 0-26.5-1-6.5-0.7-13-1.5-19.5-2.8-1.2-0.2-2.6-1.2-3.8 0.1-0.1 0.1-0.4 0.2-0.5 0.3-0.7-4.6-4.8-2.7-7.1-3.2-20.3-4.7-38.9-13.6-57-23.5-23.5-13-46.3-27.1-65.9-45.9-15.1-14.5-28.3-30.4-36.5-50-1.6-3.9-3.1-8-3.7-12.2-0.4-3-1.6-4.8-4.7-5.7 0.6 6.8 1 13.6 0.4 20.3-2.1 27.1-15.2 46.2-41.1 55.6-8.6 3.1-16.9 7.1-26.3 8-12.5 1.3-28.2-12.2-22.6-27.1z m68.1 473.4c-6.2 11.1-14.9 20.9-22.5 31.2-6.1 8.2-14.1 10.8-25.4 7.4 3.6-6.4 7.8-12.1 10.2-18.5 6.9-18.3 13.5-36.8 19.3-55.5 1.9-6 3.5-9.2 10.3-8.8 8.2 0.5 16.4 0.1 28.3 0.1-7.4 16.5-12.7 30.9-20.2 44.1z m84.2-8c-0.5 32.8-19.2 49.6-53.4 47.3v-13.9c20-7.1 21-8.6 21-30.6v-51.4h-93.1v-57.7h218.5v57h-93v35.8c0 4.4 0.1 9 0 13.5z m75.7 40.6c-20-21.5-33.7-46.3-41.9-76.2h31.4c10.9 28.2 21.4 55.5 32 82.9-7.3 2-14.5 0.8-21.5-6.7z m25.2-162.6H246.9v-16.5h100.6c0.5-4.8 0.8-8.5 1.3-13h30.8c0.6 4.1 1.2 8.1 2 13.2h75.1c3.8 0 7.6-0.1 11.4-0.1 14.8-0.2 14.9-0.1 13.1 16.4z m26.7-172.5c-4.4 9.6-6.8 20-9.8 30.1-0.7 2.3-1.5 3.5-4.1 3.4-3 0-6.9 1.8-8.8 0.1-2-1.8-0.2-5.7 0-8.6 0.9-11.5 1.4-23 0.7-34.8-3.8 1.2-6.8 3.5-9.6 5.9-10.9 9.1-19.9 20-30.1 29.7-1.7 1.6-3.4 3.1-4.9 4.9-2.2 2.8-5.2 3.1-8.4 3.4-2.9 0.3-3.5-0.6-2-3.3 5.5-9.2 10.8-18.5 16.2-27.7 2.9-5 5.7-10.2 8.9-15.1 1.6-2.5 0.5-3-1.5-3.5-3.7-0.9-7-2.7-10-5-7.2-5.5-10.6-16.8-7.3-25.1 1.1 3.8 2.4 7.3 4.7 10.3 7.1 9.6 17.5 7.9 25.1 3.6 0.9-0.5 1.4-1.6 2-2.6 9-15 17.9-30 26.8-45.1 1.4-2.4 2.7-2.9 5.5-2.4 12 2.2 24 4 36.2 2.5 5.8-0.7 11.4-2 17.2-5.3v6c-0.3 36.2-0.6 72.5-0.7 108.7 0 3.4-1 4-4.1 3.7-7.6-0.7-7.5-0.6-9.4-8.1-2.2-8.4-3.3-17.2-6.4-25.4-1.7-4.3-3.6-8.5-6.9-11.9-4.3-4.3-7.5-4.3-11.9 0-3.4 3.4-5.5 7.5-7.4 11.6z m31.4 339c-4 3.5-11.6 2.9-18.5 4.4 8.2-18.6 15.7-35 22.6-51.6 2.6-6.2 5.3-13 5.4-19.6 0.2-12.7 6.8-15 17.5-13.9 6.2 0.6 12.6 0.1 20.4 0.1-9.5 32.3-23.6 59.5-47.4 80.6z m187.8-4.8c-19.7-21.3-32.9-45.8-40.9-74.1 2.1-0.9 2.4-1.1 2.8-1.1 29.8-3 29.5-2.9 37.6 25.3 2.9 10.2 6.8 20.1 11.1 29.8 4.1 9.2 9.4 17.9 14.3 27.2-10.3 2.7-17.8 0.6-24.9-7.1zM753.5 667c-3.5 0.2-7.5 0.6-11.5 0.6-45.9 0.1-91.9 0.3-137.8-0.1-8.8-0.1-13.8 2.2-17.1 10.8-5.5 14-12.4 27.5-19.8 43.6 17.9 0 33.9 0.3 50-0.4 1.8-0.1 4.7-5.1 4.9-8 0.6-9.7 0.2-19.5 0.2-30.1h31.7v38.3h90.7v17.8h-90.5c0 17.4 0.1 33.2 0 49-0.2 32.8-18.6 49.6-52.7 47.8-2.5-8.7-3.3-15.3 8.8-18.2 4.5-1.1 10.4-8 10.6-12.6 1.1-21.4 0.5-43 0.5-65.9h-95.1c11.2-24.4 21.6-46.9 33-71.8h-40.7v-17.5c13.6 0 27.2 0.2 40.8-0.1 3.2-0.1 8.4-0.8 9.1-2.6 7.7-19.4 23.5-8.5 37.3-11.9-1.8 5.5-3 8.9-4.7 14h152.2c0.1 6.4 0.1 11.1 0.1 17.3z" fill="#E12319" p-id="1891"></path><path d="M678 329.8c0.8 1.8-0.9 2.4-1.6 3.4-10.5 13.9-23.5 25.2-37.2 35.8-28.5 22.1-61.1 35.1-96.5 41.2-8.8 1.5-17.7 0-26.5-1-6.5-0.7-13-1.5-19.5-2.8-1.2-0.2-2.6-1.2-3.8 0.1-0.1 0.1-0.4 0.2-0.5 0.3-0.7-4.6-4.8-2.7-7.1-3.2-20.3-4.7-38.9-13.6-57-23.5-23.5-13-46.3-27.1-65.9-45.9-15.1-14.5-28.3-30.4-36.5-50-1.6-3.9-3.1-8-3.7-12.2-0.4-3-1.6-4.8-4.7-5.7 0.6 6.8 1 13.6 0.4 20.3-2.1 27.1-15.2 46.2-41.1 55.6-8.6 3.1-16.9 7.1-26.3 8-12.5 1.2-28.1-12.2-22.5-27.1 1.8-4.8 3.3-9.6 5.5-14.2 2.8-5.8 6.3-11.2 10.4-16.2 10.2-12.4 17.2-26.6 23.1-41.5 3.4-8.4 7.1-16.7 10.5-25.2 3.9-9.7 12.4-11.4 21-8.8 4.2 1.3 8 3.6 11.3 6.4 6.4 5.4 13.7 9.6 20.7 14.3 1.2 0.8 2.1 1.2 3.4-0.2 13.4-14.5 30.1-24.2 47.9-32 35.1-15.6 71.9-25.7 109.7-32 30.8-5.1 61.8-6.1 93-4.6 0.6 0 1.2-0.1 1.8-0.1 1.7 0.1 3.4 0.1 5.1 0.2 1.2 0.4 2.4 0.5 3.6 0.3 0.7 0.1 1.4 0.1 2.2 0.2 4.4 0.4 8.7 0.9 13.1 1.3 0.7 0.1 1.4 0.1 2.1 0.2 1.5 0.2 2.9 0.3 4.4 0.5 0.5 0.1 1 0.1 1.4 0.2 0.9 0.4 1.9 0.6 2.9 0.4 1 0.2 2.1 0.3 3.1 0.5 7.3 1.6 14.7 3 22 4.8 19.9 4.9 39.1 11.5 55.4 24.7 13.1 10.6 18.2 23.9 15.5 40.9-3.7 22.9-11.7 44-23 64.1-1.4 2.5-3.9 3.8-5.6 5.9-1.5 0.5-3 0.8-4.4 1.5-7.6 3.6-15.7 6-23.9 7.4-31.5 5.3-62.5 3-92.8-7.2-28.5-9.6-51.1-27.4-69-51.4-1.8-2.5-5.2-3.4-7.3-2-2 1.3-2.9 6.4-1.3 8.6 5.6 7.9 12 15.3 18.9 22.1 24.1 23.5 53.6 36.2 86.3 42 20.7 3.7 41.6 3.6 62.4 0.7 7-1 13.8-3.1 20.6-5.1z m-25-110.7c6.3 0.3 12.5 1.5 18.9 0.9 8.1-0.7 15.9-2 22.7-6.9 4.4-3.2 5-8.2 1.6-12.4-1.3-1.6-2.9-3-4.7-4-6.9-3.9-14.2-6.8-22-7.8-8-1-16-1.5-24.2-0.6-6.5 0.7-12.7 1.6-18.4 4.7-4.3 2.4-8.2 5.8-8.2 10.8 0 5.3 4.8 7.8 9.1 9.9 7.9 3.9 16.6 4.5 25.2 5.4z m-161.9-0.4c-0.7 6.7 5.1 13.4 12.1 14.2 6.2 0.7 14.6-5.4 15.3-11.1 0.8-6.1-5.6-13.4-12.3-14-8-0.7-14.3 3.9-15.1 10.9z" fill="#EEEEEE" p-id="1892"></path><path d="M437.2 448.7c1.1 3.8 2.4 7.3 4.7 10.3 7.1 9.6 17.5 7.9 25.1 3.6 0.9-0.5 1.4-1.6 2-2.6 9-15 17.9-30 26.8-45.1 1.4-2.4 2.7-2.9 5.5-2.4 12 2.2 24 4 36.2 2.5 5.8-0.7 11.4-2 17.2-5.3v6c-0.3 36.2-0.6 72.5-0.7 108.7 0 3.4-1 4-4.1 3.7-7.6-0.7-7.5-0.6-9.4-8.1-2.2-8.4-3.3-17.2-6.4-25.4-1.7-4.3-3.6-8.5-6.9-11.9-4.3-4.3-7.5-4.3-11.9 0-3.2 3.2-5.3 7.2-7.2 11.3-4.4 9.6-6.8 20-9.8 30.1-0.7 2.3-1.5 3.5-4.1 3.4-3 0-6.9 1.8-8.8 0.1-2-1.8-0.2-5.7 0-8.6 0.9-11.5 1.4-23 0.7-34.8-3.8 1.2-6.8 3.5-9.6 5.9-10.9 9.1-19.9 20-30.1 29.7-1.7 1.6-3.4 3.1-4.9 4.9-2.2 2.8-5.2 3.1-8.4 3.4-2.9 0.3-3.5-0.6-2-3.3 5.5-9.2 10.8-18.5 16.2-27.7 2.9-5 5.7-10.2 8.9-15.1 1.6-2.5 0.5-3-1.5-3.5-3.7-0.9-7-2.7-10-5-7.4-5.2-10.7-16.6-7.5-24.8z" fill="#EEEEEE" p-id="1893"></path><path d="M678 329.8c-6.8 2-13.6 4-20.7 5-20.9 2.9-41.7 3-62.4-0.7-32.7-5.8-62.1-18.5-86.3-42-7-6.8-13.3-14.1-18.9-22.1-1.6-2.2-0.7-7.2 1.3-8.6 2.2-1.4 5.5-0.5 7.3 2 17.9 24 40.5 41.8 69 51.4 30.2 10.2 61.3 12.4 92.8 7.2 8.3-1.4 16.3-3.8 23.9-7.4 1.4-0.6 2.9-1 4.4-1.5 0.8 3.9-3 5.8-3.9 9-0.8 2.7-3.2 4.4-4.9 6.5-0.5-0.1-0.8 0.1-0.8 0.6l0.1-0.1c-0.6 0.1-1.1 0.1-0.9 0.7zM591.3 169.5c-1.7-0.1-3.4-0.1-5.1-0.2 1.8-1.7 3.5-1 5.1 0.2zM624.2 172.9c-1-0.2-2.1-0.3-3.1-0.5 1.2-0.9 2.2-0.6 3.1 0.5zM597.1 169.9c-0.7-0.1-1.4-0.1-2.2-0.2 0.8-0.7 1.6-0.6 2.2 0.2zM612.4 171.4c-0.7-0.1-1.4-0.1-2.1-0.2 0.7-0.7 1.4-0.6 2.1 0.2zM618.2 172.1c-0.5-0.1-1-0.1-1.4-0.2 0.5-0.6 1-0.5 1.4 0.2z" fill="#282526" p-id="1894"></path><path d="M678.7 329.3c0.1-0.5 0.4-0.6 0.8-0.6-0.1 0.4-0.1 0.9-0.8 0.6z" fill="#EEEEEE" p-id="1895"></path><path d="M677.9 329.9c-0.1-0.7 0.4-0.7 0.9-0.7-0.1 0.5 0.3 1.6-0.9 0.7z" fill="#EEEEEE" p-id="1896"></path><path d="M653 219.1c-8.6-0.9-17.2-1.6-25.2-5.3-4.4-2.1-9.1-4.6-9.1-9.9 0-5 3.9-8.5 8.2-10.8 5.7-3.1 11.9-4 18.4-4.7 8.2-0.9 16.2-0.4 24.2 0.6 7.8 1 15.1 4 22 7.8 1.8 1 3.4 2.4 4.7 4 3.4 4.2 2.8 9.2-1.6 12.4-6.8 4.9-14.6 6.1-22.7 6.9-6.4 0.6-12.6-0.7-18.9-1z" fill="#282526" p-id="1897"></path><path d="M491.1 218.7c0.8-7 7.1-11.6 15.2-10.9 6.7 0.6 13 7.9 12.3 14-0.7 5.6-9.1 11.7-15.3 11.1-7.1-0.7-12.9-7.5-12.2-14.2z" fill="#444243" p-id="1898"></path><path d="M559.6 667.8h-40.7v-17.5c13.6 0 27.2 0.2 40.8-0.1 3.2-0.1 8.4-0.8 9.1-2.6 7.7-19.4 23.5-8.5 37.3-11.9-1.8 5.5-3 8.9-4.7 14h152.2V667c-3.5 0.2-7.5 0.6-11.5 0.6-45.9 0.1-91.9 0.3-137.8-0.1-8.8-0.1-13.8 2.2-17.1 10.8-5.5 14-12.4 27.5-19.8 43.6 17.9 0 33.9 0.3 50-0.4 1.8-0.1 4.7-5.1 4.9-8 0.6-9.7 0.2-19.5 0.2-30.1h31.7v38.3h90.7v17.8h-90.5c0 17.4 0.1 33.2 0 49-0.2 32.8-18.6 49.6-52.7 47.8-2.5-8.7-3.3-15.3 8.8-18.2 4.5-1.1 10.4-8 10.6-12.6 1.1-21.4 0.5-43 0.5-65.9h-95.1c11.3-24.4 21.7-47 33.1-71.8zM326.9 836v-13.9c20-7.1 21-8.6 21-30.6v-51.4h-93.1v-57.7h218.5v57h-93v49.5c-0.5 32.6-19.1 49.5-53.4 47.1z m-41.1-114.9h156.7v-21.4H285.8v21.4zM246.8 666.7v-16.5h100.6c0.5-4.8 0.8-8.5 1.3-13h30.8c0.6 4.1 1.2 8.1 2 13.2h75.1c3.8 0 7.6-0.1 11.4-0.1 15-0.1 15 0 13.2 16.5-77.7-0.1-155.5-0.1-234.4-0.1z" fill="#FFFFFF" p-id="1899"></path><path d="M686.2 754.2c2.1-0.9 2.4-1.1 2.8-1.1 29.8-3 29.5-2.9 37.6 25.3 2.9 10.2 6.8 20.1 11.1 29.8 4.1 9.2 9.4 17.9 14.3 27.2-10.3 2.8-17.8 0.7-24.9-7-19.7-21.3-33-45.9-40.9-74.2zM414.1 753.1h31.4c10.9 28.2 21.4 55.5 32 82.9-7.2 2.1-14.5 0.8-21.4-6.6-20.1-21.6-33.7-46.3-42-76.3zM316.4 752.6c-7.4 16.5-12.8 30.9-20.3 44.2-6.2 11.1-14.9 20.9-22.5 31.2-6.1 8.2-14.1 10.8-25.4 7.4 3.6-6.4 7.8-12.1 10.2-18.5 6.9-18.3 13.5-36.8 19.3-55.5 1.9-6 3.5-9.2 10.3-8.8 8.2 0.4 16.4 0 28.4 0zM586.6 752.5c-9.4 32.4-23.5 59.5-47.4 80.6-4 3.5-11.6 2.9-18.5 4.4 8.2-18.6 15.7-35 22.6-51.6 2.6-6.2 5.3-13 5.4-19.6 0.2-12.7 6.8-15 17.5-13.9 6.2 0.6 12.6 0.1 20.4 0.1z" fill="#FFFFFF" p-id="1900"></path></svg>
src/assets/images/bookStore/µ±µ±Íø.svg
New file
@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1666837543425" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2096" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M83.168188 519.487531c17.535375-0.12689 35.071773-0.031722 52.608172-0.031722 17.198707 0.005117 34.398438-0.093121 51.596122 0.037862M115.494431 414.897452c-0.060375-11.618619-9.787924-21.146623-21.386076-20.948101-11.92868 0.204661-20.784372 9.349949-20.748556 21.428032 0.035816 11.970636 9.128915 20.87647 21.194718 20.756743C106.512872 436.015422 115.556852 426.843528 115.494431 414.897452zM289.782919 553.038672c16.989953 0 33.81413 0.290619 50.620911-0.121773 8.516977-0.208754 14.848173-7.466042 15.283078-15.975856 0.415462-8.111748-5.850242-16.909112-13.930267-17.206894-17.071817-0.629333-34.18252-0.191358-51.973722-0.191358C289.782919 530.900465 289.782919 541.259394 289.782919 553.038672zM187.373505 519.493671c-17.197684-0.130983-34.397415-0.032746-51.596122-0.035816-17.536398-0.002047-35.072797-0.097214-52.608172 0.029676M83.168188 519.487531c-12.458753 0.090051-19.564591 6.367011-19.522636 16.84669 0.039909 10.083659 6.940063 16.535605 18.760273 16.59291 35.071773 0.170892 70.14457 0.159636 105.216343 0.007163 11.793604-0.051165 18.978237-6.505158 19.142989-16.361643 0.173962-10.440793-7.086395-16.98586-19.392676-17.080004M84.947717 598.183871c24.419156 28.183899 55.475476 40.190351 92.771917 36.478819 47.625694-4.739954 86.159312-40.048111 91.570555-84.472903 6.16235-50.594305-20.676925-93.489254-68.474534-109.435435-18.427698-6.148024-18.427698-6.148024-18.46249-25.237801 0-4.723581 0.229221-9.460466-0.046049-14.167674-0.623193-10.627035-7.377014-17.526165-16.97665-17.672498-9.419534-0.143263-16.169261 5.803169-17.104563 16.244986-0.74906 8.372691-0.848321 16.874319-0.358157 25.267477 0.462534 7.91425-1.571798 11.656481-10.215666 13.803377-21.809725 5.415336-40.137139 17.253966-54.259788 35.004235-5.771447 7.254218-5.374404 16.502859 0.49221 21.914102 6.594185 6.082532 15.428388 5.467525 22.453385-1.62808 3.083222-3.114944 5.903453-6.505158 9.116635-9.474792 35.971259-33.253358 99.613742-21.217231 118.365828 22.680559 10.670014 24.978904 8.162914 49.242518-9.119705 70.372767-19.277042 23.568788-45.342698 30.407544-74.640977 25.463951-17.675568-2.982938-31.243585-13.151531-43.420929-26.048259-3.51301-3.719718-10.662851-6.179746-15.71696-5.583159-4.046153 0.477884-9.851369 6.060019-10.523681 10.100032C79.539544 586.947969 81.489966 594.192977 84.947717 598.183871zM257.008468 619.286492c23.107277 13.903661 47.164183 18.198477 73.251328 15.07637 60.35767-7.224542 100.997252-65.930595 85.044932-124.519991-10.425444-38.290071-36.285414-61.467957-74.200956-71.071685-8.639774-2.187829-11.669784-5.595438-10.839883-14.198374 0.709151-7.354502 0.26299-14.83487 0.101307-22.25384-0.25071-11.538801-6.647397-18.517749-16.845667-18.653849-10.204409-0.1361-16.756639 6.811126-16.983813 18.290575-0.160659 8.094352-0.469698 16.22452 0.083911 24.284079 0.50756 7.381108-2.189875 10.463306-9.461489 12.490475-10.384511 2.894933-20.227694 7.730055-30.834262 11.9471 6.991228 9.400091 12.596899 16.936741 18.73162 25.184589 37.731346-20.057825 77.543074-7.537673 97.270371 15.760962 18.804275 22.209838 21.172205 56.387241 4.752234 81.044828-8.879228 13.334703-21.12718 22.574135-36.33351 27.701922-22.774703 7.679913-44.886303 5.598508-65.754586-5.548366C268.717138 603.353614 263.006066 611.124602 257.008468 619.286492zM403.465075 415.390685c0.090051-12.009522-8.852622-21.298072-20.644179-21.443381-11.720949-0.144286-21.296025 9.224082-21.376866 20.917402-0.082888 11.992125 8.90788 21.169135 20.860097 21.291932C394.440537 436.281481 403.374 427.514817 403.465075 415.390685zM261.482363 415.359986c0.177032-11.543917-9.41851-21.366633-20.921495-21.417799-12.117992-0.053212-20.944008 8.718569-21.10262 20.971637-0.159636 12.251022 8.544607 21.204951 20.630876 21.222347C252.221442 436.154591 261.298168 427.338808 261.482363 415.359986z" p-id="2097" fill="#d81e06"></path><path d="M512.135076 497.649154l-10.077519 0 0-9.461489-0.205685 0c-4.149507 7.198959-10.593266 10.797927-19.334347 10.797927-7.198959 0-12.923334-2.562359-17.174148-7.687076-4.250814-5.123694-6.375198-12.040221-6.375198-20.747533 0-9.391904 2.39863-16.924461 7.197936-22.597671 4.799306-5.67321 11.072173-8.509814 18.819624-8.509814 7.746428 0 13.368472 3.016707 16.866133 9.049097l0.205685 0 0-35.015491 10.077519 0L512.135076 497.649154zM502.107699 463.815581c0-4.558829-1.499144-8.372691-4.498454-11.440563-2.99931-3.067872-6.693446-4.601808-11.08036-4.601808-5.347798 0-9.56382 1.997494-12.649088 5.990434-3.085268 3.993964-4.627391 9.435906-4.627391 16.325827 0 6.342452 1.481747 11.355629 4.447289 15.039531 2.964518 3.685949 6.915503 5.5279 11.851932 5.5279 4.866844 0 8.844435-1.808182 11.929704-5.424546 3.084245-3.616364 4.626367-8.114818 4.626367-13.497409L502.107699 463.815581zM531.467377 444.74013c5.655813-3.530406 12.186554-5.29561 19.591197-5.29561 13.710256 0 20.567431 7.198959 20.567431 21.595854l0 36.609803-9.975189 0 0-8.792247-0.25685 0c-3.942799 6.753821-9.752108 10.129708-17.430998 10.129708-5.519714 0-9.906627-1.49198-13.162788-4.473895-3.257184-2.982938-4.88424-7.009647-4.88424-12.0832 0-10.626012 6.28924-16.813944 18.87079-18.562774l16.864086-2.364861c0-9.289574-3.839445-13.934361-11.517311-13.934361-6.822382 0-13.044084 2.297322-18.665105 6.889921L531.4684 444.74013zM548.33351 470.91221c-4.663206 0.617054-7.875365 1.782599-9.641591 3.496637-1.766226 1.715061-2.648316 4.113691-2.648316 7.198959 0 2.707668 0.959861 4.919033 2.879584 6.633071 1.918699 1.714038 4.455475 2.570545 7.610328 2.570545 4.386914 0 8.003278-1.542122 10.850116-4.627391 2.843768-3.085268 4.267187-6.958482 4.267187-11.620665l0-5.450129L548.33351 470.91221zM636.412544 497.649154l-10.026354 0 0-32.341592c0-11.689227-4.26821-17.533328-12.803607-17.533328-4.421706 0-8.055466 1.645476-10.900258 4.936429-2.845815 3.290953-4.26821 7.455809-4.26821 12.494569l0 32.444946-10.078543 0 0-56.869219 10.078543 0 0 9.4093 0.205685 0c4.284583-7.164167 10.506285-10.745738 18.665105-10.745738 6.238075 0 10.985192 1.997494 14.242376 5.990434 3.257184 3.993964 4.88424 9.812483 4.88424 17.45658L636.411521 497.649154zM702.58771 492.867244c0 21.046339-10.214642 31.571043-30.644951 31.571043-7.060813 0-13.196557-1.320065-18.407232-3.959172l0-9.718339c6.341429 3.530406 12.426007 5.296633 18.253736 5.296633 13.81361 0 20.721951-7.268544 20.721951-21.801539l0-6.016017-0.205685 0c-4.319375 7.164167-10.765181 10.746762-19.334347 10.746762-7.130398 0-12.837376-2.553149-17.121959-7.661494-4.285606-5.107321-6.426363-11.877515-6.426363-20.310581 0-9.699919 2.365884-17.386996 7.095605-23.061228 4.730745-5.67321 11.037381-8.509814 18.921955-8.509814 7.575536 0 13.196557 3.016707 16.865109 9.049097l0.205685 0 0-7.712659 10.077519 0L702.588733 492.867244zM692.51019 463.815581c0.032746-4.386914-1.439792-8.157797-4.421706-11.311627-2.982938-3.15383-6.65149-4.730745-11.003612-4.730745-5.484921 0-9.753131 2.013867-12.803607 6.0416-3.051499 4.028757-4.577249 9.555633-4.577249 16.582677 0 6.033413 1.473561 10.917654 4.421706 14.653745 2.948145 3.736091 6.856152 5.604648 11.724019 5.604648 4.901637 0 8.911974-1.782599 12.032034-5.347798 3.119037-3.564175 4.66116-8.089235 4.627391-13.574157L692.509167 463.815581zM769.945817 497.649154l-10.077519 0 0-9.461489-0.205685 0c-4.148483 7.198959-10.593266 10.797927-19.334347 10.797927-7.197936 0-12.923334-2.562359-17.173125-7.687076-4.250814-5.123694-6.375198-12.040221-6.375198-20.747533 0-9.391904 2.39863-16.924461 7.197936-22.597671 4.798283-5.67321 11.072173-8.509814 18.819624-8.509814s13.368472 3.016707 16.865109 9.049097l0.205685 0 0-35.015491 10.077519 0L769.945817 497.649154zM759.919463 463.815581c0-4.558829-1.500167-8.372691-4.498454-11.440563-3.000334-3.067872-6.693446-4.601808-11.08036-4.601808-5.347798 0-9.564843 1.997494-12.649088 5.990434-3.085268 3.993964-4.627391 9.435906-4.627391 16.325827 0 6.342452 1.482771 11.355629 4.448312 15.039531 2.964518 3.685949 6.916527 5.5279 11.851932 5.5279 4.866844 0 8.844435-1.808182 11.92868-5.424546 3.085268-3.616364 4.627391-8.114818 4.627391-13.497409L759.920486 463.815581zM789.280164 444.74013c5.655813-3.530406 12.186554-5.29561 19.591197-5.29561 13.710256 0 20.567431 7.198959 20.567431 21.595854l0 36.609803-9.975189 0 0-8.792247-0.25685 0c-3.942799 6.753821-9.752108 10.129708-17.430998 10.129708-5.519714 0-9.906627-1.49198-13.162788-4.473895-3.257184-2.982938-4.88424-7.009647-4.88424-12.0832 0-10.626012 6.28924-16.813944 18.87079-18.562774l16.864086-2.364861c0-9.289574-3.839445-13.934361-11.517311-13.934361-6.822382 0-13.044084 2.297322-18.665105 6.889921L789.281187 444.74013zM806.145274 470.91221c-4.663206 0.617054-7.875365 1.782599-9.641591 3.496637-1.766226 1.715061-2.648316 4.113691-2.648316 7.198959 0 2.707668 0.959861 4.919033 2.879584 6.633071 1.918699 1.714038 4.455475 2.570545 7.610328 2.570545 4.386914 0 8.003278-1.542122 10.850116-4.627391 2.843768-3.085268 4.267187-6.958482 4.267187-11.620665l0-5.450129L806.145274 470.91221zM894.224308 497.649154l-10.026354 0 0-32.341592c0-11.689227-4.26821-17.533328-12.803607-17.533328-4.421706 0-8.055466 1.645476-10.900258 4.936429-2.845815 3.290953-4.26821 7.455809-4.26821 12.494569l0 32.444946-10.078543 0 0-56.869219 10.078543 0 0 9.4093 0.205685 0c4.284583-7.164167 10.506285-10.745738 18.665105-10.745738 6.238075 0 10.985192 1.997494 14.242376 5.990434 3.257184 3.993964 4.88424 9.812483 4.88424 17.45658L894.223285 497.649154zM960.399473 492.867244c0 21.046339-10.214642 31.571043-30.644951 31.571043-7.060813 0-13.196557-1.320065-18.407232-3.959172l0-9.718339c6.341429 3.530406 12.426007 5.296633 18.253736 5.296633 13.81361 0 20.721951-7.268544 20.721951-21.801539l0-6.016017-0.205685 0c-4.319375 7.164167-10.765181 10.746762-19.334347 10.746762-7.130398 0-12.837376-2.553149-17.121959-7.661494-4.285606-5.107321-6.426363-11.877515-6.426363-20.310581 0-9.699919 2.365884-17.386996 7.095605-23.061228 4.730745-5.67321 11.037381-8.509814 18.921955-8.509814 7.575536 0 13.196557 3.016707 16.865109 9.049097l0.205685 0 0-7.712659 10.077519 0L960.400496 492.867244zM950.322977 463.815581c0.032746-4.386914-1.439792-8.157797-4.421706-11.311627-2.982938-3.15383-6.65149-4.730745-11.003612-4.730745-5.484921 0-9.753131 2.013867-12.803607 6.0416-3.051499 4.028757-4.577249 9.555633-4.577249 16.582677 0 6.033413 1.473561 10.917654 4.421706 14.653745 2.948145 3.736091 6.856152 5.604648 11.724019 5.604648 4.901637 0 8.911974-1.782599 12.032034-5.347798 3.119037-3.564175 4.66116-8.089235 4.627391-13.574157L950.321954 463.815581z" p-id="2098" fill="#d81e06"></path><path d="M427.967118 627.373681c0-2.77623 0.950651-5.115508 2.854001-7.017834 1.901303-1.901303 4.267187-2.854001 7.095605-2.854001 2.87856 0 5.270027 0.963954 7.173376 2.892887 1.901303 1.927909 2.854001 4.254907 2.854001 6.978948 0 2.673899-0.951675 4.975315-2.854001 6.903224-1.90335 1.928932-4.319375 2.891863-7.250124 2.891863-2.828418 0-5.180999-0.962931-7.05672-2.891863C428.904467 632.350019 427.967118 630.04758 427.967118 627.373681zM529.235546 631.461789c-6.53074 3.906983-14.396895 5.862521-23.600511 5.862521-12.341073 0-22.265096-3.959172-29.771047-11.877515-7.507998-7.91732-11.260461-18.175965-11.260461-30.773887 0-13.985526 4.049223-25.25929 12.147668-33.82027s18.934235-12.842493 32.509415-12.842493c7.816013 0 14.500249 1.388627 20.053732 4.164856l0 14.962783c-6.016017-4.421706-12.700253-6.633071-20.053732-6.633071-8.637728 0-15.669888 2.996241-21.094434 8.985652-5.425569 5.990434-8.137331 13.973246-8.137331 23.947412 0 9.822716 2.557242 17.507746 7.674796 23.061228 5.116531 5.553483 12.018731 8.330736 20.708648 8.330736 7.353478 0 14.294564-2.416026 20.825304-7.250124L529.237593 631.461789zM543.812543 593.592296c0-14.08888 3.933589-25.208125 11.800767-33.358759 7.867178-8.148587 18.535145-12.224416 32.006971-12.224416 12.803607 0 22.842241 3.921309 30.118971 11.761881 7.274684 7.841595 10.913561 18.678408 10.913561 32.510438 0 13.471826-3.882424 24.346501-11.646248 32.625048-7.764847 8.278547-18.176988 12.417821-31.236422 12.417821-12.752442 0-22.933315-4.01136-30.54262-12.032034C547.616172 617.270579 543.812543 606.703919 543.812543 593.592296zM559.237861 593.129762c0 9.821693 2.480494 17.558911 7.442506 23.215748 4.962012 5.655813 11.632945 8.484232 20.014846 8.484232 8.637728 0 15.219633-2.76395 19.744693-8.29185 4.524037-5.526877 6.78759-13.458523 6.78759-23.793916 0-10.385535-2.263553-18.356067-6.78759-23.909549-4.52506-5.553483-11.106965-8.330736-19.744693-8.330736-8.484232 0-15.181771 2.90619-20.091594 8.716522C561.692772 575.031569 559.237861 583.001077 559.237861 593.129762zM772.727163 635.31863l-15.116279 0 0-48.975435c0-9.255805-1.439792-15.875572-4.319375-19.860327-2.880607-3.984754-7.611352-5.978155-14.192234-5.978155-5.552459 0-10.308787 2.597151-14.267958 7.79043-3.960195 5.193279-5.939269 11.337209-5.939269 18.433838l0 48.589648-15.116279 0 0-50.51858c0-16.196891-6.247284-24.295336-18.741853-24.295336-5.759167 0-10.527774 2.468215-14.306844 7.404644-3.778046 4.935406-5.668093 11.234879-5.668093 18.896372l0 48.5129-15.117302 0 0-85.302805 15.117302 0 0 13.497409 0.308015 0c6.067182-10.336416 14.937201-15.503089 26.610054-15.503089 5.706979 0 10.745738 1.568728 15.116279 4.705162 4.370541 3.136433 7.40362 7.379061 9.101285 12.726859 6.325056-11.619642 15.784498-17.430998 28.382421-17.430998 18.767436 0 28.152177 11.5695 28.152177 34.707476L772.72921 635.31863z" p-id="2099" fill="#d81e06"></path></svg>
src/assets/images/default-book-img.png
src/assets/images/default_avatar.png
src/assets/images/delete.png
src/assets/images/index/bookListBg.png
src/assets/images/login/boxBg.png
src/assets/images/login/pageBg.png
src/assets/images/login/weChartIcon.png
src/assets/images/officialAccount.jpg
src/assets/images/packDown.png
src/assets/images/packUp.png
src/assets/images/pageFooter/logo.png
src/assets/images/pageFooter/wechatCode.png
src/assets/images/pageFooter/weiboCode.png
src/assets/images/pageHeader/logo.png
src/assets/images/personalCenter/choose.png
src/assets/images/personalCenter/examine.png
src/assets/images/personalCenter/noPass.png
src/assets/images/personalCenter/pass.png
src/assets/images/teaching/arrow.png
src/assets/images/teaching/electronicBooks.png
src/assets/images/teaching/paperCopies.png
src/assets/images/teaching/sample.png
src/assets/images/teaching/teacher.png
src/assets/images/tuijian-bg.png
src/assets/images/xiehe/about/about_bg.png
src/assets/images/xiehe/about/about_bg@2x.png
src/assets/images/xiehe/about/beijing.png
src/assets/images/xiehe/about/beijing@2x.png
src/assets/images/xiehe/about/dizhi.png
src/assets/images/xiehe/about/dizhi@2x.png
src/assets/images/xiehe/about/email(1).png
src/assets/images/xiehe/about/email.png
src/assets/images/xiehe/about/email@2x(1).png
src/assets/images/xiehe/about/email@2x.png
src/assets/images/xiehe/about/fazhan.png
src/assets/images/xiehe/about/fazhan@2x.png
src/assets/images/xiehe/about/footer-bg.png
src/assets/images/xiehe/about/footer-bg@2x.png
src/assets/images/xiehe/about/phone.png
src/assets/images/xiehe/about/phone@2x.png
src/assets/images/xiehe/about/website.png
src/assets/images/xiehe/about/website@2x.png
src/assets/images/xiehe/about/wenhua_bg.png
src/assets/images/xiehe/about/wenhua_bg@2x.png
src/assets/images/xiehe/about/yinhao.png
src/assets/images/xiehe/about/zizhi.png
src/assets/images/xiehe/about/zizhi@2x.png
src/assets/images/xiehe/about/zongzhi.png
src/assets/images/xiehe/about/zongzhi@2x.png
src/assets/images/xiehe/about/¡°@2x.png
src/assets/images/xiehe/about/¹ØÓÚÎÒÃÇ_slices.zip
Binary files differ
src/assets/images/xiehe/detail/Audio.png
src/assets/images/xiehe/detail/Audio@2x.png
src/assets/images/xiehe/detail/PPT.png
src/assets/images/xiehe/detail/PPT@2x.png
src/assets/images/xiehe/detail/details_bg.png
src/assets/images/xiehe/detail/details_bg@2x.png
src/assets/images/xiehe/detail/img.png
src/assets/images/xiehe/detail/img@2x.png
src/assets/images/xiehe/detail/shijuan.png
src/assets/images/xiehe/detail/shijuan@2x.png
src/assets/images/xiehe/detail/shixun.png
src/assets/images/xiehe/detail/shixun@2x.png
src/assets/images/xiehe/detail/tuozhan.png
src/assets/images/xiehe/detail/tuozhan@2x.png
src/assets/images/xiehe/detail/video.png
src/assets/images/xiehe/detail/video@2x.png
src/assets/images/xiehe/detail/ziliao.png
src/assets/images/xiehe/detail/ziliao@2x.png
src/assets/images/xiehe/detail/Êý×ֽ̲ÄÏêÇé_slices.zip
Binary files differ
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined.png
src/assets/images/xiehe/home/Chevron_Circle Right _ undefined _ Glyph_ undefined@2x.png
src/assets/images/xiehe/home/Frame(1).png
src/assets/images/xiehe/home/Frame(2).png
src/assets/images/xiehe/home/Frame.png
src/assets/images/xiehe/home/Frame@2x(1).png
src/assets/images/xiehe/home/Frame@2x(2).png
src/assets/images/xiehe/home/Frame@2x.png
src/assets/images/xiehe/home/Group_302.png
src/assets/images/xiehe/home/Group_302@2x.png
src/assets/images/xiehe/home/Group_303.png
src/assets/images/xiehe/home/Group_303@2x.png
src/assets/images/xiehe/home/banner.png
src/assets/images/xiehe/home/banner@2x.png
src/assets/images/xiehe/home/caozuoshouce.png
src/assets/images/xiehe/home/caozuoshouce@2x.png
src/assets/images/xiehe/home/footer-bg.png
src/assets/images/xiehe/home/footer-bg@2x.png
src/assets/images/xiehe/home/jiaoshirenzheng.png
src/assets/images/xiehe/home/jiaoshirenzheng@2x.png
src/assets/images/xiehe/home/tuijian-bg.png
src/assets/js/config.js
New file
@@ -0,0 +1,84 @@
export const requestCtx = 'http://182.92.203.7:5001' // è¯·æ±‚地址
// export const appId = 1051;
// export const requestCtx = 'http://172.31.31.145' // è¯·æ±‚地址
// export const requestCtx = 'http://172.0.0.1' // è¯·æ±‚地址
export const appId = 1
export const requestTimeOut = 300000 // è¯·æ±‚è¶…æ—¶æ—¶é—´
export const tokenKey = 'jilin-token'
export const userInfoKey = 'jilin-userInfo' // ç”¨æˆ·ä¿¡æ¯key
export const appRefCode = 'jilinWebsite'
export const goodsStore = `defaultGoodsStore${appId}` // é»˜è®¤å•†å“åº“(书城)
export const publicStore = `defaultPublicStore${appId}` // é»˜è®¤èµ„源开放仓储
export const publicRepository = `defaultPublicRepository${appId}` // é»˜è®¤èµ„源开放库
export const reg_tel =
  /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/ // ç”µè¯å·æ­£åˆ™
// refcode
const refCode = {
  // æ”¶è—èµ„源库
  FavoriteMathVideo: 'FavoriteMathVideo',
  FavoriteMathPicture: 'FavoriteMathPicture',
  FavoriteMathAudio: 'FavoriteMathAudio',
  FavoriteMathModel: 'FavoriteMathModel',
  // è½®æ’­å›¾
  bannerCode: 'jilin_banner\\jilin_digitalResource',
  // æ ‡å‡†
  criterion: 'jilin_criterion',
  // èµ„讯
  information: 'jilin_information',
  // å…³äºŽæˆ‘们
  aboutUs: 'jilin_aboutUs',
  // è£èª‰å¥–励
  honorAwards: 'jilin_honorAwards',
  // è”系我们
  contactUs: 'jilin_contactUs',
  // ä»“库库
  pictureCode: 'jilin_imgResourceLibrary',
  audioCode: 'jilin_audiosResourceLibrary',
  videoCode: 'jilin_videosResourceLibrary',
  modelCode: 'jilin_modelsResourceLibrary',
  // å•†å“åº“
  imageStore: 'jilin_imgLibrary\\jilin_imageStore',
  videoStore: 'jilin_videosLibrary\\jilin_videosStore',
  audiosStore: 'jilin_audiosLibrary\\jilin_audiosStore',
  modelStore: 'jilin_modelsLibrary\\jilin_modelsStore',
  // ä¼šå‘˜å•†å“åº“
  memberImage: 'jilin_imgLibrary\\jilin_memberImage',
  memberAudios: 'jilin_audiosLibrary\\jilin_memberAudios',
  memberVideos: 'jilin_videosLibrary\\jilin_memberVideos',
  memberModels: 'jilin_modelsLibrary\\jilin_memberModels',
  // æœ€æ–°èµ„源库
  newImageStore: 'jilin_imgLibrary\\jilin_newImageStore',
  newaudiosStore: 'jilin_audiosLibrary\\jilin_newaudiosStore',
  newVideosStore: 'jilin_videosLibrary\\jilin_newVideosStore',
  newModelsStore: 'jilin_modelsLibrary\\jilin_newModelsStore',
  // é¦–页推荐资源
  recommendImgStore:'jilin_imgLibrary\\jilin_recommendedImage',
  recommendAudioStore:'jilin_audiosLibrary\\jilin_recommendedAudio',
  recommendVideoStore:'jilin_videosLibrary\\jilin_recommendedVideo',
  recommendModelStore:'jilin_modelsLibrary\\jilin_recommendedModel',
}
const wxLogin = {
  appid: 'wx2b9d4a6308fd03d6',
  scope: 'snsapi_login',
  logInRedirectURL: encodeURIComponent(requestCtx + '/website'),
  authenRedirectURL:encodeURIComponent(requestCtx + '/website/#/userInfo')
}
const config = {
  requestCtx,
  requestTimeOut,
  tokenKey,
  userInfoKey,
  appRefCode,
  goodsStore,
  reg_tel,
  appId,
  refCode,
  wxLogin
}
export default config
src/assets/js/iframe.js
New file
@@ -0,0 +1,32 @@
let isSelect = false;
let move = false;
document.addEventListener('mousedown', () => {
    isSelect = true;
});
document.addEventListener('mousemove', () => {
    if (isSelect) {
        move = true;
    }
});
document.addEventListener('mouseup', (e) => {
    isSelect = false;
    if (move) {
        const selection = window.getSelection();
        if (selection && selection.toString().length != 0) {
            parent.window.selectChange(e)
        }
    }
    move = false;
    e.preventDefault();
});
parent.window.document.getElementsByClassName("epub-container")[0].addEventListener("scroll", function (e) {
    parent.window.scroll(e); // è°ƒç”¨å¤„理函数并传入参数
})
src/assets/js/middleGround/WebMiddleGroundApi.js
New file
@@ -0,0 +1,24 @@
// å–消接口调用能力;
// é˜Ÿåˆ—的必要性??
import resource from "./api/resource.js";
import store from "./api/store.js";
import identity from "./api/identity.js";
import ugc from "./api/ugc.js";
import app from "./api/app.js";
import file from "./api/file.js";
import job from "./api/job.js";
import edu from "./api/edu.js";
const WebMiddleGroundApi = {
  resource,
  store,
  identity,
  ugc,
  app,
  file,
  job,
  edu,
};
export default WebMiddleGroundApi;
src/assets/js/middleGround/api/app.js
New file
@@ -0,0 +1,57 @@
import request from "@/plugin/axios/index.ts";
const appApi = {
  // èŽ·å–ç”¨æˆ·æ¶ˆæ¯åˆ—è¡¨
  getAppMessageList(data) {
    return request({
      url: "/app/api/ApiGetAppMessageList",
      method: "post",
      data
    });
  },
  // èŽ·å–ç”¨æˆ·æ¶ˆæ¯è¯¦æƒ…
  getMessage(data) {
    return request({
      url: "/app/api/ApiGetMessage",
      method: "post",
      data
    });
  },
  //获取凭证
  getTicketResult(data) {
    return request({
      url: "/app/api/ApiGetTicketResult",
      method: "post",
      data
    });
  },
  //使用凭证
  useTicket(data) {
    return request({
      url:   "/app/api/ApiUseTicket",
      method: "post",
      data
    });
  },
  // èŽ·å–CmsItem按照Event统计
  getEventRankList(data) {
    return request({
      url: "/app/api/ApiGetEventRankList",
      method: "post",
      data
    });
  },
  // èŽ·å–å­¦ä¹ æ—¶é•¿æŒ‰ç…§Event统计
  getStaticsSum(data) {
    return request({
      url: "/app/api/ApiGetUserStaticsSum",
      method: "post",
      data
    });
  },
};
export default appApi;
src/assets/js/middleGround/api/edu.js
New file
@@ -0,0 +1,166 @@
import request from '@/plugin/axios/index.ts'
import { handleQueryResourceListData } from '../tool'
const eduApi = {
  // èŽ·å–å•†å“ä¸‹çš„ç»„å·ç­–ç•¥
  getQuizConfigListByProduct(data) {
    return request({
      url: '/edu/api/ApiGetQuizConfigListByProduct',
      method: 'post',
      data,
    })
  },
  // èŽ·å–ç»„å·ç»“æžœ
  getEduQuizConfigResult(data) {
    return request({
      url: '/edu/api/ApiGetEduQuizConfigResult',
      method: 'post',
      data,
    })
  },
  //申请课程
  applyNewCourse(data) {
    return request({
      url: '/edu/api/ApiApplyNewCourse',
      method: 'post',
      data,
    })
  },
  //更新课程申请信息
  updateCourseApply(data) {
    return request({
      url: '/edu/api/ApiUpdateCourseApply',
      method: 'post',
      data,
    })
  },
  //获取我的课程
  getAppCourseList(data) {
    return request({
      url: '/edu/api/ApiGetAppCourseList',
      method: 'post',
      data,
    })
  },
  //获取已申请的课程详情
  getCourseById(data) {
    return request({
      url: '/edu/api/ApiGetCourseById',
      method: 'post',
      data,
    })
  },
  //获取创建课程中的班级列表
  getCourseClassList(data) {
    return request({
      url: '/edu/api/ApiGetCourseClassList',
      method: 'post',
      data,
    })
  },
  //创建班级信息
  newCourseClass(data) {
    return request({
      url: '/edu/api/ApiNewCourseClass',
      method: 'post',
      data,
    })
  },
  //删除班级信息
  delCourseClass(data) {
    return request({
      url: '/edu/api/ApiDelCourseClass',
      method: 'post',
      data,
    })
  },
  // æ›´æ–°ç­çº§ä¿¡æ¯
  updateCourseClass(data) {
    return request({
      url: '/edu/api/ApiUpdateCourseClass',
      method: 'post',
      data,
    })
  },
  //创建课程订单
  createCourseOrder(data) {
    return request({
      url: '/store/api/CreateCourseOrder',
      method: 'post',
      data,
    })
  },
  // å…è´¹é¢†å–课程
  makeFreeOrderPay(data) {
    return request({
      url: '/store/api/MakeFreeOrderPay',
      method: 'post',
      data,
    })
  },
  // èŽ·å–æŽ’åç»“æžœ
  getRankingList(data) {
    return request({
      url: '/edu/api/ApiGetRankingList',
      method: 'post',
      data,
    })
  },
  //获取个人排名
  getRanking(data) {
    return request({
      url: '/edu/api/ApiGetTopRanking',
      method: 'post',
      data,
    })
  },
  // æ–°å»ºæŽ’名记录
  newRanking(data) {
    return request({
      url: '/edu/api/ApiNewRanking',
      method: 'post',
      data,
    })
  },
  // åˆ é™¤ç»„卷规则
  delQuizConfig(data) {
    return request({
      url: '/edu/admin/DelQuizConfig',
      method: 'post',
      data,
    })
  },
  // æ›´æ–°ç»„卷规则
  updateQuizConfig(data) {
    return request({
      url: '/edu/admin/UpdateQuizConfig',
      method: 'post',
      data,
    })
  },
  // æ ¹æ®ID获取组卷配置
  getQuizConfig(data) {
    return request({
      url: '/edu/admin/GetQuizConfig',
      method: 'post',
      data,
    })
  },
}
export default eduApi
src/assets/js/middleGround/api/file.js
New file
@@ -0,0 +1,94 @@
import request from "@/plugin/axios/index.ts";
const fileApi = {
  // èŽ·å–pdf总页数
  getPdfTotalPage(data) {
    return request({
      url: "/file/GetPdfTotalPage",
      method: "post",
      data
    });
  },
  // èŽ·å–pdf、word、ppt等转图片预览
  getPdfInfo(data) {
    return request({
      url: "/file/GetPdfInfo",
      method: "post",
      data
    });
  },
  //获取pdf目录
  GetPdfToc(data) {
    return request({
      url: "/file/GetPdfToc",
      method: "post",
      data
    });
  },
  //获取文件
  getPdfPageImage(params) {
    return request({
      url: '/file/GetPdfPageImage',
      method: 'get',
      responseType: 'blob',
      params
    });
  },
  //上传文件
  upload(data) {
    return request({
      url: "/file/api/ApiUpload",
      method: "post",
      data
    });
  },
  // èŽ·å–é˜¿é‡Œäº‘åŠ é€Ÿåœ°å€
  getAliVod(data) {
    return request({
      url: "/file/GetAliVod",
      method: "post",
      data,
    });
  },
  downloadForAuthorize(params) {
    return request({
      url: '/file/api/ApiDownloadForAuthorize',
      method: 'GET',
      responseType: 'blob',
      params
    });
  },
  // æ‰¹é‡ä¸‹è½½
  downloadFiles(data) {
    return request({
      url: '/file/api/ApiDownloadFiles',
      method: 'post',
      responseType: 'blob',
      data
    });
  },
  // æ‰¹é‡ä¸‹è½½get
  getDownloadFiles (params) {
    return request({
      url: '/file/api/ApiGetDownloadFiles',
      method: 'GET',
      responseType: 'blob',
      headers:{
        'md5s':params
      }
    });
  },
  // å‘送下载邮件
  sendFileEmail (data) {
    return request({
      url:'/file/api/ApiSendFileWithEmail',
      method:'post',
      data
    })
  }
}
export default fileApi;
src/assets/js/middleGround/api/identity.js
New file
@@ -0,0 +1,181 @@
import request from "@/plugin/axios/index.ts";
const identityApi = {
  // èŽ·å–å›¾å½¢éªŒè¯ç 
  getImgCode() {
    return request({
      url: "/identity/NewCaptcha",
      method: "post",
    });
  },
  // éªŒè¯å›¾å½¢éªŒè¯ç 
  verificationImgCode(data) {
    return request({
      url: "/identity/ValidCaptcha",
      method: "post",
      data,
    });
  },
  // èŽ·å–çŸ­ä¿¡éªŒè¯ç 
  getPhoneCode(data) {
    return request({
      url: "/identity/NewSms",
      method: "post",
      data,
    });
  },
  // éªŒè¯çŸ­ä¿¡éªŒè¯ç 
  verificationPhoneCode(data) {
    return request({
      url: "/identity/api/ApiValidMobilePhone",
      method: "post",
      data,
    });
  },
  // é€šè¿‡æ‰‹æœºå·æ³¨å†Œç”¨æˆ·
  registerAppUserWithPhone(data) {
    return request({
      url: "/identity/api/RegisterAppUserWithPhone",
      method: "post",
      data,
    });
  },
  // è´¦å·å¯†ç ç™»å½•
  loginByPassword(data) {
    return request({
      url: "/identity/api/LoginByPassword",
      method: "post",
      data,
    });
  },
  // çŸ­ä¿¡éªŒè¯ç ç™»å½•
  loginByMobilePhone(data) {
    return request({
      url: "/identity/api/LoginByMobilePhone",
      method: "post",
      data,
    });
  },
  // è®¾ç½®ç”¨æˆ·key
  setUserKey(data) {
    return request({
      url: "/identity/api/ApiAppUserSetKey",
      method: "post",
      data,
    });
  },
  // èŽ·å–ç”¨æˆ·key
  getUserKey(data) {
    return request({
      url: "/identity/api/ApiGetAppUserKey",
      method: "post",
      data,
    });
  },
  // åˆ é™¤ç”¨æˆ·key
  delUserKey(data) {
    return request({
      url: "/identity/api/ApiDelAppUserKey",
      method: "post",
      data,
    });
  },
  // èŽ·å–åŽ»å½“å‰ç”¨æˆ·ä¿¡æ¯
  getCurrentAppUser() {
    return request({
      url: "/identity/api/GetCurrentAppUser",
      method: "post",
    });
  },
  // æ·»åŠ ç”¨æˆ·ä¿¡æ¯
  setAppUserInfo(data) {
    return request({
      url: "/identity/api/SetAppUserInfoRequest",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·æ›´æ¢ç»‘定手机号,如没有绑定手机则自动创建
  userSetPhoneNumber(data) {
    return request({
      url: "/identity/api/ApiUserSetPhoneNumber",
      method: "post",
      data,
    });
  },
  // æ£€æµ‹ç”¨æˆ·æ˜¯å¦ç»‘定微信
  checkBuildingWeChat(data) {
    return request({
      url: "/identity/api/ApiCheckBuildingWeChat",
      method: "post",
      data,
    });
  },
  // é€šè¿‡æ‰‹æœºå·é‡ç½®å¯†ç 
  changePasswordByMobilePhone(data) {
    return request({
      url: "/identity/api/ChangePasswordByMobilePhone",
      method: "post",
      data,
    });
  },
  // å¾®ä¿¡å¼€æ”¾å¹³å°æ‰«ç ç™»å½•
  loginByWeChatOpenCode(data) {
    return request({
      url: "/identity/api/LoginByWeChatOpenCode",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·ç»‘定微信号
  bindingWeChat(data) {
    return request({
      url: "/identity/api/ApiBindingWeChat",
      method: "post",
      data,
    });
  },
  // è®¾ç½®ç™»å½•的用户名和密码,用户名和密码至少6位
  setLoginNameAndPassword(data) {
    return request({
      url: "/identity/api/ApiUserSetLoginNameAndPassword",
      method: "post",
      data,
    });
  },
  // èŽ·å–é‚®ç®±éªŒè¯ç 
  getEmailCode(data) {
    return request({
      url: "/identity/api/SendVerifyEMail",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·ç»‘定邮箱
  bindingEmail(data) {
    return request({
      url: "/identity/api/ApiBindEMail",
      method: "post",
      data,
    });
  },
};
export default identityApi;
src/assets/js/middleGround/api/job.js
New file
@@ -0,0 +1,34 @@
import request from "@/plugin/axios/index.ts";
import { tokenKey } from "@/assets/js/config";
import toolClass from "@/assets/js/toolClass";
const jobApi = {
  // ç»Ÿè®¡
  newJobWithNewView(data) {
    return request({
      url: "/job/api/NewJobWithNewView",
      method: "post",
      data
    });
  },
  newSession(data) {
    let token = toolClass.getCookie(tokenKey);
    return request({
      url: token ? "/job/api/AppUserNewSession" : "/job/api/NewSession",
      method: "post",
      data
    });
  },
  newJobWithApiNewEvent(data){
    return request({
      url: "/job/api/NewJobWithApiNewEvent",
      method: "post",
      data
    });
  }
};
export default jobApi;
src/assets/js/middleGround/api/resource.js
New file
@@ -0,0 +1,223 @@
import request from "@/plugin/axios/index.ts";
import { publicStore, publicRepository } from "@/assets/js/config";
import { tokenKey } from "@/assets/js/config";
import { handleQueryResourceListData } from "../tool";
import toolClass from "@/assets/js/toolClass";
const resourceApi = {
  /*
    **获取资源列表&详情**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    repositoryInfo: ä»“库
    queryType: æ£€ç´¢ç±»åž‹
    paging: åˆ†é¡µ
    sort: æŽ’序
    fields: è‡ªå®šä¹‰å­—段
    itemId: èŽ·å–è¯¦æƒ…æ—¶çš„èµ„æºID
  */
  getItem: ({
    path,
    storeInfo = publicStore,
    repositoryInfo = publicRepository,
    queryType,
    linkType,
    paging,
    sort,
    fields,
    itemId,
    itemIds,
    itemType,
    coverSize,
    itemIdArr,
    SysType,
    tourism_isHighQualityResources,
  }) => {
    if (!path) return Promise.reject("接口请求必要参数不能为空!");
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + "",
        RepositoryRefCode: repositoryInfo + "",
        Type: queryType || "\\",
        LinkType: linkType || "",
      },
      PageQuery: {
        Start: paging?.start || "0",
        Size: paging?.size || "10",
      },
      SortQuery: sort ? [sort] : [{
        LinkOrder: "Desc"
      }],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      Type: [],
      TypeId: [],
      State: [],
      Tag: [],
      LinkInfo: [],
      LinkFile: [],
      CmsItemType: [],
      ChildrenFolderCount: [],
      ChildrenCount: [],
      ...fields,
    };
    if (itemIdArr) query["Id"] = itemIdArr;
    if (SysType) query["SysType="] = [`${SysType}`];
    if (tourism_isHighQualityResources)
      query["tourism_isHighQualityResources="] = [
        `${tourism_isHighQualityResources}`,
      ];
    if (itemId) query["Id="] = [`${itemId}`];
    if (itemIds) query["Id="] = itemIds;
    if (itemType) query["Type="] = [`${itemType}`];
    const body = { query: JSON.stringify({ Query: [{ Q1: query }] }) };
    let token = localStorage.getItem(tokenKey);
    return request({
      url: token ? "/resource/api/ApiAppUserQuery" : "/resource/api/ApiQuery",
      method: "post",
      data: body,
    }).then((resp) => {
      if (resp.length > 0) {
        const data = resp[0];
        const datas = handleQueryResourceListData({
          datas: data.datas,
          fields,
          path,
          storeInfo,
          repositoryInfo,
          coverSize,
        });
        return { datas, total: data.totalCount };
      }
      return { datas: [], total: 0 };
    });
  },
  // æ¨¡ç³Šæœç´¢
  EsQuery(query) {
    let { params, path, paging } = query;
    let queryBody = {
      Type: "*",
      Store: [],
      ItemType: [],
      CmsType: [],
      SysType: ["CmsItem"],
      LinkInfo: [],
      PageQuery: {
        Start: paging?.start || "0",
        Size: paging?.size || "10",
      },
    };
    // è®¾ç½®ä¸åŒçš„Path
    // å¦‚果没有搜索关键字,则只用获取名称
    if (params.length > 0) {
      let data = {
        "||Name": [...params],
        "||tourism_content*": [...params],
        "||tourism_workflow*": [...params],
        "||tourism_notes*": [...params],
        "||tourism_caseIndex*": [...params],
        "||tourism_basicCase*": [...params],
        "||tourism_judgmentAndReasons*": [...params],
        "||tourism_legalIssuesInvolvedInThisCase*": [...params],
        "||tourism_referenceAnswerAndLegalAnalysis*": [...params],
        "||tourism_case*": [...params],
        "||tourism_clause*": [...params],
        "||tourism_unscramble*": [...params],
        "||tourism_specialRemind*": [...params],
        "||tourism_fiction*": [...params],
        "||tourism_authorityNature*": [...params],
        "||tourism_authorityGist*": [...params],
        "||tourism_penaltyGist*": [...params],
        "||tourism_penaltyTerms*": [...params],
        "||tourism_penaltyType*": [...params],
        "||tourism_remarksNote*": [...params],
        "||tourism_keyword*": [...params],
      };
      Object.assign(queryBody, data);
    } else {
      let data = {
        Name: [],
      };
      Object.assign(queryBody, data);
    }
    // å…¨éƒ¨æœç´¢  - å•独的某个库
    if (path != "All") {
      let data = {
        Path: [
          {
            Repository: "tourism_tourismLawsAndRegulationsDatabase",
            Path: path,
          },
        ],
      };
      Object.assign(queryBody, data);
    }
    const body = { query: JSON.stringify({ Query: [{ Q1: queryBody }] }) };
    return request({
      url: "/resource/api/ApiEsQuery",
      method: "post",
      data: body,
    }).then((res) => {
      if (res.length > 0) {
        const data = res[0];
        const datas = handleQueryResourceListData({
          datas: data.datas,
          path,
        });
        return { datas, total: data.totalCount };
      }
      return { data: [], total: 0 };
    });
  },
  //获取资源类型
  getCmsTypeByRefCode(data) {
    return request({
      url: "resource/api/ApiGetCmsTypeByRefCode",
      method: "post",
      data,
    });
  },
  //取消cms收藏
  delCmsItemLink(data) {
    return request({
      url: "/resource/api/ApiDelCmsItemLink",
      method: "post",
      data,
    });
  },
  //cms收藏
  collectCmsItem(data) {
    return request({
      url: "/resource/api/ApiAddCmsItemLink",
      method: "post",
      data,
    });
  },
  // èŽ·å–cms收藏列表
  getCmsCollectList(data) {
    const body = { query: JSON.stringify({ Query: [{ Q1: data }] }) };
    return request({
      url: "/resource/api/ApiAppUserQuery",
      method: "post",
      data: body,
    });
  },
};
export default resourceApi;
src/assets/js/middleGround/api/store.js
New file
@@ -0,0 +1,879 @@
import request from '@/plugin/axios/index.ts'
import { tokenKey, goodsStore } from '@/assets/js/config'
import { handleQueryResourceListData, handleDetailQueryRequestData } from '../tool'
const storeApi = {
  /*
    **获取商品列表**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    channelInfo: é¢‘道
    subAccess:
    queryType: æ£€ç´¢ç±»åž‹
    paging: åˆ†é¡µ
    sort: æŽ’序
    fields: è‡ªå®šä¹‰å­—段
  */
  getProductList: ({
    path = '',
    storeInfo = goodsStore,
    storeEventIdOrRefCode = '',
    favoriteTypes = '',
    queryType,
    linkType,
    subAccess = [],
    paging = {},
    sort,
    fields,
    filterList,
    coverSize,
    mainProductId,
    handelEBooK
  }) => {
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + '',
        Type: queryType || '\\',
        LinkType: linkType || ''
      },
      FavoriteTypes: favoriteTypes ? [favoriteTypes] : [],
      SubAccess: subAccess.length > 0 ? subAccess : [],
      PageQuery: {
        Start: paging.start || '0',
        Size: paging.size || '10'
      },
      SortQuery:
        sort?.length == 0
          ? []
          : sort
            ? [sort]
            : [
                {
                  LinkOrder: 'Desc'
                }
              ],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      TypeId: [],
      SysType: [],
      State: [],
      Tag: [],
      BeginDate: [],
      EndDate: [],
      ProductLinkInfo: [],
      AllowDonate: [],
      // DonatePriceList: [],
      StoreEvent: [],
      SubProductCount: [],
      SaleMethod: [],
      SaleMethodValid: [],
      StoreEventIdOrRefCode: storeEventIdOrRefCode,
      ...fields,
      ...filterList
    }
    if (mainProductId) {
      query.AccessControl.MainProductId = mainProductId
    }
    if (handelEBooK) {
      query.ProductCmsQuery = [
        {
          QueryCms: {
            Path: '*',
            Type: '\\',
            Name: [],
            Icon: [],
            TypeId: [],
            RefCode: [],
            ChildrenCount: [],
            ChildrenFolderCount: [],
            CreateDate: [],
            SysType: [],
            SaleMethod: [],
            PageQuery: {
              Start: 0,
              Size: 9999
            },
            ProductLinkInfo: []
          }
        }
      ]
    }
    const body = {
      query: JSON.stringify({
        Query: [
          {
            Q1: query
          }
        ]
      })
    }
    let token = localStorage.getItem(tokenKey)
    let url = token ? '/store/api/ApiQueryProductByAppUser' : '/store/api/ApiQueryProduct'
    return request({
      url: url,
      method: 'post',
      data: body
    }).then((resp) => {
      if (resp.length > 0) {
        const data = resp[0]
        const datas = handleQueryResourceListData({
          datas: data.datas,
          fields,
          path,
          storeInfo,
          coverSize,
          handelEBooK
        })
        return {
          datas,
          total: data.totalCount,
          extraInfos: data.extraInfos?.StoreEvent
        }
      }
      return {
        datas: [],
        total: 0
      }
    })
  },
  /*
    **获取商品详情**
    path: æ•°æ®è·¯å¾„
    storeInfo: ä»“储
    channelInfo: é¢‘道
    subAccess:
    fields: è‡ªå®šä¹‰å­—段
    productId: å•†å“ID
    cmsPath:cmsPath
  */
  getProductDetail: ({
    path = '',
    storeInfo = goodsStore,
    channelInfo = '',
    favoriteTypes = '',
    queryType,
    subAccess = [],
    fields,
    productId,
    cmsPath,
    cmsType,
    coverSize,
    itemId,
    itemIds,
    itemFields,
    linkTypes,
    filterList,
    handelEBooK,
    sort,
    cmsSort,
    source
  }) => {
    const subQuery = {}
    if (cmsPath) {
      subQuery['QueryCms'] = {
        Path: cmsPath + '',
        Type: cmsType || '\\',
        Name: [],
        Icon: [],
        TypeId: [],
        RefCode: [],
        Description:[],
        ChildrenCount: [],
        ChildrenFolderCount: [],
        CreateDate: [],
        SysType: [],
        SaleMethod: [],
        PageQuery: {
          Start: 0,
          Size: 9999
        },
        SortQuery: cmsSort
          ? [cmsSort]
          : [
              {
                ProductLinkOrder: 'Asc'
              }
            ],
        ProductLinkInfo: [],
        ...itemFields
      }
      if (itemId) subQuery['QueryCms']['Id='] = [`${itemId}`]
      if (itemIds) subQuery['QueryCms']['Id='] = itemIds
    } else {
      subQuery['QueryCms'] = {
        Path: '*',
        Type: '\\',
        Name: [],
        Icon: [],
        TypeId: [],
        RefCode: [],
        Description:[],
        ChildrenCount: [],
        ChildrenFolderCount: [],
        CreateDate: [],
        SysType: [],
        SaleMethod: [],
        PageQuery: {
          Start: 0,
          Size: 9999
        },
        ProductLinkInfo: []
      }
    }
    // èŽ·å–å…³è”èµ„æº
    let linkFields = {}
    if (linkTypes && linkTypes.length) {
      for (let i = 0; i < linkTypes.length; i++) {
        const linkType = linkTypes[i]
        subQuery['QueryLink_' + linkType.linkType] = {
          Path: cmsPath + '',
          Type: '\\',
          Name: [],
          Icon: [],
          TypeId: [],
          RefCode: [],
          Description:[],
          LinkTypes: [linkType.linkType],
          PageQuery: {
            Start: 0,
            Size: 100
          },
          ProductLinkInfo: [],
          ...linkType.fields
        }
        linkFields = {
          ...linkFields,
          ...linkType.fields
        }
      }
    }
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + '',
        ChannelRefCode: channelInfo + '',
        Type: queryType || '\\'
      },
      FavoriteTypes: favoriteTypes ? [favoriteTypes] : [],
      SubAccess: subAccess.length > 0 ? subAccess : [],
      PageQuery: {
        Start: '0',
        Size: '1'
      },
      'Id=': [`${productId}`],
      SortQuery: sort
        ? [sort]
        : [
            {
              LinkOrder: 'Desc'
            }
          ],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      Description:[],
      TypeId: [],
      SysType: [],
      State: [],
      Tag: [],
      BeginDate: [],
      EndDate: [],
      ProductLinkInfo: [],
      AllowDonate: [],
      DonatePriceList: [],
      StoreEvent: [],
      SaleMethod: [],
      SaleMethodValid: [],
      CmsItemValid: [],
      ProductCmsQuery: [subQuery],
      ...fields,
      ...filterList
    }
    if (productId) query['Id='] = [`${productId}`]
    const body = {
      query: JSON.stringify({
        Query: [
          {
            Q1: query
          }
        ]
      })
    }
    let token = localStorage.getItem(tokenKey)
    let url = token ? '/store/api/ApiQueryProductByAppUser' : '/store/api/ApiQueryProduct'
    return request({
      url: url,
      method: 'post',
      data: body,
      cancelToken: source?.token
    })
      .then((resp) => {
        if (resp.length > 0) {
          const data = resp[0]
          if (data.datas.length) {
            data.datas[0].subDatas = data.datas[0].cmsDatas
            const datas = handleDetailQueryRequestData({
              item: data.datas[0],
              fields,
              itemFields: {
                ...itemFields,
                ...linkFields
              },
              path,
              coverSize,
              handelEBooK,
            })
            return {
              datas,
              total: data.totalCount
            }
          } else {
            return {
              datas: [],
              total: 0
            }
          }
        }
        return {
          datas: [],
          total: 0
        }
      })
  },
  // èŽ·å–å•†å“è¯¦æƒ…ï¼Œä¸è¿”å›ž ChildrenCount,ChildrenFolderCount
  // (此接口为了满足不返回 ChildrenCount,ChildrenFolderCount而后续添加的) ä¸æ˜¯ä¸­å°åŽŸæœ‰çš„
  getProductDetailNoChildren:({
    path = '',
    storeInfo = goodsStore,
    channelInfo = '',
    favoriteTypes = '',
    queryType,
    subAccess = [],
    fields,
    productId,
    cmsPath,
    cmsType,
    coverSize,
    itemId,
    itemIds,
    itemFields,
    linkTypes,
    filterList,
    handelEBooK,
    sort,
    cmsSort,
    source
  }) => {
    const subQuery = {}
    if (cmsPath) {
      subQuery['QueryCms'] = {
        Path: cmsPath + '',
        Type: cmsType || '\\',
        Name: [],
        Icon: [],
        TypeId: [],
        RefCode: [],
        Description:[],
        // ChildrenCount: [],
        // ChildrenFolderCount: [],
        CreateDate: [],
        SysType: [],
        SaleMethod: [],
        PageQuery: {
          Start: 0,
          Size: 9999
        },
        SortQuery: cmsSort
          ? [cmsSort]
          : [
              {
                ProductLinkOrder: 'Asc'
              }
            ],
        ProductLinkInfo: [],
        ...itemFields
      }
      if (itemId) subQuery['QueryCms']['Id='] = [`${itemId}`]
      if (itemIds) subQuery['QueryCms']['Id='] = itemIds
    } else {
      subQuery['QueryCms'] = {
        Path: '*',
        Type: '\\',
        Name: [],
        Icon: [],
        TypeId: [],
        RefCode: [],
        Description:[],
        ChildrenCount: [],
        ChildrenFolderCount: [],
        CreateDate: [],
        SysType: [],
        SaleMethod: [],
        PageQuery: {
          Start: 0,
          Size: 9999
        },
        ProductLinkInfo: []
      }
    }
    // èŽ·å–å…³è”èµ„æº
    let linkFields = {}
    if (linkTypes && linkTypes.length) {
      for (let i = 0; i < linkTypes.length; i++) {
        const linkType = linkTypes[i]
        subQuery['QueryLink_' + linkType.linkType] = {
          Path: cmsPath + '',
          Type: '\\',
          Name: [],
          Icon: [],
          TypeId: [],
          RefCode: [],
          Description:[],
          LinkTypes: [linkType.linkType],
          PageQuery: {
            Start: 0,
            Size: 100
          },
          ProductLinkInfo: [],
          ...linkType.fields
        }
        linkFields = {
          ...linkFields,
          ...linkType.fields
        }
      }
    }
    const query = {
      AccessControl: {
        Path: path,
        StoreRefCode: storeInfo + '',
        ChannelRefCode: channelInfo + '',
        Type: queryType || '\\'
      },
      FavoriteTypes: favoriteTypes ? [favoriteTypes] : [],
      SubAccess: subAccess.length > 0 ? subAccess : [],
      PageQuery: {
        Start: '0',
        Size: '1'
      },
      'Id=': [`${productId}`],
      SortQuery: sort
        ? [sort]
        : [
            {
              LinkOrder: 'Desc'
            }
          ],
      CreateDate: [],
      Description: [],
      Name: [],
      Icon: [],
      RefCode: [],
      Description:[],
      TypeId: [],
      SysType: [],
      State: [],
      Tag: [],
      BeginDate: [],
      EndDate: [],
      ProductLinkInfo: [],
      AllowDonate: [],
      DonatePriceList: [],
      StoreEvent: [],
      SaleMethod: [],
      SaleMethodValid: [],
      CmsItemValid: [],
      ProductCmsQuery: [subQuery],
      ...fields,
      ...filterList
    }
    if (productId) query['Id='] = [`${productId}`]
    const body = {
      query: JSON.stringify({
        Query: [
          {
            Q1: query
          }
        ]
      })
    }
    let token = localStorage.getItem(tokenKey)
    let url = token ? '/store/api/ApiQueryProductByAppUser' : '/store/api/ApiQueryProduct'
    return request({
      url: url,
      method: 'post',
      data: body,
      cancelToken: source?.token
    })
      .then((resp) => {
        if (resp.length > 0) {
          const data = resp[0]
          if (data.datas.length) {
            data.datas[0].subDatas = data.datas[0].cmsDatas
            const datas = handleDetailQueryRequestData({
              item: data.datas[0],
              fields,
              itemFields: {
                ...itemFields,
                ...linkFields
              },
              path,
              coverSize,
              handelEBooK,
            })
            return {
              datas,
              total: data.totalCount
            }
          } else {
            return {
              datas: [],
              total: 0
            }
          }
        }
        return {
          datas: [],
          total: 0
        }
      })
  },
  // èŽ·å–ä¼˜æƒ åˆ¸åˆ—è¡¨
  getChannelPromoteCodeList(data) {
    return request({
      url: '/store/api/ApiGetChannelPromoteCodeList',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·å·²é¢†å–çš„ä¼˜æƒ åˆ¸åˆ—è¡¨
  getPromoteCodeList(data) {
    return request({
      url: '/store/api/ApiGetPromoteCodeList',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·æµè§ˆæŽ’è¡Œ
  getProductViewRank(data) {
    return request({
      url: '/store/api/ApiGetProductViewRank',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·é”€å”®æŽ’è¡Œ
  getProductSaleRank(data) {
    return request({
      url: '/store/api/ApiGetProductSaleRank',
      method: 'post',
      data
    })
  },
  // èŽ·å–å•†å“å¯ç”¨ä¼˜æƒ åˆ¸
  getProductPromoteCodeList(data) {
    return request({
      url: '/store/api/ApiGetProductPromoteCodeList',
      method: 'post',
      data
    })
  },
  // èŽ·å–è®¢å•å¯ç”¨ä¼˜æƒ åˆ¸
  getOrderPromoteCodeList(data) {
    return request({
      url: '/store/api/GetOrderPromoteCodeList',
      method: 'post',
      data
    })
  },
  // èŽ·å–é”€å”®æ–¹å¼å¯ç”¨ä¼˜æƒ åˆ¸
  getSaleMethodPromoteCodeList(data) {
    return request({
      url: '/store/api/GetSaleMethodPromoteCodeList',
      method: 'post',
      data
    })
  },
  // é¢†å–优惠卷
  getPromoteCode(data) {
    return request({
      url: '/store/api/ApiGetPromoteCode',
      method: 'post',
      data
    })
  },
  // ä¸ºè®¢å•使用优惠券
  updateOrderPromoteCode(data) {
    return request({
      url: '/store/api/UpdateOrderPromoteCode',
      method: 'post',
      data
    })
  },
  // ä¸ºé”€å”®æ–¹å¼ä½¿ç”¨ä¼˜æƒ åˆ¸
  updateSaleMethodPromoteCode(data) {
    return request({
      url: '/store/api/UpdateSaleMethodPromoteCode',
      method: 'post',
      data
    })
  },
  // é€šè¿‡è®¢å•号获取订单
  getOrderByOrderNum(data) {
    return request({
      url: '/store/api/GetOrderByOrderNum',
      method: 'post',
      data
    })
  },
  // åˆ›å»ºè®¢å•
  initOrder(data) {
    return request({
      url: '/store/api/InitOrder',
      method: 'post',
      data
    })
  },
  // ç¡®è®¤è®¢å•
  confirmOrder(data) {
    return request({
      url: '/store/api/ConfirmOrder',
      method: 'post',
      data
    })
  },
  // å–消订单
  cancelOrder(data) {
    return request({
      url: '/store/api/CancelOrder',
      method: 'post',
      data
    })
  },
  // èµžèµ
  CreateDonateOrder(data) {
    return request({
      url: '/store/api/CreateDonateOrder',
      method: 'post',
      data
    })
  },
  //获取用户订单列表
  getUserOrderList(data) {
    return request({
      url: '/store/api/GetUserOrderList',
      method: 'post',
      data
    })
  },
  //获取频道下的列表
  getStoreChannelList(data) {
    return request({
      url: '/store/api/ApiGetStoreChannelList',
      method: 'post',
      data
    })
  },
  //获取购物车
  getShoppingCartProductList(data) {
    return request({
      url: '/store/api/ApiGetShoppingCartProductList',
      method: 'post',
      data
    })
  },
  //添加到购物车
  addShoppingCart(data) {
    return request({
      url: '/store/api/ApiAddShoppingCart',
      method: 'post',
      data
    })
  },
  //购物车删除商品
  delShoppingCart(data) {
    return request({
      url: '/store/api/ApiDelShoppingCart',
      method: 'post',
      data
    })
  },
  //从购物车创建订单
  shoppingCartCreateOrder(data) {
    return request({
      url: '/store/api/ApiShoppingCartCreateOrder',
      method: 'post',
      data
    })
  },
  //获取已购买的商品列表
  getPurchasedProductList(data) {
    return request({
      url: '/store/api/ApiGetPurchasedProductList',
      method: 'post',
      data
    })
  },
  //调取微信支付
  makeWeChatPay(data) {
    return request({
      url: '/store/api/MakeWeChatPay',
      method: 'post',
      data
    })
  },
  //调取微信二维码支付
  makeWeChatQrPay(data) {
    return request({
      url: '/store/api/MakeWeChatQrPay',
      method: 'post',
      data
    })
  },
  // èŽ·å–æ¿€æ´»ç è¯¦æƒ…
  getActiveCode(data) {
    return request({
      url: '/store/api/ApiGetActiveCode',
      method: 'post',
      data
    })
  },
  // ä½¿ç”¨æ¿€æ´»ç 
  userActiveCode(data) {
    return request({
      url: '/store/api/ApiUseActiveCode',
      method: 'post',
      data
    })
  },
  // ä½¿ç”¨æ¿€æ´»ç ä½¿ç”¨è®°å½•
  userActiveCodeList(data) {
    return request({
      url: '/store/api/ApiGetUsedActiveCodeList',
      method: 'post',
      data
    })
  },
  // å•†å“æŸ¥è¯¢ç±»åž‹å­—段接口
  getProductTypeField(data) {
    return request({
      url: '/store/api/ApiGetProductTypeField',
      method: 'post',
      data
    })
  },
  // æ”¶è—æˆ–加入书架
  addProductLink(data) {
    return request({
      url: '/store/api/ApiAddProductLink',
      method: 'post',
      data
    })
  },
  // å–消收藏或移除书架
  delProductLink(data) {
    return request({
      url: '/store/api/ApiDelProductLink',
      method: 'post',
      data
    })
  },
  //购买免费商品
  MakeFreeOrderPay(data) {
    return request({
      url: '/store/api/MakeFreeOrderPay',
      method: 'post',
      data
    })
  },
  // ç”³è¯·è®¢å•开票
  requestOrderInvoice(data) {
    return request({
      url: '/store/api/RequestOrderInvoice',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·é’±åŒ…
  getUserWallet(data) {
    return request({
      url: '/store/api/GetWallet',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·é’±åŒ…è®°å½•
  getWalletHistory(data) {
    return request({
      url: '/store/api/GetWalletHistory',
      method: 'post',
      data
    })
  },
  // é€šè¿‡é’±åŒ…自动购买
  autoPayWithWallet(data) {
    return request({
      url: '/store/api/AutoPayWithWallet',
      method: 'post',
      data
    })
  },
  // æŸ¥è¯¢å•†å“æ‰€åœ¨Store
  getProductStore(data) {
    return request({
      url: '/store/api/ApiGetProductStore',
      method: 'post',
      data
    })
  },
  //根据销售方式查询商品信息
  getProductBySaleMethod(data) {
    return request({
      url: '/store/api/ApiGetProductBySaleMethod',
      method: 'post',
      data
    })
  }
}
export default storeApi
src/assets/js/middleGround/api/ugc.js
New file
@@ -0,0 +1,98 @@
import request from "@/plugin/axios/index.ts";
import { tokenKey } from "@/assets/js/config.js";
import toolClass from "@/assets/js/toolClass.js";
const ugcApi = {
  // èŽ·å–å•†å“ç‚¹èµžTopic
  getProductLikesTopic(data) {
    return request({
      url: localStorage.getItem(tokenKey)
        ? "/ugc/api/ApiAppUserGetProductLikesTopic"
        : "/ugc/api/ApiGetProductLikesTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–å•†å“è¯„è®ºTopic
  getProductCommentTopic(data) {
    return request({
      url: localStorage.getItem(tokenKey)
        ? "/ugc/api/ApiAppUserGetProductCommentTopic"
        : "/ugc/api/ApiGetProductCommentTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–MessageList
  getTopicMessageList(data) {
    return request({
      url: localStorage.getItem(tokenKey)
        ? "/ugc/api/ApiAppUserGetTopicMessageList"
        : "/ugc/api/ApiGetTopicMessageList",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·æ ¹æ®æ¶ˆæ¯ç±»åž‹èŽ·å–åˆ—è¡¨
  getMessageList(data) {
    return request({
      url: "/ugc/api/ApiGetMessageList",
      method: "post",
      data,
    });
  },
  // æ–°å»ºMessage
  newTopicMessage(data) {
    return request({
      url: "/ugc/api/ApiNewTopicMessage",
      method: "post",
      data,
    });
  },
  // åˆ é™¤Message
  delTopicMessage(data) {
    return request({
      url: "/ugc/api/ApiDelTopicMessage",
      method: "post",
      data,
    });
  },
  // æ›´æ–°message
  updateTopicMessage(data) {
    return request({
      url:'/ugc/api/ApiUpdateTopicMessage',
      method:'post',
      data
    })
  },
  // èŽ·å–cms评论
  getCmsItemCommentTopic(data) {
    return request({
      url: "/ugc/api/ApiGetCmsItemCommentTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–ç”¨æˆ·æäº¤çš„æ•™å­¦èµ„æº
  getProductUserSubmitTopic(data) {
    return request({
      url: "/ugc/api/ApiGetProductUserSubmitTopic",
      method: "post",
      data,
    });
  },
  //更新TOPICMESSAGE
  // updateTopicMessage(data) {
  //   return request({
  //     url: "/ugc/api/ApiUpdateTopicMessage",
  //     method: "post",
  //     data,
  //   });
  // },
};
export default ugcApi;
src/assets/js/middleGround/tool.js
New file
@@ -0,0 +1,423 @@
import { requestCtx, appId } from '@/assets/js/config.js'
// import defaultImg from '@/assets/images/default-book-img.png'
// import defaultBookFair from '@/assets/images/default-bookFair.png'
// import bookCover from '@/assets/images/book-cover.png'
// import defaultPub from '@/assets/images/math/default-pub.png'
// import defaultAudio from '@/assets/images/math/default-audio.png'
import moment from 'moment'
// å¤„理列表查询结果
export function handleQueryResourceListData({
  datas,
  fields,
  path,
  storeInfo,
  repositoryInfo,
  coverSize,
  handelEBooK
}) {
  const dataList = []
  for (let i = 0; i < datas.length; i++) {
    const item = datas[i]
    // å¤„理字段
    const _fields = {}
    if (fields != null) {
      for (let fieldKey in fields) {
        if (item.datas[fieldKey]) {
          const values = JSON.parse(item.datas[fieldKey])
          if (values.length > 0) {
            // ç”¨å­—段名处理返回的字段值
            if (values[0].Value) {
              _fields[fieldKey] = values[0].Value
            } else if (values[0].Data) {
              _fields[fieldKey] = values[0].Data.Value
            }
            item.datas[fieldKey] = values[0]
          }
        }
      }
    }
    const subDatas = {}
    if (item.subDatas) {
      for (let subData of item.subDatas) {
        const tag = subData.queryTag.replace('Query', '')
        subDatas[tag] = subData.datas
      }
    }
    let obj = {
      ...item,
      id: item.id,
      name: item.datas.Name,
      icon: getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height, storeInfo),
      repositoryInfo: repositoryInfo,
      refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode,
      state: item.datas.State,
      type: item.datas.Type,
      tag: item.datas.Tag,
      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
      storeInfo: storeInfo,
      linkType: item.datas.LinkType,
      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD'),
      beginDate: moment(item.datas.BeginDate).format('YYYY-MM-DD'),
      endDate: moment(item.datas.EndDate).format('YYYY-MM-DD'),
      description: item.datas.Description,
      sysType: item.datas.SysType,
      idPath: path + '\\' + item.id,
      typeId: parseInt(item.datas.TypeId),
      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
      cmsItemType: item.datas.CmsItemType,
      allowDonate: item.datas.AllowDonate == 'True',
      // donatePriceList: JSON.parse(item.datas.DonatePriceList ?? "[]"),
      productLinkInfo: item.datas.ProductLinkInfo ?? '[]',
      storeEvent: JSON.parse(item.datas.StoreEvent ?? '[]'),
      linkInfo: JSON.parse(item.datas.LinkInfo ?? '[]'),
      saleMethod: JSON.parse(item.datas.SaleMethod ?? '[]'),
      subProductCount: parseInt(item.datas.SubProductCount),
      ..._fields,
      datas: item.datas,
      subDatas
    }
    // ç»Ÿä¸€å¤„理价格
    if (obj.defaultSaleMethod) {
      if (handelEBooK) {
        // èŽ·å–éšä¹¦èµ„æºçš„é”€å”®æ–¹å¼
        let saleMethod = []
        try {
          saleMethod = obj.cmsDatas[0].datas.find(
            (item) => item.datas.RefCode == 'tourism_accompanyingResources'
          ).datas.SaleMethod
          saleMethod = JSON.parse(saleMethod)
        } catch (error) {
          saleMethod = []
        }
        if (saleMethod.length) {
          Object.keys(saleMethod[0]).map((key) => {
            let newKey = key.replace(key[0], key[0].toLowerCase())
            saleMethod[0][newKey] = saleMethod[0][key]
            delete saleMethod[0][key]
          })
          obj.defaultSaleMethod = saleMethod[0]
          obj.defaultSaleMethodId = saleMethod[0].id
          obj.alreadyBuy = obj.purchasedSaleMethodIdList.indexOf(obj.defaultSaleMethodId) > -1
        }
      }
      if (obj.defaultSaleMethod.allowEvent && obj.storeEvent.length) {
        // å·²å‚加活动,获取有效活动并计算价格
        let time = new Date().getTime()
        // è¿‡æ»¤è¿‡æœŸæ´»åЍ
        let event = obj.storeEvent.filter((item) => {
          let endTime = new Date(item.EndDate).getTime()
          return endTime > time
        })
        // åªå¤„理一条有效活动
        if (event.length) {
          obj.price = (obj.defaultSaleMethod.price * event[0].Value).toFixed(2)
          obj.oldPrice = obj.defaultSaleMethod.price
          obj.storeEventId = event[0].Id
          if (
            moment().format('YYYY-MM-DD') <
            moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
          ) {
            obj.defaultSaleMethodState = 'Normal'
          } else {
            obj.defaultSaleMethodState = 'Beyond'
          }
        }
      } else {
        if (
          moment().format('YYYY-MM-DD') < moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
        ) {
          obj.defaultSaleMethodState = 'Normal'
        } else {
          obj.defaultSaleMethodState = 'Beyond'
        }
        obj.price = obj.defaultSaleMethod.price
        obj.oldPrice = obj.defaultSaleMethod.virtualPrice
      }
    }
    dataList.push(obj)
  }
  return dataList
}
// å¤„理详情查询结果
export function handleDetailQueryRequestData({
  item,
  fields,
  path,
  coverSize,
  itemFields,
  handelEBooK,
}) {
  item.fileMap = {};
  let itemFieldsData = [];
  for (const key in itemFields) {
    itemFieldsData.push(key);
  }
  let fieldsData = [];
  for (const key in fields) {
    fieldsData.push(key);
  }
  for (let i = 0; i < fieldsData.length; i++) {
    const field = fieldsData[i];
    item.datas[field] = JSON.parse(item.datas[field]);
    const datas = item.datas[field];
    if (datas.length > 0) {
      if (datas[0].Value) {
        item[field] = datas[0].Value;
        if (datas[0].Data.FileLinkList && datas[0].Data.FileLinkList.length) {
          item.fileMap = {
            ...item.fileMap,
            ...handleLinkFileInfo(
              datas[0].Data.FileLinkList.map((item) => {
                return {
                  ...item.File,
                  ...item,
                };
              })
            ),
          };
        }
      } else if (datas[0].Data) {
        item[field] = datas[0].Data.Value;
        if (datas[0].Data.FileLinkList && datas[0].Data.FileLinkList.length) {
          item.fileMap = {
            ...item.fileMap,
            ...handleLinkFileInfo(
              datas[0].Data.FileLinkList.map((item) => {
                return {
                  ...item.File,
                  ...item,
                };
              })
            ),
          };
        }
      }
    }
  }
  // å¤„理cms资源
  const subDatas = item.subDatas;
  const linkItemsMap = {};
  if (subDatas) {
    for (const sdata of subDatas) {
      const tag = sdata.queryTag;
      for (const subItem of sdata.datas) {
        convertCmsItemBase(subItem, coverSize, handelEBooK);
        subItem.fileMap = {};
        for (let i = 0; i < itemFieldsData.length; i++) {
          const itemField = itemFieldsData[i];
          try {
            subItem.datas[itemField] = JSON.parse(subItem.datas[itemField]);
          } catch (error) {
            subItem.datas[itemField] = [];
          }
          const itemDatas = subItem.datas[itemField];
          if (itemDatas.length > 0) {
            if (itemDatas[0].Value) {
              subItem[itemField] = itemDatas[0].Value;
              if (itemDatas[0].FileList && itemDatas[0].FileList.length) {
                subItem.fileMap = {
                  ...subItem.fileMap,
                  ...handleLinkFileInfo(itemDatas[0].FileList),
                };
              }
            } else if (itemDatas[0].Data) {
              subItem[itemField] = itemDatas[0].Data.Value;
              if (
                itemDatas[0].Data.FileList &&
                itemDatas[0].Data.FileList.length
              ) {
                subItem.fileMap = {
                  ...subItem.fileMap,
                  ...handleLinkFileInfo(itemDatas[0].Data.FileList),
                };
              }
            } else if (itemDatas[0].CmsItemData) {
              subItem[itemField] = itemDatas[0].CmsItemData.Value;
              if (
                itemDatas[0].CmsItemData.FileList &&
                itemDatas[0].CmsItemData.FileList.length
              ) {
                subItem.fileMap = {
                  ...subItem.fileMap,
                  ...handleLinkFileInfo(itemDatas[0].CmsItemData.FileList),
                };
              }
            }
          }
        }
        if (subItem.productLinkInfo && subItem.productLinkInfo.length) {
          let itemProductLinkInfo = subItem.productLinkInfo.find(citem => citem.Name == item.datas.Name)
          subItem.productLinkPath =
            itemProductLinkInfo.LinkPath +
            "\\" +
            itemProductLinkInfo.CmsItemId;
        }
        if (subItem.linkInfo && subItem.linkInfo.length)
          subItem.linkPath =
            subItem.linkInfo[0].LinkPath + "\\" + subItem.linkInfo[0].CmsItemId;
      }
      linkItemsMap[tag] = sdata.datas;
    }
  }
  convertCmsItemBase(item, coverSize, handelEBooK);
  item.idPath = path + "\\" + item.id;
  item.subItems = linkItemsMap;
  return item;
}
const handleLinkFileInfo = (linkList) => {
  let linkFileMap = {}
  for (let z = 0; z < linkList.length; z++) {
    const linkItem = linkList[z]
    linkFileMap[linkItem.Md5] = {
      linkType: linkItem.LinkType,
      extension: linkItem.Extension,
      fileName: linkItem.FileName,
      fileType: linkItem.Type,
      md5: linkItem.Md5,
      icon: linkItem.Icon,
      size: linkItem.Size,
      // metaData: JSON.parse(linkItem.MetaData ?? "{}"),
      order: linkItem.Order,
      protectType: linkItem.ProtectType
    }
  }
  return linkFileMap
}
const convertCmsItemBase = (item, coverSize, handelEBooK) => {
  item.name = item.datas.Name
  item.description = item.datas.Description
  item.refCode = item.datas.RefCode
  item.state = item.datas.State
  item.type = item.datas.Type
  item.tag = item.datas.Tag
  item.typeId = parseInt(item.datas.TypeId)
  item.icon = getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height)
  item.sysType = item.datas.SysType
  item.linkFile = JSON.parse(item.datas.LinkFile ?? '[]')
  item.linkType = item.datas.LinkType
  item.linkAppId = parseInt(item.datas.LinkAppId)
  item.linkStoreId = parseInt(item.datas.LinkStore)
  item.linkRepoId = item.datas.LinkRepository
  item.childrenCount = parseInt(item.datas.ChildrenCount ?? '0')
  ;(item.childrenFolderCount = parseInt(item.datas.ChildrenFolderCount ?? '0')),
    (item.childrenChannelCount = parseInt(item.datas.ChildrenChannelCount ?? '0')),
    (item.linkId = parseInt(item.datas.LinkId))
  item.linkOrg = JSON.parse(item.datas.LinkOrg ?? '[]')[0]
  item.linkDepartment = JSON.parse(item.datas.LinkDepartment ?? '[]')[0]
  item.linkInfo = JSON.parse(item.datas.LinkInfo ?? '[]')
  item.productLinkInfo = JSON.parse(item.datas.ProductLinkInfo ?? '[]')
  item.saleMethod = JSON.parse(item.datas.SaleMethod ?? '[]')
  item.allowDonate = item.datas.AllowDonate == 'True'
  // item.donatePriceList = JSON.parse(item.datas.DonatePriceList ?? "[]");
  item.createDate = moment(item.datas.CreateDate).format('YYYY-MM-DD')
  item.beginDate = moment(item.datas.BeginDate).format('YYYY-MM-DD')
  item.endDate = moment(item.datas.EndDate).format('YYYY-MM-DD')
  item.storeEvent = JSON.parse(item.datas.StoreEvent ?? '[]')
  // ç»Ÿä¸€å¤„理价格
  if (item.defaultSaleMethod) {
    if (handelEBooK) {
      // èŽ·å–éšä¹¦èµ„æºçš„é”€å”®æ–¹å¼
      let saleMethod = item.cmsDatas[0].datas.find(
        (item) => item.refCode == 'tourism_accompanyingResources'
      ).saleMethod
      if (saleMethod && saleMethod.length > 0) {
        Object.keys(saleMethod[0]).map((key) => {
          let newKey = key.replace(key[0], key[0].toLowerCase())
          saleMethod[0][newKey] = saleMethod[0][key]
          delete saleMethod[0][key]
        })
        item.defaultSaleMethod = saleMethod[0]
        item.defaultSaleMethodId = saleMethod[0].id
        item.alreadyBuy = item.purchasedSaleMethodIdList.indexOf(item.defaultSaleMethodId) > -1
      }
    }
    if (item.defaultSaleMethod.allowEvent && item.storeEvent.length) {
      // å·²å‚加活动,获取有效活动并计算价格
      let time = new Date().getTime()
      // è¿‡æ»¤è¿‡æœŸæ´»åЍ
      let event = item.storeEvent.filter((item) => {
        let endTime = new Date(item.EndDate).getTime()
        return endTime > time
      })
      // åªå¤„理一条有效活动
      if (event.length) {
        item.price = (item.defaultSaleMethod.price * event[0].Value).toFixed(2)
        item.oldPrice = item.defaultSaleMethod.price
        if (
          moment().format('YYYY-MM-DD') <
          moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
        ) {
          item.defaultSaleMethodState = 'Normal'
        } else {
          item.defaultSaleMethodState = 'Beyond'
        }
        item.storeEventId = event[0].Id
      }
    } else {
      item.price = item.defaultSaleMethod.price
      item.oldPrice = item.defaultSaleMethod.virtualPrice
      if (
        moment().format('YYYY-MM-DD') < moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
      ) {
        item.defaultSaleMethodState = 'Normal'
      } else {
        item.defaultSaleMethodState = 'Beyond'
      }
    }
  }
}
export function getTopicMsgCmsItemFile(fileType, fileList) {
  let obj = {}
  fileType.forEach((item) => {
    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : ''
    fileList.forEach((e) => {
      if (item.sequenceNum == e.sequenceNum) {
        try {
          if (e.fileLinkList.length > 0) {
            for (let i = 0; i < e.fileLinkList.length; i++) {
              const ele = e.fileLinkList[i]
              ele.name = ele.file.fileName
              ele.md5 = ele.file.md5
              ele.status = 'success'
            }
            obj[item.typeField.refCode] = e.fileLinkList
          } else {
            const val = JSON.parse(e.value)
            obj[item.typeField.refCode] = val
          }
        } catch (error) {
          obj[item.typeField.refCode] = e.value
        }
      }
    })
  })
  return obj
}
// èŽ·å–ä¸å—ä¿æŠ¤çš„å›¾ç‰‡
export function getPublicImage(md5, width, height, storeInfo) {
  let src = null
  if (md5) {
    src = requestCtx + `/file/GetPreViewImage?md5=${md5}`
  } else {
    if(storeInfo == `defaultGoodsStore${appId}`){
      return bookCover;
    }else{
      return ""
    }
  }
  if (width && src) src += `&width=${width}`
  if (height && src) src += `&height=${height}`
  return src
}
src/assets/js/toolClass.js
New file
@@ -0,0 +1,567 @@
import SparkMD5 from 'spark-md5'
import {
  getPublicImage
} from '@/assets/js/middleGround/tool.js'
import config from './config'
import moment from "moment";
var tool = {
  secondToTime(second) {
    var minute = Math.floor(second / 60)
    var sec = second % 60
    var time
    if (second < 60) {
      time = second + '"'
    } else {
      time = sec === 0 ? minute + "'" : minute + "'" + sec + '"'
    }
    return time
  },
  setCookie: function (c_name, value, expiredays, path) {
    var exdate = new Date()
    exdate.setDate(exdate.getDate() + expiredays)
    document.cookie =
      c_name +
      '=' +
      escape(value) +
      (expiredays == null ? '' : ';expires=' + exdate.toGMTString()) +
      (path ? ';path=' + path : '')
  },
  getCookie: function (c_name) {
    if (document.cookie.length > 0) {
      var c_start = document.cookie.indexOf(c_name + '=')
      if (c_start != -1) {
        c_start = c_start + c_name.length + 1
        var c_end = document.cookie.indexOf(';', c_start)
        if (c_end == -1) c_end = document.cookie.length
        return unescape(document.cookie.substring(c_start, c_end))
      }
    }
    return ''
  },
  delCookie: function (name) {
    var exp = new Date()
    exp.setTime(exp.getTime() - 1)
    var cval = tool.getCookie(name)
    if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
  },
  // å¼ºåˆ¶ä¿ç•™2位小数,如:2,会在2后面补上00.即2.00
  toDecimal2(x) {
    var f
    f = parseFloat(x)
    if (isNaN(f)) {
      return false
    }
    f = Math.round(x * 100) / 100
    var s = f.toString()
    var rs = s.indexOf('.')
    if (rs < 0) {
      rs = s.length
      s += '.'
    }
    while (s.length <= rs + 2) {
      s += '0'
    }
    return s
  },
  formateTime(date) {
    var newDate = new Date(+new Date(date) + 8 * 3600 * 1000)
      .toISOString()
      .replace(/T/g, ' ')
      .replace(/\.[\d]{3}Z/, '')
    var time = new Date(newDate)
    return time.getTime()
  }
}
//处理表单提交数据
export function worksData(res) {
  let arr = []
  for (let i = 0; i < res.length; i++) {
    const item = res[i]
    if (item.typeField) {
      if (item.typeField.config) {
        item.typeField.options = JSON.parse(item.typeField.config).option
      }
      arr.push(item.typeField)
    }
  }
  return arr
}
export function worksDataBytool(res, value, linkList) {
  let arr = []
  let nrr = []
  if (linkList && linkList.length > 0) {
    linkList.forEach((e) =>
      nrr.push({
        linkProtectType: e.linkProtectType,
        linkType: e.linkType,
        md5: e.md5
      })
    )
  }
  res.forEach((item) => {
    const obj = {
      baseType: item.typeField.baseType,
      order: 0,
      typeFieldId: item.typeField.id,
      sequenceNum: item.config ? JSON.parse(item.config).uuid : '',
      newDataAndFileLinkListRequest: []
    }
    for (let k in value) {
      if (item.typeField.refCode === k) {
        if (item.typeField.type == 'File') {
          try {
            obj.strValue = JSON.stringify(value[k].map((citem) => citem.md5))
          } catch (error) {
            obj.strValue = ''
          }
          obj.newDataAndFileLinkListRequest = nrr
        } else {
          if (typeof value[k] == 'object') {
            obj.strValue = JSON.stringify(value[k])
          } else {
            if (obj.baseType === 'String') {
              obj.strValue = value[k] + ''
            } else if (obj.baseType === 'Text') {
              obj.textValue = value[k] + ''
            } else {
              obj.strValue = value[k] + ''
            }
          }
        }
      }
    }
    // if (obj.strValue || obj.textValue) {
    arr.push(obj)
    // }
  })
  return arr
}
export function UpdateworksDataBytool(initData, res, value, linkList) {
  let arr = []
  let newArr = []
  for (let i = 0; i < initData.length; i++) {
    const ele = initData[i]
    for (let j = 0; j < res.length; j++) {
      const item = res[j]
      if (item.sequenceNum == ele.sequenceNum) {
        item.refCode = ele.typeField.refCode
      }
    }
  }
  initData.forEach((citem) => {
    const updateOldData = res.find((f) => f.sequenceNum == citem.sequenceNum)
    if (updateOldData) {
      const obj = {
        baseType: citem.typeField.baseType,
        order: 0,
        id: updateOldData.id,
        typeFieldId: citem.typeField.id,
        sequenceNum: citem.sequenceNum,
        setDataAndFileLinkListRequest: []
      }
      for (let k in value) {
        if (citem.typeField.refCode === k) {
          if (typeof value[k] == 'object' && k != 'region') {
            obj.strValue = JSON.stringify(linkList)
            obj.setDataAndFileLinkListRequest = linkList
          } else if (typeof value[k] == 'object' && k == 'region') {
            obj.strValue = value[k]?.join('/')
            obj.setDataAndFileLinkListRequest = [{
              area: value[k]
            }]
          } else {
            obj.strValue = value[k].toString()
          }
        }
      }
      if (obj.strValue) {
        arr.push(obj)
      }
    } else {
      const newObj = {
        baseType: citem.typeField.baseType,
        order: 0,
        typeFieldId: citem.typeField.id,
        sequenceNum: citem.sequenceNum,
        setDataAndFileLinkListRequest: []
      }
      for (let k in value) {
        if (citem.typeField.refCode === k) {
          if (typeof value[k] == 'object') {
            newObj.strValue = JSON.stringify(linkList)
            newObj.setDataAndFileLinkListRequest = linkList
          } else {
            newObj.strValue = value[k].toString()
          }
        }
      }
      if (newObj.strValue) {
        newArr.push(newObj)
      }
    }
  })
  return {
    updateData: arr,
    newData: newArr
  }
}
export function download(url) {
  const iframe = document.createElement('iframe')
  iframe.setAttribute('hidden', 'hidden')
  document.body.appendChild(iframe)
  iframe.onload = () => {
    if (iframe) {
      iframe.setAttribute('src', 'about:blank')
    }
  }
  iframe.setAttribute('src', url)
}
/**
 * èŽ·å–ä¸€ä¸ªUUID
 * @param len
 * @param radix
 * @returns {string}
 */
export function uuid(len = 32, radix = 16) {
  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  let uuid = [],
    i
  radix = radix || chars.length
  if (len) {
    // Compact form
    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
  } else {
    // rfc4122, version 4 form
    let r
    // rfc4122 requires these characters
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
    uuid[14] = '4'
    // Fill in random data.  At i==19 set the high bits of clock sequence as
    // per rfc4122, sec. 4.1.5
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | (Math.random() * 16)
        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r]
      }
    }
  }
  return uuid.join('')
}
export function getFileMd5(file, chunkSize) {
  return new Promise((resolve, reject) => {
    let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
    let chunks = Math.ceil(file.size / chunkSize)
    let currentChunk = 0
    let spark = new SparkMD5.ArrayBuffer()
    let fileReader = new FileReader()
    fileReader.onload = function (e) {
      spark.append(e.target.result)
      currentChunk++
      if (currentChunk < chunks) {
        loadNext()
      } else {
        const md5 = spark.end()
        resolve(md5)
      }
    }
    fileReader.onerror = function (e) {
      reject(e)
    }
    function loadNext() {
      let start = currentChunk * chunkSize
      let end = start + chunkSize
      if (end > file.size) {
        end = file.size
      }
      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
    }
    loadNext()
  })
}
// èŽ·å–æ–‡ä»¶
export function getPublicFile(md5, isToken) {
  const {
    tokenKey,
    requestCtx
  } = config
  let src = null
  let token = localStorage.getItem(tokenKey)
  if (md5) {
    if (isToken) {
      src = requestCtx + `/file/api/ApiDownloadForAuthorize?md5=${md5}&token=${token}`
    } else {
      src = requestCtx + `/file/api/ApiDownload?md5=${md5}`
    }
  } else {
    return ''
  }
  return src
}
export const handleCmsItemListRequestData = (datas, fields, path, storeId, repositoryId) => {
  const dataList = [];
  for (let i = 0; i < datas.length; i++) {
    const item = datas[i];
    const _fields = {};
    const _datas = [];
    if (fields != null) {
      for (let fieldKey in fields) {
        // å…¼å®¹ç­›é€‰æ¡ä»¶çš„字段值获取,因为后台筛选和取值只能传一个,都会返回值
        fieldKey = fieldKey.replace(/[!=<>*]/g, '');
        if (item.datas[fieldKey]) {
          let values = [];
          if (typeof item.datas[fieldKey] == 'string') {
            values = JSON.parse(item.datas[fieldKey]);
          } else {
            values = item.datas[fieldKey];
          }
          if (values ?.length > 0) {
            // ç”¨å­—段名处理返回的字段值
            if (values[0].Value) {
              _fields[fieldKey] = values[0].Value;
              values[0].sequenceNum = values[0].SequenceNum;
            }
            // å…¼å®¹å¤„理数据返回的key是CmsItemData
            // if (values[0].CmsItemData) {
            //   _fields[fieldKey] = values[0].CmsItemData.Value;
            //   values[0].sequenceNum = values[0].CmsItemData.SequenceNum;
            // }
            item.datas[fieldKey] = values[0];
            if (values ?.length > 1) {
              const isFile = values.find((citem) => citem.FileList ?.length > 0);
              const dataItems = deduplicateArray(values, 'FieldId');
              if (!isFile) {
                _datas.push(dataItems[0]);
              } else {
                const customFile = {
                  customFileList: values,
                  name: fieldKey,
                  md5: _fields[fieldKey],
                  FieldId: values[0].FieldId,
                  SequenceNum: values[0].SequenceNum
                };
                _datas.push(customFile);
              }
            } else {
              _datas.push(values[0]);
            }
          }
        }
      }
    }
    if (item.datas.LogQuery) {
      item.datas.LogQuery = JSON.parse(item.datas.LogQuery);
    }
    const subDatas = {};
    if (item.subDatas) {
      for (let subData of item.subDatas) {
        const tag = subData.queryTag.replace('Query', '');
        subDatas[tag] = subData.datas;
      }
    }
    dataList.push({
      ...item,
      id: item.id,
      name: item.datas.Name ? item.datas.Name : item.name,
      icon: item.datas.Icon,
      storeId: storeId,
      repositoryId: repositoryId,
      refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode,
      state: item.datas.State,
      type: item.datas.Type,
      tag: item.datas.Tag,
      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
      linkType: item.datas.LinkType,
      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
      childrenCmsItemCount: parseInt(item.datas.ChildrenCmsItemCount ?? '0'),
      childrenFileCount: parseInt(item.datas.ChildrenFileCount ?? '0'),
      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD HH:mm:ss'),
      description: item.datas.Description,
      sysType: item.datas.SysType,
      idPath: path + '\\' + item.id,
      typeId: parseInt(item.datas.TypeId),
      linkAppId: item.datas.linkAppId,
      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
      PublishInfo: JSON.parse(item.datas.PublishInfo ?? '[]'),
      linkInfo: item.datas.LinkInfo ? JSON.parse(item.datas.LinkInfo) : [],
      linkPath: item.datas.LinkPath ?? null,
      linkOrg: item.datas.LinkOrg ? JSON.parse(item.datas.LinkOrg) : [],
      linkDepartment: item.datas.LinkDepartment? JSON.parse(item.datas.LinkDepartment) : [],
      ..._fields,
      datas: item.datas,
      fieldList: _datas,
      subDatas
    });
  }
  return dataList;
};
// type结构处理
export const handleTypeList = (list) => {
  for (let i = 0; i < list.length; i++) {
    const type = list[i];
    try {
      type.cfg = JSON.parse(type.config);
    } catch (error) {
      type.cfg = null;
    }
    const fieldRefcodeMap = {};
    const tableHeaderFieldList = [];
    const isSearchFieldList = [];
    const isAdvSearchFieldList = [];
    const isFilterFieldList = [];
    handleType({
      typeFieldList: type.typeLinkList,
      fieldRefcodeMap,
      tableHeaderFieldList,
      isSearchFieldList,
      isAdvSearchFieldList,
      isFilterFieldList
    });
    type.fieldRefcodeMap = fieldRefcodeMap;
    type.tableHeaderFieldList = tableHeaderFieldList;
    type.isSearchFieldList = isSearchFieldList;
    type.isAdvSearchFieldList = isAdvSearchFieldList;
    type.isFilterFieldList = isFilterFieldList;
  }
  return list;
};
const handleType = ({
  typeFieldList,
  fieldRefcodeMap,
  tableHeaderFieldList,
  isSearchFieldList,
  isAdvSearchFieldList,
  isFilterFieldList
}) => {
  for (let i = 0; i < typeFieldList.length; i++) {
    const item = typeFieldList[i];
    try {
      item.cfg = JSON.parse(item.config);
    } catch (error) {
      item.cfg = null;
    }
    if (item.typeField) {
      try {
        item.typeField.cfg = JSON.parse(item.typeField.config);
      } catch (error) {
        item.typeField.cfg = null;
      }
      fieldRefcodeMap[item.typeField.refCode] = item;
    }
    if (item.cfg && item.cfg.isColHeader) {
      tableHeaderFieldList.push(item);
    }
    if (item.cfg && item.cfg.isSearch) {
      isSearchFieldList.push(item);
    }
    if (item.cfg && item.cfg.isAdvSearch) {
      isAdvSearchFieldList.push(item);
    }
    if (item.cfg && item.cfg.isFilter) {
      isFilterFieldList.push(item);
    }
    if (item.children && item.children.length) {
      handleType({
        typeFieldList: item.children,
        fieldRefcodeMap,
        tableHeaderFieldList,
        isSearchFieldList,
        isAdvSearchFieldList,
        isFilterFieldList
      });
    }
  }
};
//处理树形结构
const handleTreeData = (datas, parent, noTriggerSelect = false) => {
  let parentData = {};
  if (parent) {
    parentData = { ...parent, parent: null };
  } else {
    parentData = null;
  }
  const list = [];
  for (let i = 0; i < datas.length; i++) {
    const data = datas[i];
    const obj = {
      label: data.name,
      key: parentData ? parentData.key + "_" + i : i + "",
      namePath: parentData ? parentData.namePath + "\\" + data.name : data.name,
      icon: data.icon,
      data: data,
      parent: parentData,
      leaf: false,
      children: [],
    };
    if (data["children"] && data["children"].length) {
      obj.leaf = false;
      obj.children = handleTreeData(
        data["children"],
        {
          ...data,
          key: obj.key,
          namePath: obj.namePath,
        },
        i == 0 ? false : true // å¦‚果有子数据处理,只有第一条数据需要展开和回调
      );
    } else {
      obj.leaf =
        !data["childrenChannelCount"] || data["childrenChannelCount"] == 0;
    }
    list.push(obj);
  }
  console.log(list, "list");
  return list;
};
//获取资源
export default {
  ...tool,
  uuid,
  getFileMd5,
  worksDataBytool,
  UpdateworksDataBytool,
  getPublicImage,
  worksData,
  getPublicFile,
  handleTypeList,
  handleTreeData,
  // parseHtml,
}
src/assets/js/userAction.js
New file
@@ -0,0 +1,135 @@
import config from "@/assets/js/config.js";
import jobApi from "./middleGround/api/job"; // newJobWithNewView // newSession,
export function setSessionGuid(type, id) {
  var cityCode = null;
  var SnIp = null;
  try {
    // eslint-disable-next-line
    SnIp = window.returnCitySN;
  } catch (error) {
    SnIp = null;
    console.log(error);
  }
  if (SnIp != undefined && SnIp != null) {
    cityCode = SnIp;
  } else {
    cityCode = {
      cip: "0.0.0.0",
      cname: "未知",
    };
  }
  const _city = cityCode.cname.substring(3);
  const _province = cityCode.cname.substring(0, 3);
  const params = {
    appRefCode: config.appRefCode,
    hostName: config.requestCtx,
    ipAddress: cityCode.cip,
    browser: myBrowser(),
    os: navigator.platform,
    device: "pc",
    province: _province,
    city: _city ? _city : _province,
  };
  jobApi.newSession(params).then(res => {
    storage.set("sessionGuid", res, 30);
    setNewView(type, id);
  });
}
export const storage = {
  /*
   * set å­˜å‚¨æ–¹æ³•
   * @ param {String}     key é”®
   * @ param {String}     value å€¼ï¼Œ
   * @ param {String}     expired è¿‡æœŸæ—¶é—´ï¼Œä»¥åˆ†é’Ÿä¸ºå•位,非必须
   */
  set(key, val, expired) {
    if (typeof val !== "string") {
      val = JSON.stringify(val);
    }
    window.sessionStorage.setItem(key, val);
    if (expired) {
      window.sessionStorage.setItem(
        `${key}__expires__`,
        `${Date.now() + 1000 * 60 * expired}`
      );
    }
  },
  /*
   * get èŽ·å–æ–¹æ³•
   * @ param {String}     key é”®
   * @ param {String}     expired å­˜å‚¨æ—¶ä¸ºéžå¿…须字段,所以有可能取不到,默认为 Date.now+1
   */
  get(key) {
    const expired =
      window.sessionStorage.getItem(`${key}__expires__`) || Date.now + 1;
    const now = Date.now();
    if (now >= expired) {
      window.sessionStorage.removeItem(key);
      return;
    }
    let val = window.sessionStorage.getItem(key);
    try {
      val = JSON.parse(val);
    } catch (e) {
      return e;
    }
    return val;
  },
};
function myBrowser() {
  const userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  const isOpera = userAgent.indexOf("Opera") > -1;
  if (isOpera) {
    //判断是否Opera浏览器
    return "Opera";
  }
  if (userAgent.indexOf("Firefox") > -1) {
    //判断是否Firefox浏览器
    return "Firefox";
  }
  if (userAgent.indexOf("Chrome") > -1) {
    return "Chrome";
  }
  if (userAgent.indexOf("Safari") > -1) {
    //判断是否Safari浏览器
    return "Safari";
  }
  if (
    userAgent.indexOf("compatible") > -1 &&
    userAgent.indexOf("MSIE") > -1 &&
    !isOpera
  ) {
    //判断是否IE浏览器
    return "IE";
  }
  return "";
}
export function setNewView(type, id) {
  if (!sessionStorage.getItem("sessionGuid")) {
    setSessionGuid(type, id);
  }
  const sessionGuid = sessionStorage.getItem("sessionGuid");
  const fromPath = sessionStorage.getItem("fromPath");
  const toPath = sessionStorage.getItem("toPath");
  if (sessionGuid) {
    let params = {
      sessionGuid: sessionGuid,
      appRefCode: config.appRefCode,
      type: "View",
      url: toPath == null ? "/" : toPath,
      ref: fromPath == null ? "/" : fromPath,
    };
    if (id) {
      params[type] = id;
    }
    jobApi.newJobWithNewView(params).then(res => {});
  }
}
src/assets/logo.svg
New file
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>
src/assets/main.css
New file
@@ -0,0 +1,15 @@
@import './base.css';
#app {
  width: 100%;
}
a,
.green {
  text-decoration: none;
  color: hsla(160, 100%, 37%, 1);
  transition: 0.4s;
  padding: 3px;
}
src/layout/baseLayout.vue
New file
@@ -0,0 +1,41 @@
<template>
  <div class="layoutBox">
    <Header class="header"></Header>
    <div class="layoutContentBox" id="layout">
      <RouterView />
      <Footer class="footer"></Footer>
    </div>
  </div>
</template>
<script setup lang="ts">
import Header from './components/headerPage.vue'
import Footer from './components/footerPage.vue'
</script>
<style lang="less" scoped>
.layoutBox {
  width: 100%;
  height: 100vh;
  display: flex;
  flex-direction: column;
  background-color: #fff;
  .layoutContentBox {
    flex: 1;
    height: auto;
  }
  .header {
    flex-shrink: 0;
    width: 100%;
  }
}
@media screen and (min-width: 1200px) {
  .layoutContentBox {
    flex: 1;
    overflow: auto;
  }
}
</style>
src/layout/components/footerPage.vue
New file
@@ -0,0 +1,16 @@
<template>
  <div class="footerBox">FOOT</div>
</template>
<script setup lang="ts"></script>
<style scoped>
.footerBox {
  width: 100%;
  height: 240px;
  min-width: 1200px;
  color: #fff;
  background-color: #f0f0f0;
  text-align: center;
}
</style>
src/layout/components/headerPage.vue
New file
@@ -0,0 +1,184 @@
<template>
  <div class="pageHeader">
    <div class="contentBox logoBox">
      <div class="logo">
        <img
          @click="
            () => {
              $router.push({
                path: '/home',
              })
            }
          "
          src="@/assets/images/xiehe/home/Group_303.png"
        />
      </div>
      <div class="searchBox" v-show="!hideSerch">
        <el-input
          style="width: 500px"
          placeholder="请输入内容"
          @change="gotoSearch"
          v-model="searchKey"
          :suffix-icon="Search"
        >
        </el-input>
        <div class="loginInfoBox">
          <div v-if="!userInfo" class="loginBtnBox">
            <a
              @click="
                () => {
                  $router.push({
                    path: '/register',
                  })
                }
              "
              >注册</a
            >
            |
            <a
              @click="
                () => {
                  $router.push({
                    path: '/login',
                    query: {
                      redirectPath: $route.fullPath,
                    },
                  })
                }
              "
              >登录</a
            >
          </div>
          <div v-else class="userInfoBox">
            <el-dropdown @command="handleCommand">
              <span style="cursor: pointer">欢迎您,{{ userInfo.name }}!</span>
              <el-dropdown-menu slot="dropdown">
                <el-dropdown-item icon="el-icon-user" command="gotoPersonalCenter"
                  >个人中心</el-dropdown-item
                >
                <el-dropdown-item icon="el-icon-switch-button" command="logout"
                  >退出登录</el-dropdown-item
                >
              </el-dropdown-menu>
            </el-dropdown>
          </div>
        </div>
      </div>
    </div>
    <div class="contentBox navBox" v-show="!hideNav">
      <div
        :class="{
          navItem: true,
          active: $route.fullPath.indexOf(item.path) > -1,
        }"
        v-for="(item, index) in navData"
        :key="index"
        @click="gotoPage(item)"
      >
        {{ item.name }}
      </div>
    </div>
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const props = defineProps({
  hideSerch: {
    type: Boolean,
    default: false,
  },
  hideNav: {
    type: Boolean,
    default: false,
  },
})
let searchKey = ref('')
let userInfo = ref('')
const gotoSearch = () => {}
const handleCommand = () => {}
</script>
<style lang="less" scoped>
.pageHeader {
  width: 100%;
  background-color: #fff;
  border-bottom: 1px solid #e6e6e6;
  .topBar {
    background: #e6e6e6;
    color: #808080;
    overflow: hidden;
    padding: 14px 0;
    p {
      float: left;
    }
    .loginInfoBox {
      float: right;
      .loginBtnBox {
        a {
          cursor: pointer;
          text-decoration: none;
          color: inherit;
          margin: 0 4px;
        }
      }
    }
  }
  .logoBox {
    padding: 25px 0;
    overflow: hidden;
    max-width: 1200px !important;
    .logo {
      float: left;
      height: 66px;
      img {
        height: 100%;
        cursor: pointer;
      }
    }
    .searchBox {
      width: 670px;
      float: right;
      padding-right: 10px;
      line-height: 66px;
      display: flex;
      justify-content: space-between;
      .searchItem {
        width: 120px;
        vertical-align: initial;
      }
      .searchBtn {
        width: auto;
        background: #144941;
        color: #fff;
        padding: 0 20px;
        height: 40px;
      }
    }
  }
  .navBox {
    .navItem {
      display: inline-block;
      width: 120px;
      height: 50px;
      text-align: center;
      line-height: 50px;
      font-size: 16px;
      cursor: pointer;
      &.active {
        background: #144941;
        color: #fff;
      }
    }
  }
}
</style>
<style>
.pageHeader .searchBox .el-input-group__prepend {
  background: #fff;
  color: #444;
}
</style>
src/main.js
New file
@@ -0,0 +1,30 @@
import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
// å®Œæ•´å¼•å…¥ Element Plus
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import router from './router'
import MG from '@/assets/js/middleGround/WebMiddleGroundApi.js'
import toolClass from '@/assets/js/toolClass.js'
import config from '@/assets/js/config.js'
const app = createApp(App)
app.provide('config', config)
app.provide('MG', MG)
app.provide('toolClass', toolClass)
// æ³¨å†Œæ‰€æœ‰å›¾æ ‡
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}
app.use(ElementPlus)
app.use(createPinia())
app.use(router)
app.mount('#app')
src/plugin/axios/index.ts
New file
@@ -0,0 +1,69 @@
import axios from "axios";
import myConfig from "@/assets/js/config.js";
import toolClass from "@/assets/js/toolClass.js";
import router from "@/router";
// åˆ›å»º axios å®žä¾‹
const service = axios.create({
  baseURL: myConfig.requestCtx,
  timeout: myConfig.requestTimeOut, // è¯·æ±‚è¶…æ—¶æ—¶é—´
});
// è¯·æ±‚拦截器
service.interceptors.request.use(
  (config) => {
    let token = localStorage.getItem(myConfig.tokenKey);
    if (token) config.headers["Authorization"] = `bearer ${token}`;
    return config;
  },
  (error) => {
    // å‘送失败
    Promise.reject(error);
  }
);
// å“åº”拦截器
service.interceptors.response.use(
  (response) => {
    // dataAxios æ˜¯ axios è¿”回数据中的 data
    const dataAxios = response.data;
    if (typeof dataAxios.data === "boolean") {
      return dataAxios.data;
    }
    if (response.config.responseType == "blob") {
      return dataAxios;
    }
    const { success } = dataAxios;
    if (dataAxios.currentDate) {
      sessionStorage.currentDate = new Date(dataAxios.currentDate).getTime();
    }
    // æ ¹æ® code è¿›è¡Œåˆ¤æ–­
    if (response.status == 200 && response.statusText == "OK") {
      return dataAxios.data ? dataAxios.data : dataAxios;
    } else {
      // æç¤ºé”™è¯¯
    }
  },
  (error) => {
    if (
      (error.response && error.response.status == 401) ||
      error.code == "ERR_NETWORK"
    ) {
      console.log(router, "router");
      localStorage.removeItem(myConfig.tokenKey);
      localStorage.removeItem("jesk-userInfo");
      router.push({
        name: "login",
      });
    } else {
      if (error.response && error.response.data && error.response.data.error) {
        console.error(error.response.data.error.msg);
      } else {
        console.error("请求发生错误");
      }
    }
    return Promise.reject(error);
  }
);
export default service;
src/router/index.js
New file
@@ -0,0 +1,23 @@
import { createRouter, createWebHashHistory, createWebHistory } from 'vue-router'
import HomeView from '../views/home/index.vue'
import PageLayout from '../layout/baseLayout.vue'
const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'layout',
      component: PageLayout,
      redirect: { name: 'home' },
      children: [
        {
          path: '/',
          name: 'home',
          component: HomeView,
        },
      ],
    },
  ],
})
export default router
src/stores/counter.js
New file
@@ -0,0 +1,12 @@
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  const doubleCount = computed(() => count.value * 2)
  function increment() {
    count.value++
  }
  return { count, doubleCount, increment }
})
src/views/home/index.vue
New file
@@ -0,0 +1,36 @@
<template>
  <div class="homePage">
    <el-carousel :height="screenheight">
      <el-carousel-item v-for="item in 4" :key="item">
        <h3 class="small justify-center" text="2xl">{{ item }}</h3>
      </el-carousel-item>
    </el-carousel>
  </div>
</template>
<script setup>
import { ref } from 'vue'
let screenheight = ref(document.documentElement.clientHeight / 4)
</script>
<style lang="less" scoped>
.homePage {
  min-width: 1220px;
  background-color: #fff;
}
.el-carousel__item h3 {
  color: #475669;
  opacity: 0.75;
  line-height: 150px;
  margin: 0;
  text-align: center;
}
.el-carousel__item:nth-child(2n) {
  background-color: #99a9bf;
}
.el-carousel__item:nth-child(2n + 1) {
  background-color: #d3dce6;
}
</style>
vite.config.js
New file
@@ -0,0 +1,18 @@
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vite.dev/config/
export default defineConfig({
  plugins: [vue()],
  base: './',
  server: {
    host: '0.0.0.0',
  },
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})