浏览代码

init project

lex-xin 5 年之前
父节点
当前提交
89c4f6fd1c
共有 100 个文件被更改,包括 3006 次插入0 次删除
  1. 22 0
      .gitignore
  2. 50 0
      babel-core/README.md
  3. 2 0
      babel-core/index.js
  4. 46 0
      babel-core/package.json
  5. 24 0
      babel.config.js
  6. 67 0
      package.json
  7. 二进制
      public/favicon.ico
  8. 39 0
      public/index.html
  9. 35 0
      src/App.vue
  10. 57 0
      src/api/app.js
  11. 186 0
      src/api/audition.js
  12. 94 0
      src/api/login.js
  13. 15 0
      src/api/monitor.js
  14. 65 0
      src/api/service.js
  15. 301 0
      src/api/student.js
  16. 119 0
      src/assets/commonJs/front_ciry.js
  17. 608 0
      src/assets/commonJs/front_instruments_config.js
  18. 17 0
      src/assets/commonJs/unit.js
  19. 1173 0
      src/assets/commonLess/Quill.less
  20. 44 0
      src/assets/commonLess/common.less
  21. 42 0
      src/assets/commonLess/variable.less
  22. 二进制
      src/assets/images/Shape.png
  23. 二进制
      src/assets/images/activeList/Blessing.png
  24. 二进制
      src/assets/images/activeList/bg.png
  25. 二进制
      src/assets/images/activeList/box.png
  26. 二进制
      src/assets/images/activeList/button.png
  27. 二进制
      src/assets/images/activeList/da-bg.png
  28. 二进制
      src/assets/images/activeList/da-btn.png
  29. 二进制
      src/assets/images/activeList/decorate.png
  30. 二进制
      src/assets/images/activeList/title.png
  31. 二进制
      src/assets/images/activeList/toBg.png
  32. 二进制
      src/assets/images/activeList/toButton.png
  33. 二进制
      src/assets/images/activeList/toButton1.png
  34. 二进制
      src/assets/images/app/icon_b.png
  35. 二进制
      src/assets/images/app/icon_step.png
  36. 二进制
      src/assets/images/app/icon_student.png
  37. 二进制
      src/assets/images/app/icon_teacher.png
  38. 二进制
      src/assets/images/audition/arrow_down.png
  39. 二进制
      src/assets/images/audition/banner.png
  40. 二进制
      src/assets/images/audition/bannerpay.png
  41. 二进制
      src/assets/images/audition/bgdetail.png
  42. 二进制
      src/assets/images/audition/icon_order.png
  43. 二进制
      src/assets/images/audition/icon_teacher.png
  44. 二进制
      src/assets/images/audition/no_data.png
  45. 二进制
      src/assets/images/audition/no_subject.png
  46. 二进制
      src/assets/images/audition/tipBg.png
  47. 二进制
      src/assets/images/balance.png
  48. 二进制
      src/assets/images/business/1.png
  49. 二进制
      src/assets/images/business/2.png
  50. 二进制
      src/assets/images/business/3.png
  51. 二进制
      src/assets/images/business/4.png
  52. 二进制
      src/assets/images/business/5.png
  53. 二进制
      src/assets/images/business/6.png
  54. 二进制
      src/assets/images/business/7.png
  55. 二进制
      src/assets/images/cachet.png
  56. 二进制
      src/assets/images/card.png
  57. 二进制
      src/assets/images/default_head_img.png
  58. 二进制
      src/assets/images/download/banner.png
  59. 二进制
      src/assets/images/download/bg.png
  60. 二进制
      src/assets/images/download/logo.png
  61. 二进制
      src/assets/images/download/mbanner.png
  62. 二进制
      src/assets/images/download/mlogo.png
  63. 二进制
      src/assets/images/download/tbanner.png
  64. 二进制
      src/assets/images/download/tlogo.png
  65. 二进制
      src/assets/images/icon_app.png
  66. 二进制
      src/assets/images/icon_checked.png
  67. 二进制
      src/assets/images/icon_cw.png
  68. 二进制
      src/assets/images/icon_downmore.png
  69. 二进制
      src/assets/images/icon_half.png
  70. 二进制
      src/assets/images/icon_half_no.png
  71. 二进制
      src/assets/images/icon_nodata.png
  72. 二进制
      src/assets/images/icon_pople.png
  73. 二进制
      src/assets/images/level/area_bg.png
  74. 二进制
      src/assets/images/level/banner@2x.png
  75. 二进制
      src/assets/images/level/entry_bg.png
  76. 二进制
      src/assets/images/level/signup_bg.png
  77. 二进制
      src/assets/images/logo.png
  78. 二进制
      src/assets/images/m_title_icon.png
  79. 二进制
      src/assets/images/m_title_no.png
  80. 二进制
      src/assets/images/msgImg.png
  81. 二进制
      src/assets/images/mycard.png
  82. 二进制
      src/assets/images/pay_error.png
  83. 二进制
      src/assets/images/pay_ing.png
  84. 二进制
      src/assets/images/pay_success.png
  85. 二进制
      src/assets/images/register_banner.png
  86. 二进制
      src/assets/images/service/icon_over.png
  87. 二进制
      src/assets/images/squrt.png
  88. 二进制
      src/assets/images/start/1.png
  89. 二进制
      src/assets/images/start/2.png
  90. 二进制
      src/assets/images/start/3.png
  91. 二进制
      src/assets/images/start/4.png
  92. 二进制
      src/assets/images/start/bg.png
  93. 二进制
      src/assets/images/start/book-icon.png
  94. 二进制
      src/assets/images/start/bottom.png
  95. 二进制
      src/assets/images/start/box1.png
  96. 二进制
      src/assets/images/start/box2.png
  97. 二进制
      src/assets/images/start/box3.png
  98. 二进制
      src/assets/images/start/boxtitle1.png
  99. 二进制
      src/assets/images/start/boxtitle2.png
  100. 二进制
      src/assets/images/start/din-bold.otf

+ 22 - 0
.gitignore

@@ -0,0 +1,22 @@
+.DS_Store
+node_modules
+/dist
+# babel-core
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 50 - 0
babel-core/README.md

@@ -0,0 +1,50 @@
+## babel-bridge
+
+This repo holds what we're calling a "bridge" package that is meant to ease the
+transition for libraries that use "babel-core" as a peer dependency for Babel 6.
+
+The issue with Babel 7's transition to scopes is that if a package depends on
+Babel 6, they may want to add support for Babel 7 alongside. Because Babel 7
+will be released as `@babel/core` instead of `babel-core`, maintainers have
+no way to do that transition without making a breaking change. e.g.
+
+```js
+peerDependencies: {
+  "babel-core": "6.x"
+}
+```
+cannot change to
+
+```js
+peerDependencies: {
+  "@babel/core": "6.x"
+}
+```
+
+without it being a breaking change.
+
+### Solution
+
+To address this, we're releasing this bridge package, to allow users to do
+
+
+```js
+peerDependencies: {
+  "babel-core": "6.x | ^7.0.0-bridge"
+}
+```
+
+then where users of this package would originally have done
+
+```sh
+npm i some-package babel-core
+```
+
+to install Babel 6, they could now do
+
+
+```sh
+npm i some-package babel-core@^7.0.0-bridge @babel/core
+```
+
+to install the bridge package, and install Babel 7's core.

+ 2 - 0
babel-core/index.js

@@ -0,0 +1,2 @@
+"use strict";
+module.exports = require("@babel/core");

+ 46 - 0
babel-core/package.json

