Browse Source

20220811更新

littlegreen 2 years ago
parent
commit
81fea677bf
91 changed files with 3665 additions and 3224 deletions
  1. 0 16
      .hbuilderx/launch.json
  2. 1 1
      PROJECTREADME.md
  3. 14 1
      babel.config.js
  4. 0 0
      jsconfig.json
  5. 656 520
      package-lock.json
  6. 51 33
      package.json
  7. 55 0
      project.config.json
  8. 0 3
      public/index.html
  9. 11 0
      sfc.d.ts
  10. 2 6
      src/App.vue
  11. 59 0
      src/api/login.js
  12. 44 0
      src/api/market/customerInfo.js
  13. 44 0
      src/api/market/research.js
  14. 44 0
      src/api/market/visit.js
  15. 150 0
      src/api/marketmini/index.js
  16. 1 0
      src/common/js/filter.js
  17. 59 0
      src/common/scss/core.scss
  18. 0 125
      src/components/common/childrenList.vue
  19. 0 64
      src/components/common/noContentTips.vue
  20. 0 211
      src/components/helang-checkbox/helang-checkbox.vue
  21. 0 4
      src/main.js
  22. 55 53
      src/pages.json
  23. 252 0
      src/pages/addCustomer/addCustomer.vue
  24. 149 0
      src/pages/addMarket/addMarket.vue
  25. 240 0
      src/pages/addVisit/addVisit.vue
  26. 0 517
      src/pages/course-table/course-table.vue
  27. 204 0
      src/pages/customer-visit/customer-visit.vue
  28. 222 0
      src/pages/customor-message/customor-message.vue
  29. 206 0
      src/pages/detail/detail.vue
  30. 144 306
      src/pages/index/index.vue
  31. 0 48
      src/pages/index/news-detial.vue
  32. 167 0
      src/pages/login/login.vue
  33. 193 0
      src/pages/market-research/market-research.vue
  34. 109 0
      src/pages/mine/mine.vue
  35. 0 254
      src/pages/my-class/class.vue
  36. 0 261
      src/pages/my-class/course/course-detail.vue
  37. 0 224
      src/pages/my/child/edit-child.vue
  38. 0 184
      src/pages/my/child/my-child.vue
  39. 0 164
      src/pages/my/my.vue
  40. 0 225
      src/pages/my/order/my-order.vue
  41. BIN
      src/static/ad.png
  42. BIN
      src/static/add-child.png
  43. BIN
      src/static/avater.png
  44. BIN
      src/static/banner_bg02.jpg
  45. BIN
      src/static/banner_bg02.png
  46. BIN
      src/static/banner_info_d.png
  47. BIN
      src/static/child_empty.png
  48. BIN
      src/static/empty.png
  49. BIN
      src/static/icon/caiyang.png
  50. BIN
      src/static/icon/chaxun.png
  51. BIN
      src/static/icon/dengji.png
  52. BIN
      src/static/icon/edit.png
  53. BIN
      src/static/icon/home.png
  54. BIN
      src/static/icon/homea.png
  55. BIN
      src/static/icon/piao.png
  56. BIN
      src/static/icon/search.png
  57. BIN
      src/static/icon/user.png
  58. BIN
      src/static/icon/usera.png
  59. BIN
      src/static/images/marketing.png
  60. BIN
      src/static/images/mine.png
  61. BIN
      src/static/images/visit.png
  62. BIN
      src/static/images/ziliao.png
  63. BIN
      src/static/leban_my_icon_child.png
  64. BIN
      src/static/leban_my_icon_dd.png
  65. BIN
      src/static/leban_my_icon_kefu.png
  66. BIN
      src/static/leban_my_icon_yijian.png
  67. BIN
      src/static/message_icon.png
  68. BIN
      src/static/order_empty.png
  69. BIN
      src/static/swiper_pic.png
  70. BIN
      src/static/swiper_pic1.png
  71. BIN
      src/static/tabbar/tab_icon_choose.png
  72. BIN
      src/static/tabbar/tab_icon_choose_no.png
  73. BIN
      src/static/tabbar/tab_icon_kechegn_choose.png
  74. BIN
      src/static/tabbar/tab_icon_kechegn_choose_no.png
  75. BIN
      src/static/tabbar/tab_icon_my.png
  76. BIN
      src/static/tabbar/tab_icon_my_no.png
  77. BIN
      src/static/tabbar/tab_icon_mykecheng_choose1.png
  78. BIN
      src/static/tabbar/tab_icon_mykecheng_no.png
  79. BIN
      src/static/table_empty.png
  80. BIN
      src/static/title-arrow-icon.png
  81. BIN
      src/static/title-pic.png
  82. BIN
      src/static/viewer.png
  83. 130 0
      src/store/index.js
  84. 0 0
      src/test.ts
  85. 1 4
      src/uni.scss
  86. 5 0
      src/utils/configmini.js
  87. 36 0
      src/utils/requestmini.js
  88. 225 0
      src/utils/ruoyi.js
  89. 136 0
      vue.config.js
  90. BIN
      原动力430平台小程序v1.0.0_需求文档.doc
  91. BIN
      原动力营销通v1.0.0_需求文档.doc

+ 0 - 16
.hbuilderx/launch.json

@@ -1,16 +0,0 @@
-{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
-  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
-    "version": "0.0",
-    "configurations": [{
-     	"default" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"mp-weixin" : 
-     	{
-     		"launchtype" : "local"
-     	},
-     	"type" : "uniCloud"
-     }
-    ]
-}

+ 1 - 1
PROJECTREADME.md