@@ -0,0 +1,46 @@
+{
+  "_from": "babel-core@7.0.0-bridge.0",
+  "_id": "babel-core@7.0.0-bridge.0",
+  "_inBundle": false,
+  "_integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+  "_location": "/babel-core",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "babel-core@7.0.0-bridge.0",
+    "name": "babel-core",
+    "escapedName": "babel-core",
+    "rawSpec": "7.0.0-bridge.0",
+    "saveSpec": null,
+    "fetchSpec": "7.0.0-bridge.0"
+  },
+  "_requiredBy": [
+    "#DEV:/"
+  ],
+  "_resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+  "_shasum": "95a492ddd90f9b4e9a4a1da14eb335b87b634ece",
+  "_spec": "babel-core@7.0.0-bridge.0",
+  "_where": "D:\\daYaProject\\dy-admin-manager",
+  "author": {
+    "name": "Logan Smyth",
+    "email": "loganfsmyth@gmail.com"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A placeholder package that bridges babel-core to @babel/core.",
+  "devDependencies": {
+    "@babel/core": "^7.0.0-0"
+  },
+  "files": [
+    "README.md",
+    "index.js"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "babel-core",
+  "peerDependencies": {
+    "@babel/core": "^7.0.0-0"
+  },
+  "version": "7.0.0-bridge.0"
+}

+ 24 - 0
babel.config.js

@@ -0,0 +1,24 @@
+// [["@vue/app", 
+//         { useBuiltIns: "entry",
+//         polyfills: [
+//             'es6.promise',
+//             'es6.symbol'
+//            ]},
+//     ]],
+// ["@vue/app"]
+module.exports = {
+    presets: [["@vue/app", 
+        { useBuiltIns: "entry",
+        polyfills: [
+            'es6.promise',
+            'es6.symbol'
+            ]},
+    ]],
+    plugins: [
+        ['import', {
+          libraryName: 'vant',
+          libraryDirectory: 'es',
+          style: name => `${name}/style/less`
+        }]
+    ]
+}

+ 67 - 0
package.json

@@ -0,0 +1,67 @@
+{
+  "name": "mdaya",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "browserslist": "^4.8.6",
+    "caniuse-lite": "^1.0.30001027",
+    "core-js": "^2.6.5",
+    "es6-promise": "^4.2.8",
+    "install": "^0.13.0",
+    "qrcodejs2": "0.0.2",
+    "qs": "^6.8.0",
+    "vant": "^2.4.4",
+    "vconsole": "^3.3.4",
+    "vue": "^2.6.10",
+    "vue-amap": "^0.5.10",
+    "vue-awesome-swiper": "^3.1.3",
+    "vue-router": "^3.0.3",
+    "vuex": "^3.0.1"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.7.7",
+    "@babel/plugin-transform-runtime": "^7.7.6",
+    "@babel/polyfill": "^7.7.0",
+    "@babel/preset-env": "^7.7.7",
+    "@vue/cli-plugin-babel": "^3.10.0",
+    "@vue/cli-plugin-eslint": "^3.10.0",
+    "@vue/cli-service": "^3.10.0",
+    "axios": "^0.18.0",
+    "babel-eslint": "^10.0.1",
+    "babel-plugin-import": "^1.12.1",
+    "eslint": "^5.16.0",
+    "eslint-plugin-vue": "^5.0.0",
+    "less": "^3.10.3",
+    "less-loader": "^4.1.0",
+    "vue-cli-plugin-axios": "0.0.4",
+    "vue-template-compiler": "^2.6.10"
+  },
+  "eslintConfig": {
+    "root": true,
+    "env": {
+      "node": true
+    },
+    "extends": [
+      "plugin:vue/essential",
+      "eslint:recommended"
+    ],
+    "rules": {},
+    "parserOptions": {
+      "parser": "babel-eslint"
+    }
+  },
+  "postcss": {
+    "plugins": {
+      "autoprefixer": {}
+    }
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}

二进制
public/favicon.ico


+ 39 - 0
public/index.html

@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <meta name="format-detection" content="telephone=no">
+    <meta name="mobile-web-app-capable" content="yes">
+    <meta name="msapplication-tap-highlight" content="no">
+    <meta name="fragment" content="!">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
+    <meta http-equiv="Expires" content="0">
+    <meta http-equiv="Pragma" content="no-cache">
+    <meta http-equiv="Cache-control" content="no-cache">
+    <meta http-equiv="Cache" content="no-cache">
+    <meta name="description" content="" >
+
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title>管乐迷</title>
+    <style>html{color:#000;overflow-y:scroll;overflow-x:hidden;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;font-size:100px;-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch}.link,.link:hover,.link:visited,a{color:#333}body,html{font-family:"PingFang SC","Heiti SC","SF UI Text","Helvetica Neue",Roboto,"Droid Sans Fallback",arial,sans-serif;font-weight:normal}body{font-size:.12rem;line-height:1.5}*{margin:0;padding:0;outline:0;-webkit-text-size-adjust:none;-webkit-tap-highlight-color:transparent}input,select,textarea{font-size:100%}table{border-collapse:collapse;border-spacing:0}img{border:0}del{text-decoration:line-through}.link:active,a{text-decoration:none}ol,ul{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-weight:500}h1{font-size:.36rem}h2{font-size:.28rem}h3{font-size:.24rem}h4{font-size:.2rem;line-height:.26rem}h5{font-size:.18rem;line-height:.24rem}h6{font-size:.16rem;line-height:.2rem}q:after,q:before{content:''}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}.link:active{color:#e61414}ins,u{text-decoration:underline;text-decoration-color:#eee}</style>
+    <script>!function(e,t){var n=t.documentElement,d=e.devicePixelRatio||1;function i(){var e=n.clientWidth/3.75;n.style.fontSize=e+"px"}if(function e(){t.body?t.body.style.fontSize="16px":t.addEventListener("DOMContentLoaded",e)}(),i(),e.addEventListener("resize",i),e.addEventListener("pageshow",function(e){e.persisted&&i()}),2<=d){var o=t.createElement("body"),a=t.createElement("div");a.style.border=".5px solid transparent",o.appendChild(a),n.appendChild(o),1===a.offsetHeight&&n.classList.add("hairlines"),n.removeChild(o)}}(window,document)</script>
+    <!-- <script type="text/javascript" src="./adaPay_min.js"></script> -->
+  </head>
+  <body>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+    <form role="form" method="post" action="" id="onSubmit">
+      <input type="hidden" name="apiContent" id="apiContent">
+      <input type="hidden" name="merNo" id="merNo">
+      <input type="hidden" name="notifyUrl" id="notifyUrl">
+      <input type="hidden" name="sign" id="sign">
+      <input type="hidden" name="signType" id="signType">
+      <input type="hidden" name="timestamp" id="timestamp">
+      <input type="hidden" name="version" id="version">
+  </form>
+  </body>
+  
+</html>

+ 35 - 0
src/App.vue

@@ -0,0 +1,35 @@
+<template>
+  <div id="app">
+    <!-- <transition name="fade">
+        <keep-alive>
+            <router-view v-if="$route.meta.keepAlive" />
+        </keep-alive>
+    </transition> -->
+    <transition name="fade">
+        <router-view  :key="$route.fullPath"/>
+    </transition>
+  </div>
+</template>
+
+<style lang="less">
+@import url('./assets/commonLess/common');
+#app {
+    font-family: 'Avenir', Helvetica, Arial, sans-serif;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    background: #F3F4F8;
+    // overflow-x: hidden;
+    // overflow-y: auto;
+    user-select: none;
+    -webkit-text-size-adjust: none !important;
+}
+.fade-enter-active, .fade-leave-active {
+  transition: opacity .5s;
+}
+.fade-enter, .fade-leave-active {
+  opacity: 0;
+}
+body {
+    -webkit-text-size-adjust: none !important;
+}
+</style>

+ 57 - 0
src/api/app.js

@@ -0,0 +1,57 @@
+
+
+const axios = require('@/common/axios').default
+import qs from 'qs'
+
+// 获取课程组详情
+const getGroupDetail = (data) => {
+    return axios({
+        url: '/api-student/courseGroup/getGroupDetail',
+        method: 'get',
+        params: data
+    })
+}
+
+// 购买课程组
+const buyCourseGroup = (data) => {
+    return axios({
+        url: '/api-student/courseGroup/buyCourseGroup',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 评论详情
+const getReviewInfo = (data) => {
+    return axios({
+        url: '/api-student/courseReview/getReviewInfo',
+        method: 'get',
+        params: data
+    })
+}
+
+// 评论详情
+const getStuAndTeaReviewInfo = (data) => {
+    return axios({
+        url: '/api-student/courseReview/getStuAndTeaReviewInfo',
+        method: 'get',
+        params: data
+    })
+}
+
+// 注册协议
+const queryRegisterContract = (data) => {
+    return axios({
+        url: '/api-student/contracts/queryRegisterContract',
+        method: 'get',
+        params: data
+    })
+}
+
+export {
+    getGroupDetail,
+    buyCourseGroup,
+    getReviewInfo,
+    getStuAndTeaReviewInfo,
+    queryRegisterContract
+}

+ 186 - 0
src/api/audition.js

@@ -0,0 +1,186 @@
+const axios = require('@/common/axios').default
+import qs from 'qs'
+
+// 获取陪练课预约参数
+const getPracticeApplyParams = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/getPracticeApplyParams',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取指定学员所在分部下的教师空闲时间
+const getTeacherFreeTimes = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/getTeacherFreeTimes',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取学生的陪练课
+const findUserPracticeCourses = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/findUserPracticeCourses',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取学生的陪练课
+const practiceApply = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/practiceApply',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 获取老师列表
+const getEnableApplyTeachers = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/getEnableApplyTeachers',
+    method: 'get',
+    params: data
+  })
+}
+
+
+// 获取陪练课预约参数——付费
+const getPayPracticeApplyParams = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/getPayPracticeApplyParams',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取可以预约的教师--付费
+const getEnableApplyTeachersWithPay = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/getEnableApplyTeachersWithPay',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取指定教师的空闲时间——付费
+const getPayPracticeTeacherFreeTimes = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/getPayPracticeTeacherFreeTimes',
+    method: 'get',
+    params: data
+  })
+}
+
+// 陪练课购买
+const buyPracticeGroup = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/buyPracticeGroup',
+    method: 'post',
+    data: data
+  })
+}
+
+// 获取用户历史购买的陪练课
+const findUserHistoryBuyPracticeGroups = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/findUserHistoryBuyPracticeGroups',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取学生上一次的购买信息--付费
+const findUserLatestPracticeGroup = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/findUserLatestPracticeGroup',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询订单信息
+const queryOrderInfo = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/queryOrderInfo',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询订单信息
+const groupRepay = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/repay',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 查询合同
+const queryPracticeCoursesContract = (data) => {
+  return axios({
+    url: '/api-student/contracts/queryPracticeCoursesContract',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取老师列表
+const checkCanApplyFreePracticeGroup = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/checkCanApplyFreePracticeGroup',
+    method: 'get',
+    params: data
+  })
+}
+
+// 检测用户是否存在待支付的课程组订单
+const checkExistWaitPayOrder = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/checkExistWaitPayOrder',
+    method: 'get',
+    params: data
+  })
+}
+
+// 取消待支付的订单
+const cancelWaitPayOrder = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/cancelWaitPayOrder',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 是否是新用户
+const isNewStudent = (data) => {
+  return axios({
+    url: '/api-student/practiceGroup/isNewStudent',
+    method: 'get',
+    params: data
+  })
+}
+
+export {
+    getPracticeApplyParams,
+    getTeacherFreeTimes,
+    findUserPracticeCourses,
+    practiceApply,
+    getEnableApplyTeachers,
+    getPayPracticeApplyParams,
+    getEnableApplyTeachersWithPay,
+    getPayPracticeTeacherFreeTimes,
+    buyPracticeGroup,
+    findUserHistoryBuyPracticeGroups,
+    findUserLatestPracticeGroup,
+    queryOrderInfo,
+    queryPracticeCoursesContract,
+    groupRepay,
+    checkCanApplyFreePracticeGroup,
+    checkExistWaitPayOrder,
+    cancelWaitPayOrder,
+    isNewStudent
+}

+ 94 - 0
src/api/login.js

@@ -0,0 +1,94 @@
+import qs from 'qs'
+const axios = require('@/common/axios').default
+const apiPrefix = '/api-auth'
+// 手机号密码方式登录
+const usernameLogin = (data) => {
+    return axios({
+        url: apiPrefix + '/usernameLogin',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+// 刷新token
+const refreshToken = (data) => {
+    return axios({
+        url: apiPrefix + '/refreshToken',
+        method: 'post',
+        data
+    })
+}
+
+// 发送登录短信验证码
+const sendSms = (data) => {
+    return axios({
+        url: '/api-student/code/sendSms',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 校验短信验证码
+const verifySmsCode = (data) => {
+    return axios({
+        url: '/api-student/code/verifySmsCode',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 短信验证码的方式登录
+const smsLogin = (data) => {
+    return axios({
+        url: apiPrefix + '/smsLogin',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 获取用户基本信息
+const queryUserInfo = (data) => {
+    return axios({
+        url: apiPrefix + '/queryUserInfo',
+        method: 'get',
+        params: data
+    })
+}
+
+// 乐团报名缴费状态查询
+const getMusicGroupStatus = (data) => {
+    return axios({
+        url: '/api-student/musicGroup/getMusicGroupStatus',
+        method: 'get',
+        params: data
+    })
+}
+
+// 修改学生信息
+const userInfoUpdate = (data) => {
+    return axios({
+        url: apiPrefix + '/user/update',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 检查手机号
+const queryUserByPhone = (data) => {
+    return axios({
+        url: apiPrefix + '/user/noAuth/queryUserByPhone',
+        method: 'get',
+        params: data
+    })
+  }
+
+export {
+    usernameLogin,
+    refreshToken,
+    sendSms,
+    verifySmsCode,
+    smsLogin,
+    getMusicGroupStatus,
+    queryUserInfo,
+    userInfoUpdate,
+    queryUserByPhone
+}

+ 15 - 0
src/api/monitor.js

@@ -0,0 +1,15 @@
+const axios = require('@/common/axios').default
+import qs from 'qs'
+
+// 修改学生信息
+const pageMonitor = (data) => {
+    return axios({
+        url: '/api-student/pageMonitor/add',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+export {
+    pageMonitor
+}

+ 65 - 0
src/api/service.js

@@ -0,0 +1,65 @@
+const axios = require('@/common/axios').default
+import qs from 'qs'
+
+// 帮助中心分类
+const helpCenterCatalogList = (data) => {
+    return axios({
+        url: '/api-cms/helpCenterCatalog/list',
+        method: 'get',
+        params: data
+    })
+}
+
+// 帮助中心
+const helpCenterContentList = (data) => {
+    return axios({
+        url: '/api-cms/helpCenterContent/list',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取维修记录详情
+const getRepairInfo = (data) => {
+    return axios({
+        url: '/api-student/repair/getRepairInfo',
+        method: 'get',
+        params: data
+    })
+}
+
+// 获取维修技师信息
+const getRepairer = (data) => {
+    return axios({
+        url: '/api-student/repair/getRepairer',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+// 获取维修记录
+const getStudentRepairList = (data) => {
+    return axios({
+        url: '/api-student/repair/getStudentRepairList',
+        method: 'get',
+        params: data
+    })
+}
+
+// 支付维修单
+const payRepair = (data) => {
+    return axios({
+        url: '/api-student/repair/payRepair',
+        method: 'post',
+        data: qs.stringify(data)
+    })
+}
+
+export {
+    helpCenterCatalogList,
+    helpCenterContentList,
+    getRepairInfo,
+    getRepairer,
+    getStudentRepairList,
+    payRepair
+}

+ 301 - 0
src/api/student.js

@@ -0,0 +1,301 @@
+const axios = require('@/common/axios').default
+import qs from 'qs'
+// import axios from '@/common/axios'
+// console.log(axios)
+
+// 获取乐团报名所需信息
+const getMusicGroupRegInfo = (data) => {
+  return axios({
+    url: '/api-student/register/getMusicGroupRegInfo',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取乐团报名所需信息
+const registerAdd = (data) => {
+  return axios({
+    url: '/api-student/register/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 获取乐团声部费用信息及乐器和辅件
+const getSubjectGoodsAndInfo = (data) => {
+  return axios({
+    url: '/api-student/musicGroup/getSubjectGoodsAndInfo',
+    method: 'get',
+    params: data
+  })
+}
+
+// 乐团报名支付
+const musicGroupPay = (data) => {
+  return axios({
+    url: '/api-student/musicGroup/pay',
+    method: 'post',
+    data: data
+  })
+}
+
+// 乐团报名重新支付
+const musicGroupRePay = (data) => {
+  return axios({
+    url: '/api-student/musicGroup/rePay',
+    method: 'post',
+    data: data
+  })
+}
+
+// 资讯列表分页查询
+const newsList = (data) => {
+  return axios({
+    url: '/api-cms/news/list',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询资讯详情
+const newsQuery = (data) => {
+  return axios({
+    url: '/api-cms/news/query',
+    method: 'get',
+    params: data
+  })
+}
+
+// 订单状态查询
+const getOrderStatus = (data) => {
+  return axios({
+    url: '/api-student/musicGroup/getOrderStatus',
+    method: 'get',
+    params: data
+  })
+}
+
+// 订单状态查询
+const checkOrderStatus = (data) => {
+  return axios({
+    url: '/api-student/studentOrder/checkOrderStatus',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 查询合同
+const queryGoodsContract = (data) => {
+  return axios({
+    url: '/api-student/contracts/queryGoodsContract',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询乐团课程协议
+const queryMusicGroupCoursesContract = (data) => {
+  return axios({
+    url: '/api-student/contracts/queryMusicGroupCoursesContract',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询VIP课程协议
+const queryVipGroupCoursesContract = (data) => {
+  return axios({
+    url: '/api-student/contracts/queryVipGroupCoursesContract',
+    method: 'get',
+    params: data
+  })
+}
+
+// 查询续费信息
+const queryRenewInfo = (data) => {
+  return axios({
+    url: '/api-student/musicGroup/queryRenewInfo',
+    method: 'get',
+    params: data
+  })
+}
+
+// 续费
+const musicGroupReNew = (data) => {
+  return axios({
+    url: '/api-student/musicGroup/renew',
+    method: 'get',
+    params: data
+  })
+}
+
+// 小班课报名
+const highReg = (data) => {
+  return axios({
+    url: '/api-student/classGroup/highReg',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 小班课列表
+const highClassGroups = (data) => {
+  return axios({
+    url: '/api-student/classGroup/highClassGroups',
+    method: 'get',
+    params: data
+  })
+}
+
+// vip基本信息
+const getVipGroupPayInfo = (data) => {
+  return axios({
+    url: '/api-student/studentVipGroup/getVipGroupPayInfo',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// vip购买
+const buyVipGroup = (data) => {
+  return axios({
+    url: '/api-student/studentVipGroup/buyVipGroup',
+    method: 'post',
+    data: qs.stringify(data)
+  })
+}
+
+// 零星购买
+const sporadicPay = (data) => {
+  return axios({
+    url: '/api-student/sporadicChargeInfo/sporadicPay',
+    method: 'post',
+    data: data
+  })
+}
+
+// 零星购买详情
+const sporadicChargeInfo = (data) => {
+  return axios({
+    url: '/api-student/sporadicChargeInfo/get',
+    method: 'get',
+    params: data
+  })
+}
+
+// 学生是否激活
+const queryStudentPer = (data) => {
+  return axios({
+    url: '/api-student/studentManage/queryStudentPer',
+    method: 'get',
+    params: data
+  })
+}
+
+// 福袋信息获取
+const activityInfo = (data) => {
+  return axios({
+    url: '/api-student/sporadicChargeInfo/activityInfo',
+    method: 'get',
+    params: data
+  })
+}
+
+// 获取用户是否预约试听课
+const findPracticeByUser = (data) => {
+  return axios({
+    url: '/api-student/practiceLessonApply/findPracticeByUser',
+    method: 'get',
+    params: data
+  })
+}
+
+// 新增预约学生 Practice
+const addPractice = (data) => {
+  return axios({
+    url: '/api-student/practiceLessonApply/add',
+    method: 'post',
+    data: data
+  })
+}
+// 查看学习报告
+const studyReport = (data) => {
+  return axios({
+    url: '/api-student/studyReport/info',
+    method: 'get',
+    params: data
+
+  })
+}
+// 查看学习报告新
+const getReviewsInfo = (data) => {
+  return axios({
+    url: '/api-student/studyReport/getReviewsInfo',
+    method: 'get',
+    params: data
+
+  })
+}
+
+// 查看学习报告列表
+const getGroupReviews = (data) => {
+  return axios({
+    url: '/api-student/studyReport/getGroupReviews',
+    method: 'get',
+    params: data
+
+  })
+}
+
+// 统计网管课信息
+const getPracticeGroupStatis = (data) => {
+  return axios({
+    url: '/api-student/studentOrder/getPracticeGroupStatis',
+    method: 'get',
+    params: data
+
+  })
+}
+
+// 统计网管课信息
+const getPracticeStatis = (data) => {
+  return axios({
+    url: '/api-student/studentOrder/getPracticeStatis',
+    method: 'get',
+    params: data
+
+  })
+}
+
+
+export {
+  getMusicGroupRegInfo,
+  registerAdd,
+  getSubjectGoodsAndInfo,
+  musicGroupPay,
+  musicGroupRePay,
+  newsList,
+  newsQuery,
+  getOrderStatus,
+  checkOrderStatus,
+  queryGoodsContract,
+  queryVipGroupCoursesContract,
+  queryRenewInfo,
+  musicGroupReNew,
+  queryMusicGroupCoursesContract,
+  highReg,
+  highClassGroups,
+  getVipGroupPayInfo,
+  buyVipGroup,
+  sporadicPay,
+  sporadicChargeInfo,
+  queryStudentPer,
+  activityInfo,
+  findPracticeByUser,
+  addPractice,
+  studyReport,
+  getPracticeGroupStatis,
+  getPracticeStatis,
+  getGroupReviews,
+  getReviewsInfo
+}

+ 119 - 0
src/assets/commonJs/front_ciry.js

@@ -0,0 +1,119 @@
+let cityList = ['北京市', '县', '天津市', '县', '石家庄市',
+    '唐山市', '秦皇岛市', '邯郸市', '邢台市', '保定市',
+    '张家口市', '承德市', '沧州市', '廊坊市', '衡水市',
+    '太原市', '大同市', '阳泉市', '长治市', '晋城市',
+    '朔州市', '晋中市', '运城市', '忻州市', '临汾市',
+    '吕梁市', '呼和浩特市', '包头市', '乌海市', '赤峰市',
+    '通辽市', '鄂尔多斯市', '呼伦贝尔市', '巴彦淖尔市', '乌兰察布市',
+    '兴安盟', '锡林郭勒盟', '阿拉善盟', '沈阳市', '大连市',
+    '鞍山市', '抚顺市', '本溪市', '丹东市', '锦州市',
+    '营口市', '阜新市', '辽阳市', '盘锦市', '铁岭市',
+    '朝阳市', '葫芦岛市', '长春市', '吉林市', '四平市',
+    '辽源市', '通化市', '白山市', '松原市', '白城市',
+    '延边朝鲜族自治州', '哈尔滨市', '齐齐哈尔市', '鸡西市', '鹤岗市',
+    '双鸭山市', '大庆市', '伊春市', '佳木斯市', '七台河市',
+    '牡丹江市', '黑河市', '绥化市', '大兴安岭地区', '上海市',
+    '县', '南京市', '无锡市', '徐州市', '常州市',
+    '苏州市', '南通市', '连云港市', '淮安市', '盐城市',
+    '扬州市', '镇江市', '泰州市', '宿迁市', '杭州市',
+    '宁波市', '温州市', '嘉兴市', '湖州市', '绍兴市',
+    '金华市', '衢州市', '舟山市', '台州市', '丽水市',
+    '合肥市', '芜湖市', '蚌埠市', '淮南市', '马鞍山市',
+    '淮北市', '铜陵市', '安庆市', '黄山市', '滁州市',
+    '阜阳市', '宿州市', '六安市', '亳州市', '池州市',
+    '宣城市', '福州市', '厦门市', '莆田市', '三明市',
+    '泉州市', '漳州市', '南平市', '龙岩市', '宁德市',
+    '南昌市', '景德镇市', '萍乡市', '九江市', '新余市',
+    '鹰潭市', '赣州市', '吉安市', '宜春市', '抚州市',
+    '上饶市', '济南市', '青岛市', '淄博市', '枣庄市',
+    '东营市', '烟台市', '潍坊市', '济宁市', '泰安市',
+    '威海市', '日照市', '莱芜市', '临沂市', '德州市',
+    '聊城市', '滨州市', '菏泽市', '郑州市', '开封市',
+    '洛阳市', '平顶山市', '安阳市', '鹤壁市', '新乡市',
+    '焦作市', '濮阳市', '许昌市', '漯河市', '三门峡市',
+    '南阳市', '商丘市', '信阳市', '周口市', '驻马店市',
+    '省直辖县级行政区划', '武汉市', '黄石市', '十堰市', '宜昌市',
+    '襄阳市', '鄂州市', '荆门市', '孝感市', '荆州市',
+    '黄冈市', '咸宁市', '随州市', '恩施土家族苗族自治州', '省直辖县级行政区划',
+    '长沙市', '株洲市', '湘潭市', '衡阳市', '邵阳市',
+    '岳阳市', '常德市', '张家界市', '益阳市', '郴州市',
+    '永州市', '怀化市', '娄底市', '湘西土家族苗族自治州', '广州市',
+    '韶关市', '深圳市', '珠海市', '汕头市', '佛山市',
+    '江门市', '湛江市', '茂名市', '肇庆市', '惠州市',
+    '梅州市', '汕尾市', '河源市', '阳江市', '清远市',
+    '东莞市', '中山市', '潮州市', '揭阳市', '云浮市',
+    '南宁市', '柳州市', '桂林市', '梧州市', '北海市',
+    '防城港市', '钦州市', '贵港市', '玉林市', '百色市',
+    '贺州市', '河池市', '来宾市', '崇左市', '海口市',
+    '三亚市', '三沙市', '省直辖县级行政区划', '重庆市', '县',
+    '成都市', '自贡市', '攀枝花市', '泸州市', '德阳市',
+    '绵阳市', '广元市', '遂宁市', '内江市', '乐山市',
+    '南充市', '眉山市', '宜宾市', '广安市', '达州市',
+    '雅安市', '巴中市', '资阳市', '阿坝藏族羌族自治州', '甘孜藏族自治州',
+    '凉山彝族自治州', '贵阳市', '六盘水市', '遵义市', '安顺市',
+    '毕节市', '铜仁市', '黔西南布依族苗族自治州', '黔东南苗族侗族自治州', '黔南布依族苗族自治州',
+    '昆明市', '曲靖市', '玉溪市', '保山市', '昭通市',
+    '丽江市', '普洱市', '临沧市', '楚雄彝族自治州', '红河哈尼族彝族自治州',
+    '文山壮族苗族自治州', '西双版纳傣族自治州', '大理白族自治州', '德宏傣族景颇族自治州', '怒江傈僳族自治州',
+    '迪庆藏族自治州', '拉萨市', '昌都地区', '山南地区', '日喀则地区',
+    '那曲地区', '阿里地区', '林芝地区', '西安市', '铜川市',
+    '宝鸡市', '咸阳市', '渭南市', '延安市', '汉中市',
+    '榆林市', '安康市', '商洛市', '兰州市', '嘉峪关市',
+    '金昌市', '白银市', '天水市', '武威市', '张掖市',
+    '平凉市', '酒泉市', '庆阳市', '定西市', '陇南市',
+    '临夏回族自治州', '甘南藏族自治州', '西宁市', '海东市', '海北藏族自治州',
+    '黄南藏族自治州', '海南藏族自治州', '果洛藏族自治州', '玉树藏族自治州', '海西蒙古族藏族自治州',
+    '银川市', '石嘴山市', '吴忠市', '固原市', '中卫市',
+    '乌鲁木齐市', '克拉玛依市', '吐鲁番地区', '哈密地区', '昌吉回族自治州',
+    '博尔塔拉蒙古自治州', '巴音郭楞蒙古自治州', '阿克苏地区', '克孜勒苏柯尔克孜自治州', '喀什地区',
+    '和田地区', '伊犁哈萨克自治州', '塔城地区', '阿勒泰地区', '直辖县'
+]
+
+let cityCode = [1101, 1102, 1201, 1202, 1301, 1302, 1303, 1304, 1305, 1306, 
+    1307, 1308, 1309, 1310, 1311, 1401, 1402, 1403, 1404, 1405, 
+    1406, 1407, 1408, 1409, 1410, 1411, 1501, 1502, 1503, 1504, 
+    1505, 1506, 1507, 1508, 1509, 1522, 1525, 1529, 2101, 2102, 
+    2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 
+    2113, 2114, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 
+    2224, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 
+    2310, 2311, 2312, 2327, 3101, 3102, 3201, 3202, 3203, 3204, 
+    3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 3301, 
+    3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 
+    3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3410, 3411, 
+    3412, 3413, 3415, 3416, 3417, 3418, 3501, 3502, 3503, 3504, 
+    3505, 3506, 3507, 3508, 3509, 3601, 3602, 3603, 3604, 3605, 
+    3606, 3607, 3608, 3609, 3610, 3611, 3701, 3702, 3703, 3704, 
+    3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 
+    3715, 3716, 3717, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 
+    4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 
+    4190, 4201, 4202, 4203, 4205, 4206, 4207, 4208, 4209, 4210, 
+    4211, 4212, 4213, 4228, 4290, 4301, 4302, 4303, 4304, 4305, 
+    4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4331, 4401, 
+    4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4412, 4413, 
+    4414, 4415, 4416, 4417, 4418, 4419, 4420, 4451, 4452, 4453, 
+    4501, 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, 4510, 
+    4511, 4512, 4513, 4514, 4601, 4602, 4603, 4690, 5001, 5002, 
+    5101, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 5111, 
+    5113, 5114, 5115, 5116, 5117, 5118, 5119, 5120, 5132, 5133, 
+    5134, 5201, 5202, 5203, 5204, 5205, 5206, 5223, 5226, 5227, 
+    5301, 5303, 5304, 5305, 5306, 5307, 5308, 5309, 5323, 5325, 
+    5326, 5328, 5329, 5331, 5333, 5334, 5401, 5421, 5422, 5423, 
+    5424, 5425, 5426, 6101, 6102, 6103, 6104, 6105, 6106, 6107, 
+    6108, 6109, 6110, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 
+    6208, 6209, 6210, 6211, 6212, 6229, 6230, 6301, 6302, 6322, 
+    6323, 6325, 6326, 6327, 6328, 6401, 6402, 6403, 6404, 6405, 
+    6501, 6502, 6521, 6522, 6523, 6527, 6528, 6529, 6530, 6531, 
+    6532, 6540, 6542, 6543, 6590]
+
+function cityName(code) {
+    // let cityIndex = cityCode[]
+    let name
+    cityCode.find(function(currentValue, index) {
+        if(currentValue == code) {
+            name = cityList[index]
+        }
+    })
+    return name
+}
+
+export default cityName

+ 608 - 0
src/assets/commonJs/front_instruments_config.js

@@ -0,0 +1,608 @@
+// 长笛 flute 
+// 单簧管 clarinet
+// 萨克斯管 saxophone
+// 小号 trumpet
+// 长号 trombone
+// 圆号 horn
+// 上低音号 upperBass
+// 次中音号 tenorHorn
+// 小军鼓 snareDrum
+// 打击乐 idiophonic
+
+let instruments = {
+    flute: {
+        name: '长笛',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 4500,
+                referencePrice: 3570,
+                checked: true,
+                texture: '进口镍白铜管体、法式键',
+                index: 2
+            },
+            {
+                default: 0, // 1 为默认配置
+                name: '初级配置',
+                marketPrice: 3150,
+                referencePrice: 2680,
+                checked: false,
+                texture: '白铜管体',
+                index: 1
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99  // 99为自备
+            }
+        ],
+        configuration: 'C调 表面镀银厚度:8μm  管材厚度:0.42mm',
+        auxiliaries: [
+            {
+                name: '节拍器',
+                marketPrice: 120,
+                referencePrice: 95,
+                checked: true,
+                index: 1
+            },
+            {
+                name: '谱架',
+                marketPrice: 80,
+                referencePrice: 65,
+                checked: true,
+                index: 2
+            },
+            {
+                name: '乐器维护',
+                marketPrice: 480,
+                referencePrice: 300,
+                checked: true,
+                index: 8
+            }
+        ]
+    },
+    clarinet: {
+        name: '单簧管',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 4580,
+                referencePrice: 3650,
+                checked: true,
+                texture: '聚碳酸酯、蓝钢针弹簧线',
+                index: 4
+            },
+            {
+                default: 0, // 1 为默认配置
+                name: '初级配置',
+                marketPrice: 3280,
+                referencePrice: 2780,
+                checked: false,
+                texture: '胶木',
+                index: 3
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降B调、八字螺丝固定键柱 按键铍铜、镍白铜 喇叭口直径:8cm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 4,
+                name: '软木膏',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 5,
+                name: '哨片',
+                marketPrice: 150,
+                checked: true,
+                referencePrice: 120
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    saxophone: {
+        name: '萨克斯管',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 6080,
+                referencePrice: 4500,
+                checked: true,
+                texture: '68铜、实心保护盖、蓝钢针弹簧线',
+                index: 6
+            },
+            {
+                default: 0, // 1 为默认配置
+                name: '初级配置',
+                marketPrice: 4200,
+                referencePrice: 3550,
+                checked: false,
+                texture: '/',
+                index: 5
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降E调、黄铜材质、表面电泳处理 喇叭口直径:11.8cm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 4,
+                name: '软木膏',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 5,
+                name: '哨片',
+                marketPrice: 150,
+                checked: true,
+                referencePrice: 120
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    trumpet: {
+        name: '小号',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 4800,
+                referencePrice: 3650,
+                checked: true,
+                texture: '白铜变音管磷铜发音管',
+                index: 7
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降B调 特殊结构:可调试调音管控制环 喇叭口直径:123mm 内管:11.66mm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 3,
+                name: '活塞油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 7,
+                name: '调音管油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    trombone: {
+        name: '长号',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 5550,
+                referencePrice: 3870,
+                checked: true,
+                texture: '白铜内外伸缩管',
+                index: 8
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降B/F调、喇叭口:215mm、内管:13.9mm管:13.9mm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 3,
+                name: '活塞油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 6,
+                name: '拉杆油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 7,
+                name: '调音管油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    horn: {
+        name: '圆号',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 5500,
+                referencePrice: 3910,
+                checked: true,
+                texture: '白铜变音管磷铜发音管',
+                index: 9
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降B/F调、结构:双排管 喇叭口直径:306mm 内管:11.5mm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 3,
+                name: '活塞油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 7,
+                name: '调音管油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    upperBass: {
+        name: '上低音号',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 5800,
+                referencePrice: 3980,
+                checked: true,
+                texture: '白铜变音管磷铜发音管',
+                index: 10
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降B调、结构:三立键 喇叭口直径:278mm、内管:13.4mm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 3,
+                name: '活塞油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 7,
+                name: '调音管油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    snareDrum: {
+        name: '小军鼓',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 3700,
+                referencePrice: 3190,
+                checked: true,
+                texture: '',
+                index: 11
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '珍珠镍小军鼓,桦木鼓腔,高碳钢纱带',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            }
+        ]
+    },
+    tenorHorn: {
+        name: '次中音号',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 5800,
+                referencePrice: 3980,
+                checked: true,
+                texture: '白铜变音管磷铜发音管',
+                index: 12
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '降B调、结构:三立键 喇叭口直径:278mm、内管:13.4mm',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            },
+            {
+                index: 3,
+                name: '活塞油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 7,
+                name: '调音管油',
+                marketPrice: 30,
+                checked: true,
+                referencePrice: 25
+            },
+            {
+                index: 8,
+                name: '乐器维护',
+                marketPrice: 480,
+                checked: true,
+                referencePrice: 300
+            }
+        ]
+    },
+    idiophonic: {
+        name: '打击乐',
+        config: [
+            {
+                default: 1, 
+                name: '标准配置',
+                marketPrice: 3700,
+                referencePrice: 3190,
+                checked: true,
+                texture: '',
+                index: 13
+            },
+            {
+                default: 0,
+                name: '自备',
+                marketPrice: 0,
+                referencePrice: 0,
+                checked: false,
+                index: 99
+            }
+        ],
+        configuration: '珍珠镍小军鼓,桦木鼓腔,高碳钢纱带',
+        auxiliaries: [
+            {
+                index: 1,
+                name: '节拍器',
+                marketPrice: 120,
+                checked: true,
+                referencePrice: 95
+            },
+            {
+                index: 2,
+                name: '谱架',
+                marketPrice: 80,
+                checked: true,
+                referencePrice: 65
+            }
+        ]
+    }
+}
+
+let baseInfo = {
+    other: [
+        {
+            name: '教材',
+            marketPrice: 7680,
+            referencePrice: 0
+        },
+        {
+            name: '乐谱',
+            marketPrice: 7680,
+            referencePrice: 0
+        }
+    ]
+}
+
+export { instruments,  baseInfo}

+ 17 - 0
src/assets/commonJs/unit.js

@@ -0,0 +1,17 @@
+const getDateList = () => {
+    let getNowYear = new Date().getFullYear()
+    let getNowMonth = new Date().getMonth() + 1
+    const getDateList = {}
+    for(let i = 0; i < 12; i++) {
+        let months = []
+        for(let j = 0; j < (i == 0 ? getNowMonth : 12); j++) {
+            months.push((j + 1) + '月')
+        }
+        getDateList[(getNowYear - i) + '年'] = months // 组合数据
+    }
+    return getDateList
+}
+
+export {
+    getDateList
+}

+ 1173 - 0
src/assets/commonLess/Quill.less

@@ -0,0 +1,1173 @@
+.ql-container {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    font-family: Helvetica, Arial, sans-serif;
+    font-size: 13px;
+    height: 100%;
+    margin: 0;
+    position: relative
+}
+
+.ql-container.ql-disabled .ql-tooltip {
+    visibility: hidden
+}
+
+.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before {
+    pointer-events: none
+}
+
+.ql-clipboard {
+    left: -100000px;
+    height: 1px;
+    overflow-y: hidden;
+    position: absolute;
+    top: 50%
+}
+
+.ql-clipboard p {
+    margin: 0;
+    padding: 0
+}
+
+.ql-editor {
+    // -webkit-box-sizing: border-box;
+    // box-sizing: border-box;
+    // line-height: 1.42;
+    // height: 100%;
+    // outline: none;
+    // overflow-y: auto;
+    // padding: 12px 15px;
+    // -o-tab-size: 4;
+    // tab-size: 4;
+    // -moz-tab-size: 4;
+    // text-align: left;
+    // white-space: pre-wrap;
+    // word-wrap: break-word
+}
+
+.ql-editor>* {
+    cursor: text
+}
+
+.ql-editor blockquote,
+.ql-editor h1,
+.ql-editor h2,
+.ql-editor h3,
+.ql-editor h4,
+.ql-editor h5,
+.ql-editor h6,
+.ql-editor ol,
+.ql-editor p,
+.ql-editor pre,
+.ql-editor ul {
+    margin: 0;
+    padding: 0;
+    counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9
+}
+
+.ql-editor ol,
+.ql-editor ul {
+    padding-left: 1.5em
+}
+
+.ql-editor ol>li,
+.ql-editor ul>li {
+    list-style-type: none
+}
+
+.ql-editor ul>li:before {
+    content: "\2022"
+}
+
+.ql-editor ul[data-checked=false],
+.ql-editor ul[data-checked=true] {
+    pointer-events: none
+}
+
+.ql-editor ul[data-checked=false]>li *,
+.ql-editor ul[data-checked=true]>li * {
+    pointer-events: all
+}
+
+.ql-editor ul[data-checked=false]>li:before,
+.ql-editor ul[data-checked=true]>li:before {
+    color: #777;
+    cursor: pointer;
+    pointer-events: all
+}
+
+.ql-editor ul[data-checked=true]>li:before {
+    content: "\2611"
+}
+
+.ql-editor ul[data-checked=false]>li:before {
+    content: "\2610"
+}
+
+.ql-editor li:before {
+    display: inline-block;
+    white-space: nowrap;
+    width: 1.2em
+}
+
+.ql-editor li:not(.ql-direction-rtl):before {
+    margin-left: -1.5em;
+    margin-right: .3em;
+    text-align: right
+}
+
+.ql-editor li.ql-direction-rtl:before {
+    margin-left: .3em;
+    margin-right: -1.5em
+}
+
+.ql-editor ol li:not(.ql-direction-rtl),
+.ql-editor ul li:not(.ql-direction-rtl) {
+    padding-left: 1.5em
+}
+
+.ql-editor ol li.ql-direction-rtl,
+.ql-editor ul li.ql-direction-rtl {
+    padding-right: 1.5em
+}
+
+.ql-editor ol li {
+    counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
+    counter-increment: list-0
+}
+
+.ql-editor ol li:before {
+    content: counter(list-0, decimal) ". "
+}
+
+.ql-editor ol li.ql-indent-1 {
+    counter-increment: list-1
+}
+
+.ql-editor ol li.ql-indent-1:before {
+    content: counter(list-1, lower-alpha) ". "
+}
+
+.ql-editor ol li.ql-indent-1 {
+    counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-2 {
+    counter-increment: list-2
+}
+
+.ql-editor ol li.ql-indent-2:before {
+    content: counter(list-2, lower-roman) ". "
+}
+
+.ql-editor ol li.ql-indent-2 {
+    counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-3 {
+    counter-increment: list-3
+}
+
+.ql-editor ol li.ql-indent-3:before {
+    content: counter(list-3, decimal) ". "
+}
+
+.ql-editor ol li.ql-indent-3 {
+    counter-reset: list-4 list-5 list-6 list-7 list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-4 {
+    counter-increment: list-4
+}
+
+.ql-editor ol li.ql-indent-4:before {
+    content: counter(list-4, lower-alpha) ". "
+}
+
+.ql-editor ol li.ql-indent-4 {
+    counter-reset: list-5 list-6 list-7 list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-5 {
+    counter-increment: list-5
+}
+
+.ql-editor ol li.ql-indent-5:before {
+    content: counter(list-5, lower-roman) ". "
+}
+
+.ql-editor ol li.ql-indent-5 {
+    counter-reset: list-6 list-7 list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-6 {
+    counter-increment: list-6
+}
+
+.ql-editor ol li.ql-indent-6:before {
+    content: counter(list-6, decimal) ". "
+}
+
+.ql-editor ol li.ql-indent-6 {
+    counter-reset: list-7 list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-7 {
+    counter-increment: list-7
+}
+
+.ql-editor ol li.ql-indent-7:before {
+    content: counter(list-7, lower-alpha) ". "
+}
+
+.ql-editor ol li.ql-indent-7 {
+    counter-reset: list-8 list-9
+}
+
+.ql-editor ol li.ql-indent-8 {
+    counter-increment: list-8
+}
+
+.ql-editor ol li.ql-indent-8:before {
+    content: counter(list-8, lower-roman) ". "
+}
+
+.ql-editor ol li.ql-indent-8 {
+    counter-reset: list-9
+}
+
+.ql-editor ol li.ql-indent-9 {
+    counter-increment: list-9
+}
+
+.ql-editor ol li.ql-indent-9:before {
+    content: counter(list-9, decimal) ". "
+}
+
+.ql-editor .ql-indent-1:not(.ql-direction-rtl) {
+    padding-left: 3em
+}
+
+.ql-editor li.ql-indent-1:not(.ql-direction-rtl) {
+    padding-left: 4.5em
+}
+
+.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right {
+    padding-right: 3em
+}
+
+.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right {
+    padding-right: 4.5em
+}
+
+.ql-editor .ql-indent-2:not(.ql-direction-rtl) {
+    padding-left: 6em
+}
+
+.ql-editor li.ql-indent-2:not(.ql-direction-rtl) {
+    padding-left: 7.5em
+}
+
+.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right {
+    padding-right: 6em
+}
+
+.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right {
+    padding-right: 7.5em
+}
+
+.ql-editor .ql-indent-3:not(.ql-direction-rtl) {
+    padding-left: 9em
+}
+
+.ql-editor li.ql-indent-3:not(.ql-direction-rtl) {
+    padding-left: 10.5em
+}
+
+.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right {
+    padding-right: 9em
+}
+
+.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right {
+    padding-right: 10.5em
+}
+
+.ql-editor .ql-indent-4:not(.ql-direction-rtl) {
+    padding-left: 12em
+}
+
+.ql-editor li.ql-indent-4:not(.ql-direction-rtl) {
+    padding-left: 13.5em
+}
+
+.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right {
+    padding-right: 12em
+}
+
+.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right {
+    padding-right: 13.5em
+}
+
+.ql-editor .ql-indent-5:not(.ql-direction-rtl) {
+    padding-left: 15em
+}
+
+.ql-editor li.ql-indent-5:not(.ql-direction-rtl) {
+    padding-left: 16.5em
+}
+
+.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right {
+    padding-right: 15em
+}
+
+.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right {
+    padding-right: 16.5em
+}
+
+.ql-editor .ql-indent-6:not(.ql-direction-rtl) {
+    padding-left: 18em
+}
+
+.ql-editor li.ql-indent-6:not(.ql-direction-rtl) {
+    padding-left: 19.5em
+}
+
+.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right {
+    padding-right: 18em
+}
+
+.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right {
+    padding-right: 19.5em
+}
+
+.ql-editor .ql-indent-7:not(.ql-direction-rtl) {
+    padding-left: 21em
+}
+
+.ql-editor li.ql-indent-7:not(.ql-direction-rtl) {
+    padding-left: 22.5em
+}
+
+.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right {
+    padding-right: 21em
+}
+
+.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right {
+    padding-right: 22.5em
+}
+
+.ql-editor .ql-indent-8:not(.ql-direction-rtl) {
+    padding-left: 24em
+}
+
+.ql-editor li.ql-indent-8:not(.ql-direction-rtl) {
+    padding-left: 25.5em
+}
+
+.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right {
+    padding-right: 24em
+}
+
+.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right {
+    padding-right: 25.5em
+}
+
+.ql-editor .ql-indent-9:not(.ql-direction-rtl) {
+    padding-left: 27em
+}
+
+.ql-editor li.ql-indent-9:not(.ql-direction-rtl) {
+    padding-left: 28.5em
+}
+
+.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right {
+    padding-right: 27em
+}
+
+.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right {
+    padding-right: 28.5em
+}
+
+.ql-editor .ql-video {
+    display: block;
+    max-width: 100%
+}
+
+.ql-editor .ql-video.ql-align-center {
+    margin: 0 auto
+}
+
+.ql-editor .ql-video.ql-align-right {
+    margin: 0 0 0 auto
+}
+
+.ql-editor .ql-bg-black {
+    background-color: #000
+}
+
+.ql-editor .ql-bg-red {
+    background-color: #e60000
+}
+
+.ql-editor .ql-bg-orange {
+    background-color: #f90
+}
+
+.ql-editor .ql-bg-yellow {
+    background-color: #ff0
+}
+
+.ql-editor .ql-bg-green {
+    background-color: #008a00
+}
+
+.ql-editor .ql-bg-blue {
+    background-color: #06c
+}
+
+.ql-editor .ql-bg-purple {
+    background-color: #93f
+}
+
+.ql-editor .ql-color-white {
+    color: #fff
+}
+
+.ql-editor .ql-color-red {
+    color: #e60000
+}
+
+.ql-editor .ql-color-orange {
+    color: #f90
+}
+
+.ql-editor .ql-color-yellow {
+    color: #ff0
+}
+
+.ql-editor .ql-color-green {
+    color: #008a00
+}
+
+.ql-editor .ql-color-blue {
+    color: #06c
+}
+
+.ql-editor .ql-color-purple {
+    color: #93f
+}
+
+.ql-editor .ql-font-serif {
+    font-family: Georgia, Times New Roman, serif
+}
+
+.ql-editor .ql-font-monospace {
+    font-family: Monaco, Courier New, monospace
+}
+
+.ql-editor .ql-size-small {
+    font-size: .75em
+}
+
+.ql-editor .ql-size-large {
+    font-size: 1.5em
+}
+
+.ql-editor .ql-size-huge {
+    font-size: 2.5em
+}
+
+.ql-editor .ql-direction-rtl {
+    direction: rtl;
+    text-align: inherit
+}
+
+.ql-editor .ql-align-center {
+    text-align: center
+}
+
+.ql-editor .ql-align-justify {
+    text-align: justify
+}
+
+.ql-editor .ql-align-right {
+    text-align: right
+}
+
+.ql-editor.ql-blank:before {
+    color: rgba(0, 0, 0, .6);
+    content: attr(data-placeholder);
+    font-style: italic;
+    left: 15px;
+    pointer-events: none;
+    position: absolute;
+    right: 15px
+}
+
+.ql-bubble.ql-toolbar:after,
+.ql-bubble .ql-toolbar:after {
+    clear: both;
+    content: "";
+    display: table
+}
+
+.ql-bubble.ql-toolbar button,
+.ql-bubble .ql-toolbar button {
+    background: none;
+    border: none;
+    cursor: pointer;
+    display: inline-block;
+    float: left;
+    height: 24px;
+    padding: 3px 5px;
+    width: 28px
+}
+
+.ql-bubble.ql-toolbar button svg,
+.ql-bubble .ql-toolbar button svg {
+    float: left;
+    height: 100%
+}
+
+.ql-bubble.ql-toolbar button:active:hover,
+.ql-bubble .ql-toolbar button:active:hover {
+    outline: none
+}
+
+.ql-bubble.ql-toolbar input.ql-image[type=file],
+.ql-bubble .ql-toolbar input.ql-image[type=file] {
+    display: none
+}
+
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected,
+.ql-bubble.ql-toolbar .ql-picker-item:hover,
+.ql-bubble .ql-toolbar .ql-picker-item:hover,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active,
+.ql-bubble.ql-toolbar .ql-picker-label:hover,
+.ql-bubble .ql-toolbar .ql-picker-label:hover,
+.ql-bubble.ql-toolbar button.ql-active,
+.ql-bubble .ql-toolbar button.ql-active,
+.ql-bubble.ql-toolbar button:focus,
+.ql-bubble .ql-toolbar button:focus,
+.ql-bubble.ql-toolbar button:hover,
+.ql-bubble .ql-toolbar button:hover {
+    color: #fff
+}
+
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-fill,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button.ql-active .ql-fill,
+.ql-bubble .ql-toolbar button.ql-active .ql-fill,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button:focus .ql-fill,
+.ql-bubble .ql-toolbar button:focus .ql-fill,
+.ql-bubble.ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button:focus .ql-stroke.ql-fill,
+.ql-bubble.ql-toolbar button:hover .ql-fill,
+.ql-bubble .ql-toolbar button:hover .ql-fill,
+.ql-bubble.ql-toolbar button:hover .ql-stroke.ql-fill,
+.ql-bubble .ql-toolbar button:hover .ql-stroke.ql-fill {
+    fill: #fff
+}
+
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke,
+.ql-bubble.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke,
+.ql-bubble.ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-bubble .ql-toolbar button.ql-active .ql-stroke-miter,
+.ql-bubble.ql-toolbar button:focus .ql-stroke,
+.ql-bubble .ql-toolbar button:focus .ql-stroke,
+.ql-bubble.ql-toolbar button:focus .ql-stroke-miter,
+.ql-bubble .ql-toolbar button:focus .ql-stroke-miter,
+.ql-bubble.ql-toolbar button:hover .ql-stroke,
+.ql-bubble .ql-toolbar button:hover .ql-stroke,
+.ql-bubble.ql-toolbar button:hover .ql-stroke-miter,
+.ql-bubble .ql-toolbar button:hover .ql-stroke-miter {
+    stroke: #fff
+}
+
+@media (pointer:coarse) {
+
+    .ql-bubble.ql-toolbar button:hover:not(.ql-active),
+    .ql-bubble .ql-toolbar button:hover:not(.ql-active) {
+        color: #ccc
+    }
+
+    .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-fill,
+    .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-fill,
+    .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill,
+    .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill {
+        fill: #ccc
+    }
+
+    .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+    .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke,
+    .ql-bubble.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter,
+    .ql-bubble .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter {
+        stroke: #ccc
+    }
+}
+
+.ql-bubble,
+.ql-bubble * {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+.ql-bubble .ql-hidden {
+    display: none
+}
+
+.ql-bubble .ql-out-bottom,
+.ql-bubble .ql-out-top {
+    visibility: hidden
+}
+
+.ql-bubble .ql-tooltip {
+    position: absolute;
+    -webkit-transform: translateY(10px);
+    transform: translateY(10px)
+}
+
+.ql-bubble .ql-tooltip a {
+    cursor: pointer;
+    text-decoration: none
+}
+
+.ql-bubble .ql-tooltip.ql-flip {
+    -webkit-transform: translateY(-10px);
+    transform: translateY(-10px)
+}
+
+.ql-bubble .ql-formats {
+    display: inline-block;
+    vertical-align: middle
+}
+
+.ql-bubble .ql-formats:after {
+    clear: both;
+    content: "";
+    display: table
+}
+
+.ql-bubble .ql-stroke {
+    fill: none;
+    stroke: #ccc;
+    stroke-linecap: round;
+    stroke-linejoin: round;
+    stroke-width: 2
+}
+
+.ql-bubble .ql-stroke-miter {
+    fill: none;
+    stroke: #ccc;
+    stroke-miterlimit: 10;
+    stroke-width: 2
+}
+
+.ql-bubble .ql-fill,
+.ql-bubble .ql-stroke.ql-fill {
+    fill: #ccc
+}
+
+.ql-bubble .ql-empty {
+    fill: none
+}
+
+.ql-bubble .ql-even {
+    fill-rule: evenodd
+}
+
+.ql-bubble .ql-stroke.ql-thin,
+.ql-bubble .ql-thin {
+    stroke-width: 1
+}
+
+.ql-bubble .ql-transparent {
+    opacity: .4
+}
+
+.ql-bubble .ql-direction svg:last-child {
+    display: none
+}
+
+.ql-bubble .ql-direction.ql-active svg:last-child {
+    display: inline
+}
+
+.ql-bubble .ql-direction.ql-active svg:first-child {
+    display: none
+}
+
+.ql-bubble .ql-editor h1 {
+    font-size: 2em
+}
+
+.ql-bubble .ql-editor h2 {
+    font-size: 1.5em
+}
+
+.ql-bubble .ql-editor h3 {
+    font-size: 1.17em
+}
+
+.ql-bubble .ql-editor h4 {
+    font-size: 1em
+}
+
+.ql-bubble .ql-editor h5 {
+    font-size: .83em
+}
+
+.ql-bubble .ql-editor h6 {
+    font-size: .67em
+}
+
+.ql-bubble .ql-editor a {
+    text-decoration: underline
+}
+
+.ql-bubble .ql-editor blockquote {
+    border-left: 4px solid #ccc;
+    margin-bottom: 5px;
+    margin-top: 5px;
+    padding-left: 16px
+}
+
+.ql-bubble .ql-editor code,
+.ql-bubble .ql-editor pre {
+    background-color: #f0f0f0;
+    border-radius: 3px
+}
+
+.ql-bubble .ql-editor pre {
+    white-space: pre-wrap;
+    margin-bottom: 5px;
+    margin-top: 5px;
+    padding: 5px 10px
+}
+
+.ql-bubble .ql-editor code {
+    font-size: 85%;
+    padding: 2px 4px
+}
+
+.ql-bubble .ql-editor pre.ql-syntax {
+    background-color: #23241f;
+    color: #f8f8f2;
+    overflow: visible
+}
+
+.ql-bubble .ql-editor img {
+    max-width: 100%
+}
+
+.ql-bubble .ql-picker {
+    color: #ccc;
+    display: inline-block;
+    float: left;
+    font-size: 14px;
+    font-weight: 500;
+    height: 24px;
+    position: relative;
+    vertical-align: middle
+}
+
+.ql-bubble .ql-picker-label {
+    cursor: pointer;
+    display: inline-block;
+    height: 100%;
+    padding-left: 8px;
+    padding-right: 2px;
+    position: relative;
+    width: 100%
+}
+
+.ql-bubble .ql-picker-label:before {
+    display: inline-block;
+    line-height: 22px
+}
+
+.ql-bubble .ql-picker-options {
+    background-color: #444;
+    display: none;
+    min-width: 100%;
+    padding: 4px 8px;
+    position: absolute;
+    white-space: nowrap
+}
+
+.ql-bubble .ql-picker-options .ql-picker-item {
+    cursor: pointer;
+    display: block;
+    padding-bottom: 5px;
+    padding-top: 5px
+}
+
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label {
+    color: #777;
+    z-index: 2
+}
+
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-fill {
+    fill: #777
+}
+
+.ql-bubble .ql-picker.ql-expanded .ql-picker-label .ql-stroke {
+    stroke: #777
+}
+
+.ql-bubble .ql-picker.ql-expanded .ql-picker-options {
+    display: block;
+    margin-top: -1px;
+    top: 100%;
+    z-index: 1
+}
+
+.ql-bubble .ql-color-picker,
+.ql-bubble .ql-icon-picker {
+    width: 28px
+}
+
+.ql-bubble .ql-color-picker .ql-picker-label,
+.ql-bubble .ql-icon-picker .ql-picker-label {
+    padding: 2px 4px
+}
+
+.ql-bubble .ql-color-picker .ql-picker-label svg,
+.ql-bubble .ql-icon-picker .ql-picker-label svg {
+    right: 4px
+}
+
+.ql-bubble .ql-icon-picker .ql-picker-options {
+    padding: 4px 0
+}
+
+.ql-bubble .ql-icon-picker .ql-picker-item {
+    height: 24px;
+    width: 24px;
+    padding: 2px 4px
+}
+
+.ql-bubble .ql-color-picker .ql-picker-options {
+    padding: 3px 5px;
+    width: 152px
+}
+
+.ql-bubble .ql-color-picker .ql-picker-item {
+    border: 1px solid transparent;
+    float: left;
+    height: 16px;
+    margin: 2px;
+    padding: 0;
+    width: 16px
+}
+
+.ql-bubble .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg {
+    position: absolute;
+    margin-top: -9px;
+    right: 0;
+    top: 50%;
+    width: 18px
+}
+
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before {
+    content: attr(data-label)
+}
+
+.ql-bubble .ql-picker.ql-header {
+    width: 98px
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label:before {
+    content: "Normal"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="1"]:before {
+    content: "Heading 1"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="2"]:before {
+    content: "Heading 2"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="3"]:before {
+    content: "Heading 3"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="4"]:before {
+    content: "Heading 4"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="5"]:before {
+    content: "Heading 5"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]:before,
+.ql-bubble .ql-picker.ql-header .ql-picker-label[data-value="6"]:before {
+    content: "Heading 6"
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="1"]:before {
+    font-size: 2em
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="2"]:before {
+    font-size: 1.5em
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="3"]:before {
+    font-size: 1.17em
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="4"]:before {
+    font-size: 1em
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="5"]:before {
+    font-size: .83em
+}
+
+.ql-bubble .ql-picker.ql-header .ql-picker-item[data-value="6"]:before {
+    font-size: .67em
+}
+
+.ql-bubble .ql-picker.ql-font {
+    width: 108px
+}
+
+.ql-bubble .ql-picker.ql-font .ql-picker-item:before,
+.ql-bubble .ql-picker.ql-font .ql-picker-label:before {
+    content: "Sans Serif"
+}
+
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]:before,
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=serif]:before {
+    content: "Serif"
+}
+
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before,
+.ql-bubble .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before {
+    content: "Monospace"
+}
+
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=serif]:before {
+    font-family: Georgia, Times New Roman, serif
+}
+
+.ql-bubble .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before {
+    font-family: Monaco, Courier New, monospace
+}
+
+.ql-bubble .ql-picker.ql-size {
+    width: 98px
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item:before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label:before {
+    content: "Normal"
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]:before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=small]:before {
+    content: "Small"
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]:before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=large]:before {
+    content: "Large"
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]:before,
+.ql-bubble .ql-picker.ql-size .ql-picker-label[data-value=huge]:before {
+    content: "Huge"
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=small]:before {
+    font-size: 10px
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=large]:before {
+    font-size: 18px
+}
+
+.ql-bubble .ql-picker.ql-size .ql-picker-item[data-value=huge]:before {
+    font-size: 32px
+}
+
+.ql-bubble .ql-color-picker.ql-background .ql-picker-item {
+    background-color: #fff
+}
+
+.ql-bubble .ql-color-picker.ql-color .ql-picker-item {
+    background-color: #000
+}
+
+.ql-bubble .ql-toolbar .ql-formats {
+    margin: 8px 12px 8px 0
+}
+
+.ql-bubble .ql-toolbar .ql-formats:first-child {
+    margin-left: 12px
+}
+
+.ql-bubble .ql-color-picker svg {
+    margin: 1px
+}
+
+.ql-bubble .ql-color-picker .ql-picker-item.ql-selected,
+.ql-bubble .ql-color-picker .ql-picker-item:hover {
+    border-color: #fff
+}
+
+.ql-bubble .ql-tooltip {
+    background-color: #444;
+    border-radius: 25px;
+    color: #fff
+}
+
+.ql-bubble .ql-tooltip-arrow {
+    border-left: 6px solid transparent;
+    border-right: 6px solid transparent;
+    content: " ";
+    display: block;
+    left: 50%;
+    margin-left: -6px;
+    position: absolute
+}
+
+.ql-bubble .ql-tooltip:not(.ql-flip) .ql-tooltip-arrow {
+    border-bottom: 6px solid #444;
+    top: -6px
+}
+
+.ql-bubble .ql-tooltip.ql-flip .ql-tooltip-arrow {
+    border-top: 6px solid #444;
+    bottom: -6px
+}
+
+.ql-bubble .ql-tooltip.ql-editing .ql-tooltip-editor {
+    display: block
+}
+
+.ql-bubble .ql-tooltip.ql-editing .ql-formats {
+    visibility: hidden
+}
+
+.ql-bubble .ql-tooltip-editor {
+    display: none
+}
+
+.ql-bubble .ql-tooltip-editor input[type=text] {
+    background: transparent;
+    border: none;
+    color: #fff;
+    font-size: 13px;
+    height: 100%;
+    outline: none;
+    padding: 10px 20px;
+    position: absolute;
+    width: 100%
+}
+
+.ql-bubble .ql-tooltip-editor a {
+    top: 10px;
+    position: absolute;
+    right: 20px
+}
+
+.ql-bubble .ql-tooltip-editor a:before {
+    color: #ccc;
+    content: "\D7";
+    font-size: 16px;
+    font-weight: 700
+}
+
+.ql-container.ql-bubble:not(.ql-disabled) a {
+    position: relative;
+    white-space: nowrap
+}
+
+.ql-container.ql-bubble:not(.ql-disabled) a:before {
+    background-color: #444;
+    border-radius: 15px;
+    top: -5px;
+    font-size: 12px;
+    color: #fff;
+    content: attr(href);
+    font-weight: 400;
+    overflow: hidden;
+    padding: 5px 15px;
+    text-decoration: none;
+    z-index: 1
+}
+
+.ql-container.ql-bubble:not(.ql-disabled) a:after {
+    border-top: 6px solid #444;
+    border-left: 6px solid transparent;
+    border-right: 6px solid transparent;
+    top: 0;
+    content: " ";
+    height: 0;
+    width: 0
+}
+
+.ql-container.ql-bubble:not(.ql-disabled) a:after,
+.ql-container.ql-bubble:not(.ql-disabled) a:before {
+    left: 0;
+    margin-left: 50%;
+    position: absolute;
+    -webkit-transform: translate(-50%, -100%);
+    transform: translate(-50%, -100%);
+    -webkit-transition: visibility 0s ease .2s;
+    transition: visibility 0s ease .2s;
+    visibility: hidden
+}
+
+.ql-container.ql-bubble:not(.ql-disabled) a:hover:after,
+.ql-container.ql-bubble:not(.ql-disabled) a:hover:before {
+    visibility: visible
+}

+ 44 - 0
src/assets/commonLess/common.less

@@ -0,0 +1,44 @@
+
+// 阴影
+.m-shadow {
+    box-shadow: 0 0 .17rem 0 rgba(202,202,202,0.42);
+}
+.m-shadow-small {
+    box-shadow:0 .04rem .06rem 0 rgba(0,0,0,0.1);
+}
+
+// 文字过多显示...
+.m-ellipsis {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
+
+[v-cloak] { display: none }
+// 设置边框
+[class*='m-hairline']::after {
+    position: absolute;
+    box-sizing: border-box;
+    content: ' ';
+    pointer-events: none;
+    top: -50%;
+    right: -50%;
+    bottom: -50%;
+    left: -50%;
+    border: 0 solid #ebedf0;
+    -webkit-transform: scale(0.5);
+    transform: scale(0.5);
+}
+
+.orangeStatus {
+    color: #F97215 !important;
+}
+.redStatus {
+    color: #F85043 !important;
+}
+.blueStatus {
+    color: #14928A !important;
+}
+.defaultStatus {
+    color: #777777 !important;
+}

+ 42 - 0
src/assets/commonLess/variable.less

@@ -0,0 +1,42 @@
+// 主色
+@mColor: #14928A;
+// 字体主色
+@mFontColor: #444444;
+// 字体次色
+@sFontColor: #AAAAAA;
+// 字体颜色
+@tFontColor: #777777;
+// 白色
+@whiteColor: #FFFFFF;
+// 黑色
+@blackColor: #000000;
+// 橙色
+@orangeColor: #F97215;
+// 红色
+@redColor: #F85043;
+// 基本背景色
+@bgColor: #F3F4F8;
+
+
+
+    
+// Basic Colors
+// @black: #000;
+// @white: #fff;
+// @red: #f44;
+// @blue: #1989fa;
+// @orange: #ff976a;
+// @orange-dark: #ed6a0c;
+// @orange-light: #fffbe8;
+// @green: #07c160;
+// @gray: #c8c9cc;
+// @gray-light: #e5e5e5;
+// @gray-darker: #7d7e80;
+// @gray-dark: #969799;
+
+// // Component Colors
+// @text-color: #323233;
+// @border-color: #ebedf0;
+// @active-color: #f2f3f5;
+// @background-color: #f8f8f8;
+// @background-color-light: #fafafa;

二进制
src/assets/images/Shape.png


二进制
src/assets/images/activeList/Blessing.png


二进制
src/assets/images/activeList/bg.png


二进制
src/assets/images/activeList/box.png


二进制
src/assets/images/activeList/button.png


二进制
src/assets/images/activeList/da-bg.png


二进制
src/assets/images/activeList/da-btn.png


二进制
src/assets/images/activeList/decorate.png


二进制
src/assets/images/activeList/title.png


二进制
src/assets/images/activeList/toBg.png


二进制
src/assets/images/activeList/toButton.png


二进制
src/assets/images/activeList/toButton1.png


二进制
src/assets/images/app/icon_b.png


二进制
src/assets/images/app/icon_step.png


二进制
src/assets/images/app/icon_student.png


二进制
src/assets/images/app/icon_teacher.png


二进制
src/assets/images/audition/arrow_down.png


二进制
src/assets/images/audition/banner.png


二进制
src/assets/images/audition/bannerpay.png


二进制
src/assets/images/audition/bgdetail.png


二进制
src/assets/images/audition/icon_order.png


二进制
src/assets/images/audition/icon_teacher.png


二进制
src/assets/images/audition/no_data.png


二进制
src/assets/images/audition/no_subject.png


二进制
src/assets/images/audition/tipBg.png


二进制
src/assets/images/balance.png


二进制
src/assets/images/business/1.png


二进制
src/assets/images/business/2.png


二进制
src/assets/images/business/3.png


二进制
src/assets/images/business/4.png


二进制
src/assets/images/business/5.png


二进制
src/assets/images/business/6.png


二进制
src/assets/images/business/7.png


二进制
src/assets/images/cachet.png


二进制
src/assets/images/card.png


二进制
src/assets/images/default_head_img.png


二进制
src/assets/images/download/banner.png


二进制
src/assets/images/download/bg.png


二进制
src/assets/images/download/logo.png


二进制
src/assets/images/download/mbanner.png


二进制
src/assets/images/download/mlogo.png


二进制
src/assets/images/download/tbanner.png


二进制
src/assets/images/download/tlogo.png


二进制
src/assets/images/icon_app.png


二进制
src/assets/images/icon_checked.png


二进制
src/assets/images/icon_cw.png


二进制
src/assets/images/icon_downmore.png


二进制
src/assets/images/icon_half.png


二进制
src/assets/images/icon_half_no.png


二进制
src/assets/images/icon_nodata.png


二进制
src/assets/images/icon_pople.png


二进制
src/assets/images/level/area_bg.png


二进制
src/assets/images/level/banner@2x.png


二进制
src/assets/images/level/entry_bg.png


二进制
src/assets/images/level/signup_bg.png


二进制
src/assets/images/logo.png


二进制
src/assets/images/m_title_icon.png


二进制
src/assets/images/m_title_no.png


二进制
src/assets/images/msgImg.png


二进制
src/assets/images/mycard.png


二进制
src/assets/images/pay_error.png


二进制
src/assets/images/pay_ing.png


二进制
src/assets/images/pay_success.png


二进制
src/assets/images/register_banner.png


二进制
src/assets/images/service/icon_over.png


二进制
src/assets/images/squrt.png


二进制
src/assets/images/start/1.png


二进制
src/assets/images/start/2.png


二进制
src/assets/images/start/3.png


二进制
src/assets/images/start/4.png


二进制
src/assets/images/start/bg.png


二进制
src/assets/images/start/book-icon.png


二进制
src/assets/images/start/bottom.png


二进制
src/assets/images/start/box1.png


二进制
src/assets/images/start/box2.png


二进制
src/assets/images/start/box3.png


二进制
src/assets/images/start/boxtitle1.png


二进制
src/assets/images/start/boxtitle2.png


二进制
src/assets/images/start/din-bold.otf


部分文件因为文件数量过多而无法显示