@@ -1,4 +1,4 @@
-# 430-platform-wechat-frontend
+# my-project
 
 ## Project setup
 ```

+ 14 - 1
babel.config.js

@@ -49,7 +49,8 @@ process.UNI_LIBRARIES.forEach(libraryName => {
     }
   ])
 })
-module.exports = {
+
+const config = {
   presets: [
     [
       '@vue/app',
@@ -61,3 +62,15 @@ module.exports = {
   ],
   plugins
 }
+
+const UNI_H5_TEST = '**/@dcloudio/uni-h5/dist/index.umd.min.js'
+if (process.env.NODE_ENV === 'production') {
+  config.overrides = [{
+    test: UNI_H5_TEST,
+    compact: true,
+  }]
+} else {
+  config.ignore = [UNI_H5_TEST]
+}
+
+module.exports = config

+ 0 - 0
tsconfig.json → jsconfig.json


File diff suppressed because it is too large
+ 656 - 520
package-lock.json


+ 51 - 33
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "430-platform-wechat-frontend",
+  "name": "my-project",
   "version": "0.1.0",
   "private": true,
   "scripts": {
@@ -11,10 +11,13 @@
     "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
     "build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
     "build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",
+    "build:mp-jd": "cross-env NODE_ENV=production UNI_PLATFORM=mp-jd vue-cli-service uni-build",
     "build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build",
+    "build:mp-lark": "cross-env NODE_ENV=production UNI_PLATFORM=mp-lark vue-cli-service uni-build",
     "build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build",
     "build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build",
     "build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build",
+    "build:mp-xhs": "cross-env NODE_ENV=production UNI_PLATFORM=mp-xhs vue-cli-service uni-build",
     "build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build",
     "build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build",
     "build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
@@ -25,10 +28,13 @@
     "dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
     "dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
     "dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
+    "dev:mp-jd": "cross-env NODE_ENV=development UNI_PLATFORM=mp-jd vue-cli-service uni-build --watch",
     "dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch",
+    "dev:mp-lark": "cross-env NODE_ENV=development UNI_PLATFORM=mp-lark vue-cli-service uni-build --watch",
     "dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
     "dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
     "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
+    "dev:mp-xhs": "cross-env NODE_ENV=development UNI_PLATFORM=mp-xhs vue-cli-service uni-build --watch",
     "dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch",
     "dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch",
     "dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch",
@@ -42,57 +48,69 @@
     "test:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin jest -i"
   },
   "dependencies": {
-    "@dcloudio/uni-app-plus": "^2.0.0-30520210106003",
-    "@dcloudio/uni-h5": "^2.0.0-30520210106003",
+    "@dcloudio/uni-app-plus": "^2.0.1-35320220729001",
+    "@dcloudio/uni-h5": "^2.0.1-35320220729001",
     "@dcloudio/uni-helper-json": "*",
-    "@dcloudio/uni-mp-360": "^2.0.0-30520210106003",
-    "@dcloudio/uni-mp-alipay": "^2.0.0-30520210106003",
-    "@dcloudio/uni-mp-baidu": "^2.0.0-30520210106003",
-    "@dcloudio/uni-mp-qq": "^2.0.0-30520210106003",
-    "@dcloudio/uni-mp-toutiao": "^2.0.0-30520210106003",
-    "@dcloudio/uni-mp-vue": "^2.0.0-30520210106003",
-    "@dcloudio/uni-mp-weixin": "^2.0.0-30520210106003",
-    "@dcloudio/uni-quickapp-native": "^2.0.0-30520210106003",
-    "@dcloudio/uni-quickapp-webview": "^2.0.0-30520210106003",
-    "@dcloudio/uni-stat": "^2.0.0-30520210106003",
-    "@dcloudio/uni-ui": "^1.2.12",
+    "@dcloudio/uni-i18n": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-360": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-alipay": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-baidu": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-jd": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-kuaishou": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-lark": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-qq": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-toutiao": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-vue": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-weixin": "^2.0.1-35320220729001",
+    "@dcloudio/uni-mp-xhs": "^2.0.1-35320220729001",
+    "@dcloudio/uni-quickapp-native": "^2.0.1-35320220729001",
+    "@dcloudio/uni-quickapp-webview": "^2.0.1-35320220729001",
+    "@dcloudio/uni-stacktracey": "^2.0.1-35320220729001",
+    "@dcloudio/uni-stat": "^2.0.1-35320220729001",
     "@vue/shared": "^3.0.0",
+    "axios": "^0.24.0",
+    "compression-webpack-plugin": "^5.0.2",
     "core-js": "^3.6.5",
+    "file-saver": "^2.0.5",
     "flyio": "^0.6.2",
-    "less-loader": "^4.1.0",
-    "node-sass": "^5.0.0",
+    "js-cookie": "^3.0.1",
+    "node-sass": "^4.14.1",
     "regenerator-runtime": "^0.12.1",
-    "sass-loader": "^10.1.1",
-    "uview-ui": "^1.8.4",
+    "sass-loader": "^7.3.1",
+    "script-ext-html-webpack-plugin": "^2.1.5",
     "vue": "^2.6.11",
     "vuex": "^3.2.0"
   },
   "devDependencies": {
-    "@dcloudio/types": "*",
-    "@dcloudio/uni-automator": "^2.0.0-30520210106003",
-    "@dcloudio/uni-cli-shared": "^2.0.0-30520210106003",
-    "@dcloudio/uni-migration": "^2.0.0-30520210106003",
-    "@dcloudio/uni-template-compiler": "^2.0.0-30520210106003",
-    "@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.0-30520210106003",
-    "@dcloudio/vue-cli-plugin-uni": "^2.0.0-30520210106003",
-    "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.0-30520210106003",
-    "@dcloudio/webpack-uni-mp-loader": "^2.0.0-30520210106003",
-    "@dcloudio/webpack-uni-pages-loader": "^2.0.0-30520210106003",
-    "@vue/cli-plugin-babel": "~4.5.0",
-    "@vue/cli-service": "~4.5.0",
+    "@babel/runtime": "~7.17.9",
+    "@dcloudio/types": "^3.0.4",
+    "@dcloudio/uni-automator": "^2.0.1-35320220729001",
+    "@dcloudio/uni-cli-i18n": "^2.0.1-35320220729001",
+    "@dcloudio/uni-cli-shared": "^2.0.1-35320220729001",
+    "@dcloudio/uni-migration": "^2.0.1-35320220729001",
+    "@dcloudio/uni-template-compiler": "^2.0.1-35320220729001",
+    "@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.1-35320220729001",
+    "@dcloudio/vue-cli-plugin-uni": "^2.0.1-35320220729001",
+    "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.1-35320220729001",
+    "@dcloudio/webpack-uni-mp-loader": "^2.0.1-35320220729001",
+    "@dcloudio/webpack-uni-pages-loader": "^2.0.1-35320220729001",
+    "@vue/cli-plugin-babel": "~4.5.15",
+    "@vue/cli-service": "~4.5.15",
     "babel-plugin-import": "^1.11.0",
     "cross-env": "^7.0.2",
     "jest": "^25.4.0",
     "mini-types": "*",
     "miniprogram-api-typings": "*",
     "postcss-comment": "^2.0.0",
-    "sass": "^1.32.8",
     "vue-template-compiler": "^2.6.11"
   },
   "browserslist": [
-    "Android >= 4",
-    "ios >= 8"
+    "Android >= 4.4",
+    "ios >= 9"
   ],
+  "resolutions": {
+    "@babel/runtime": "~7.17.9"
+  },
   "uni-app": {
     "scripts": {}
   }

+ 55 - 0
project.config.json

@@ -0,0 +1,55 @@
+{
+  "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+  "packOptions": {
+    "ignore": [],
+    "include": []
+  },
+  "setting": {
+    "bundle": false,
+    "userConfirmedBundleSwitch": false,
+    "urlCheck": true,
+    "scopeDataCheck": false,
+    "coverView": true,
+    "es6": true,
+    "postcss": true,
+    "compileHotReLoad": false,
+    "lazyloadPlaceholderEnable": false,
+    "preloadBackgroundData": false,
+    "minified": true,
+    "autoAudits": false,
+    "newFeature": false,
+    "uglifyFileName": false,
+    "uploadWithSourceMap": true,
+    "useIsolateContext": true,
+    "nodeModules": false,
+    "enhance": true,
+    "useMultiFrameRuntime": true,
+    "useApiHook": true,
+    "useApiHostProcess": true,
+    "showShadowRootInWxmlPanel": true,
+    "packNpmManually": false,
+    "enableEngineNative": false,
+    "packNpmRelationList": [],
+    "minifyWXSS": true,
+    "showES6CompileOption": false,
+    "minifyWXML": true,
+    "checkInvalidKey": true,
+    "babelSetting": {
+      "ignore": [],
+      "disablePlugins": [],
+      "outputPath": ""
+    },
+    "disableUseStrict": false,
+    "useCompilerPlugins": false,
+    "useStaticServer": true
+  },
+  "compileType": "miniprogram",
+  "libVersion": "2.25.2",
+  "appid": "wxc9da3142f8706c11",
+  "projectname": "market1221",
+  "condition": {},
+  "editorSetting": {
+    "tabIndent": "insertSpaces",
+    "tabSize": 2
+  }
+}

+ 0 - 3
public/index.html

@@ -8,9 +8,6 @@
             <%= htmlWebpackPlugin.options.title %>
         </title>
         <script>
-            document.addEventListener('DOMContentLoaded', function() {
-                document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
-            })
             var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
             document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
         </script>

+ 11 - 0
sfc.d.ts

@@ -0,0 +1,11 @@
+import Vue from 'vue'
+
+declare module "vue/types/options" {
+  type Hooks = App.AppInstance & Page.PageInstance;
+  interface ComponentOptions<V extends Vue> extends Hooks {
+      /**
+       * 组件类型
+       */
+      mpType?: string;
+  }
+}

+ 2 - 6
src/App.vue

@@ -5,9 +5,6 @@
 		},
 		onShow: function() {
 			console.log('App Show')
-			let pxx = 15
-			let rpxx = pxx/(uni.upx2px(10)/10)
-			console.log(rpxx)
 		},
 		onHide: function() {
 			console.log('App Hide')
@@ -15,7 +12,6 @@
 	}
 </script>
 
-<style lang="scss">
-	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
-	@import "uview-ui/index.scss";
+<style>
+	/*每个页面公共css */
 </style>

+ 59 - 0
src/api/login.js

@@ -0,0 +1,59 @@
+import request from '../utils/request.js'
+
+// 登录方法
+export function login(username, password, code, uuid) {
+  const data = {
+    username,
+    password,
+    code,
+    uuid
+  }
+  return request({
+    url: '/login',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
+}
+
+// 注册方法
+export function register(data) {
+  return request({
+    url: '/register',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
+}
+
+// 获取用户详细信息
+export function getInfo() {
+  return request({
+    url: '/getInfo',
+    method: 'get'
+  })
+}
+
+// 退出方法
+export function logout() {
+  return request({
+    url: '/logout',
+    method: 'post'
+  })
+}
+
+// 获取验证码
+export function getCodeImg() {
+  return request({
+    url: '/captchaImage',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
+}

+ 44 - 0
src/api/market/customerInfo.js

@@ -0,0 +1,44 @@
+import request from '../../utils/request'
+
+// 查询客户信息列表
+export function listCustomerInfo(query) {
+  return request({
+    url: '/market/customerInfo/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户信息详细
+export function getCustomerInfo(customerId) {
+  return request({
+    url: '/market/customerInfo/' + customerId,
+    method: 'get'
+  })
+}
+
+// 新增客户信息
+export function addCustomerInfo(data) {
+  return request({
+    url: '/market/customerInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户信息
+export function updateCustomerInfo(data) {
+  return request({
+    url: '/market/customerInfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户信息
+export function delCustomerInfo(customerId) {
+  return request({
+    url: '/market/customerInfo/' + customerId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/market/research.js

@@ -0,0 +1,44 @@
+import request from '../../utils/request'
+
+// 查询市场调研列表
+export function listResearch(query) {
+  return request({
+    url: '/market/research/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询市场调研详细
+export function getResearch(researchId) {
+  return request({
+    url: '/market/research/' + researchId,
+    method: 'get'
+  })
+}
+
+// 新增市场调研
+export function addResearch(data) {
+  return request({
+    url: '/market/research',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改市场调研
+export function updateResearch(data) {
+  return request({
+    url: '/market/research',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除市场调研
+export function delResearch(researchId) {
+  return request({
+    url: '/market/research/' + researchId,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/market/visit.js

@@ -0,0 +1,44 @@
+import request from '../../utils/request'
+
+// 查询客户拜访列表
+export function listVisit(query) {
+  return request({
+    url: '/market/visit/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户拜访详细
+export function getVisit(visitId) {
+  return request({
+    url: '/market/visit/' + visitId,
+    method: 'get'
+  })
+}
+
+// 新增客户拜访
+export function addVisit(data) {
+  return request({
+    url: '/market/visit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户拜访
+export function updateVisit(data) {
+  return request({
+    url: '/market/visit',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户拜访
+export function delVisit(visitId) {
+  return request({
+    url: '/market/visit/' + visitId,
+    method: 'delete'
+  })
+}

+ 150 - 0
src/api/marketmini/index.js

@@ -0,0 +1,150 @@
+import { request } from '../../utils/requestmini'
+
+// 查询客户信息列表
+export function listCustomerInfo(query) {
+  return request({
+    url: '/market/customerInfo/list',
+    method: 'get',
+    data: query
+  })
+}
+
+// 查询客户信息详细
+export function getCustomerInfo(customerId) {
+  return request({
+    url: '/market/customerInfo/' + customerId,
+    method: 'get'
+  })
+}
+
+// 新增客户信息
+export function addCustomerInfo(data) {
+  return request({
+    url: '/market/customerInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户信息
+export function updateCustomerInfo(data) {
+  return request({
+    url: '/market/customerInfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户信息
+export function delCustomerInfo(customerId) {
+  return request({
+    url: '/market/customerInfo/' + customerId,
+    method: 'delete'
+  })
+}
+
+// import request from '../../utils/request'
+
+// 查询市场调研列表
+export function listResearch(query) {
+  return request({
+    url: '/market/research/list',
+    method: 'get',
+    data: query
+  })
+}
+
+// 查询市场调研详细
+export function getResearch(researchId) {
+  return request({
+    url: '/market/research/' + researchId,
+    method: 'get'
+  })
+}
+
+// 新增市场调研
+export function addResearch(data) {
+  return request({
+    url: '/market/research',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改市场调研
+export function updateResearch(data) {
+  return request({
+    url: '/market/research',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除市场调研
+export function delResearch(researchId) {
+  return request({
+    url: '/market/research/' + researchId,
+    method: 'delete'
+  })
+}
+// import request from '../../utils/request'
+
+// 查询客户拜访列表
+export function listVisit(query) {
+  return request({
+    url: '/market/visit/list',
+    method: 'get',
+    data: query
+  })
+}
+
+// 查询客户拜访详细
+export function getVisit(visitId) {
+  return request({
+    url: '/market/visit/' + visitId,
+    method: 'get'
+  })
+}
+
+// 新增客户拜访
+export function addVisit(data) {
+  return request({
+    url: '/market/visit',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户拜访
+export function updateVisit(data) {
+  return request({
+    url: '/market/visit',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户拜访
+export function delVisit(visitId) {
+  return request({
+    url: '/market/visit/' + visitId,
+    method: 'delete'
+  })
+}
+
+export function login(username, password, code, uuid) {
+    const data = {
+      username,
+      password,
+      code,
+      uuid
+    }
+    return request({
+      url: '/login',
+      headers: {
+        isToken: false
+      },
+      method: 'post',
+      data: data
+    })
+  }

+ 1 - 0
src/common/js/filter.js

@@ -0,0 +1 @@
+// 公共过滤器 某某币 ——> 人民币

+ 59 - 0
src/common/scss/core.scss

@@ -0,0 +1,59 @@
+button::after{
+	border: none;
+}
+.btn-background{
+	background-color: #ffffff;
+}
+.btn-box{
+	display: flex;
+	justify-content: space-around;
+}
+.content-box{
+	margin: 50rpx 30rpx;
+	font-size: 40rpx;
+	line-height: 100rpx;
+}
+.content-label{
+	display: block;
+	margin-left: 20rpx;
+	// margin-bottom: 20rpx;
+}
+.label-name,.label-data{
+	display: inline-block;
+}
+.label-name{
+	width: 40%;
+	font-weight: 700;
+	word-wrap: break-word;
+}
+.label-data{
+	// text-align: center;
+	padding-left: 50rpx;
+	width: 50%;
+	word-wrap: break-word;
+	vertical-align: middle
+}
+.content-btn{
+	display: flex;
+	justify-content: space-between;
+}
+.content-btn-edit,.content-btn-save{
+	width: 25%;
+	background-color: darkcyan;
+	color: #ffffff;
+}
+.label-input{
+	border: 1px solid #b9b9b3;
+	padding: 10rpx;
+	border-radius: 10rpx;
+	line-height: 80rpx;
+	// height: 80rpx;
+	font-size: 16px;
+}
+.common-picker{
+	border: 1px solid #b9b9b3;
+	border-radius: 10rpx;
+	padding-left: 10rpx;
+	line-height: 80rpx;
+	font-size: 16px;
+}

+ 0 - 125
src/components/common/childrenList.vue

@@ -1,125 +0,0 @@
-<template>
-  <view class="child-list">
-      <scroll-view class="scroll-view" scroll-x="true" scroll-left="0">
-        <radio-group @change="radioChange">
-          <radio
-            :value="item.value"
-            v-for="item in items"
-            :key="item.value"
-            :checked="item.value === currentSeletct"
-          >
-            <view class="s-view-item">
-              <img class="avater" :src="item.imgUrl" />
-              <view>
-                <text :class="{'child-name':'true'=='true', 'active':item.value === currentSeletct}">{{item.name}}</text>
-                <br />
-                <text
-                  :class="{'child-class':'true'=='true','active':item.value === currentSeletct}"
-                  >{{ item.class }}</text
-                >
-              </view>
-            </view>
-          </radio>
-          <view class="s-view-item add-child" id="add-child" style="vertical-align: top;">
-            <img class="avater" src="../../static/add-child.png" />
-            <view style="padding-top: 20rpx;">
-              <text class="child-add-text">添加小孩</text>
-            </view>
-          </view>
-        </radio-group>
-      </scroll-view>
-    </view>
-</template>
-
-<script>
-export default {
-  props: {
-    items: {
-      type: Array,
-      default: []
-    },
-    current: {
-        type: String,
-        default: ""
-    }
-    },
-  data: () => ({
-      currentSeletct:""
-  }),
-  computed: {},
-  methods: {
-      radioChange(evt) {
-      for (let i = 0; i < this.items.length; i++) {
-        if (this.items[i].value === evt.target.value) {
-          this.currentSeletct = this.items[i].value;
-          break;
-        }
-      }
-    }
-  },
-  watch: {},
-
-  // 组件周期函数--监听组件挂载完毕
-  mounted() {
-      this.currentSeletct = this.current
-  },
-  // 组件周期函数--监听组件数据更新之前
-  beforeUpdate() {},
-  // 组件周期函数--监听组件数据更新之后
-  updated() {},
-  // 组件周期函数--监听组件激活(显示)
-  activated() {},
-  // 组件周期函数--监听组件停用(隐藏)
-  deactivated() {},
-  // 组件周期函数--监听组件销毁之前
-  beforeDestroy() {},
-};
-</script>
-
-<style scoped>
-.scroll-view {
-  width: 95%;
-  margin: 10rpx auto;
-  white-space: nowrap;
-  display: inline-block;
-}
-.child-list {
-  margin-left: 20rpx;
-  margin-top: 10rpx;
-  margin-bottom: 10rpx;
-  margin-right: 0;
-}
-.child-name {
-  font-size: 20rpx;
-  font-weight: bold;
-}
-.child-class {
-  font-size: 18rpx;
-}
-.child-add-text {
-  font-size: 20rpx;
-}
-#add-child {
- display: inline-block;
- vertical-align: top;
-}
-.avater {
-  border-radius: 50%;
-  width: 80rpx;
-  height: 80rpx;
-  margin: 0 auto;
-}
-.active {
-  color: #0251ff;
-}
-.s-view-item {
-  width: 150rpx;
-  height: 140rpx;
-  margin: 10rpx 5rpx;
-  text-align: center;
-  color: #333;
-  display: inline-block;
-  /* block => inline-block */
-  line-height: 25rpx;
-}
-</style>

+ 0 - 64
src/components/common/noContentTips.vue

@@ -1,64 +0,0 @@
-<template>
-  <view class="noCourse" v-if="isShow">
-    <image class="logo" :src="src" />
-    <view class="tips-view">
-      <text class="noCourseTips">{{tips}}</text>
-    </view>
-    <slot name="btn"></slot>
-  </view>
-</template>
-
-<script>
-export default {
-  props: {
-    isShow: {
-      type: Boolean,
-      default: false
-    },
-      tips: {
-        type: String,
-        default: '没有数据'
-      },
-      src: {
-        type: String,
-        default: ''
-      }
-    },
-  data: () => ({}),
-  computed: {},
-  methods: {},
-  watch: {},
-
-  // 组件周期函数--监听组件挂载完毕
-  mounted() {},
-  // 组件周期函数--监听组件数据更新之前
-  beforeUpdate() {},
-  // 组件周期函数--监听组件数据更新之后
-  updated() {},
-  // 组件周期函数--监听组件激活(显示)
-  activated() {},
-  // 组件周期函数--监听组件停用(隐藏)
-  deactivated() {},
-  // 组件周期函数--监听组件销毁之前
-  beforeDestroy() {},
-};
-</script>
-
-<style scoped>
-.noCourse {
-  text-align: center;
-}
-.logo {
-  height: 220rpx;
-  width: 300rpx;
-  margin: 200rpx auto 50rpx auto;
-}
-.noCourseTips {
-  font-size: 24rpx;
-  font-weight: 400;
-  color: #A3ABBF;
-}
-.tips-view {
-  margin-bottom: 20rpx;
-}
-</style>

+ 0 - 211
src/components/helang-checkbox/helang-checkbox.vue

@@ -1,211 +0,0 @@
-<template>
-	<view class="container" :class="column">
-		<view v-for="(v,i) in list" :key="i" >
-			<view 
-			class="item"
-			:class="{ 'active':(type=='radio' && index == i) || (type=='checkbox' && v.checked) }"
-			:data-i="i"
-			@tap="change"
-			>{{v.text}}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				list:[],
-				index:-1,
-				type:'checkbox',
-				column:''
-			};
-		},
-		methods: {
-			/* 切换 */
-			change(e){
-				let i = Number(e.currentTarget.dataset.i);
-				/* 单选框 */
-				if(this.type=='radio'){
-					this.index = i;
-					this.$nextTick(()=>{
-						this.$emit("change",this.get());
-					})
-					return;
-				}
-				/* 复选框 */
-				if(this.list[i].checked){
-					this.$set(this.list[i],"checked",false);
-				}else{
-					if(this.maxSize){
-						let pickerSize = 0;
-						this.list.forEach((item,index)=>{
-							if(item.checked){
-								pickerSize++;
-							}
-						});
-						// 当已选值数量 >= 允许的最大选择值时触发
-						if(pickerSize >= this.maxSize){
-							this.maxFn && this.maxFn();
-							return;
-						}
-					}
-					this.$set(this.list[i],"checked",true);
-				}
-				this.$nextTick(()=>{
-					this.$emit("change",this.get());
-				});
-			},
-			/* 设置值 */
-			set(data) {
-				let [type,index] = ['checkbox',-1];
-				let column = ['','col_1','col_2','col_3'];
-				if(data.type == 'radio'){
-					type = 'radio';
-					index = data.index >= 0 ? data.index : -1;
-				}
-				this.column = (data.column in column) ? column[data.column] : '';
-				this.type = type;
-				this.index = index;
-				this.list = data.list;
-				
-				if(data.maxSize > 0 && data.maxFn){
-					this.maxSize = data.maxSize;
-					this.maxFn = data.maxFn;					
-				}else{
-					this.maxSize = undefined;
-					this.maxFn = undefined;
-				}
-			},
-			/* 获取值 */
-			get(){
-				/* 单选框 */
-				if(this.type=='radio'){
-					if(this.index >= 0){
-						return this.list[this.index];
-					}else{
-						return null;
-					}
-				}
-				
-				let arr=[];
-				this.list.forEach((item,index)=>{
-					if(item.checked == true){
-						arr.push(item);
-					}
-				});
-				return arr.length > 0 ? arr : null;
-			},
-			/* 全部选中 */
-			checkAll(){
-				if(this.type=='radio'){
-					return null;
-				}
-				this.list.forEach((item,index)=>{
-					this.$set(this.list[index],"checked",true);
-				})
-			},
-			/* 取消全部选中 */
-			cancelAll(){
-				if(this.type=='radio'){
-					this.index = -1;
-					return null;
-				}
-				this.list.forEach((item,index)=>{
-					this.$set(this.list[index],"checked",false);
-				})
-			},
-			/* 反选全部 */
-			invertAll(){
-				if(this.type=='radio'){
-					this.index = -1;
-					return null;
-				}
-				this.list.forEach((item,index)=>{
-					this.$set(this.list[index],"checked",item.checked ? false : true);
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-.container{
-	display: flex;
-    flex-direction: row;
-    flex-wrap: wrap;
-    justify-content: flex-start;
-    align-items: flex-start;
-    align-content: flex-start;
-	margin-right: -20rpx;
-	font-size: 28rpx;
-	text-align: center;
-	
-	&>view{
-		margin-bottom: 20rpx;
-		padding-right: 20rpx;
-		box-sizing: border-box;
-	}
-	
-	&.col_1{
-		&>view{
-			width: 100%;
-		}
-	}
-	&.col_2{
-		&>view{
-			width: 50%;
-		}
-	}
-	&.col_3{
-		&>view{
-			width: 33.3333333%;
-		}
-	}
-	
-	.item{
-		line-height: 68rpx;
-		padding: 0 20rpx;
-		box-sizing: border-box;
-		border: #e5e5e5 solid 1px;
-		background-color: #fff;
-		color: #333;
-		position: relative;
-		overflow: hidden;
-		white-space: nowrap;
-		text-overflow: ellipsis;
-		
-		&.active{
-			background-color: #f5fff9;
-			color: #42b983;
-			border: #42b983 solid 1px;
-			
-			&::before{
-				content: '';
-				display:block;
-				width: 20px;
-				height: 20px;
-				background-color: #42b983;
-				position: absolute;
-				right: -1px;
-				bottom: -1px;
-				z-index: 1;
-				clip-path: polygon(100% 0, 0% 100%, 100% 100%);
-			}
-			&::after{
-				content: '';
-				display:block;
-				width: 4px;
-				height: 8px;
-				border-right: #fff solid 2px;
-				border-bottom: #fff solid 2px;
-				transform:rotate(25deg);
-				position: absolute;
-				right: 2px;
-				bottom: 3px;
-				z-index: 2;
-			}
-		}
-	}
-}
-</style>

+ 0 - 4
src/main.js

@@ -1,10 +1,6 @@
 import Vue from 'vue'
 import App from './App'
 
-import uView from "uview-ui";
-
-Vue.use(uView);
-
 Vue.config.productionTip = false
 
 App.mpType = 'app'

+ 55 - 53
src/pages.json

@@ -1,96 +1,98 @@
 {
-	"easycom": {
-		"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
-	},
 	"pages": [ 
 		{
+			"path": "pages/login/login",
+			"style": {
+				"navigationBarTitleText": "原动力有限公司",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
 			"path": "pages/index/index",
 			"style": {
-				"navigationBarTitleText": "首页"
+				"navigationBarTitleText": "原动力有限公司",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/my-class/class",
+			"path": "pages/mine/mine",
 			"style": {
-				"navigationBarTitleText": "课程"
+				"navigationBarTitleText": "原动力有限公司",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/course-table/course-table",
+			"path": "pages/addCustomer/addCustomer",
 			"style": {
-				"navigationBarTitleText": "选课表"
+				"navigationBarTitleText": "添加客户",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/my/my",
+			"path": "pages/addMarket/addMarket",
 			"style": {
-				"navigationBarTitleText": "我的"
+				"navigationBarTitleText": "添加市场",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/index/news-detial",
+			"path": "pages/addVisit/addVisit",
 			"style": {
+				"navigationBarTitleText": "添加拜访",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/my/order/my-order",
+			"path": "pages/customer-visit/customer-visit",
 			"style": {
-				"navigationBarTitleText": "我的订单"
+				"navigationBarTitleText": "客户拜访",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/my/child/my-child",
+			"path": "pages/customor-message/customor-message",
 			"style": {
-				"navigationBarTitleText": "我的小孩"
+				"navigationBarTitleText": "客户信息",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/my/child/edit-child",
+			"path": "pages/detail/detail",
 			"style": {
+				"navigationBarTitleText": "查看详细",
+				"enablePullDownRefresh": false
 			}
 		},
 		{
-			"path": "pages/my-class/course/course-detail",
+			"path": "pages/market-research/market-research",
 			"style": {
-				"navigationBarTitleText": "课程详情"
+				"navigationBarTitleText": "市场调研",
+				"enablePullDownRefresh": false
 			}
 		}
 	],
+	"tabBar": {
+		"color": "#7A7E83",
+		"selectedColor": "#1296db",
+		"borderStyle": "white",
+		"backgroundColor": "#F8F8F8",
+		"list": [{
+			"pagePath": "pages/index/index",
+			"iconPath": "static/icon/home.png",
+			"selectedIconPath": "static/icon/homea.png",
+			"text": "首页"
+		},
+		{
+			"pagePath": "pages/mine/mine",
+			"iconPath": "static/icon/user.png",
+			"selectedIconPath": "static/icon/usera.png",
+			"text": "我的"
+		}]
+	},
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "430课程",
-		"navigationBarBackgroundColor": "#F8F8F8",
-		"backgroundColor": "#F8F8F8"
-	},
-	"tabBar": {
-		"list": [
-			{
-				"pagePath": "pages/index/index",
-				"text": "首页",
-				"selectedIconPath": "static/tabbar/tab_icon_kechegn_choose.png",
-				"iconPath": "static/tabbar/tab_icon_kechegn_choose_no.png"
-			},
-			{
-				"pagePath": "pages/my-class/class",
-				"text": "课程",
-				"selectedIconPath": "static/tabbar/tab_icon_mykecheng_choose1.png",
-				"iconPath": "static/tabbar/tab_icon_mykecheng_no.png"
-			},
-			{
-				"pagePath": "pages/course-table/course-table",
-				"text": "选课表",
-				"selectedIconPath": "static/tabbar/tab_icon_choose.png",
-				"iconPath": "static/tabbar/tab_icon_choose_no.png"
-			},
-			{
-				"pagePath": "pages/my/my",
-				"text": "我",
-				"selectedIconPath": "static/tabbar/tab_icon_my.png",
-				"iconPath": "static/tabbar/tab_icon_my_no.png"
-			}
-		],
-		"color": "#707070",
-		"selectedColor": "#0084ff",
-		"backgroundColor": "#fff"
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#FAF8F8",
+		"backgroundColor": "#FAF8F8"
 	}
-}
+}

+ 252 - 0
src/pages/addCustomer/addCustomer.vue

@@ -0,0 +1,252 @@
+<template>
+	<view>
+		<view class="content-box">
+			<label class="content-label">
+				<view class="label-name">
+					<text>客户名称</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="customerName"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>公司名称</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="company"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>公司地址</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="address"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>客户电话</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="phone"  class="label-input"/>
+				</view>
+				
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>年龄</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="age"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>性别</text>
+				</view >
+				<view class="label-data">
+					<picker @change="PickerChange" :value="index" :range="picker" class="common-picker">
+						<view class="picker">
+							{{index>-1?picker[index]:' 请选择 '}}
+						</view>
+					</picker>
+					<!-- <input type="text" v-model="sex"  class="label-input"/> -->
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>职位</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="position"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>是否内部客户</text>
+				</view >
+				<view class="label-data">
+					<picker @change="PickerChangeIn" :value="indexIn" :range="pickerIn" class="common-picker">
+						<view class="picker">
+							{{indexIn>-1?pickerIn[indexIn]:' 请选择 '}}
+						</view>
+					</picker>
+					<!-- <input type="text" v-model="isIn"  class="label-input"/> -->
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>备注</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="remark"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>登记年份</text>
+				</view >
+				<view class="label-data">
+					<picker @change="PickerChangeYear" :value="indexYear" :range="pickerYear" class="common-picker">
+						<view class="picker">
+							{{indexYear>-1?pickerYear[indexYear]:' 请选择 '}}
+						</view>
+					</picker>
+					<!-- <input type="text" v-model="year"  class="label-input"/> -->
+				</view>
+			</label>
+		</view>
+		<button @click="addF()" style="width: 80%; background-color:cornflowerblue;color: white">保存</button>
+	</view>
+</template>
+
+<script>
+	import { addCustomerInfo,getCustomerInfo,updateCustomerInfo } from "../../api/marketmini/index"
+	export default {
+		data() {
+			return {
+				customerId: null,
+				customerName: null,
+				company: null,
+				age: null,
+				address: null,
+				isIn: null,
+				sex: null,
+				position: null,
+				remark: null,
+				year: null,
+				phone: null,
+				createUserId: null,
+				createTime: null,
+				updateUserId: null,
+				updateTime: null,
+				search:null,
+				flag:'msg',
+				id:'',
+				sexnum:1,
+				isInnum:1,
+				picker: ['男', '女', '未知'],
+				index: -1,
+				pickerIn: ['是', '否'],
+				indexIn: -1,
+				pickerYear: ['2021', '2022','2023','2024'],
+				indexYear: -1,
+			}
+		},
+		methods: {
+			PickerChange(e) {
+				this.index = e.detail.value
+				// console.log(this.picker[this.index])
+				this.sex = this.index
+				console.log(this.sex)
+			},
+			PickerChangeIn(e) {
+				this.indexIn = e.detail.value
+				// console.log(this.pickerIn[this.indexIn])
+				this.isIn = this.indexIn + 1
+				console.log(this.isIn)
+			},
+			PickerChangeYear(e) {
+				this.indexYear = e.detail.value
+				// console.log(this.pickerYear[this.indexYear])
+				this.year = this.pickerYear[this.indexYear]
+				// console.log(this.year)
+			},
+			changeMethod(e) {
+			  this.year = e
+			},
+			changeIn(e) {
+			  this.isIn = e
+			},
+			changeSex(e) {
+			  this.sex = e
+			},
+			addF(){
+				const form = {
+					customerId:this.id ,
+					customerName:this.customerName ,
+					company:this.company ,
+					age: this.age-0,
+					address: this.address,
+					isIn: this.isIn,
+					sex: this.sex,
+					position: this.position,
+					remark: this.remark,
+					year:this.year ,
+					phone: this.phone,
+					createUserId: this.createUserId,
+					createTime:this.createUserId ,
+					updateUserId: this.updateUserId,
+					updateTime: this.updateTime
+				}
+				if(this.id !== ""){
+					updateCustomerInfo(form).then(()=>{
+						uni.navigateBack({
+							delta: 1
+						});
+					})
+				}else{
+					// console.log(2222)
+					addCustomerInfo(form).then(()=>{
+						// uni.navigateTo({
+						// 	url:'/pages/index/index'
+						// })
+						uni.switchTab({
+							url:'/pages/index/index'
+						})
+					})
+				}
+				
+			}
+		},
+		mounted() {
+			
+		},
+		onLoad:function(option){
+			if(option.id!=null){
+				console.log(option.id)
+				this.id = option.id
+				getCustomerInfo(option.id).then(data=>{
+					// this.msgform = data.data
+					console.log(data.data)
+					this.address= data.data.address,
+					this.age= data.data.age,
+					this.company=data.data.company,
+					this.createBy= data.data.createBy,
+					this.createTime= data.data.createTime,
+					this.createUserId= data.data.createUserId,
+					this.customerId= data.data.customerId,
+					this.customerName= data.data.customerName,
+					this.isIn= data.data.isIn,
+					this.params= data.data.params,
+					this.phone= data.data.phone,
+					this.position= data.data.position,
+					this.remark= data.data.remark,
+					this.searchValue= data.data.searchValue,
+					this.sex= data.data.sex,
+					this.updateBy= data.data.updateBy,
+					this.updateTime= data.data.updateTime,
+					this.updateUserId= data.data.updateUserId,
+					this.year= data.data.year
+					this.index = data.data.sex
+					this.indexIn = data.data.isIn-1
+					if(data.data.year=="2021"){
+						this.indexYear=0
+					}else if(data.data.year=="2022"){
+						this.indexYear=1
+					}else if(data.data.year=="2023"){
+						this.indexYear=2
+					}else if(data.data.year=="2024"){
+						this.indexYear=3
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+@import url("@/common/scss/core.scss");
+</style>

+ 149 - 0
src/pages/addMarket/addMarket.vue

@@ -0,0 +1,149 @@
+<template>
+	<view>
+		<view class="content-box">
+			<label class="content-label">
+				<view class="label-name">
+					<text>市场名称</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="msgform.marketName"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>市场地址</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="msgform.address"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>竞争对手数量</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="msgform.competitorNumber"  class="label-input"/>
+				</view>
+				
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>潜在客户数量</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="msgform.customerNumber"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>平均消费</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="msgform.avgPrice"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>调研时间</text>
+				</view >
+				<view class="label-data">
+					<!-- <input @click="open()" type="text" v-model="msgform.researchTime"  class="label-input"/> -->
+					<!-- <uni-calendar
+					ref="calendar"
+					:insert="false"
+					@confirm="confirm"
+					 /> -->
+					 <picker mode="date" :value="date" start="2015-09-01" end="2024-09-01" @change="DateChange" class="common-picker">
+					 	<view class="picker">
+					 		{{date}}
+					 	</view>
+					 </picker>
+				</view>
+			</label>
+		</view>
+		<button @click="addF()" style="width: 80%; background-color:cornflowerblue;color: white">保存</button>
+	</view>
+</template>
+
+<script>
+	import {addResearch,updateResearch,getResearch} from "../../api/marketmini/index"
+	export default {
+		data() {
+			return {
+				msgform:{
+					researchId: null,
+					marketName: null, 
+					address: null,
+					competitorNumber: null,
+					customerNumber: null,
+					avgPrice: null,
+					researchTime: null,
+					createUserId: null,
+					updateUserId: null,
+					createTime: null,
+					updateTime: null
+				},
+				flag:'msg',
+				id:'',
+				date: '请选择',
+			}
+		},	
+		methods: {
+			DateChange(e) {
+				this.date = e.detail.value
+				// console.log(this.date)
+				this.msgform.researchTime = this.date
+			},
+			open(){
+				this.$refs.calendar.open();
+			},
+			confirm(e) {
+				// console.log(e);
+				this.msgform.researchTime = e.fulldate
+			},
+			addF(){
+				const form = {
+					address: this.msgform.address,
+					avgPrice: this.msgform.avgPrice,
+					competitorNumber: this.msgform.competitorNumber,
+					createTime: this.msgform.createTime,
+					createUserId: this.msgform.createUserId,
+					customerNumber: this.msgform.customerNumber,
+					marketName: this.msgform.marketName,
+					researchId: this.msgform.researchId,
+					researchTime:this.msgform.researchTime,
+					updateTime: this.msgform.updateTime,
+					updateUserId: this.msgform.updateUserId
+				}
+				if(this.id !== ""){
+					updateResearch(form).then(()=>{
+						uni.navigateBack({
+							delta: 1
+						});
+					})
+				}else{
+					addResearch(form).then(data=>{
+						uni.switchTab({
+							url:"/pages/index/index"
+						})
+					})
+				}
+				
+			}
+		},
+		onLoad:function(option){
+			if(option.id!=null){
+				console.log(option.id)
+				this.id = option.id
+				getResearch(option.id).then(data=>{
+					this.msgform = data.data
+					this.date = data.data.researchTime
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+@import url("@/common/scss/core.scss");
+</style>

+ 240 - 0
src/pages/addVisit/addVisit.vue

@@ -0,0 +1,240 @@
+<template>
+	<view>
+		<view class="content-box">
+			<label class="content-label">
+				<view class="label-name">
+					<text>客户名称</text>
+				</view >
+				<view class="label-data">
+					<!-- <input type="text" v-model="msgform.customerName"  class="label-input"/> -->
+					<!-- <uni-data-select
+					  v-model="value"
+					  :localdata="range"
+					  @change="change"
+					></uni-data-select> -->
+					<picker @change="PickerChangeName" :value="indexName" :range="pickerName" class="common-picker">
+						<view class="picker">
+							{{indexName>-1?pickerName[indexName]:' 请选择 '}}
+						</view>
+					</picker>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>拜访时间</text>
+				</view >
+				<view class="label-data">
+					<picker mode="date" :value="date" start="2015-09-01" end="2024-09-01" @change="DateChange" class="common-picker">
+						<view class="picker">
+							{{date}}
+						</view>
+					</picker>
+					 <!-- <button @click="open">打开日历</button> -->
+					<!-- <input type="text" @click="open" v-model="msgform.visitTime"  class="label-input"/> -->
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>拜访方式</text>
+				</view >
+				<view class="label-data">
+					<picker @change="PickerChangeMethod" :value="indexMethod" :range="pickerMethod" class="common-picker">
+						<view class="picker">
+							{{indexMethod>-1?pickerMethod[indexMethod]:' 请选择 '}}
+						</view>
+					</picker>
+				</view>
+				
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>回访记录</text>
+				</view >
+				<view class="label-data">
+					<input type="text" v-model="msgform.record"  class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>是否内部人员</text>
+				</view >
+				<view class="label-data">
+					<!-- <input type="text" v-model="msgform.isIn"  class="label-input"/> -->
+					<picker @change="PickerChangeIn" :value="indexIn" :range="pickerIn" class="common-picker">
+						<view class="picker">
+							{{indexIn>-1?pickerIn[indexIn]:' 请选择 '}}
+						</view>
+					</picker>
+				</view>
+			</label>
+		</view>
+		<button  @click="addF()"  style="width: 80%; background-color:cornflowerblue;color: white">保存</button>
+	</view>
+</template>
+
+<script>
+	import{ addVisit,updateVisit,getVisit } from "../../api/marketmini/index"
+	import { listCustomerInfo } from "../../api/marketmini/index"
+ 	export default {
+		data() {
+			return {
+				msgform:{
+					customerId: "",
+					customerName: "",
+					isIn: "",
+					record: "",
+					visitId: "",
+					visitMethod: "",
+					visitTime: ""
+				},
+				flag:'msg',
+				id:'',
+				value: 0,
+				range: [],
+				valueMethod: 0,
+				rangeMethod: [
+					{ value: 1, text: "自驾" },
+					{ value: 2, text: "交通工具" },
+					{ value: 3, text: "步行" },
+					{ value: 4, text: "其他" }
+				],
+				valueIn: 0,
+				rangeIn: [
+					{ value: 1, text: "是" },
+					{ value: 2, text: "否" }
+				],
+				queryParams: {
+					pageNum: 1,
+					pageSize: 10
+				},
+				msgdata : [],
+				date: '请选择',
+				pickerName: [],
+				nameId:[],
+				indexName: -1,
+				pickerIn: ['是', '否'],
+				indexIn: -1,
+				pickerMethod: ['自驾', '交通工具','步行','其他'],
+				indexMethod: -1,
+			}
+		},
+		methods: {
+			DateChange(e) {
+				this.date = e.detail.value
+				// console.log(this.date)
+				this.msgform.visitTime = this.date
+			},
+			PickerChangeIn(e) {
+				this.indexIn = e.detail.value
+				// console.log(this.pickerIn[this.indexIn])
+				this.msgform.isIn = this.indexIn + 1
+				console.log(this.msgform.isIn)
+			},
+			PickerChangeMethod(e) {
+				this.indexMethod = e.detail.value
+				// console.log(this.pickerMethod[this.indexMethod])
+				this.msgform.visitMethod = Number(this.indexMethod)+1
+				console.log(this.msgform.visitMethod)
+			},
+			PickerChangeName(e) {
+				this.indexName = e.detail.value
+				this.msgform.customerId = this.nameId[this.indexName]
+				this.msgform.customerName = this.pickerName[this.indexName]
+			},
+			open(){
+				this.$refs.calendar.open();
+			},
+			confirm(e) {
+				// console.log(e);
+				this.msgform.visitTime = e.fulldate
+			},
+			change(e) {
+			  // console.log("e:", e);
+			  this.msgform.customerId = e
+			  // console.log(this.value)
+			},
+			changeMethod(e) {
+			  // console.log("e:", e);
+			  this.msgform.visitMethod = e
+			  // console.log(this.value)
+			},
+			changeIn(e) {
+			  // console.log("e:", e);
+			  this.msgform.isIn = e
+			  // console.log(this.value)
+			},
+			addF(){
+				const form = this.msgform
+				console.log(form)
+				if(this.id !== ""){
+					updateVisit(form).then(()=>{
+						uni.navigateBack({
+							delta: 1
+						});
+					})
+				}else{
+					addVisit(form).then(data=>{
+						// uni.navigateTo({
+						// 	url:"/pages/index/index"
+						// })
+						uni.switchTab({
+							url:"/pages/index/index"
+						})
+					})
+				}
+				
+			}
+		},
+		onLoad:function(option){
+			if(option.id!=null){
+				// console.log(option.id)
+				this.id = option.id
+				getVisit(option.id).then(data=>{
+					// this.msgform = data.data
+					// console.log(this.msgform)
+					this.msgform.customerId = data.data.customerId,
+					// this.msgform.customerName= data.data.,
+					this.msgform.isIn= data.data.isIn,
+					this.msgform.record= data.data.record,
+					this.msgform.visitId= data.data.visitId,
+					this.msgform.visitMethod= data.data.visitMethod,
+					this.msgform.visitTime= data.data.visitTime
+					this.indexIn = data.data.isIn - 1
+					this.date = data.data.visitTime
+					this.indexMethod = data.data.visitMethod - 1
+					// console.log(this.msgform.customerId)
+					listCustomerInfo(this.queryParams).then(data=>{
+						this.msgdata = data.rows
+						// console.log(this.msgdata)
+						this.pickerName =  this.msgdata.map(item =>{
+							return item.customerName
+						})
+						this.nameId = this.msgdata.map(item =>{
+							return item.customerId
+						})
+						const oindex = this.nameId.findIndex((value,index)=>{return value==this.msgform.customerId})
+						// console.log(this.pickerName,this.nameId,oindex)
+						this.indexName = oindex
+						this.msgform.customerName = this.pickerName[oindex]
+					})
+					
+				}) 
+			}else{
+				listCustomerInfo(this.queryParams).then(data=>{
+					this.msgdata = data.rows
+					// console.log(this.msgdata)
+					this.pickerName =  this.msgdata.map(item =>{
+						return item.customerName
+					})
+					this.nameId = this.msgdata.map(item =>{
+						return item.customerId
+					})
+				})
+			}
+		}
+	}
+</script>
+
+<style>
+@import url("@/common/scss/core.scss");
+</style>

+ 0 - 517
src/pages/course-table/course-table.vue

@@ -1,517 +0,0 @@
-<template>
-  <view class="content">
-    <view class="content-view">
-    <view class="top-view">
-      <text>共{{ classList.length }}个课程</text>
-      <view class="top-btn">
-        <u-button :custom-style="btnStyle" size="mini" :plain="true" :hair-line="false" @click="handleManage(!isEditMode)">
-			<view v-if="!isEditMode">
-				<u-icon name="edit-pen" size="28" style="margin-right: 10rpx;"></u-icon>
-				管理
-			</view>
-			<view v-else>完成</view>
-        </u-button>
-      </view>
-    </view>
-
-    <view>
-      <children-list :items="items" :current="current" />
-    </view>
-
-    <view class="class-list-view">
-      <no-content-tips
-        class="empty-tip"
-        :src="'/static/table_empty.png'"
-        :isShow="(!isLoading && classList.length === 0)"
-        :tips="'您的选课单空空如也哦~'"
-      >
-        <template v-slot:btn>
-          <button class="btn" type="primary" size="mini">去看一下</button>
-        </template>
-      </no-content-tips>
-      <view class="class-list">
-        <u-checkbox-group @change="checkboxChange" >
-          <view v-for="item in classList" :key="item.id" class="card class-card">
-            <view class="cart-item-content class-content">
-              <u-checkbox class="class-list-cb"
-                v-model="item.selected" :key="item.id" shape="circle"></u-checkbox>
-              <view class="item-content-view">
-                <image class="class-item-pic" src="@/static/logo.png" />
-                <view class="class-info-view">
-                  <view class="class-info-title">
-                    {{ item.title }}
-                  </view>
-                  <view class="class-info-leftover">
-                    剩余{{ item.leftover }}个名额
-                  </view>
-                  <view class="class-info-bottom">
-                    <text class="red-price">¥{{ item.price }}/人</text> 
-                    <u-number-box class="number-box" input-width="30" input-height="35" size="20" :min="1" v-model="item.count" @change="countChange"></u-number-box>
-                  </view>
-                </view>
-              </view>
-            </view>
-          </view>
-		    </u-checkbox-group>
-        
-      </view>
-    </view>
-
-    <view class="recommend-view">
-      <view class="recommend-title-view">
-        <view class="line" />
-        <text>精选推荐</text>
-        <view class="line" />
-      </view>
-
-      <view class="recommend-list">
-        <view class="card recommend-card">
-          <view class="cart-item-content">
-            <img class="card-item-pic" src="@/static/logo.png" />
-            <view class="recommend-text-view">
-              <view>
-                <text class="r-text text-title">花样跳绳(B)</text>
-                <text class="r-text text-cost">$800/人</text>
-              </view>
-              <text class="text-info">掌握跳绳技术,通过跳绳技术的学习...</text>
-              <text style="font-size: 20rpx;font-weight: 400;color: #A3ABBF;">每周星期三17:10~18:10</text>
-              <view class="recommend-text-bottom">
-                <view class="teacher-avater-div">
-                  <img style="width:30rpx; height:30rpx;" src="../../static/avater.png" />
-                </view>
-                <text class="teacher-name-text">乐小小</text>
-                <button type="primary" class="sign-up-btn">立即报名</button>
-              </view>
-            </view>
-          </view>
-        </view>
-      </view>
-    </view>
-    </view>
-  
-
-    <view class="navigation">
-			<view class="left">
-				<view class="item">
-					<u-checkbox-group>
-						<u-checkbox v-model="isSelectedAllRow" :disabled="!classList.length" shape="circle" @change="selectedAllRow">
-							全选
-						</u-checkbox>
-					</u-checkbox-group>
-				</view>
-			</view>
-			<view class="right">
-				<!-- #ifndef  MP-WEIXIN-->
-				<view v-show="!isEditMode" class="total-cost u-line-1">
-					合计
-					<text class="red-price">¥{{ sumPrice.toFixed(2) }}</text>
-				</view>
-				<u-button v-if="!isEditMode" class="btn u-line-1" >结算</u-button>
-				<u-button v-else class="btn-del u-line-1" @click="handleDel">删除</u-button>
-				<!-- #endif -->
-				<!-- #ifdef MP-WEIXIN -->
-					<view v-show="!isEditMode" class="total-cost u-line-1">
-						合计
-						<text class="red-price">¥{{ sumPrice.toFixed(2) }}</text>
-					</view>
-					<button v-if="!isEditMode" class="btn u-line-1" >结算</button>
-					<button v-else class="btn-del u-line-1" @click="handleDel">删除</button>
-				<!-- #endif -->
-			</view>
-		</view>
-  </view>
-</template>
-
-<script>
-import childrenList from "@/components/common/childrenList"
-import noContentTips from "../../components/common/noContentTips.vue"
-
-export default {
-  components: {
-    "no-content-tips": noContentTips,
-    "children-list": childrenList
-  },
-  data: () => ({
-    isLoading: false,
-    classList: [
-      {
-        id: "1",
-        title: "花样跳绳(B)",
-        price: 800,
-        leftover: 20,
-        time: "每周星期三17:10~18:10",
-        selected: false,
-        count: 1
-      },
-      {
-        id: "2",
-        title: "花样跳绳(B)",
-        price: 800,
-        leftover: 20,
-        time: "每周星期三17:10~18:10",
-        selected: false,
-        count: 1
-      },
-      {
-        id: "3",
-        title: "花样跳绳(B)",
-        price: 800,
-        leftover: 20,
-        time: "每周星期三17:10~18:10",
-        selected: false,
-        count: 1
-      },
-      {
-        id: "4",
-        title: "花样跳绳(B)",
-        price: 800,
-        leftover: 20,
-        time: "每周星期三17:10~18:10",
-        selected: false,
-        count: 1
-      }
-    ],
-    items: [
-      {
-        value: "123",
-        name: "乐大棒",
-        class: "六年级-1班",
-        imgUrl: "../../static/avater.png"
-      },
-      {
-        value: "12",
-        name: "乐小棒",
-        class: "四年级-1班",
-        imgUrl: "../../static/avater.png"
-      },
-    ],
-    current: "123",
-    btnStyle: {
-      border: "none"
-    },
-    isSelectedAllRow: false,
-    sumPrice: 0,
-    isEditMode: false
-
-  }),
-  computed: {},
-  methods: {
-    // 全选/全不选
-			selectedAllRow() {
-				this.isSelectedAllRow = this.classList.length ? !this.isSelectedAllRow : false
-				let len = this.classList.length
-				for (let i = 0; i < len; i++) {
-					this.classList[i].selected = this.isSelectedAllRow
-				}
-				this.sumTotalPrice()
-			},
-
-			// 合计总价格
-			sumTotalPrice() {
-				// 获取选择信息
-				this.sumPrice = 0
-				this.selectedAllRowLength = 0
-				for (let i = 0; i < this.classList.length; i++) {
-          if(this.classList[i].selected){
-            this.sumPrice +=  this.classList[i].price * this.classList[i].count
-          }
-				}
-      },
-      handleManage(mode){
-        this.isEditMode = mode
-        if(mode === false){
-          // 清空已选择
-          let len = this.classList.length
-          for (let i = 0; i < len; i++) {
-            this.classList[i].selected = false
-          }
-          this.selectedAllRow = false
-          this.sumTotalPrice()
-        }
-      },
-      checkboxChange(arr){
-        if(arr.length === this.classList.length){
-          this.isSelectedAllRow = true
-        }else{
-          this.isSelectedAllRow = false
-        }
-        this.sumTotalPrice()
-      },
-      countChange(){
-        this.sumTotalPrice()
-      },
-      // 删除
-      handleDel(){
-        let delArr = []
-        for(let i=0;i<this.classList.length;i++){
-          if(this.classList[i].selected){
-            delArr.push(this.classList[i].id)
-          }
-        }
-        for(let i=0;i<delArr.length;i++){
-          this.classList.splice(this.classList.findIndex(e => e.id === delArr[i]),1)
-        }
-        this.isSelectedAllRow = false
-        this.sumTotalPrice()
-        this.isEditMode = false
-      }
-  },
-  watch: {},
-
-  // 页面周期函数--监听页面加载
-  onLoad() {},
-  // 页面周期函数--监听页面初次渲染完成
-  onReady() {},
-  // 页面周期函数--监听页面显示(not-nvue)
-  onShow() {},
-  // 页面周期函数--监听页面隐藏
-  onHide() {},
-  // 页面周期函数--监听页面卸载
-  onUnload() {},
-  // 页面处理函数--监听用户下拉动作
-  onPullDownRefresh() {
-    uni.stopPullDownRefresh()
-  }
-}
-</script>
-
-<style>
-.content-view {
-  margin-bottom: 100rpx;
-}
-.top-view {
-  margin: 20rpx;
-}
-.top-btn {
-  display: inline-block;
-  position: absolute;
-  right: 20rpx;
-}
-.btn {
-  margin-top: 50rpx;
-}
-.recommend-view {
-  margin-top: 50rpx;
-  text-align: center;
-}
-.line {
-  display: inline-block;
-  width: 57rpx;
-  height: 1rpx;
-  background: #a3abbf;
-  vertical-align: middle;
-  margin: 0 20rpx;
-}
-.recommend-title-view {
-  height: 25rpx;
-}
-.recommend-list {
-  margin-top: 20rpx;
-  text-align: center;
-  display: inline-block;
-}
-.class-list {
-  margin-top: 20rpx;
-}
-.recommend-text-view {
-  /* padding: 10rpx; */
-  padding-left: 18rpx;
-  /* height: 30rpx; */
-  display: inline-block;
-  /* new */
-  /* width: 67%; */
-  width: 410rpx;
-  text-align: left;
-  vertical-align: bottom;
-}
-.card {
-  background: #ffffff;
-  border: 1px solid rgba(255, 255, 255, 0.5);
-  box-shadow: 0px 0px 15px 1px #f0f0f0;
-  border-radius: 10px;
-}
-.recommend-card {
-  margin: 10rpx auto;
-  width: 677rpx;
-  height: 272rpx;
-}
-.class-card {
-  margin: 10rpx auto;
-  width: 677rpx;
-  height: 220rpx;
-}
-.r-text {
-  /* padding-right: 60rpx; */
-}
-.text-title {
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #333333;
-}
-.text-cost {
-  font-size: 28rpx;
-  font-family: Microsoft YaHei;
-  font-weight: 400;
-  color: #eb564f;
-  /* new */
-  float: right;
-}
-.text-info {
-  font-size: 20rpx;
-  font-weight: 400;
-  color: #333333;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  display: block;
-}
-.card-item-pic {
-  /* height: 30%; */
-  /* new */
-  width: 200rpx;
-	height: 160rpx;
-	vertical-align: top;
-}
-.cart-item-content {
-  margin: 30rpx;
-  /* new */
-  position: relative;
-}
-.teacher-avater-div {
-  width: 36rpx;
-  height: 36rpx;
-  border: 2rpx solid #3267f5;
-  border-radius: 50%;
-  text-align: center;
-  display: inline-block;
-}
-.recommend-text-bottom {
-  margin-top: 40rpx;
-}
-.teacher-name-text {
-  display: inline-block;
-  font-size: 20rpx;
-  line-height: 20rpx;
-  margin-left: 30rpx;
-  font-weight: 400;
-  color: #333333;
-}
-.sign-up-btn {
-  float: right;
-  font-size: 20rpx;
-  font-weight: 400;
-  color: #ffffff;
-  text-align: center;
-}
-
-.navigation {
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  border: solid 2rpx #f2f2f2;
-  background-color: #ffffff;
-  padding: 16rpx;
-  height: 100rpx;
-  position: fixed;
-  bottom: calc(var(--status-bar-height) + 90rpx);
-  /* new 仅在微信小程序适用*/
-  /*  #ifdef  MP-WEIXIN */
-  bottom: 0; 
-  /*  #endif  */
-  z-index: 100;
-  width: 100%;
-}
-
-.left {
-  display: flex;
-  font-size: 20rpx;
-}
-
-.item {
-  margin: 0 20rpx;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-}
-
-.right {
-  display: flex;
-  font-size: 28rpx;
-  align-items: center;
-}
-
-.btn {
-  height: 46rpx;
-  line-height: 46rpx;
-  background: linear-gradient(0deg, #0251FF 0%, #2794F6 100%);
-  border-radius: 21rpx;
-  margin: 0;
-  color: #fff;
-  font-weight: 400;
-  font-size: 30rpx;
-}
-
-.btn-del {
-  width: 120rpx;
-  height: 46rpx;
-  font-size: 30rpx;
-  line-height: 46rpx;
-  background: #FFFFFF;
-  border-radius: 21rpx;
-  color: #0251FF;
-  border: 1px solid #0251FF;
-}
-
-.total-cost {
-  margin-right: 30rpx;
-}
-
-.red-price {
-  color: red;
-}
-
-.item-content-view {
-  display: inline-block;
-  margin-left: 60rpx;
-}
-.class-item-pic {
-  width: 200rpx;
-  height: 160rpx;
-}
-.class-list-cb {
- /* position: relative;
-  top: -80rpx; */
-  display: inline-flex;
-  /* new */
-  position: absolute;
-  top: 50%;
-  transform: translateY(-50%);
-  z-index: 1;
-}
-.class-info-view {
-  position: relative;
-  top: -20rpx;
-  display: inline-block;
-  margin-left: 20rpx;
-}
-.class-info-title {
-  margin-bottom: 20rpx;
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #333333;
-  width: 300rpx;
-  overflow: hidden;  /*超出宽度部分隐藏*/
-  text-overflow: ellipsis;  /*超出部分以点号代替*/
-}
-.class-info-leftover {
-  margin-bottom: 10rpx;
-  font-size: 20rpx;
-  font-weight: 400;
-  color: #A3ABBF;
-}
-.number-box {
-  margin-left: 50rpx;
-}
-
-</style>

+ 204 - 0
src/pages/customer-visit/customer-visit.vue

@@ -0,0 +1,204 @@
+<template>
+	<view>
+		<ul style="list-style: none;padding-left: 0px;margin-top: 20rpx;">
+			<li v-for="data in msgdata" :key="data.customerId" style="margin:0 auto 40rpx;padding: 20rpx;width: 90%;background-color: #f5f5f5;">
+				<view class="slot-text-filename" @click="clickDetail(data)">
+					<text>{{data.customerName}}</text>
+				</view>
+				<view class="slot-text-msg" @click="clickDetail(data)" style="display: flex;flex-direction: column;">
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">拜访时间:{{data.visitTime}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">拜访方式:{{data.visitMethod | filterMethod}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">回访记录:{{data.record}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">是否内部客户:{{data.isIn | filterIn}} </text>
+				</view>
+				<view class="slot-text-btn">
+					<button class="btn-modify" @click="modifyF(data.visitId)">修改</button>
+					<button class="btn-delete" @click="deleteF(data.visitId)">删除</button>
+				</view>
+			</li>
+		</ul>
+		<view  class="tips-box" v-show="isShow">
+			<text style="line-height: 150rpx;">确认删除?</text>
+			<view class="tips-btn">
+				<button @click="close">取消</button>
+				<button @click="handleDelete()">确认</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { listVisit,delVisit } from "../../api/marketmini/index"
+	export default {
+		data() {
+			return {
+				visit:'visit',
+				msgdata:[
+					{
+						customerId: 7,
+						customerName: "周杰伦",
+						isIn: 2,
+						record: "新歌不错",
+						visitId: "1",
+						visitMethod: 1,
+						visitTime: "2022-07-12"
+					}
+				],
+				queryParams: {
+					pageNum: 1,
+					pageSize: 10,
+					// visitMethod: null,
+					// isIn: null,
+				},
+				isShow:false,
+				deleteid:''
+			};
+		},
+		methods:{
+			createF(){
+				uni.navigateTo({
+					url:"/pages/newAdd/newAdd"
+				})
+			},
+			deleteF(data){
+				// delCustomerInfo()
+				this.isShow= true
+				// this.$refs.popup.open('top')
+				this.deleteid = data
+				// console.log(this.deleteid)
+				
+			},
+			close() {
+				// this.$refs.popup.close()
+				this.isShow = false
+			},
+			handleDelete(){
+				delVisit(this.deleteid).then(data=>{
+					this.getlist()
+					this.close()
+				})
+			},
+			modifyF(id){
+				uni.navigateTo({
+					url:'/pages/addVisit/addVisit?id='+id
+				})
+			},
+			exportF(){
+				console.log("导出")
+			},
+			getlist(){
+				listVisit(this.queryParams).then(data=>{
+					this.msgdata = data.rows
+				})
+			}
+		},
+		onShow() {
+			this.getlist()
+		},
+		filters:{
+			filterIn(data){
+				switch(data){
+					case '1': return "是";
+					break;
+					case '2': return "否";
+					break;
+					default: return "否";
+				}
+			},
+			filterMethod(val){
+				if(val==1){
+					return "自驾"
+				}else if(val==2){
+					return "交通工具"
+				}else if(val==3){
+					return "步行"
+				}else{
+					return "其他"
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+@import url("@/common/scss/core.scss");
+.commonlist-text{
+	margin: 50rpx 20rpx 20rpx;
+}
+/deep/ checkbox.round .wx-checkbox-input,
+/deep/ checkbox.round .uni-checkbox-input {
+	border-radius: 50%;
+	width: 14px;
+	height: 14px;
+}
+.slot-box {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+
+.slot-image {
+	display: block;
+	margin-right: 10px;
+	width: 30px;
+}
+
+.slot-text {
+	flex: 1;
+	font-size: 13px;
+	color: #000000;
+	margin-right: 10px;
+	.slot-text-msg{
+		color: #8F8F94;
+		font-size: 35rpx;
+		.slot-text-msg-data{
+			margin-right: 10px;
+			font-size:20px ;
+		}
+	}
+}
+// .slot-box-checkbox{
+// }
+.slot-text-filename{
+	font-size: 40rpx;
+	border-bottom: 2px solid #c9c9cd;
+}
+.slot-text-btn{
+	margin-top: 30rpx;
+	display: flex;
+	justify-content: space-around;
+	button{
+		width: 25%;
+		font-size: 20rpx;
+		color: white;
+		background-color: blue;
+	}
+}
+.tips-box{
+	padding: 40rpx;
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	transform: translate(-50%,-50%);
+	// height: 100px;
+	width: 70%;
+	background-color: #fff;font-size: 40rpx;
+	border-radius: 20px;
+	text-align: center;
+	.tips-btn{
+		display: flex;
+		justify-content: space-around;
+	}
+	// span{
+	// 	margin-bottom: 50rpx;
+	// 	line-height: 100rpx;
+	// }
+	button{
+		background-color: blue;
+		color: #fff;
+		font-size: 35rpx;
+		width: 30%;
+	}
+		
+}
+</style>

+ 222 - 0
src/pages/customor-message/customor-message.vue

@@ -0,0 +1,222 @@
+<template>
+	<view>
+		<ul style="list-style: none;padding-left: 0px;margin-top: 20rpx;margin-top: 20rpx;">
+			<li v-for="data in msgdata" :key="data.customerId" style="margin:0 auto 40rpx;padding: 20rpx;width: 90%;background-color: #f5f5f5;">
+				<view class="slot-text-filename" @click="clickDetail(data)">
+					<text>{{data.customerName}}</text>
+				</view>
+				<view class="slot-text-msg" @click="clickDetail(data)" style="display: flex;flex-direction: column;">
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">公司:{{data.company}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">职位:{{data.position}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">电话:{{data.phone}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">年龄:{{data.age}}&nbsp;&nbsp;&nbsp;性别:{{data.sex|filterSex}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">是否内部客户:{{data.isIn | filterIn}} </text>
+				</view>
+				<view class="slot-text-btn">
+					<button class="btn-modify" @click="modifyF(data.customerId)">修改</button>
+					<button class="btn-delete" @click="deleteF(data.customerId)">删除</button>
+				</view>
+			</li>
+		</ul>
+		<view  class="tips-box" v-show="isShow">
+			<text style="line-height: 150rpx;">确认删除?</text>
+			<view class="tips-btn">
+				<button @click="close">取消</button>
+				<button @click="handleDelete()">确认</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { listCustomerInfo,delCustomerInfo } from "../../api/marketmini/index"
+	export default {
+		data() {
+			return {
+				isShow:false,
+				visit:'visit',
+				msgdata:[
+					{
+						address: "深圳南山",
+						age: 23,
+						company: "腾讯",
+						createBy: null,
+						createTime: "2022-07-12 11:47:31",
+						createUserId: null,
+						customerId: "1",
+						customerName: "李嘉欣",
+						isIn: 1,
+						params: {},
+						phone: 18313121312,
+						position: "开发员",
+						remark: "地中海发型123",
+						searchValue: null,
+						sex: 0,
+						updateBy: null,
+						updateTime: "2022-07-12 11:53:14",
+						updateUserId: null,
+						year: "2022"
+					}
+				],
+				queryParams: {
+					pageNum: 1,
+					pageSize: 10,
+					// customerName: null,
+					// company: null,
+					// address: null,
+					// isIn: null,
+					// sex: null,
+					// year: null,
+					// phone: null,
+				},
+				deleteid:''
+			};
+		},
+		filters:{
+			filterSex(data){
+				switch(data){
+					case 0 :return "男";
+					break;
+					case 1 :return "女";
+					break;
+					case 2: return "未知";
+					default: return  "未知"
+				}
+			},
+			filterIn(data){
+				switch(data){
+					case '1': return "是";
+					break;
+					case '2': return "否";
+					break;
+					default: return "否";
+				}
+			}
+		},
+		methods:{
+			createF(){
+				uni.navigateTo({
+					url:"/pages/newAdd/newAdd"
+				})
+			},
+			deleteF(data){
+				// delCustomerInfo()
+				this.isShow= true
+				// this.$refs.popup.open('top')
+				this.deleteid = data
+				console.log(this.deleteid)
+				
+			},
+			close() {
+				// this.$refs.popup.close()
+				this.isShow = false
+			},
+			handleDelete(){
+				delCustomerInfo(this.deleteid).then(data=>{
+					this.getlist()
+					this.close()
+				})
+			},
+			modifyF(data){
+				// console.log("修改")
+				uni.navigateTo({
+					url:'/pages/addCustomer/addCustomer?id='+data
+				})
+			},
+			exportF(){
+				console.log("导出")
+			},
+			getlist(){
+				listCustomerInfo(this.queryParams).then((data)=>{
+					this.msgdata = data.rows
+				})
+			}
+		},
+		onShow(){
+			this.getlist()
+		}
+	}
+</script>
+
+<style lang="scss">
+@import url("@/common/scss/core.scss");
+.commonlist-text{
+	margin: 50rpx 20rpx 20rpx;
+}
+/deep/ checkbox.round .wx-checkbox-input,
+/deep/ checkbox.round .uni-checkbox-input {
+	border-radius: 50%;
+	width: 14px;
+	height: 14px;
+}
+.slot-box {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+
+.slot-image {
+	display: block;
+	margin-right: 10px;
+	width: 30px;
+}
+
+.slot-text {
+	flex: 1;
+	font-size: 13px;
+	color: #000000;
+	margin-right: 10px;
+	.slot-text-msg{
+		color: #8F8F94;
+		font-size: 35rpx;
+		.slot-text-msg-data{
+			margin-right: 10px;
+			font-size:20px ;
+		}
+	}
+}
+// .slot-box-checkbox{
+// }
+.slot-text-filename{
+	font-size: 40rpx;
+	border-bottom: 2px solid #c9c9cd;
+}
+.slot-text-btn{
+	margin-top: 30rpx;
+	display: flex;
+	justify-content: space-around;
+	button{
+		width: 25%;
+		font-size: 20rpx;
+		color: white;
+		background-color: blue;
+	}
+}
+.tips-box{
+	padding: 40rpx;
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	transform: translate(-50%,-50%);
+	// height: 100px;
+	width: 70%;
+	background-color: #fff;font-size: 40rpx;
+	border-radius: 20px;
+	text-align: center;
+	.tips-btn{
+		display: flex;
+		justify-content: space-around;
+	}
+	// span{
+	// 	margin-bottom: 50rpx;
+	// 	line-height: 100rpx;
+	// }
+	button{
+		background-color: blue;
+		color: #fff;
+		font-size: 35rpx;
+		width: 30%;
+	}
+		
+}
+</style>

+ 206 - 0
src/pages/detail/detail.vue

@@ -0,0 +1,206 @@
+<template>
+	<view>
+		<view class="content-box" v-if="flag === 'msg'">
+			<label class="content-label">
+				<view class="label-name">
+					<text>客户名称</text>
+				</view >
+				<view class="label-data">
+					<text v-show="isShow">{{msgdata.customerName}}</text>
+					<input type="text" v-model="form" v-show="!isShow" class="label-input"/>
+				</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>公司名称</text>
+				</view >
+				<view class="label-data">{{msgdata.company}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>客户电话</text>
+				</view >
+				<view class="label-data">{{msgdata.phone}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>年龄</text>
+				</view >
+				<view class="label-data">{{msgdata.age}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>性别</text>
+				</view >
+				<view class="label-data">{{msgdata.sex}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>职位</text>
+				</view >
+				<view class="label-data">{{msgdata.position}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>是否内部客户</text>
+				</view >
+				<view class="label-data">{{msgdata.isIn}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>备注</text>
+				</view >
+				<view class="label-data">{{msgdata.remark}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>登记年份</text>
+				</view >
+				<view class="label-data">{{msgdata.year}}</view>
+			</label>
+		</view>
+		<view class="content-box" v-if="flag === 'visit'">
+			<label class="content-label">
+				<view class="label-name">
+					<text>客户名称</text>
+				</view >
+				<view class="label-data">{{visitdata.customerName}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>拜访时间</text>
+				</view >
+				<view class="label-data">{{visitdata.visitTime}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>拜访方式</text>
+				</view >
+				<view class="label-data">{{visitdata.visitMethod}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>回访记录</text>
+				</view >
+				<view class="label-data">{{visitdata.record}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>是否内部客户</text>
+				</view >
+				<view class="label-data">{{visitdata.isIn}}</view>
+			</label>
+		</view>
+		<view class="content-box" v-if="flag === 'market'">
+			<label class="content-label">
+				<view class="label-name">
+					<text>市场名称</text>
+				</view >
+				<view class="label-data">{{marketdata.marketName}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>市场地址</text>
+				</view >
+				<view class="label-data">{{marketdata.address}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>竞争对手数量</text>
+				</view >
+				<view class="label-data">{{marketdata.competitorNumber}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>潜在客户数量</text>
+				</view >
+				<view class="label-data">{{marketdata.customerNumber}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>平均消费价格</text>
+				</view >
+				<view class="label-data">{{marketdata.avgPrice}}</view>
+			</label>
+			<label class="content-label">
+				<view class="label-name">
+					<text>调研时间</text>
+				</view >
+				<view class="label-data">{{marketdata.researchTime}}</view>
+			</label>
+		</view>
+		<view class="content-btn">
+			<button class="content-btn-edit">编辑</button>
+			<button class="content-btn-save">保存</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				flag:'msg',
+				isShow:true,
+				form:'李嘉欣',
+				msgdata:{
+					address: "深圳南山",
+					age: 23,
+					company: "腾讯",
+					createBy: null,
+					createTime: "2022-07-12 11:47:31",
+					createUserId: null,
+					customerId: "1",
+					customerName: "李嘉欣",
+					isIn: 1,
+					params: {},
+					phone: 18313121312,
+					position: "开发员",
+					remark: "地中海发型1231111ghjgvgvvj552gvhhg",
+					searchValue: null,
+					sex: 0,
+					updateBy: null,
+					updateTime: "2022-07-12 11:53:14",
+					updateUserId: null,
+					year: "2022"
+				},
+				visitdata:{
+					customerId: 7,
+					customerName: "周杰伦",
+					isIn: 2,
+					record: "新歌不错",
+					visitId: "1",
+					visitMethod: 1,
+					visitTime: "2022-07-12"
+				},
+				marketdata:{
+					address: "城北",
+					avgPrice: 5,
+					competitorNumber: 5,
+					createBy: null,
+					createTime: "2022-07-12 15:30:26",
+					createUserId: null,
+					customerNumber: 5,
+					marketName: "城北市场",
+					params: {},
+					remark: null,
+					researchId: "1",
+					researchTime: "2022-07-12",
+					searchValue: null,
+					updateBy: null,
+					updateTime: "2022-07-12 15:30:40",
+					updateUserId: null
+				}
+			};
+		},
+		onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
+			// console.log(option.id); //打印出上个页面传递的参数。
+			// console.log(option.flag); //打印出上个页面传递的参数。
+			this.flag = option.flag
+		}
+	}
+</script>
+
+<style lang="scss">
+@import url("@/common/scss/core.scss");
+</style>

+ 144 - 306
src/pages/index/index.vue

@@ -1,315 +1,153 @@
 <template>
-  <view class="content">
-    <!-- 轮播图 -->
-    <view class="uni-padding-wrap">
-      <view class="page-section swiper">
-        <view class="page-section-spacing">
-          <swiper
-            class="swiper"
-            :indicator-dots="indicatorDots"
-            :autoplay="autoplay"
-            :interval="interval"
-            :duration="duration"
-            indicator-active-color="#0251FF"
-          >
-            <swiper-item>
-              <view class="swiper-item">
-                <img
-                  class="swiper-item-pic"
-                  src="../../static/swiper_pic.png"
-                />
-              </view>
-            </swiper-item>
-            <swiper-item>
-              <view class="swiper-item">
-                <img
-                  class="swiper-item-pic"
-                  src="../../static/swiper_pic1.png"
-                />
-              </view>
-            </swiper-item>
-            <swiper-item>
-              <view class="swiper-item">C</view>
-            </swiper-item>
-          </swiper>
-        </view>
-      </view>
-    </view>
-
-    <!-- 孩子列表 -->
-    <children-list :items="items" :current="current" />
-
-    <!-- 精选推荐 -->
-    <view class="title">
-      <view>
-        <img style="height:32rpx;width: 8rpx;vertical-align: middle;" src="@/static/title-pic.png" />
-		<text class="title-text" >精选推荐</text>
-        <img style="height:32rpx;width: 20rpx; float:right;vertical-align: middle;" src="@/static/title-arrow-icon.png" />
-		<!-- 两个img加了width和vertical-align 将文字与图片对齐-->
-      </view>
-	  <!-- img设置百分比,微信小程序的话,如果父级没有设置高度的话,百分比没有用 -->
-      <view class="card recommend-card">
-        <view class="cart-item-content">
-          <img class="card-item-pic" src="@/static/logo.png"/>
-          <view class="recommend-text-view">
-            <view>
-              <text class="r-text text-title">花样跳绳(B)</text> 
-			  <text class="r-text text-cost">$800/人</text>
-            </view>
-            <text class="text-info">掌握跳绳技术,通过跳绳技术的学习...</text>
-            <text style="font-size: 20rpx;font-weight: 400;color: #A3ABBF;">每周星期三17:10~18:10</text>
-            <view class="recommend-text-bottom">
-              <view class="teacher-avater-div"><img style="width:30rpx; height:30rpx;" src="../../static/avater.png" /></view>
-              <text class="teacher-name-text">乐小小</text>
-              <button type="primary" class="sign-up-btn">立即报名</button>
-            </view>
-          </view>
-        </view>
-      </view>
-    </view>
-
-    <!-- 最新教育资讯 -->
-    <view class="title">
-      <view>
-        <img style="height:32rpx;width: 8rpx;vertical-align: middle;" src="@/static/title-pic.png" />
-		<text class="title-text">最新教育资讯</text>
-        <img style="height:32rpx; float:right;width: 20rpx;vertical-align: middle;" src="@/static/title-arrow-icon.png" />
-		<!-- 两个img加了width和vertical-align 将文字与图片对齐-->
-	  </view>
-      <view class="card news-card">
-        <navigator url="/pages/index/news-detial" open-type="navigate" hover-class="navigator-hover">
-            <view class="cart-item-content">
-          <view class="news-text-view">
-            <text class="text-title news-text-title">430教育到底有哪些好处fdfsd?</text>
-            <br/>
-          <text class="text-info">430教育的好处是描述描描述描述...</text>
-          <br/>
-          <text class="news-bottom-text">乐小小</text> <text class="news-bottom-text">20分钟前</text>
-          <view class="viewer-text-view">
-			  <img style="width:24rpx; height:18rpx;" src="@/static/viewer.png"/> <text class="news-bottom-text">1000</text></view>
-          </view>
-          <img class="news-card-item-pic" src="@/static/logo.png"/>
-        </view>
-        </navigator>
-      </view>
-
-      <view class="card news-card">
-        <view class="cart-item-content">
-			<view class="news-text-view">
-				<text class="text-title news-text-title">430教育到底有哪些好处?</text>
-				<br/>
-				<text class="text-info">430教育的好处是描述描描述描述...</text>
-				<br/>
-				<text class="news-bottom-text">乐小小</text> <text class="news-bottom-text">20分钟前</text>
-				<view class="viewer-text-view">
-				    <img style="width:24rpx; height:18rpx;" src="@/static/viewer.png"/> 
-				    <text class="news-bottom-text">1000</text>
+	<view class="content">
+		<view class="" style="margin-bottom: 100rpx;">
+			<view class="content-header">
+				<text class="content-header-text">客户管理</text>
+			</view>
+			<view class="content-body ">
+				<view class="content-body-img" @click="toAdd()">
+					<view>
+						<img src="../../static/images/ziliao.png" alt="添加客户" style="height: 100rpx;">
+					</view>
+					<text class="content-body-text">添加客户</text>
 				</view>
-          </view>
-          <img class="news-card-item-pic" src="@/static/logo.png"/>
-        </view>
-      </view>
-    </view>
-
-  </view>
+				<view class="content-body-img" @click="tolist()">
+					<view>
+						<img src="../../static/images/mine.png" alt="添加客户" style="height: 100rpx;">
+					</view>
+					<text class="content-body-text">客户列表</text>
+				</view>
+			</view>
+		</view>
+		<view class="" style="margin-bottom: 100rpx;">
+			<view class="content-header">
+				<text class="content-header-text">客户拜访</text>
+			</view>
+			<view class="content-body">
+				<view class="content-body-img" @click="addvisit()">
+					<view>
+						<img src="../../static/images/ziliao.png" alt="添加客户" style="height: 100rpx;">
+					</view>
+					<text class="content-body-text">添加拜访</text>
+				</view>
+				<view class="content-body-img" @click="toVisit()">
+					<view>
+						<img src="../../static/images/visit.png" alt="添加客户" style="height: 100rpx;">
+					</view>
+					<text class="content-body-text">拜访历史</text>
+				</view>
+			</view>
+		</view>
+		<view class="" style="margin-bottom: 100rpx;">
+			<view class="content-header">
+				<text class="content-header-text">市场调研</text>
+			</view>
+			<view class="content-body">
+				<view class="content-body-img" @click="addmarket()">
+					<view>
+						<img src="../../static/images/ziliao.png" alt="添加客户" style="height: 100rpx;">
+					</view>
+					<text class="content-body-text">添加调查</text>
+				</view>
+				<view class="content-body-img" @click="toMarket()">
+					<view >
+						<img src="../../static/images/marketing.png" alt="添加客户" style="height: 100rpx;">
+					</view>
+					<text class="content-body-text">市场列表</text>
+				</view>
+			</view>
+		</view>
+		<!-- <view class="content-list">
+			<navigator url="/pages/customor-message/customor-message">客&nbsp;&nbsp;户&nbsp;&nbsp;信&nbsp;&nbsp;息</navigator>
+			<navigator url="/pages/customer-visit/customer-visit">客&nbsp;&nbsp;户&nbsp;&nbsp;拜&nbsp;&nbsp;访</navigator>
+			<navigator url="/pages/market-research/market-research">市&nbsp;&nbsp;场&nbsp;&nbsp;调&nbsp;&nbsp;研</navigator>
+		</view> -->
+	</view>
 </template>
 
 <script>
-import childrenList from '@/components/common/childrenList'
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		onLoad() {
 
-export default {
-  data() {
-    return {
-      indicatorDots: true,
-      autoplay: true,
-      interval: 5000,
-      duration: 500,
-      courseList: [],
-      items: [
-        {
-          value: "123",
-          name: "乐大棒",
-          class: "六年级-1班",
-          imgUrl: "../../static/avater.png",
-        },
-        {
-          value: "12",
-          name: "乐小棒",
-          class: "四年级-1班",
-          imgUrl: "../../static/avater.png",
-        },
-        {
-          value: "134",
-          name: "乐小棒",
-          class: "四年级-1班",
-          imgUrl: "../../static/avater.png",
-        },
-        {
-          value: "125",
-          name: "乐小棒",
-          class: "四年级-1班",
-          imgUrl: "../../static/avater.png",
-        }
-      ],
-      current: "123"
-    }
-  },
-  components: {
-    "children-list": childrenList
-  },
-  onLoad() {},
-  methods: {
-    
-  },
-}
+		},
+		methods: {
+			toAdd(){
+				uni.navigateTo({
+					url:'/pages/addCustomer/addCustomer'
+				})
+			},
+			addvisit(){
+				uni.navigateTo({
+					url:'/pages/addVisit/addVisit'
+				})
+			},
+			addmarket(){
+				uni.navigateTo({
+					url:'/pages/addMarket/addMarket'
+				})
+			},
+			tolist(){
+				uni.navigateTo({
+					url:'/pages/customor-message/customor-message'
+				})
+			},
+			toVisit(){
+				uni.navigateTo({
+					url:'/pages/customer-visit/customer-visit'
+				})
+			},
+			toMarket(){
+				uni.navigateTo({
+					url:'/pages/market-research/market-research'
+				})
+			}
+		}
+	}
 </script>
 
-<style scoped>
-.uni-margin-wrap {
-  width: 690rpx;
-  width: 100%;
-}
-.swiper {
-  height: 300rpx;
-}
-.swiper-item {
-  display: block;
-  height: 300rpx;
-  line-height: 300rpx;
-  text-align: center;
-}
-.swiper-item-pic {
-  width: 100%;
-}
-.uni-padding-wrap {
-  width: 690rpx;
-  padding: 10rpx 0;
-  margin: 0 auto;
-}
-.title {
-  margin: 30rpx 30rpx;
-  font-weight: bold;
-  font-size: 28rpx;
-  height: 32rpx;
-  display:table
-}
-.title-text {
-  margin-left: 10rpx;
-  line-height: 32rpx;
-}
-.recommend-text-view {
-  /* padding: 10rpx; */
-  padding-left: 18rpx;
-  /* height: 30rpx; */
-  display: inline-block;
-  /* new */
-  /* width: 67%; */
-  width: 410rpx;
-  vertical-align: bottom;
-}
-.card {
-  background: #FFFFFF;
-  border: 1px solid rgba(255, 255, 255, 0.5);
-  box-shadow: 0px 0px 15px 1px #F0F0F0;
-  border-radius: 10px;
-}
-.recommend-card {
-  margin-top: 20rpx;
-  width: 677rpx;
-  height: 272rpx;
-}
-.r-text {
-  /* padding-right: 60rpx; */
-}
-.text-title {
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #333333;
-}
-.text-cost {
-  font-size: 28rpx;
-  font-family: Microsoft YaHei;
-  font-weight: 400;
-  color: #EB564F;
-  /* new */
-  float: right;
-}
-.text-info {
-  font-size: 20rpx;
-  font-weight: 400;
-  color: #333333;
-  overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-	display: block;
-}
-.card-item-pic {
-	/* height: 30%; */
-	/* new */
-	width: 200rpx;
-		height: 160rpx;
-		vertical-align: top;
-}
-.cart-item-content {
-  margin: 30rpx;
-}
-.teacher-avater-div {
-  width: 36rpx;
-  height: 36rpx;
-  border: 2rpx solid #3267F5;
-  border-radius: 50%;
-  text-align: center;
-  display: inline-block;
-}
-.recommend-text-bottom {
-  margin-top: 40rpx;
-}
-.teacher-name-text {
-  display: inline-block;
-  font-size: 20rpx;
-  line-height: 20rpx;
-  margin-left: 30rpx;
-  font-weight: 400;
-  color: #333333;
-}
-.sign-up-btn {
-  float: right;
-  font-size: 20rpx;
-  font-weight: 400;
-  color: #FFFFFF;
-  text-align: center;
-}
-.news-bottom-text {
-  font-size: 20rpx;
-  font-weight: 400;
-  padding-right: 10rpx;
-}
-.news-text-view {
-  display: inline-block;
-  width: 55%;
-}
-.news-card-item-pic {
-  margin-left: 20rpx;
-  width: 245rpx;
-  height: 161rpx;
-  float: right;
-  border-radius: 6rpx;
-}
-.news-text-title {
-  display: inline-block;
-  margin-bottom: 30rpx;
-  white-space: nowrap;
-  width: 350rpx;
-  overflow: hidden;  /*超出宽度部分隐藏*/
-  text-overflow: ellipsis;  /*超出部分以点号代替*/
-}
-.news-card {
-  margin-top: 20rpx;
-  width: 677rpx;
-  /* height: 210rpx; */
-}
-.viewer-text-view {
-  margin-left:40rpx;
-  display: inline-block;
-}
+<style lang="scss" scoped>
+	.content-header{
+		margin: 40rpx 0;
+		text-align: center;
+		.content-header-text{
+			color:#8e898e;
+			font-size: 35rpx;
+			border-bottom:5px solid #8e898e ;
+			display: block;
+			// width: 80%;
+			margin: 0 40rpx;
+		}
+	}
+	.content-body{
+		display: flex;
+		margin:0 40rpx ;
+		.content-body-img{
+			margin-right: 40rpx;
+			.content-body-text{
+				font-size: 30rpx;
+			}
+			/* #ifdef MP-WEIXIN */
+			img{
+				width: 100%;
+			}
+			/*#endif*/
+			
+		}
+		
+	}
+	.content-list{
+		margin: 110rpx;
+		text-align: center;
+		// border: 1px solid #8e898e;
+		// border-radius: 60rpx;
+		// navigator{
+		// 	margin: 20rpx 0;
+		// 	font-size: 35rpx;
+		// }
+	}
 </style>

+ 0 - 48
src/pages/index/news-detial.vue

@@ -1,48 +0,0 @@
-<template>
-  <view class="content">
-    <view class="news-title">
-      <text>「教育资讯」市教育局成功召开全市2020—20 21学年度高三统测成绩分析会</text>
-    </view>
-    <view class="news-info">
-      <text style="margin-right:30rpx;">教育信息速报</text> <text>2021-02-01 12:00</text>
-    </view>
-    <rich-text :nodes="html">
-
-    </rich-text>
-  </view>
-</template>
-
-<script>
-
-export default {
-  data() {
-    return {
-      html: "<p>  为及时把脉问诊我市普通高中教育教学问题,1月31日上午,市教育局在阜阳三中召开全市2020—2021学年度高三教学质量统测分析会。大会共分10个会场,包括9个学科会场和1个综合会场。市委教育工委书记、市教育局局长刁卫华出席会议,市委教育工委委员、市教育局副局长王伟主持会议。</p>"
-    }
-  },
-  components: {
-  },
-  onLoad() {},
-  methods: {
-    
-  }
-}
-</script>
-
-<style>
-.content {
-  margin: 30rpx;
-}
-.news-title {
-  font-size: 30rpx;
-  font-weight: bold;
-  color: #333333;
-  line-height: 48rpx;
-}
-.news-info {
-  font-size: 24rpx;
-  font-weight: 400;
-  color: #A3ABBF;
-  line-height: 48rpx;
-}
-</style>

+ 167 - 0
src/pages/login/login.vue

@@ -0,0 +1,167 @@
+<template>
+	<view class="v1" style="height:100vh">
+	 <!-- {{clientHeight?clientHeight+'px':'auto'}} -->
+	 <!-- v2父容器  子view使用绝对布局 -->
+		<view class="v2">
+			<view class="dltext" style="width: 232rpx; height: 92rpx; display: block; box-sizing: border-box; left: 0rpx; top: -2rpx">
+				 登录
+			</view>
+			 <!-- 手机号 -->
+			<view class="phoneCs">
+			   <!-- <image src="/images/zhang.png" class="ph"></image> -->
+			   <input placeholder="请输入账号" type="text" v-model="loginForm.username" />
+			</view>
+			 <!-- 密码 -->
+			<view class="passwordCs">
+			   <input placeholder="请输入密码" type="password" v-model="loginForm.password"/>
+			</view>
+			 <!-- 登录按钮 -->
+			<view class="denglu">
+			   <button class="btn-dl" type="primary" @click="loginF()">登录</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	// import { login } from '../../api/login.js'
+	// import { setToken } from '../../utils/auth.js'
+	import { login } from '../../api/marketmini/index';
+	export default {
+		data() {
+			return {
+				loginForm: {
+					username: "admin",
+					password: "admin123",
+					rememberMe: false,
+					code: "",
+					uuid: ""
+				},
+			};
+		},
+		methods:{
+			loginF(){
+				console.log('login')
+				login("admin","admin123").then((data)=>{
+					console.log(data)
+					// setToken(data.token)
+					uni.setStorageSync('Admin-Token',data.token)
+				})
+				uni.switchTab({
+					url:'/pages/index/index'
+				})
+				// uni.navigateTo({
+				// 	url:'/pages/index/index'
+				// })
+			}
+		}
+	}
+</script>
+
+<style lang="scss"scoped>
+	.v1{
+	  display: block;
+	  position:absolute;
+	  width: 100%;
+	  background-color: rgb(250, 248, 248);
+	}
+	/* 白色区域 */
+	.v1 .v2{
+	  position: relative;
+	  margin-top: 150rpx;
+	  left: 100rpx; 
+	  width: 545rpx;
+	  height: 600rpx;
+	  background-color: rgb(250, 248, 248);
+	  border-radius: 50rpx;
+	}
+	/* 白色区域内的登录文本 */
+	.v1 .v2 .dltext{
+	  margin-top: 50rpx;
+	  position: absolute;
+	  margin-left:50rpx;
+	  width: 150rpx;
+	  height: 100rpx;
+	  font-size: 60rpx;
+	  font-family: Helvetica;
+	  color: #000000;
+	  line-height: 100rpx;
+	  letter-spacing: 2rpx;
+	}
+	/* 手机图片+输入框+下划线的父容器view */
+	.v1 .v2 .phoneCs{
+	  margin-top: 200rpx;
+	  margin-left: 25rpx;
+	  position: absolute;
+	  display: flex;
+	  width:480rpx ;
+	  height: 90rpx ;
+	  background-color: white;
+	  
+	}
+	/* 手机图标 */
+	.v1 .v2 .phoneCs .ph{
+	  margin-top: 5rpx;
+	  margin-left: 30rpx;
+	  width: 55rpx;
+	  height: 55rpx;
+	}
+	/* 手机号输入框 */
+	.v1 .v2 .phoneCs input{
+	  width: 400rpx;
+	  font-size: 30rpx ;
+	  margin-top: 25rpx;
+	  margin-left: 30rpx;
+	}
+	/* 密码图标+输入框+小眼睛图标+下划线父容器view */
+	.v1 .v2 .passwordCs{
+	  margin-top: 350rpx;
+	  margin-left: 25rpx;
+	  position: absolute;
+	  display: flex;
+	  width:480rpx ;
+	  height: 90rpx ;
+	  background-color: white;
+	
+	}
+	/* 密码图标 */
+	.v1 .v2 .passwordCs .ps{
+	  margin-top: 5rpx;
+	  margin-left: 30rpx;
+	  width: 55rpx;
+	  height: 55rpx;
+	}
+	/* 眼睛 图标*/
+	.v1 .v2 .passwordCs .eye{
+	  margin-top: 5rpx;
+	  margin-left: 65rpx;
+	  width: 55rpx;
+	  height: 55rpx;
+	}
+	/* 密码输入框 */
+	.v1 .v2 .passwordCs input{
+	  width: 400rpx;
+	  font-size: 30rpx ;
+	  margin-top: 25rpx;
+	  margin-left: 30rpx;
+	}
+	/* 登录按钮容器view */
+	.v1 .v2 .denglu{
+	  width: 480rpx;
+	  height: 80rpx;
+	  position: absolute;
+	  margin-top:515rpx;
+	  margin-left:25rpx;
+	  
+	}
+	/* 登录按钮 */
+	.v1 .v2 .denglu button{
+	  padding: 0rpx;
+	  line-height: 70rpx;
+	  font-size: 30rpx;
+	  width: 100%;
+	  height: 100%;
+	  border-radius: 5rpx;
+	}
+
+</style>

+ 193 - 0
src/pages/market-research/market-research.vue

@@ -0,0 +1,193 @@
+<template>
+	<view>
+		<ul style="list-style: none;padding-left: 0px;margin-top: 20rpx;">
+			<li v-for="data in msgdata" :key="data.researchId" style="margin:0 auto 40rpx;padding: 20rpx;width: 90%;background-color: #f5f5f5;">
+				<view class="slot-text-filename" @click="clickDetail(data)">
+					<text>{{data.marketName}}</text>
+				</view>
+				<view class="slot-text-msg" @click="clickDetail(data)" style="display: flex;flex-direction: column;">
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">市场地址:{{data.address}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">竞争对手数量:{{data.competitorNumber}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">潜在客户数量:{{data.customerNumber}}</text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">平均消费水平:{{data.avgPrice}} </text>
+					<text class="slot-text-msg-data" style="font-size: 30rpx;">调研时间:{{data.researchTime}} </text>
+				</view>
+				<view class="slot-text-btn">
+					<button class="btn-modify" @click="modifyF(data.researchId)">修改</button>
+					<button class="btn-delete" @click="deleteF(data.researchId)">删除</button>
+				</view>
+			</li>
+		</ul>
+		<view  class="tips-box" v-show="isShow">
+			<text style="line-height: 150rpx;">确认删除?</text>
+			<view class="tips-btn">
+				<button @click="close">取消</button>
+				<button @click="handleDelete()">确认</button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { listResearch,delResearch } from "../../api/marketmini/index"
+	export default {
+		data() {
+			return {
+				visit:'visit',
+				msgdata:[
+					{
+						address: "城北",
+						avgPrice: 5,
+						competitorNumber: 5,
+						createBy: null,
+						createTime: "2022-07-12 15:30:26",
+						createUserId: null,
+						customerNumber: 5,
+						marketName: "城北市场",
+						params: {},
+						remark: null,
+						researchId: "1",
+						researchTime: "2022-07-12",
+						searchValue: null,
+						updateBy: null,
+						updateTime: "2022-07-12 15:30:40",
+						updateUserId: null
+					}
+				],
+				queryParams: {
+					pageNum: 1,
+					pageSize: 10,
+					// marketName: null,
+					// address: null,
+					// researchTime: null,
+				  },
+				  isShow:false,
+				  deleteid:''
+			};
+		},
+		methods:{
+			createF(){
+				uni.navigateTo({
+					url:"/pages/newAdd/newAdd"
+				})
+			},
+			deleteF(data){
+				// delCustomerInfo()
+				this.isShow= true
+				// this.$refs.popup.open('top')
+				this.deleteid = data
+				console.log(this.deleteid)
+				
+			},
+			close() {
+				// this.$refs.popup.close()
+				this.isShow = false
+			},
+			handleDelete(){
+				delResearch(this.deleteid).then(data=>{
+					this.getlist()
+					this.close()
+				})
+			},
+			modifyF(id){
+				uni.navigateTo({
+					url:'/pages/addMarket/addMarket?id='+id
+				})
+			},
+			exportF(){
+				console.log("导出")
+			},
+			getlist(){
+				listResearch(this.queryParams).then(data=>{
+					this.msgdata = data.rows
+				})
+			}
+		},
+		onShow(){
+			this.getlist()
+		}
+	}
+</script>
+
+<style lang="scss">
+@import url("@/common/scss/core.scss");
+.commonlist-text{
+	margin: 50rpx 20rpx 20rpx;
+}
+/deep/ checkbox.round .wx-checkbox-input,
+/deep/ checkbox.round .uni-checkbox-input {
+	border-radius: 50%;
+	width: 14px;
+	height: 14px;
+}
+.slot-box {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+
+.slot-image {
+	display: block;
+	margin-right: 10px;
+	width: 30px;
+}
+
+.slot-text {
+	flex: 1;
+	font-size: 13px;
+	color: #000000;
+	margin-right: 10px;
+	.slot-text-msg{
+		color: #8F8F94;
+		font-size: 35rpx;
+		.slot-text-msg-data{
+			margin-right: 10px;
+			font-size:20px ;
+		}
+	}
+}
+// .slot-box-checkbox{
+// }
+.slot-text-filename{
+	font-size: 40rpx;
+	border-bottom: 2px solid #c9c9cd;
+}
+.slot-text-btn{
+	margin-top: 30rpx;
+	display: flex;
+	justify-content: space-around;
+	button{
+		width: 25%;
+		font-size: 20rpx;
+		color: white;
+		background-color: blue;
+	}
+}
+.tips-box{
+	padding: 40rpx;
+	position: fixed;
+	top: 50%;
+	left: 50%;
+	transform: translate(-50%,-50%);
+	// height: 100px;
+	width: 70%;
+	background-color: #fff;font-size: 40rpx;
+	border-radius: 20px;
+	text-align: center;
+	.tips-btn{
+		display: flex;
+		justify-content: space-around;
+	}
+	// span{
+	// 	margin-bottom: 50rpx;
+	// 	line-height: 100rpx;
+	// }
+	button{
+		background-color: blue;
+		color: #fff;
+		font-size: 35rpx;
+		width: 30%;
+	}
+		
+}
+</style>

+ 109 - 0
src/pages/mine/mine.vue

@@ -0,0 +1,109 @@
+<template>
+	<view class="v1">
+		<view class="userback">
+			<view class="brand">
+				Y
+			</view>
+			<view class="userback-username">
+				原动力
+			</view>
+		</view>
+		<view class="user-function">
+			<!-- <view class="user-function-forget">
+				<button class="clean-btn-style user-function-forget-btn" @click="toChange()">清空缓存</button>
+			</view> -->
+			<view class="user-function-exit">
+				<button class="clean-btn-style user-function-exit-btn"  @click="exit()">退出登录</button>
+			</view>
+		</view>
+		<!-- 提示信息弹窗 -->
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		},
+		methods:{
+			exit(){
+				uni.removeStorageSync('Admin-Token')
+				uni.reLaunch({
+					url:'/pages/login/login'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" >
+.v1{
+  display: block;
+  position:absolute;
+  width: 100%;
+  height: 100vh;
+  background-color: #FFFFFF;
+}
+.clean-btn-style{
+	background-color: #FFFFFF;
+	border-radius: 0;
+}
+.clean-btn-style::after{
+	border: none;
+}
+.userback {
+	height: 216px;
+	// background-repeat: no-repeat;
+	// background-size: 100%;
+	text-align: center
+}
+.brand{
+	display: inline-block;
+	border-radius: 50%;
+	// margin-top: 21%;
+	width: 97px;
+	height: 97px;
+	margin: 80px auto 0;
+	background-color: #1296db;
+	color: #ffffff;
+	font-size: 70px;
+	line-height: 97px;
+}
+.userback-username{
+		margin-top: 20px;
+	}
+	.user-function{
+		margin: 30px 20px;
+		border-radius: 20px;
+		background-color: #F8F8F8;
+		line-height: 36px;
+		border: 1px solid #F0F0F0;
+		.user-function-forget{
+			padding-left: 30px;
+			cursor: pointer;
+			border-bottom: 1px solid #F0F0F0;
+			.user-function-forget-btn{
+				font-size: 14px;
+				padding: 0;
+				text-align: left;
+				background-color: #F8F8F8;
+				width: 90%;
+				margin: 0;
+			}
+		}
+		.user-function-exit{
+			padding-left: 30px;
+			cursor: pointer;
+			.user-function-exit-btn{
+				font-size: 14px;
+				padding: 0;
+				text-align: left;
+				background-color: #F8F8F8;
+				width: 90%;
+				margin: 0;
+			}
+		}
+	}
+</style>

+ 0 - 254
src/pages/my-class/class.vue

@@ -1,254 +0,0 @@
-<template>
-  <view class="content">
-    <view class="search-view">
-      <u-search class="search-bar" v-model="searchStr" placeholder="请输入课程名称进行搜索" :show-action="false"></u-search>
-      <image class="msg-icon" src="@/static/message_icon.png" />
-    </view>
-    <view class="ad-view">
-      <img class="ad-pic" src="@/static/ad.png" />
-    </view>
-    <view>
-      <children-list :items="items" :current="current" />
-    </view>
-
-    <view class="tab-view">
-      <u-tabs id="tab" :list="list" :current="currentTab" @change="tabChange"></u-tabs>
-      <scroll-view scroll-y="true" class="sv" :style="{height:navHeight+'px'}">
-        <u-loading class="loading" :show="isLoading" size="36"></u-loading>
-        <no-content-tips :src="'/static/empty.png'" :isShow="(!isLoading && classList.length === 0)" :tips="'暂时没有430课程哦~'" />
-        <view class="card item-card" v-for="item in classList" :key="item.id">
-          <navigator url="/pages/my-class/course/course-detail" open-type="navigate" hover-class="navigator-hover">
-            <img class="class-pic" src="@/static/logo.png"/>
-            <view class="class-text-view">
-              <view>
-                <text class="r-text text-title">{{ item.title }}</text> <text class="r-text text-cost">{{ item.price }}</text>
-              </view>
-              <text class="text-info">{{ item.info }}</text>
-              <br/>
-              <text style="font-size: 20rpx;font-weight: 400;color: #A3ABBF;">{{ item.time }}</text>
-            </view>
-          </navigator>
-        </view>
-      </scroll-view>
-  </view>
-  </view>
-</template>
-
-<script>
-import childrenList from '@/components/common/childrenList'
-import noContentTips from '../../components/common/noContentTips.vue'
-
-export default {
-  components: {
-   "children-list": childrenList,
-    "no-content-tips": noContentTips
-  },
-  data: () => ({
-    searchStr: '',
-    items: [
-        {
-          value: "123",
-          name: "乐大棒",
-          class: "六年级-1班",
-          imgUrl: "../../static/avater.png",
-        },
-        {
-          value: "12",
-          name: "乐小棒",
-          class: "四年级-1班",
-          imgUrl: "../../static/avater.png",
-        },
-        {
-          value: "134",
-          name: "乐小棒",
-          class: "四年级-1班",
-          imgUrl: "../../static/avater.png",
-        },
-        {
-          value: "125",
-          name: "乐小棒",
-          class: "四年级-1班",
-          imgUrl: "../../static/avater.png",
-        }
-      ],
-      current: "123",
-      list: [
-		{
-			name: '推荐'
-		}, {
-			name: '德育'
-		}, {
-			name: '智育'
-		}, {
-          name: '体育'
-        }, {
-          name: '美育'
-        }],
-        classList: [],
-				currentTab: 0,
-        pH:0, //窗口高度
-		    navHeight:0, //元素的所需高度
-        isLoading: false
-  }),
-  computed: {},
-  methods: {
-    search() {
-
-    },
-    // tabs通知swiper切换
-	tabChange(index) {
-        this.isLoading = true
-				this.currentTab = index;
-        this.classList = []
-        window.setTimeout(() => {
-          this.isLoading = false
-          this.classList = [
-          {
-            id: '1',
-            title: '花样跳绳(B)',
-            price: '$800/人',
-            info: '掌握跳绳技术,通过跳绳技术的学习...',
-            time: '每周星期三17:10~18:10'
-          },
-          {
-            id: '2',
-            title: '花样跳绳(B)',
-            price: '$800/人',
-            info: '掌握跳绳技术,通过跳绳技术的学习...',
-            time: '每周星期三17:10~18:10'
-          },
-          {
-            id: '3',
-            title: '花样跳绳(B)',
-            price: '$800/人',
-            info: '掌握跳绳技术,通过跳绳技术的学习...',
-            time: '每周星期三17:10~18:10'
-          }
-        ]
-        },1000)
-			},
-			// scroll-view到底部加载更多
-			onreachBottom() {
-				
-			}
-  },
-  watch: {},
-
-  // 页面周期函数--监听页面加载
-  onLoad() {},
-  // 页面周期函数--监听页面初次渲染完成
-  onReady() {
-  let that=this;
-	uni.getSystemInfo({ //调用uni-app接口获取屏幕高度
-		success(res) { //成功回调函数
-			that._data.pH=res.windowHeight //windoHeight为窗口高度,主要使用的是这个
-			let titleH=uni.createSelectorQuery().select(".sv"); //想要获取高度的元素名(class/id)
-			titleH.boundingClientRect(data=>{
-				let pH=that._data.pH; 
-				that._data.navHeight=pH-data.top  //计算高度:元素高度=窗口高度-元素距离顶部的距离(data.top)
-			}).exec()
-		}
-	})
-  },
-  // 页面周期函数--监听页面显示(not-nvue)
-  onShow() {},
-  // 页面周期函数--监听页面隐藏
-  onHide() {},
-  // 页面周期函数--监听页面卸载
-  onUnload() {},
-  // 页面处理函数--监听用户下拉动作
-  onPullDownRefresh() {
-    uni.stopPullDownRefresh();
-  },
-  // 页面处理函数--监听用户上拉触底
-  onReachBottom() {},
-  // 页面处理函数--监听页面滚动(not-nvue)
-  /* onPageScroll(event) {}, */
-  // 页面处理函数--用户点击右上角分享
-  /* onShareAppMessage(options) {}, */
-};
-</script>
-
-<style>
-.card {
-  background: #FFFFFF;
-  border: 1px solid rgba(255, 255, 255, 0.5);
-  box-shadow: 0px 0px 15px 1px #F0F0F0;
-  border-radius: 10px;
-}
-.item-card {
-  margin: 20rpx auto;
-  width: 677rpx;
-  height: 228rpx;
-}
-.search-bar {
-  /* width: 85%;*/
-  width: 88%;
-  display: inline-flex;
-}
-.msg-icon {
-  /* width: 35rpx;
-  height: 28rpx;
-  margin-left: 50rpx; */
-  /* new*/
-  width: 40rpx;
-  height: 32rpx;
-  margin-left: 20rpx;
-}
-.ad-pic {
-  width: 690rpx;
-  height: 220rpx;
-  border-radius: 10rpx;
-}
-.ad-view {
-  text-align: center;
-}
-.search-view {
-  margin: 20rpx;
-}
-.tab-view {
-  margin-top: 50rpx;
-  width: 100%;
-  background: #fff;
-}
-#tab {
-  border: 1rpx solid rgba(255, 255, 255, 0.5);
-  box-shadow: 0rpx -10rpx 40rpx 0rpx #F0F0F0;
-  border-radius: 60rpx 60rpx 0rpx 0rpx;
-}
-.class-text-view {
-  width: 50%;
-  display: inline-block;
-  margin-left: 30rpx;
-}
-.text-title {
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #333333;
-}
-.text-cost {
-  font-size: 28rpx;
-  font-weight: 400;
-  color: #EB564F;
-}
-.text-info {
-  font-size: 20rpx;
-  font-weight: 400;
-  color: #333333;
-  overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-	display: block;
-}
-.class-pic {
-  position: relative;
-  top: 28rpx;
-  margin-left: 30rpx;
-  width: 219rpx;
-  height: 172rpx;
-}
-.loading {
-  margin: 40% 49%;
-}
-
-</style>

+ 0 - 261
src/pages/my-class/course/course-detail.vue

@@ -1,261 +0,0 @@
-<template>
-  <view class="content">
-    <view class="content-view">
-      <swiper
-        class="swiper"
-        :indicator-dots="indicatorDots"
-        :autoplay="autoplay"
-        :interval="interval"
-        :duration="duration"
-        indicator-active-color="#0251FF"
-      >
-        <swiper-item>
-          <view class="swiper-item">
-            <img class="swiper-item-pic" src="@/static/swiper_pic.png" />
-          </view>
-        </swiper-item>
-        <swiper-item>
-          <view class="swiper-item uni-bg-green">B</view>
-        </swiper-item>
-        <swiper-item>
-          <view class="swiper-item uni-bg-blue">C</view>
-        </swiper-item>
-      </swiper>
-      <view class="detail-view">
-        <view class="detail-top">
-          <view class="right-tag"><text class="cost-text">¥800/人</text></view>
-          <view class="title-text-view">
-            <text class="title-text">花样跳绳(B)</text>
-          </view>
-          <view class="time-text">
-            <u-icon name="clock"></u-icon>每周 星期三 17:00~18:10
-          </view>
-        </view>
-
-        <view class="detail-info-view">
-          <view class="detail-title">
-            课程详情
-          </view>
-          <view class="detail-info">
-            1.掌握跳绳技术,通过跳绳技术的学习,发展下肢以及及时空感觉,控制平衡能力。
-            2.树立安全意识,懂得自我保护和相互保护的方法和意义。
-            3.为中考打下良好的体能基础。
-          </view>
-          <view class="detail-title">
-            课程备注
-          </view>
-          <view class="detail-info">
-            含跳绳一条1.课程收费均为一学期14次课时的学费标准。
-            2.请家长以自愿为原则,根据孩子兴趣爱好,为孩子报名。
-            3.每班不超过30人,15人开班。4.所以项目开班后不接受
-            退班费或直接转让。5.人数不够开不了班的可以选择退费或
-            换班。6.如因学员个人原因,请假缺课,不予补课或退款。
-          </view>
-        </view>
-      </view>
-    </view>
-
-    <view class="bottom">
-      <view class="btn-view">
-        <u-button
-          :hair-line="false"
-          size="mini"
-          plain
-          :custom-style="bBtnStyle"
-        >
-          <u-icon name="kefu-ermai" size="40"></u-icon>
-          <br />
-          客服
-        </u-button>
-      </view>
-      <view class="btn-view">
-        <u-button
-          :hair-line="false"
-          size="mini"
-          plain
-          :custom-style="bBtnStyle"
-        >
-          <u-icon name="order" size="40"></u-icon>
-          <br />
-          选课单
-        </u-button>
-      </view>
-      <view class="btn-view1">
-        <u-button v-if="btnMode === 1" shape="circle" size="medium" :custom-style="submitBtnStyle">立即报名</u-button>
-        <u-button v-else-if="btnMode === 2" shape="circle" size="medium" disabled="true" :custom-style="submitBtnDisableStyle">报名已结束</u-button>
-        <u-button v-else-if="btnMode === 3" shape="circle" size="medium" type="primary" plain :custom-style="cancleBtnStyle" @click="handleCancle">取消报名</u-button>
-      </view>
-      <u-select title="请选择取消原因" v-model="selectShow" mode="single-column" :list="selectList" @confirm="selectConfirm"></u-select>
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  components: {},
-  data: () => ({
-    indicatorDots: true,
-    autoplay: true,
-    interval: 2000,
-    duration: 500,
-    btnMode: 3,
-    bBtnStyle: {
-      width: '100rpx',
-      height: '100rpx',
-      display: 'inline-block',
-      color: '#0251FF',
-      paddingTop: '20rpx',
-      lineHeight: '40rpx',
-      border: '0',
-    },
-    submitBtnStyle: {
-      background: 'linear-gradient(3deg, #0251FF 0%, #2794F6 100%)',
-      color: '#fff',
-      width: '100%'
-    },
-    submitBtnDisableStyle: {
-      background: ' linear-gradient(3deg, #0251FF 0%, #2794F6 100%)',
-      color: '#fff',
-      width: '100%',
-      opacity: '0.5'
-    },
-    cancleBtnStyle: {
-      width: '100%'
-    },
-    selectList: [
-					{
-						value: '1',
-						label: '个人原因'
-					},
-					{
-						value: '2',
-						label: '计划有变'
-					},
-					{
-						value: '3',
-						label: '其他'
-					}
-				],
-        selectShow: false
-  }),
-  computed: {},
-  methods: {
-    handleCancle() {
-      this.selectShow = true
-    },
-    selectConfirm() {
-
-    }
-  },
-  watch: {},
-
-  // 页面周期函数--监听页面加载
-  onLoad() {},
-  // 页面周期函数--监听页面初次渲染完成
-  onReady() {},
-  // 页面周期函数--监听页面显示(not-nvue)
-  onShow() {},
-  // 页面周期函数--监听页面隐藏
-  onHide() {},
-  // 页面周期函数--监听页面卸载
-  onUnload() {},
-  // 页面处理函数--监听用户下拉动作
-  onPullDownRefresh() {
-    uni.stopPullDownRefresh()
-  },
-  // 页面处理函数--监听用户上拉触底
-  onReachBottom() {},
-}
-</script>
-
-<style>
-.content-view {
-  padding-bottom: 110rpx;
-}
-.swiper {
-  height: 450rpx;
-}
-.swiper-item {
-  height: 450rpx;
-}
-.swiper-item-pic {
-  width: 100%;
-  height: 100%;
-  display: block;
-}
-.right-tag {
-  background: #fce6e5;
-  width: 178rpx;
-  height: 62rpx;
-  border-radius: 30rpx 0 0 30rpx;
-  text-align: center;
-  position: relative;
-  float: right;
-}
-.cost-text {
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #ec655b;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  line-height: 62rpx;
-}
-.detial-top {
-  margin-top: 30rpx;
-  margin-left: 30rpx;
-}
-.title-text {
-  font-size: 36rpx;
-  font-weight: bold;
-  color: #333333;
-}
-.title-text-view {
-  margin-bottom: 47rpx;
-}
-.time-text {
-  font-size: 24rpx;
-  font-weight: 400;
-  color: #333333;
-}
-.detail-info-view {
-  margin-top: 50rpx;
-  margin-right: 20rpx;
-}
-.detail-view {
-  margin-top: 30rpx;
-  margin-left: 20rpx;
-}
-.detail-title {
-  font-size: 30rpx;
-  font-weight: bold;
-  color: #333333;
-  margin-bottom: 20rpx;
-}
-.detail-info {
-  font-size: 24rpx;
-  font-weight: 400;
-  color: #a3abbf;
-  line-height: 36rpx;
-  margin-bottom: 30rpx;
-}
-.bottom {
-  position: fixed;
-  bottom: 0px;
-  height: 108rpx;
-  width: 100%;
-  background: #ffffff;
-  border: 1rpx solid #d6dcf1;
-}
-.btn-view {
-  margin: 0 30rpx;
-  display: inline-block;
-}
-.btn-view1 {
-  width: 50%;
-  display: inline-block;
-  margin-bottom: 50rpx;
-  vertical-align: middle;
-  margin-left: 20rpx;
-}
-</style>

+ 0 - 224
src/pages/my/child/edit-child.vue

@@ -1,224 +0,0 @@
-<template>
-  <view class="content">
-    <view class="top">
-      <text class="top-tips-text">新增小孩信息</text>
-    </view>
-    <view class="item-view">
-      <u-form :model="form">
-        <u-form-item label-width="250" label="小孩名称" prop="name">
-          <u-input placeholder="请填写您孩子的姓名" v-model="form.name" />
-        </u-form-item>
-        <u-form-item label-width="250" label="所在学校" prop="school">
-          <u-input placeholder="请填写您孩子的学校" v-model="form.school" />
-        </u-form-item>
-        <u-form-item label-width="250" label="所在班级" prop="class">
-          <u-select
-            v-model="showClass"
-            mode="mutil-column"
-            :list="classList"
-            @confirm="classConfirm"
-          ></u-select>
-          <u-input placeholder="请选择您孩子所在班级" :disabled="true" @click="showClass = true" v-model="classText" class="item-view-input"/>
-          <u-icon name="arrow-right"></u-icon>
-        </u-form-item>
-        <u-form-item label-width="250" label="孩子性别" prop="sex">
-          <u-select
-            v-model="showSex"
-            mode="single-column"
-            :list="sexList"
-            @confirm="sexConfirm"
-          ></u-select>
-          <u-input
-            :disabled="true"
-            placeholder="请选择您孩子的性别"
-            v-model="sexText"
-            @click="showSex = true"
-			class="item-view-input"
-          />
-          <u-icon name="arrow-right"></u-icon>
-        </u-form-item>
-        <u-form-item label-width="250" label="联系家长" prop="phone">
-          <u-input placeholder="请填写您的电话号码" v-model="form.phone" />
-        </u-form-item>
-        <u-form-item label-width="250" label="回家方式" prop="goHomeType">
-          <u-select
-            v-model="showType"
-            mode="single-column"
-            :list="homeTypeList"
-            @confirm="typeConfirm"
-          ></u-select>
-          <u-input
-            placeholder="请选择孩子回家方式"
-            :disabled="true"
-            v-model="typeText"
-            @click="showType = true"
-			class="item-view-input"
-          />
-          <u-icon name="arrow-right"></u-icon>
-        </u-form-item>
-      </u-form>
-    </view>
-    <view>
-      <u-button shape="circle" :custom-style="btnStyle">立即保存</u-button>
-    </view>
-  </view>
-</template>
-
-<script>
-export default {
-  data: () => ({
-    btnStyle: {
-      background: 'linear-gradient(0deg, #0251FF 0%, #2794F6 100%)',
-      width: '80%',
-      color: '#fff',
-    },
-    form: {
-      name: '',
-      shool: '',
-      class: '',
-      sex: '',
-      phone: '',
-      goHomeType: 1,
-    },
-    sexList: [
-      {
-        value: 1,
-        label: '男',
-      },
-      {
-        value: 2,
-        label: '女',
-      },
-    ],
-    homeTypeList: [
-      {
-        value: 1,
-        label: '家长接送',
-      },
-      {
-        value: 2,
-        label: '自行回家',
-      },
-    ],
-    classList: [
-      [
-        {
-          value: '1',
-          label: '一年级',
-        },
-        {
-          value: '2',
-          label: '二年级',
-        },
-        {
-          value: '3',
-          label: '三年级',
-        },
-        {
-          value: '4',
-          label: '四年级',
-        },
-        {
-          value: '5',
-          label: '五年级',
-        },
-        {
-          value: '6',
-          label: '六年级',
-        },
-      ],
-      [
-        {
-          value: '1',
-          label: '一班',
-        },
-        {
-          value: '2',
-          label: '二班',
-        },
-      ],
-    ],
-    showSex: false,
-    sexText: '',
-    showType: false,
-    typeText: '',
-    showClass: false,
-    classText: '',
-  }),
-  components: {},
-  computed: {},
-  methods: {
-    sexConfirm(res) {
-      this.form.sex = res[0].value
-      if (res[0].value === 1) {
-        this.sexText = '男'
-      } else if (res[0].value === 2) {
-        this.sexText = '女'
-      }
-    },
-    typeConfirm(res) {
-      this.form.goHomeType = res[0].value
-      this.typeText = res[0].label
-    },
-    classConfirm(res) {
-        this.classText = res[0].label + res[1].label
-    }
-  },
-  watch: {},
-
-  // 组件周期函数--监听组件挂载完毕
-  mounted() {},
-  // 组件周期函数--监听组件数据更新之前
-  beforeUpdate() {},
-  // 组件周期函数--监听组件数据更新之后
-  updated() {},
-  // 组件周期函数--监听组件激活(显示)
-  activated() {},
-  // 组件周期函数--监听组件停用(隐藏)
-  deactivated() {},
-  // 组件周期函数--监听组件销毁之前
-  beforeDestroy() {},
-}
-</script>
-
-<style scoped>
-.top {
-  height: 320rpx;
-  background: linear-gradient(0deg, #0251ff 0%, #2794f6 100%);
-}
-.top-tips-text {
-  position: relative;
-  top: 115rpx;
-  left: 40rpx;
-  font-size: 32rpx;
-  font-weight: bold;
-  color: #ffffff;
-}
-.item-view {
-  position: relative;
-  top: -100rpx;
-  height: 780rpx;
-  margin-left: 30rpx;
-  margin-right: 30rpx;
-  background: #ffffff;
-  border: 1rpx solid rgba(255, 255, 255, 0.5);
-  box-shadow: 0rpx 0rpx 15rpx 1rpx #f0f0f0;
-  border-radius: 6rpx;
-  z-index: 100;
-  padding-left: 30rpx;
-  padding-right: 10rpx;
-}
-.item-view-input{
-	/* 给input新增样式 */
-	display: inline-block;
-	width: 90%;
-}
-.item {
-  margin: 30rpx;
-}
-.item-title-text {
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #333333;
-}
-</style>

+ 0 - 184
src/pages/my/child/my-child.vue

@@ -1,184 +0,0 @@
-<template>
-  <view class="content">
-    <view class="top-view">
-		<view class="top-text-view">您已关联{{ childList.length }}个小孩</view>
-        <view class="top-btn-view">
-            <u-button :custom-style="btnStyle" size="mini" @click="toEdit">新增</u-button>
-        </view>
-	</view>
-    <view class="order-view">
-        <u-loading class="loading" :show="isLoading" size="36"></u-loading>
-        <no-content-tips :src="'/static/child_empty.png'" :isShow="(!isLoading && childList.length === 0)" :tips="'您还没添加小孩哦~'" />
-        <view class="card item-card" v-for="item in childList" :key="item.id">
-          <view class="item-content-view">
-            <view class="item-avater-view">
-                <img class="avater" src="@/static/avater.png" />
-            </view>
-            <view class="item-text-view">
-                <view class="name-text-view">
-                   <view class="name-text"><text>{{ item.name }}</text></view>  <u-tag class="tag" v-if="item.type === 1" text="家长接送" type="primary" size="mini" />
-                </view>
-                <view class="school-text-view">
-                    <text>{{ item.school }}/{{ item.class }}</text>
-                </view>
-                <view class="phone-text-view">
-                    <text>家长联系方式:{{ item.phone }}</text>
-                </view>
-            </view>
-          </view>
-          <view class="item-bottom-view">
-                <u-button type="primary" plain size="mini" shape="circle"><u-icon name="trash" size="28"></u-icon>删除</u-button>
-                <u-button :custom-style="editBtnStyle" plain size="mini" shape="circle"><u-icon name="edit-pen" size="28"></u-icon>编辑</u-button>
-          </view>
-        </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import noContentTips from '@/components/common/noContentTips.vue'
-
-export default {
-  data: () => ({
-    childList: [{
-            id: '1',
-            type: 1,
-            name: '乐大棒',
-            school: '红英小学',
-            class: '六年级-1班',
-            phone: '17750182256'
-        },{
-            id: '2',
-            type: 1,
-            name: '乐笑棒',
-            school: '红英小学',
-            class: '三年级-1班',
-            phone: '17750182256'
-        }
-    ],
-    current: 0, // tabs组件的current值,表示当前活动的tab选项
-    isLoading: false,
-    btnStyle: {
-        background: 'linear-gradient(0deg, #0251FF 0%, #2794F6 100%)',
-        color: '#fff',
-        width: '100rpx',
-        height: '50rpx'
-    },
-    editBtnStyle: {
-        background: 'linear-gradient(0deg, #0251FF 0%, #2794F6 100%)',
-        color: '#fff',
-        marginLeft: '30rpx'
-    }
-  }),
-  components: {
-      "no-content-tips": noContentTips
-  },
-  computed: {},
-  methods: {
-	// scroll-view到底部加载更多
-	toEdit() {
-        uni.navigateTo({
-            url: '/pages/my/child/edit-child'
-        })
-	}
-  },
-  watch: {},
-
-  // 组件周期函数--监听组件挂载完毕
-  mounted() {
-      
-  },
-  // 组件周期函数--监听组件数据更新之前
-  beforeUpdate() {},
-  // 组件周期函数--监听组件数据更新之后
-  updated() {},
-  // 组件周期函数--监听组件激活(显示)
-  activated() {},
-  // 组件周期函数--监听组件停用(隐藏)
-  deactivated() {},
-  // 组件周期函数--监听组件销毁之前
-  beforeDestroy() {}
-}
-</script>
-
-<style scoped>
-.card {
-    margin: 0 auto;
-    background: #FFFFFF;
-    border: 1px solid rgba(255, 255, 255, 0.5);
-    box-shadow: 0px 0px 15px 1px #F0F0F0;
-    border-radius: 10px;
-}
-.item-card {
-    margin: 20rpx auto;
-    width: 677rpx;
-    height: 300rpx;
-    align-items: center;
-}
-.top-view {
-    height: 86rpx;
-    margin: 30rpx;
-}
-.top-text-view {
-    display: inline-block;
-    font-size: 25rpx;
-    font-weight: 400;
-    color: #333333;
-    vertical-align: middle;
-}
-.top-btn-view {
-    float: right;
-}
-.avater {
-    width: 140rpx;
-	border-radius: 50%;
-	/* new */
-	height: 140rpx;
-}
-.item-content-view {
-    display: flex;
-    height: 200rpx;
-    margin-left: 30rpx;
-    margin-right: 30rpx;
-    margin-top: 20rpx;
-}
-.item-text-view {
-    margin-left: 30rpx;
-}
-.name-text {
-    display: inline-block;
-    max-width: 250rpx;
-    font-size: 36rpx;
-    font-weight: bold;
-    color: #333333;
-    overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-    vertical-align: middle;
-}
-.tag {
-    margin-left: 36rpx;
-}
-.school-text-view {
-    margin-top: 15rpx;
-    font-size: 24rpx;
-    font-weight: 400;
-    overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-    color: #333333;
-}
-.phone-text-view {
-    margin-top: 15rpx;
-    font-size: 24rpx;
-    font-weight: 400;
-    overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
-    color: #A3ABBF;
-}
-.item-bottom-view {
-    margin-right: 30rpx;
-    float: right;
-}
-</style>

+ 0 - 164
src/pages/my/my.vue

@@ -1,164 +0,0 @@
-<template>
-  <view class="content">
-	  <!-- 新增image -->
-	  <!-- #ifdef MP-WEIXIN -->
-	<image src="../../static/banner_bg02.png"  class="top-banner-background"></image>
-    <!--  #endif -->
-	<view class="top-banner">
-      <view class="user-view">
-        <img class="avater" src="@/static/logo.png" />
-        <text class="name-text">乐小班</text>
-      </view>
-    </view>
-    <view class="list-view">
-      <view class="list-item-view">
-        <navigator url="/pages/my/child/my-child" open-type="navigate" hover-class="navigator-hover">
-          <view class="item">
-            <img class="item-icon" src="@/static/leban_my_icon_child.png" />
-            <text class="item-text">我的小孩</text>
-            <img class="item-right-icon" src="@/static/banner_info_d.png" />
-          </view>
-        </navigator>
-      </view>
-
-      <view class="list-item-view">
-        <navigator url="/pages/my/order/my-order" open-type="navigate" hover-class="navigator-hover">
-          <view class="item">
-            <img class="item-icon" src="@/static/leban_my_icon_dd.png" />
-            <text class="item-text">订单</text>
-            <img class="item-right-icon" src="@/static/banner_info_d.png" />
-          </view>
-        </navigator>
-      </view>
-
-      <view class="list-item-view">
-        <view class="item">
-          <img class="item-icon" src="@/static/leban_my_icon_kefu.png" />
-          <text class="item-text">在线客服</text>
-          <img class="item-right-icon" src="@/static/banner_info_d.png" />
-        </view>
-      </view>
-
-      <view class="list-item-view">
-        <view class="item">
-          <img class="item-icon" src="@/static/leban_my_icon_yijian.png" />
-          <text class="item-text">意见反馈</text>
-          <img class="item-right-icon" src="@/static/banner_info_d.png" />
-        </view>
-      </view>
-    </view>
-  </view>
-</template>
-
-<script>
-
-export default {
-  components: {},
-  data: () => ({}),
-  computed: {},
-  methods: {},
-  watch: {},
-
-  // 页面周期函数--监听页面加载
-  onLoad() {},
-  // 页面周期函数--监听页面初次渲染完成
-  onReady() {},
-  // 页面周期函数--监听页面显示(not-nvue)
-  onShow() {},
-  // 页面周期函数--监听页面隐藏
-  onHide() {},
-  // 页面周期函数--监听页面卸载
-  onUnload() {},
-  // 页面处理函数--监听用户下拉动作
-  onPullDownRefresh() {
-    uni.stopPullDownRefresh();
-  },
-  // 页面处理函数--监听用户上拉触底
-  onReachBottom() {},
-  // 页面处理函数--监听页面滚动(not-nvue)
-  /* onPageScroll(event) {}, */
-  // 页面处理函数--用户点击右上角分享
-  /* onShareAppMessage(options) {}, */
-};
-</script>
-
-<style>
-.top-banner {
-  background: url('@/static/banner_bg02.png');
-  height: 325rpx;
-}
-/* 微信小程序的上面那个background不生效 */
-.top-banner-background{
-	position: fixed;
-	width: 100%;
-}
-.avater {
-  border-radius: 50%;
-  width: 120rpx;
-  height: 120rpx;
-  margin: 0 auto;
-  }
-.user-view {
-  position: absolute;  
-  top: 100rpx;
-  width: 100%;
-  height: 120rpx;
-  left: 40rpx;
-  bottom: 0;
-  right: 0;
-}
-.name-text{
-  height: 110%;
-  font-size: 36rpx;
-  font-weight: bold;
-  color: #FFFFFF;
-  display: inline-block;
-  margin-left: 37rpx;
-  width: 70%;
-  vertical-align: middle;
-  white-space: nowrap;
-  overflow: hidden;  /*超出宽度部分隐藏*/
-  text-overflow: ellipsis;  /*超出部分以点号代替*/
-}
-.list-view {
-  width: 100%;
-  background: #FFF;
-  border-radius: 50rpx 50rpx 0rpx 0rpx;
-  height: fit-content;
-  position: relative;
-  top: -50rpx;
-}
-.list-item-view {
-  padding-top: 50rpx;
-}
-.item {
-  height: 80rpx;
-  width: 100%;
-  margin-left: 50rpx;
-  margin-top: 10rpx;
-  margin-bottom: 10rpx;
-}
-.item-icon {
-  width: 45rpx;
-  height: 45rpx;
-  margin-right: 36rpx;
-  display: inline-block;
-  vertical-align: middle;
-}
-.item-text {
-  font-size: 28rpx;
-  font-weight: bold;
-  color: #333333;
-  display: inline-block;
-  vertical-align: middle;
-}
-.item-right-icon {
-  position: absolute;
-  right: 50rpx;
-  padding-top: 10rpx;
-  width: 16rpx;
-  height: 28rpx;
-  display: inline-block;
-  vertical-align: middle;
-}
-</style>

+ 0 - 225
src/pages/my/order/my-order.vue

@@ -1,225 +0,0 @@
-<template>
-  <view class="content">
-    <view>
-		<u-tabs ref="uTabs" name="name" count="count" :list="tabList" :current="current" @change="tabsChange" :is-scroll="false" swiperWidth="750"></u-tabs>
-	</view>
-    <view class="order-view">
-        <u-loading class="loading" :show="isLoading" size="36"></u-loading>
-        <no-content-tips :src="'/static/order_empty.png'" :isShow="(!isLoading && orderList.length === 0)" :tips="'暂时没有订单哦~'" />
-        <view class="card item-card" v-for="item in orderList" :key="item.id">
-          <view id="item-top">
-              <u-icon color="#3F66EC" name="clock"></u-icon>下单时间:{{ $u.timeFormat(item.orderTime, 'yyyy-mm-dd hh-MM') }}
-              <text v-if="item.type === 3" class="order-status-text close-text">已关闭</text>
-              <text v-else-if="item.type === 2" class="order-status-text pay-text">已支付</text>
-              <text v-else class="order-status-text pay-text">待支付</text>
-          </view>
-          
-          <img class="order-pic" src="@/static/logo.png"/>
-            <view class="order-text-view">
-              <view class="order-title">
-                  <view class="title-view">
-                      <text class="text-title">{{ item.title }}</text>
-                  </view>
-                  <view class="cost-view">
-                      <text class="text-cost">¥{{ item.price }}</text>
-                  </view>
-              </view>
-            <text class="text-info">学生名称:{{ item.studentName }}</text>
-            <text class="text-info">学生年级:{{ item.studentGrade }}</text>
-            <view class="bottom-btn-view">
-                <u-button class="btn" size="mini" :plain="true" v-if="item.type === 1 || item.type === 2" shape="circle">取消支付</u-button>
-                <u-button class="btn" size="mini" :plain="true" v-if="item.type === 1" type="primary" shape="circle">立即支付</u-button>
-            </view>
-          </view>
-        </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import noContentTips from '@/components/common/noContentTips.vue'
-
-export default {
-  data: () => ({
-    orderList: [
-    ],
-    tabList: [{
-        id: '1',
-		name: '全部',
-        count: 0
-	}, {
-        id: '2',
-	    name: '已支付',
-        count: 0
-	}, {
-        id: '3',
-		name: '待支付',
-        count: 0
-	}, {
-        id: '4',
-		name: '已取消',
-        count: 0
-	}],
-    current: 0, // tabs组件的current值,表示当前活动的tab选项
-    isLoading: false
-  }),
-  components: {
-      "no-content-tips": noContentTips
-  },
-  computed: {},
-  methods: {
-	tabsChange(index) {
-        this.current = index
-        this.isLoading = true
-        this.orderList = []
-        window.setTimeout(() => {
-          this.isLoading = false
-          this.orderList = [
-          {
-            id: '1',
-            title: '花样跳绳(B)',
-            studentName: '乐小伴',
-            studentGrade: '三年级-1班',
-            price: 800,
-            orderTime: '',
-            type: 1
-          },
-          {
-            id: '2',
-            title: '花样跳绳(B)',
-            studentName: '乐小伴',
-            studentGrade: '三年级-1班',
-            price: 800,
-            orderTime: '',
-            type: 2
-          },
-          {
-            id: '3',
-            title: '花样跳绳(B)',
-            studentName: '乐小伴',
-            studentGrade: '三年级-1班',
-            price: 800,
-            orderTime: '',
-            type: 3
-          }
-        ]
-        for(let i=0;i<this.orderList.length;i++){
-          this.orderList[i].orderTime = new Date(2021,2-1,2,14,30)
-      }
-        },1000)
-    },
-	// scroll-view到底部加载更多
-	onreachBottom() {
-        
-	}
-  },
-  watch: {},
-
-  // 组件周期函数--监听组件挂载完毕
-  mounted() {
-      
-  },
-  // 组件周期函数--监听组件数据更新之前
-  beforeUpdate() {},
-  // 组件周期函数--监听组件数据更新之后
-  updated() {},
-  // 组件周期函数--监听组件激活(显示)
-  activated() {},
-  // 组件周期函数--监听组件停用(隐藏)
-  deactivated() {},
-  // 组件周期函数--监听组件销毁之前
-  beforeDestroy() {}
-}
-</script>
-
-<style scoped>
-.card {
-    margin: 0 auto;
-    background: #FFFFFF;
-    border: 1px solid rgba(255, 255, 255, 0.5);
-    box-shadow: 0px 0px 15px 1px #F0F0F0;
-    border-radius: 10px;
-}
-.item-card {
-    margin: 20rpx auto;
-    width: 677rpx;
-    height: 280rpx;
-    align-items: center;
-}
-.order-pic {
-    margin-left: 30rpx;
-    width: 220rpx;
-    height: 170rpx;
-}
-.order-text-view {
-    margin-left: 30rpx;
-    display: inline-block;
-}
-.text-info {
-    font-size: 20rpx;
-    font-weight: 400;
-    color: #333333;
-    overflow: hidden;
-    text-overflow: ellipsis;
-	white-space: nowrap;
-    display: block;
-}
-.text-title {
-    width: 300rpx;
-    font-size: 28rpx;
-    font-weight: bold;
-    color: #333333;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-}
-.text-cost {
-    font-size: 28rpx;
-    font-weight: 400;
-    color: #EB564F;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-}
-#item-top {
-    font-size: 20rpx;
-    width: 600rpx;
-    font-weight: 400;
-    color: #0251FF;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    margin: 20rpx 30rpx;
-}
-.order-status-text {
-    float: right;
-}
-.close-text {
-    color: #999;
-}
-.pay-text {
-    color: #EC655B;
-}
-.order-title {
-    margin-bottom: 30rpx;
-}
-.title-view {
-    display: inline-block;
-    width: 260rpx;
-}
-.cost-view {
-    display: inline-block;
-
-}
-.bottom-btn-view {
-    margin-top: 20rpx;
-    text-align: right;
-    width: 380rpx;
-}
-.btn {
-    margin-right: 20rpx;
-}
-.loading {
-  margin: 40% 49%;
-}
-</style>

BIN
src/static/ad.png


BIN
src/static/add-child.png


BIN
src/static/avater.png


BIN
src/static/banner_bg02.jpg


BIN
src/static/banner_bg02.png


BIN
src/static/banner_info_d.png


BIN
src/static/child_empty.png


BIN
src/static/empty.png


BIN
src/static/icon/caiyang.png


BIN
src/static/icon/chaxun.png


BIN
src/static/icon/dengji.png


BIN
src/static/icon/edit.png


BIN
src/static/icon/home.png


BIN
src/static/icon/homea.png


BIN
src/static/icon/piao.png


BIN
src/static/icon/search.png


BIN
src/static/icon/user.png


BIN
src/static/icon/usera.png


BIN
src/static/images/marketing.png


BIN
src/static/images/mine.png


BIN
src/static/images/visit.png


BIN
src/static/images/ziliao.png


BIN
src/static/leban_my_icon_child.png


BIN
src/static/leban_my_icon_dd.png


BIN
src/static/leban_my_icon_kefu.png


BIN
src/static/leban_my_icon_yijian.png


BIN
src/static/message_icon.png


BIN
src/static/order_empty.png


BIN
src/static/swiper_pic.png


BIN
src/static/swiper_pic1.png


BIN
src/static/tabbar/tab_icon_choose.png


BIN
src/static/tabbar/tab_icon_choose_no.png


BIN
src/static/tabbar/tab_icon_kechegn_choose.png


BIN
src/static/tabbar/tab_icon_kechegn_choose_no.png


BIN
src/static/tabbar/tab_icon_my.png


BIN
src/static/tabbar/tab_icon_my_no.png


BIN
src/static/tabbar/tab_icon_mykecheng_choose1.png


BIN
src/static/tabbar/tab_icon_mykecheng_no.png


BIN
src/static/table_empty.png


BIN
src/static/title-arrow-icon.png


BIN
src/static/title-pic.png


BIN
src/static/viewer.png


+ 130 - 0
src/store/index.js

@@ -0,0 +1,130 @@
+// #ifndef VUE3
+import Vue from 'vue'
+import Vuex from 'vuex'
+Vue.use(Vuex)
+const store = new Vuex.Store({
+// #endif
+
+// #ifdef VUE3
+import { createStore } from 'vuex'
+const store = createStore({
+// #endif
+	state: {
+		hasLogin: false,
+		isUniverifyLogin: false,
+		loginProvider: "",
+		openid: null,
+		testvuex: false,
+		colorIndex: 0,
+		colorList: ['#FF0000', '#00FF00', '#0000FF'],
+		noMatchLeftWindow: true,
+		active: 'componentPage',
+		leftWinActive: '/pages/component/view/view',
+		activeOpen: '',
+		menu: [],
+		univerifyErrorMsg: ''
+	},
+	mutations: {
+		login(state, provider) {
+			state.hasLogin = true;
+			state.loginProvider = provider;
+		},
+		logout(state) {
+			state.hasLogin = false
+			state.openid = null
+		},
+		setOpenid(state, openid) {
+			state.openid = openid
+		},
+		setTestTrue(state) {
+			state.testvuex = true
+		},
+		setTestFalse(state) {
+			state.testvuex = false
+		},
+		setColorIndex(state, index) {
+			state.colorIndex = index
+		},
+		setMatchLeftWindow(state, matchLeftWindow) {
+			state.noMatchLeftWindow = !matchLeftWindow
+		},
+		setActive(state, tabPage) {
+			state.active = tabPage
+		},
+		setLeftWinActive(state, leftWinActive) {
+			state.leftWinActive = leftWinActive
+		},
+		setActiveOpen(state, activeOpen) {
+			state.activeOpen = activeOpen
+		},
+		setMenu(state, menu) {
+			state.menu = menu
+		},
+		setUniverifyLogin(state, payload) {
+			typeof payload !== 'boolean' ? payload = !!payload : '';
+			state.isUniverifyLogin = payload;
+		},
+		setUniverifyErrorMsg(state,payload = ''){
+			state.univerifyErrorMsg = payload
+		}
+	},
+	getters: {
+		currentColor(state) {
+			return state.colorList[state.colorIndex]
+		}
+	},
+	actions: {
+		// lazy loading openid
+		getUserOpenId: async function({
+			commit,
+			state
+		}) {
+			return await new Promise((resolve, reject) => {
+				if (state.openid) {
+					resolve(state.openid)
+				} else {
+					uni.login({
+						success: (data) => {
+							commit('login')
+							setTimeout(function() { //模拟异步请求服务器获取 openid
+								const openid = '123456789'
+								console.log('uni.request mock openid[' + openid + ']');
+								commit('setOpenid', openid)
+								resolve(openid)
+							}, 1000)
+						},
+						fail: (err) => {
+							console.log('uni.login 接口调用失败,将无法正常使用开放接口等服务', err)
+							reject(err)
+						}
+					})
+				}
+			})
+		},
+		getPhoneNumber: function({
+			commit
+		}, univerifyInfo) {
+			return new Promise((resolve, reject) => {
+				uni.request({
+					url: 'https://97fca9f2-41f6-449f-a35e-3f135d4c3875.bspapp.com/http/univerify-login',
+					method: 'POST',
+					data: univerifyInfo,
+					success: (res) => {
+						const data = res.data
+						if (data.success) {
+							resolve(data.phoneNumber)
+						} else {
+							reject(res)
+						}
+
+					},
+					fail: (err) => {
+						reject(res)
+					}
+				})
+			})
+		}
+	}
+})
+
+export default store

+ 0 - 0
src/test.ts


+ 1 - 4
src/uni.scss

@@ -73,7 +73,4 @@ $uni-font-size-title:40rpx;
 $uni-color-subtitle: #555555; // 二级标题颜色
 $uni-font-size-subtitle:36rpx;
 $uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:30rpx;
-
-/* uni.scss */
-@import 'uview-ui/theme.scss';
+$uni-font-size-paragraph:30rpx;

+ 5 - 0
src/utils/configmini.js

@@ -0,0 +1,5 @@
+export default {
+	// baseUrl: "https://pan.rubinchu.com/api/",
+	baseUrl: "http://192.168.0.106:8586",
+	// baseUrl: "http://114.116.114.108:8586",
+} 

+ 36 - 0
src/utils/requestmini.js

@@ -0,0 +1,36 @@
+import  config  from "./configmini.js"
+export const request = (options) => {
+	return new Promise((resolve, reject) => {
+		let token = uni.getStorageSync('Admin-Token')
+		// 在登录的时候需要储存 token uni.setStorageSync("authorization","这里是登录获取的token值")
+		uni.request({
+			url: config.baseUrl + options.url,
+			data: options.data || {},
+			method: options.method || 'GET',
+			header: options.header || {
+				// 根据实际接口设计 key 取 token 或者 authorization
+				'Authorization': 'Bearer ' + token,
+			},
+			success: (res) => {
+				// console.log(res.data); // 控制台显示数据信息
+				resolve(res.data)
+			},
+			fail: (err) => {
+				// 页面中弹框显示失败
+				uni.showToast({
+					title: '请求接口失败',
+					icon:'none'
+				})
+				// 返回错误消息
+				reject(err)
+			},
+			catch: (e) => {
+				console.log(e);
+			}
+		})
+	})
+}
+// 将对象导出外部引入使用
+export default {
+	request
+}

+ 225 - 0
src/utils/ruoyi.js

@@ -0,0 +1,225 @@
+
+
+/**
+ * 通用js方法封装处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+// 日期格式化
+export function parseTime(time, pattern) {
+  if (arguments.length === 0 || !time) {
+    return null
+  }
+  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+  let date
+  if (typeof time === 'object') {
+    date = time
+  } else {
+    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+      time = parseInt(time)
+    } else if (typeof time === 'string') {
+      time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
+    }
+    if ((typeof time === 'number') && (time.toString().length === 10)) {
+      time = time * 1000
+    }
+    date = new Date(time)
+  }
+  const formatObj = {
+    y: date.getFullYear(),
+    m: date.getMonth() + 1,
+    d: date.getDate(),
+    h: date.getHours(),
+    i: date.getMinutes(),
+    s: date.getSeconds(),
+    a: date.getDay()
+  }
+  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+    let value = formatObj[key]
+    // Note: getDay() returns 0 on Sunday
+    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
+    if (result.length > 0 && value < 10) {
+      value = '0' + value
+    }
+    return value || 0
+  })
+  return time_str
+}
+
+// 表单重置
+export function resetForm(refName) {
+  if (this.$refs[refName]) {
+    this.$refs[refName].resetFields();
+  }
+}
+
+// 添加日期范围
+export function addDateRange(params, dateRange, propName) {
+  let search = params;
+  search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
+  dateRange = Array.isArray(dateRange) ? dateRange : [];
+  if (typeof (propName) === 'undefined') {
+    search.params['beginTime'] = dateRange[0];
+    search.params['endTime'] = dateRange[1];
+  } else {
+    search.params['begin' + propName] = dateRange[0];
+    search.params['end' + propName] = dateRange[1];
+  }
+  return search;
+}
+
+// 回显数据字典 
+export function selectDictLabel(datas, value) {
+  var actions = [];
+  Object.keys(datas).some((key) => {
+    if (datas[key].value == ('' + value)) {
+      actions.push(datas[key].label);
+      return true;
+    }
+  })
+  return actions.join('');
+}
+
+// 回显数据字典(字符串数组)
+export function selectDictLabels(datas, value, separator) {
+  if(value === undefined) {
+    return "";
+  }
+  var actions = [];
+  var currentSeparator = undefined === separator ? "," : separator;
+  var temp = value.split(currentSeparator);
+  Object.keys(value.split(currentSeparator)).some((val) => {
+    Object.keys(datas).some((key) => {
+      if (datas[key].value == ('' + temp[val])) {
+        actions.push(datas[key].label + currentSeparator);
+      }
+    })
+  })
+  return actions.join('').substring(0, actions.join('').length - 1);
+}
+
+// 字符串格式化(%s )
+export function sprintf(str) {
+  var args = arguments, flag = true, i = 1;
+  str = str.replace(/%s/g, function () {
+    var arg = args[i++];
+    if (typeof arg === 'undefined') {
+      flag = false;
+      return '';
+    }
+    return arg;
+  });
+  return flag ? str : '';
+}
+
+// 转换字符串,undefined,null等转化为""
+export function parseStrEmpty(str) {
+  if (!str || str == "undefined" || str == "null") {
+    return "";
+  }
+  return str;
+}
+
+// 数据合并
+export function mergeRecursive(source, target) {
+  for (var p in target) {
+    try {
+      if (target[p].constructor == Object) {
+        source[p] = mergeRecursive(source[p], target[p]);
+      } else {
+        source[p] = target[p];
+      }
+    } catch (e) {
+      source[p] = target[p];
+    }
+  }
+  return source;
+};
+
+/**
+ * 构造树型结构数据
+ * @param {*} data 数据源
+ * @param {*} id id字段 默认 'id'
+ * @param {*} parentId 父节点字段 默认 'parentId'
+ * @param {*} children 孩子节点字段 默认 'children'
+ */
+export function handleTree(data, id, parentId, children) {
+  let config = {
+    id: id || 'id',
+    parentId: parentId || 'parentId',
+    childrenList: children || 'children'
+  };
+
+  var childrenListMap = {};
+  var nodeIds = {};
+  var tree = [];
+
+  for (let d of data) {
+    let parentId = d[config.parentId];
+    if (childrenListMap[parentId] == null) {
+      childrenListMap[parentId] = [];
+    }
+    nodeIds[d[config.id]] = d;
+    childrenListMap[parentId].push(d);
+  }
+
+  for (let d of data) {
+    let parentId = d[config.parentId];
+    if (nodeIds[parentId] == null) {
+      tree.push(d);
+    }
+  }
+
+  for (let t of tree) {
+    adaptToChildrenList(t);
+  }
+
+  function adaptToChildrenList(o) {
+    if (childrenListMap[o[config.id]] !== null) {
+      o[config.childrenList] = childrenListMap[o[config.id]];
+    }
+    if (o[config.childrenList]) {
+      for (let c of o[config.childrenList]) {
+        adaptToChildrenList(c);
+      }
+    }
+  }
+  return tree;
+}
+
+/**
+* 参数处理
+* @param {*} params  参数
+*/
+export function tansParams(params) {
+  let result = ''
+  for (const propName of Object.keys(params)) {
+    const value = params[propName];
+    var part = encodeURIComponent(propName) + "=";
+    if (value !== null && typeof (value) !== "undefined") {
+      if (typeof value === 'object') {
+        for (const key of Object.keys(value)) {
+          if (value[key] !== null && typeof (value[key]) !== 'undefined') {
+            let params = propName + '[' + key + ']';
+            var subPart = encodeURIComponent(params) + "=";
+            result += subPart + encodeURIComponent(value[key]) + "&";
+          }
+        }
+      } else {
+        result += part + encodeURIComponent(value) + "&";
+      }
+    }
+  }
+  return result
+}
+
+// 验证是否为blob格式
+export async function blobValidate(data) {
+  try {
+    const text = await data.text();
+    JSON.parse(text);
+    return false;
+  } catch (error) {
+    return true;
+  }
+}

+ 136 - 0
vue.config.js

@@ -0,0 +1,136 @@
+'use strict'
+const path = require('path')
+
+function resolve(dir) {
+  return path.join(__dirname, dir)
+}
+
+const CompressionPlugin = require('compression-webpack-plugin')
+
+const name = process.env.VUE_APP_TITLE || '原动力有限公司' // 网页标题
+
+const port = process.env.port || process.env.npm_config_port || 80 // 端口
+
+// vue.config.js 配置说明
+//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
+// 这里只列一部分,具体配置参考文档
+module.exports = {
+  // 部署生产环境和开发环境下的URL。
+  // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
+  // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
+
+  publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
+  // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
+  outputDir: 'dist',
+  // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
+  assetsDir: 'static',
+  // 是否开启eslint保存检测,有效值:ture | false | 'error'
+  lintOnSave: process.env.NODE_ENV === 'development',
+  // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
+  productionSourceMap: false,
+  // webpack-dev-server 相关配置
+  devServer: {
+    host: '0.0.0.0',
+    port: port,
+    open: true,
+    proxy: {
+      // detail: https://cli.vuejs.org/config/#devserver-proxy
+      [process.env.VUE_APP_BASE_API]: {
+        target: `http://localhost:9090`,
+        changeOrigin: true,
+        pathRewrite: {
+          ['^' + process.env.VUE_APP_BASE_API]: ''
+        }
+      }
+    },
+    disableHostCheck: true
+  },
+  css: {
+    loaderOptions: {
+      sass: {
+        sassOptions: { outputStyle: "expanded" }
+      }
+    }
+  },
+  configureWebpack: {
+    name: name,
+    resolve: {
+      alias: {
+        '@': resolve('src')
+      }
+    },
+    plugins: [
+      // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
+      new CompressionPlugin({
+        test: /\.(js|css|html)?$/i,     // 压缩文件格式
+        filename: '[path].gz[query]',   // 压缩后的文件名
+        algorithm: 'gzip',              // 使用gzip压缩
+        minRatio: 0.8                   // 压缩率小于1才会压缩
+      })
+    ],
+  },
+  chainWebpack(config) {
+    config.plugins.delete('preload') // TODO: need test
+    config.plugins.delete('prefetch') // TODO: need test
+
+    // set svg-sprite-loader
+    config.module
+      .rule('svg')
+      .exclude.add(resolve('src/assets/icons'))
+      .end()
+    config.module
+      .rule('icons')
+      .test(/\.svg$/)
+      .include.add(resolve('src/assets/icons'))
+      .end()
+      .use('svg-sprite-loader')
+      .loader('svg-sprite-loader')
+      .options({
+        symbolId: 'icon-[name]'
+      })
+      .end()
+
+    config
+      .when(process.env.NODE_ENV !== 'development',
+        config => {
+          config
+            .plugin('ScriptExtHtmlWebpackPlugin')
+            .after('html')
+            .use('script-ext-html-webpack-plugin', [{
+            // `runtime` must same as runtimeChunk name. default is `runtime`
+              inline: /runtime\..*\.js$/
+            }])
+            .end()
+          config
+            .optimization.splitChunks({
+              chunks: 'all',
+              cacheGroups: {
+                libs: {
+                  name: 'chunk-libs',
+                  test: /[\\/]node_modules[\\/]/,
+                  priority: 10,
+                  chunks: 'initial' // only package third parties that are initially dependent
+                },
+                elementUI: {
+                  name: 'chunk-elementUI', // split elementUI into a single package
+                  priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+                  test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
+                },
+                commons: {
+                  name: 'chunk-commons',
+                  test: resolve('src/components'), // can customize your rules
+                  minChunks: 3, //  minimum common number
+                  priority: 5,
+                  reuseExistingChunk: true
+                }
+              }
+            })
+          config.optimization.runtimeChunk('single'),
+          {
+             from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
+             to: './' //到根目录下
+          }
+        }
+      )
+  }
+}

BIN
原动力430平台小程序v1.0.0_需求文档.doc


BIN
原动力营销通v1.0.0_需求文档.doc


Some files were not shown because too many files changed in this diff