Browse Source

no message

Fly 2 years ago
commit
49a7c0c772
62 changed files with 1852 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 18 0
      App.vue
  3. 3 0
      README.md
  4. 40 0
      api/index.js
  5. 60 0
      common/util.js
  6. 63 0
      config/request.js
  7. 20 0
      index.html
  8. 63 0
      main.js
  9. 99 0
      manifest.json
  10. 13 0
      package-lock.json
  11. 19 0
      package.json
  12. 81 0
      pages.json
  13. 185 0
      pages/back.vue
  14. 104 0
      pages/login.vue
  15. 66 0
      pages/redirect.vue
  16. 309 0
      pages/tabbar/caseMarket.vue
  17. 151 0
      pages/tabbar/personalCenter.vue
  18. 457 0
      pages/tabbar/resultSquare.vue
  19. BIN
      static/favicon.ico
  20. BIN
      static/fileIcon/avi.png
  21. BIN
      static/fileIcon/dwg.png
  22. BIN
      static/fileIcon/excel.png
  23. BIN
      static/fileIcon/mp4.png
  24. BIN
      static/fileIcon/othenrFile.png
  25. BIN
      static/fileIcon/pdf.png
  26. BIN
      static/fileIcon/word.png
  27. 1 0
      static/hybrid_html_uni.webview.1.5.5.js
  28. BIN
      static/img/achievement.png
  29. BIN
      static/img/arrow-left.png
  30. BIN
      static/img/browse.png
  31. BIN
      static/img/collect.png
  32. BIN
      static/img/dept.png
  33. BIN
      static/img/download.png
  34. BIN
      static/img/expansion.png
  35. BIN
      static/img/img.png
  36. BIN
      static/img/list.png
  37. BIN
      static/img/loading.gif
  38. BIN
      static/img/loginBg.png
  39. BIN
      static/img/logo.png
  40. BIN
      static/img/love.png
  41. BIN
      static/img/menu1.png
  42. BIN
      static/img/mm.png
  43. BIN
      static/img/myBg.png
  44. BIN
      static/img/phone.png
  45. BIN
      static/img/preview.png
  46. BIN
      static/img/right.png
  47. BIN
      static/img/star.png
  48. BIN
      static/img/switch.png
  49. BIN
      static/img/switch_a.png
  50. BIN
      static/img/zh.png
  51. BIN
      static/loading.png
  52. BIN
      static/logo.png
  53. BIN
      static/profile.jpg
  54. BIN
      static/tabbar/caseMarket.png
  55. BIN
      static/tabbar/caseMarket_a.png
  56. BIN
      static/tabbar/personalCenter.png
  57. BIN
      static/tabbar/personalCenter_a.png
  58. BIN
      static/tabbar/resultSquare.png
  59. BIN
      static/tabbar/resultSquare_a.png
  60. 1 0
      static/uni.webview.1.5.4.js
  61. 20 0
      template.h5.html
  62. 77 0
      uni.scss

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+/node_modules
+/unpackage

+ 18 - 0
App.vue

@@ -0,0 +1,18 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch');
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*每个页面公共css */
+	@import "uview-ui/index.scss";
+</style>

+ 3 - 0
README.md

@@ -0,0 +1,3 @@
+# csadi-education-h5
+
+中南设计院教育建筑平台h5端

+ 40 - 0
api/index.js

@@ -0,0 +1,40 @@
+const http = uni.$u.http
+// 获得企业微信的授权地址
+export const getOauthUrl=(param) => http.get(`/corp/user/getOauthUrl`,{params:param})
+// 企业微信用户登陆
+export const login=(data) => http.post(`/corp/user/login`,data)
+// 分页查询成果广场
+export const resultPlazaPage=(param) => http.get(`/project/resultPlaza/page`,{params:param})
+// 查询项目分类列表
+export const projectCategoryList=(param) => http.get(`/category/projectCategory/list`,{params:param})
+// 成果广场详情
+export const resultPlazaInfo=(id) => http.get(`/project/resultPlaza/info/${id}`)
+// 查询项目阶段文件列表
+export const projectStageFilePage=(param) => http.get(`/project/projectStageFile/page`,{params:param})
+// 获取项目阶段文件详细信息
+export const projectStageFileInfo=(fileId) => http.get(`/project/projectStageFile/info/${fileId}`)
+// 查询案例市场列表
+export const caseMarketPage=(param) => http.get(`/project/caseMarket/page`,{params:param})
+// 获取数据字典
+export const dictData=(type) => http.get(`/system/dict/data/type/${type}`)
+// 例市场详情
+export const caseMarketInfo=(id) => http.get(`/project/caseMarket/info/${id}`)
+// 我的收藏--成果广场
+export const myCollectResultPage=(param) => http.get(`/collect/myCollect/result-page`,{params:param})
+// 我的收藏--案例市场
+export const myCollectCasePage=(param) => http.get(`/collect/myCollect/case-page`,{params:param})
+// 浏览记录
+export const browseDatePage=(param) => http.get(`/browse/browseDate/page`,{params:param})
+// 新增我的浏览记录
+export const myBrowseAdd=(data) => http.post(`/browse/myBrowse/add`,data)
+// 获取用户信息
+export const userInfo=(param) => http.get(`/system/user/profile`)
+// 微信登录方法
+export const corpLogin=(data) => http.post(`/corp/user/login`,data)
+// 账号登录方法
+export const accountLogin=(data) => http.post(`/login`,data)
+// 添加收藏
+export const addCollect=(data) => http.post(`/collect/myCollect/add`,data)
+// 取消收藏
+export const calCollect=(data) => http.post(`/collect/myCollect/cal`,data)
+

+ 60 - 0
common/util.js

@@ -0,0 +1,60 @@
+export default {
+	getToken() {
+		let code = this.GetQueryString('code');
+		let token = uni.getStorageSync('token');
+		if (code && !token) {
+			uni.$u.http.post('/api/official_account/wx_login', {
+				code: code
+			}).then(res => {
+				uni.setStorageSync('token', res.msg);
+			})
+		}
+	},
+	GetQueryString(name) {
+		var url = window.location.href;
+		try {
+			var cs = url.split('?')[1]; //获取?之后的参数字符串
+			var cs_arr = cs.split('&'); //参数字符串分割为数组
+			for (var i = 0; i < cs_arr.length; i++) { //遍历数组,拿到json对象
+				if (cs_arr[i].split('=')[0] == name) {
+					return cs_arr[i].split('=')[1];
+				}
+			}
+			return null;
+		} catch {
+			return null;
+		}
+	},
+	// 获取手机类型
+	getPhoneType() {
+		let phoneType="";
+		uni.getSystemInfo({
+			success:(res)=>{
+				phoneType=res.model
+			}
+		});
+		return phoneType
+	},
+	/**
+	 * 文件大小单位计算
+	 */
+	unitConversion (size) {
+	  var data = "";
+	  if (size < 0.1 * 1024) { //如果小于0.1KB转化成B
+	    data = size.toFixed(2) + "B";
+	  } else if (size < 0.1 * 1024 * 1024) {//如果小于0.1MB转化成KB
+	    data = (size / 1024).toFixed(2) + "KB";
+	  } else if (size < 0.1 * 1024 * 1024 * 1024) { //如果小于0.1GB转化成MB
+	    data = (size / (1024 * 1024)).toFixed(2) + "MB";
+	  } else { //其他转化成GB
+	    data = (size / (1024 * 1024 * 1024)).toFixed(2) + "GB";
+	  }
+	  var sizestr = data + "";
+	  var len = sizestr.indexOf("\.");
+	  var dec = sizestr.substr(len + 1, 2);
+	  if (dec == "00") {//当小数点后为00时 去掉小数部分
+	    return sizestr.substring(0, len) + sizestr.substr(len + 3, 2);
+	  }
+	  return sizestr;
+	}
+}

+ 63 - 0
config/request.js

@@ -0,0 +1,63 @@
+import util from '@/common/util.js';
+let codeList = [9000003, 9000006, 9000004, 9000005]
+// 此vm参数为页面的实例,可以通过它引用vuex中的变量
+module.exports = (vm) => {
+	// 初始化请求配置
+	uni.$u.http.setConfig((config) => {
+		/* config 为默认全局配置*/
+		// config.baseURL = 'http://192.168.0.153:8589/api'; /* 根域名 */
+		config.baseURL = 'http://119.45.192.122:1222/api/api'; /* 根域名 */
+		// config.baseURL = 'http://frp.songlanyun.com:8801/prod-api/';
+		// config.baseURL ="http://csadi.songlanyun.com/prod-api/"
+		return config
+	})
+
+	// 请求拦截
+	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
+		// 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
+		config.data = config.data || {}
+		// 根据custom参数中配置的是否需要token,添加对应的请求头
+		// if(config?.custom?.auth) {
+
+		// }
+		config.header.Authorization = 'Bearer ' + uni.getStorageSync('TOKEN')
+		return config
+	}, config => { // 可使用async await 做异步操作
+		return Promise.reject(config)
+	})
+
+	// 响应拦截
+	uni.$u.http.interceptors.response.use((response) => {
+		/* 对响应成功做点什么 可使用async await 做异步操作*/
+		const data = response.data
+		// 自定义参数
+		const custom = response.config?.custom
+		if (data.code !== 200) {
+			if(codeList.indexOf(data.code) != -1){
+				return data;
+			}
+			// 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
+			if (custom.toast !== false) {
+				uni.$u.toast(data.msg);
+				// return Promise.reject(data)
+			}
+			if (data.code == 401) {
+				uni.reLaunch({
+					url: 'pages/login'
+				});
+			}
+			// 如果需要catch返回,则进行reject
+			if (custom?.catch) {
+				return Promise.reject(data)
+			} else {
+				// 否则返回一个pending中的promise,请求不会进入catch中
+				return new Promise(() => {})
+			}
+		}
+			// return data.data === undefined ? {} : data
+			return data
+	}, (response) => {
+		// 对响应错误做点什么 (statusCode !== 200)
+		return Promise.reject(response)
+	})
+}

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      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>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 63 - 0
main.js

@@ -0,0 +1,63 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+Vue.config.productionTip = false
+App.mpType = 'app'
+
+
+import uView from "uview-ui";
+Vue.use(uView);
+
+import util from '@/common/util.js';
+
+try {
+  function isPromise(obj) {
+    return (
+      !!obj &&
+      (typeof obj === "object" || typeof obj === "function") &&
+      typeof obj.then === "function"
+    );
+  }
+
+  // 统一 vue2 API Promise 化返回格式与 vue3 保持一致
+  uni.addInterceptor({
+    returnValue(res) {
+      if (!isPromise(res)) {
+        return res;
+      }
+      return new Promise((resolve, reject) => {
+        res.then((res) => {
+          if (res[0]) {
+            reject(res[0]);
+          } else {
+            resolve(res[1]);
+          }
+        });
+      });
+    },
+  });
+} catch (error) { }
+
+// 引入请求封装,将app参数传递到配置中
+require('config/request.js')(app)
+ Vue.prototype.$http = uni.$u.http;
+  Vue.prototype.$util = util;
+
+const app = new Vue({
+  ...App
+})
+
+ 
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 99 - 0
manifest.json

@@ -0,0 +1,99 @@
+{
+    "name" : "宜格服务",
+    "appid" : "__UNI__EF3BD19",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {
+                "payment" : {}
+            }
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2",
+    // "h5" : {
+    //     "router" : {
+    //         "mode" : "hash",
+    //         "base" : "/h5/"
+    //     }
+    // },
+    "h5" : {
+        // "devServer": {
+        //   "proxy": {
+        //     "/": {
+        //       "target": "http://192.168.0.153:8589",
+        //       "changeOrigin": true,
+        //       "secure": false
+        //     }
+        //   }
+        // },
+        "template" : "template.h5.html",
+        "devServer" : {
+            "port" : "",
+            "https" : false
+        },
+        "router" : {
+            "base" : "/h5/"
+        }
+    }
+}

+ 13 - 0
package-lock.json

@@ -0,0 +1,13 @@
+{
+  "name": "baby-video-ui",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "uview-ui": {
+      "version": "2.0.36",
+      "resolved": "https://registry.npmmirror.com/uview-ui/-/uview-ui-2.0.36.tgz",
+      "integrity": "sha512-ASSZT6M8w3GTO1eFPbsgEFV0U5UujK+8pTNr+MSUbRNcRMC1u63DDTLJVeArV91kWM0bfAexK3SK9pnTqF9TtA=="
+    }
+  }
+}

+ 19 - 0
package.json

@@ -0,0 +1,19 @@
+{
+  "name": "baby-video-ui",
+  "version": "1.0.0",
+  "description": "",
+  "main": "main.js",
+  "dependencies": {
+    "uview-ui": "^2.0.36"
+  },
+  "devDependencies": {},
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "http://115.29.66.169:10080/lijiahe/baby-video-ui.git"
+  },
+  "author": "",
+  "license": "ISC"
+}

+ 81 - 0
pages.json

@@ -0,0 +1,81 @@
+{
+  "easycom": {
+    "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+  },
+  "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+    {
+      "path": "pages/login",
+      "style": {
+        "navigationBarTitleText": "登录",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/redirect",
+      "style": {
+        "navigationBarTitleText": "登录",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/tabbar/resultSquare",
+      "style": {
+        "navigationBarTitleText": "成果广场",
+        "enablePullDownRefresh": true
+      }
+    },
+    {
+      "path": "pages/tabbar/caseMarket",
+      "style": {
+        "navigationBarTitleText": "案例集市",
+        "enablePullDownRefresh": true
+      }
+    },
+    {
+      "path": "pages/tabbar/personalCenter",
+      "style": {
+        "navigationBarTitleText": "个人中心",
+        "navigationStyle": "custom"
+      }
+    },
+    {
+      "path": "pages/back",
+      "style": {
+        "navigationBarTitleText": "返回",
+        "navigationStyle": "custom"
+      }
+    }
+  ],
+  "globalStyle": {
+    "navigationBarTextStyle": "black",
+    "navigationBarTitleText": "demo",
+    "navigationBarBackgroundColor": "#ffffff",
+    "backgroundColor": "#F8F8F8"
+  },
+  "tabBar": {
+    "color": "#4D4D4D",
+    "selectedColor": "#E83A27",
+    "borderStyle": "black",
+    "backgroundColor": "#ffffff",
+    "list": [{
+        "pagePath": "pages/tabbar/resultSquare",
+        "iconPath": "static/tabbar/resultSquare.png",
+        "selectedIconPath": "static/tabbar/resultSquare_a.png",
+        "text": "成果广场"
+      },
+      {
+        "pagePath": "pages/tabbar/caseMarket",
+        "iconPath": "static/tabbar/caseMarket.png",
+        "selectedIconPath": "static/tabbar/caseMarket_a.png",
+        "text": "案例集市"
+      },
+      {
+        "pagePath": "pages/tabbar/personalCenter",
+        "iconPath": "static/tabbar/personalCenter.png",
+        "selectedIconPath": "static/tabbar/personalCenter_a.png",
+        "text": "个人中心"
+      }
+    ]
+  },
+  "uniIdRouter": {}
+}

+ 185 - 0
pages/back.vue

@@ -0,0 +1,185 @@
+<template>
+	<view class="container">
+		<view class="box"></view>
+		<view class="ibox">
+			<view class="logoBox">
+				<image src="/static/img/logo.png" mode=""></image>
+				<view>中南设计院教育建筑云平台</view>
+			</view>
+			<!-- <view class="item">
+				<view>
+					<image src="/static/img/zh.png" mode=""></image>
+					账号
+				</view>
+				<u--input placeholder="请输入账号" maxlength="11" border="none" inputAlign="right"
+					v-model="value"></u--input>
+			</view>
+			<view class="item">
+				<view>
+					<image src="/static/img/mm.png" mode=""></image>
+					密码
+				</view>
+				<u--input password placeholder="请输入密码" maxlength="11" border="none" inputAlign="right"
+					v-model="value"></u--input>
+			</view>
+			<view class="btn" @click="submit">
+				登录
+			</view> -->
+			<view class="loading">
+				<image src="/static/img/loading.gif" mode=""></image>
+				<view>登录中</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getOauthUrl,
+		corpLogin
+	} from "@/api/index.js"
+	export default {
+		data() {
+			return {
+				deviceType: "phone",
+			}
+		},
+		onLoad() {
+			this.login()
+		},
+		methods: {
+			submit() {
+				uni.$u.route({
+					type: "reLaunch",
+					url: 'pages/tabbar/resultSquare',
+				})
+			},
+			// 接收地址传参
+			getQueryString(name) {
+				var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
+				var r = window.location.search.substr(1).match(reg);
+				if (r != null) return unescape(r[2]);
+				return null;
+			},
+			login() {
+				let codeList = [9000003, 9000006, 9000004, 9000005]
+				// let code = location.href.split("?")[1].split("&")[0].split("=")[1];
+				let code=this.getQueryString('code');
+				let state=this.getQueryString('state');
+				corpLogin({
+					code: code
+				}).then(res => {
+					if (res.code == 200) {
+						uni.setStorageSync('TOKEN', res.data.token);
+						if(state=='phone'){
+							uni.reLaunch({
+								url: '/pages/tabbar/resultSquare'
+							});
+						}else{
+							// location.href='http://frp.songlanyun.com:8801/web/#/index'
+							location.href='http://csadi.songlanyun.com/index'
+							
+						}
+					} else if (codeList.indexOf(res.code) != -1) {
+						uni.$u.toast(res.msg);
+						setTimeout(()=>{
+							if(state=='phone'){
+								uni.reLaunch({
+									url: '/pages/login?loginType=account'
+								});
+							}else{
+								// location.href='http://frp.songlanyun.com:8801/web/#/index'
+								location.href='http://csadi.songlanyun.com/index'
+							}
+							// http://frp.songlanyun.com:8801/web/#/index
+						},3000)
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		width: 100vw;
+		height: 100vh;
+		overflow: hidden;
+		background: url('../static/img/loginBg.png');
+		background-size: contain;
+		position: relative;
+
+		.box {
+			width: 740rpx;
+			height: 1600rpx;
+			background-color: #fff;
+			transform: rotateZ(75deg);
+			margin: auto;
+		}
+
+		.ibox {
+			width: 100vw;
+			position: absolute;
+			top: 530rpx;
+			left: 0;
+			text-align: center;
+
+			.logoBox {
+				margin: 0 auto 40rpx;
+
+				image {
+					width: 172rpx;
+					height: 70rpx;
+					margin-bottom: 5rpx;
+				}
+
+				>view {
+					font-size: 36rpx;
+					color: #E83A27;
+					font-weight: 700;
+					letter-spacing: 3rpx;
+				}
+			}
+
+			.item {
+				width: 600rpx;
+				margin: auto;
+				display: flex;
+				align-items: center;
+				font-size: 28rpx;
+				padding: 30rpx 0;
+				border-bottom: 1rpx solid rgba(204, 204, 204, 0.6);
+
+				image {
+					width: 30rpx;
+					height: 30rpx;
+					vertical-align: middle;
+					margin-right: 5px;
+				}
+			}
+
+			.btn {
+				width: 630rpx;
+				height: 80rpx;
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				margin: 55rpx auto;
+				background: #e83a27;
+				border-radius: 40rpx;
+				box-shadow: 0rpx 10rpx 22rpx 0rpx rgba(232, 58, 39, 0.22);
+				color: #fff;
+			}
+		}
+	}
+
+	.loading {
+		// color: #e83a27;;
+		font-size: 28rpx;
+
+		image {
+			width: 300rpx;
+			height: 300rpx;
+		}
+	}
+</style>

+ 104 - 0
pages/login.vue

@@ -0,0 +1,104 @@
+<template>
+	<view class="container">
+		<u-navbar title="个人中心" @rightClick="rightClick" :autoBack="true">
+		</u-navbar>
+		<view class="box" v-if="userInfo">
+			<view class="">
+				手机号:{{userInfo.mobile}}
+			</view>
+			<view class="">
+				唯一身份标识:{{userInfo.yige_open_id}}
+			</view>
+			<view class="">
+				姓名:{{userInfo.real_name}}
+			</view>
+			<view class="">
+				身份证号:{{userInfo.identity_card}}
+			</view>
+			<view class="">
+				昵称:{{userInfo.nickname}}
+			</view>
+			<view class="">
+				头像{{userInfo.head_photo}}
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import uniWeb from '../static/uni.webview.1.5.4.js'
+	export default {
+		data() {
+			return {
+				deviceType: "phone",
+				loginType: 'account', //qywx  account,
+				form: {
+					username: "",
+					password: ""
+				},
+				yigeauth: false,
+				userInfo: null
+			}
+		},
+		onLoad(options) {
+
+			this.yigeauth = options.yigeauth === 'true' ? true : false
+			/**
+			 * 判断是否需要授权
+			 */
+			if (this.yigeauth) {
+				// 需要授权
+				this.getYigeauth()
+			} else(options.yigeopenid) {
+				// 如果已经授权,并且返回了 openid,则通过 openid 去获取用户信息
+				this.getUerByOpenId(options.yigeopenid)
+			}
+		},
+		methods: {
+			/*
+			 *
+			 * yigeauth 
+			 *
+			 */
+			getYigeauth() {
+				this.$http.get('/auth/build_auth').then(res => {
+					try {
+						uniWeb.webView.postMessage({
+							data: res.data
+						})
+					} catch (err) {
+						console.log('err==>', err)
+					}
+				})
+			},
+
+			getUerByOpenId(yigeopenid) {
+				this.$http.post('/auth/getUserByOpenId', {
+					yigeOpenId: yigeopenid
+				}).then(res => {
+					if (res.code == 200) {
+						// 获取用户信息
+						this.userInfo = res.data
+					}
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.container {
+		width: 100vw;
+		height: 100vh;
+		overflow: hidden;
+		// background: url('../static/img/loginBg.png');
+		background-size: contain;
+		position: relative;
+
+		.box {
+			padding: 30rpx;
+			padding-top: 200rpx;
+			word-break: break-all;
+		}
+	}
+</style>

+ 66 - 0
pages/redirect.vue

@@ -0,0 +1,66 @@
+<template>
+  <view class="container">
+    <view class="box" v-if="userInfo">
+      <view class="">
+        手机号:{{userInfo.mobile}}
+      </view>
+      <view class="">
+        唯一身份标识:{{userInfo.yige_open_id}}
+      </view>
+      <view class="">
+        姓名:{{userInfo.real_name}}
+      </view>
+      <view class="">
+        身份证号:{{userInfo.identity_card}}
+      </view>
+      <view class="">
+        昵称:{{userInfo.nickname}}
+      </view>
+      <view class="">
+        头像{{userInfo.head_photo}}
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+  export default {
+    data() {
+      return {
+        userInfo: null
+      }
+    },
+    onLoad(options) {
+      console.log(options, 'redirect')
+      if (options.ticket) {
+        this.getUserInfo(options)
+      }
+    },
+    methods: {
+      getUserInfo(data) {
+        this.$http.post('/auth/getUserByTicket', data).then(res => {
+          if (res.code == 200) {
+            this.userInfo = res.data
+            console.log('userInfo===>', res)
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss">
+  .container {
+    width: 100vw;
+    height: 100vh;
+    overflow: hidden;
+    background-size: contain;
+    position: relative;
+
+    .box {
+      padding: 30rpx;
+      padding-top: 200rpx;
+      word-break: break-all;
+    }
+  }
+</style>

+ 309 - 0
pages/tabbar/caseMarket.vue

@@ -0,0 +1,309 @@
+<template>
+	<view class="container">
+		<u-sticky>
+			<view class="searchBox">
+				<u-search bgColor="rgba(217,217,217,0.3)" placeholder="请输入案例名称进行搜索" :showAction="false"
+					v-model="param.caseName" @search="search()"></u-search>
+			</view>
+		</u-sticky>
+		<view class="selBox">
+			<view class="selBox_l">
+				<view @click="changeIsAsc">
+					<view>最新上传</view>
+				</view>
+				<image v-if="isAsc == 'descending'" src="/static/img/switch.png" mode=""></image>
+				<image v-else src="/static/img/switch_a.png" mode=""></image>
+			</view>
+			<view class="selBox_r" @click="show=true">
+				筛选
+				<image src="/static/img/menu1.png" mode=""></image>
+			</view>
+		</view>
+		<view class="imgList">
+			<view class="imgList_item" @click="goDetail(v)" v-for="(v,i) in list" :key="i">
+				<!-- <image :src="v.casePicture"></image> -->
+				<u--image :src="v.casePicture"  width="340rpx" height="340rpx">
+					<template v-slot:loading>
+						<image class="loading" src="../../static/loading.png" mode=""></image>
+					</template>
+				</u--image>
+				<view class="imgList_item_txt">
+					<view class="item_name">{{v.caseName}}</view>
+					<view class="item_person">上传人:{{v.createBy}}</view>
+					<view class="item_date">上传时间:{{v.createTime?v.createTime.substr(0,16):''}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="loadmoreBox">
+			<u-loadmore v-if="list.length>0" :status="status" />
+			<u-empty v-if="list.length<=0&&status==='nomore'" textSize="16" mode="list" marginTop="100">
+			</u-empty>
+		</view>
+		<u-popup :show="show" mode="bottom" round="50rpx" @close="close">
+			<view class="popupBox">
+				<view class="popupBox_title">筛选</view>
+				<view class="popupBox_del" @click="close()"><u-icon name="close" color="#999999" size="20px"></u-icon>
+				</view>
+				<view class="popupBox_list">
+					<view v-for="(v,i) in caseTypeList" :key="i" :class="{active:param.caseType==v.dictValue}"
+						@click="caseTypeChange(v)">{{v.dictLabel}}</view>
+				</view>
+				<view class="popupBox_btn">
+					<view class="popupBox_btn_cel" @click="close()">取消</view>
+					<view class="popupBox_btn_sub" @click="search()">确认</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		caseMarketPage,
+		dictData
+	} from "@/api/index.js"
+	export default {
+		data() {
+			return {
+				show: false,
+				// 加载前值为loadmore,加载中为loading,没有数据为nomore
+				status: 'loadmore',
+				param: {
+					pageNum: 1,
+					pageSize: 10,
+					caseType: null
+				},
+				list: [],
+				caseTypeList: [],
+				isAsc: 'descending'
+			}
+		},
+		onLoad() {
+			this.getList();
+			this.getDict()
+		},
+		onPullDownRefresh() {
+			this.param.pageNum = 1
+			this.getList()
+		},
+		onReachBottom() {
+			if (this.status == "loadmore") {
+				this.param.pageNum++;
+				this.getList()
+			}
+		},
+		methods: {
+			goDetail(row) {
+				uni.$u.route("pages/caseMarket/detail", {
+					caseId: row.caseId
+				})
+			},
+			close() {
+				this.param.caseType = null;
+				this.show = false;
+			},
+			caseTypeChange(row) {
+				this.param.caseType = this.param.caseType != row.dictValue ? row.dictValue : null;
+			},
+			// 搜索
+			search() {
+				this.param.pageNum = 1;
+				this.show = false;
+				this.getList()
+			},
+			getDict() {
+				dictData('case_type').then(res => {
+					this.caseTypeList = res.data
+				})
+			},
+			getList() {
+				uni.showLoading({
+					title: '加载中',
+					mask: true
+				});
+				this.status = "loading";
+				this.param.isAsc = this.isAsc
+				this.param.orderByColumn = 'createTime'
+				caseMarketPage(this.param).then(res => {
+					if (this.param.pageNum == 1) {
+						this.list = res.rows
+					} else {
+						this.list.push(...res.rows)
+					}
+					this.status = this.list.length < res.total ? "loadmore" : "nomore";
+				}).finally(e => {
+					uni.hideLoading();
+					uni.stopPullDownRefresh();
+				})
+			},
+
+			changeIsAsc() {
+				if (this.isAsc == 'descending') {
+					this.isAsc = 'ascending';
+				} else {
+					this.isAsc = 'descending';
+				}
+				this.getList();
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	.searchBox {
+		padding: 25rpx 30rpx;
+		display: flex;
+		border-bottom: 8rpx solid #EBECF0;
+
+
+		::v-deep .u-search__content__input {
+			background-color: transparent !important;
+		}
+	}
+
+	.selBox {
+		display: flex;
+		justify-content: space-between;
+		padding: 28rpx 36rpx;
+
+		.selBox_l {
+			display: flex;
+			align-items: center;
+			font-size: 26rpx;
+
+			image {
+				width: 26rpx;
+				height: 24rpx;
+				margin-left: 4rpx;
+			}
+		}
+
+		.selBox_r {
+			display: flex;
+			align-items: center;
+			font-size: 28rpx;
+
+			image {
+				width: 30rpx;
+				height: 30rpx;
+				margin-left: 4rpx;
+			}
+		}
+	}
+
+	.imgList {
+		padding: 0 28rpx;
+		display: flex;
+		flex-wrap: wrap;
+		justify-content: space-between;
+
+		.imgList_item {
+			font-size: 0;
+			width: 340rpx;
+			border-radius: 20rpx;
+			overflow: hidden;
+			margin-bottom: 30rpx;
+			background: rgb(243, 244, 246);
+			/deep/ .u-image {
+				width: 340rpx;
+				height: 340rpx;
+			}
+
+			>.imgList_item_txt {
+				background: #F2F2F2;
+				padding: 20rpx 14rpx;
+				line-height: 40rpx;
+
+				.item_name {
+					font-size: 26rpx;
+					color: #1A1A1A;
+					font-weight: 700;
+				}
+
+				.item_person,
+				.item_date {
+					font-size: 22rpx;
+					color: #808080;
+				}
+			}
+		}
+	}
+
+	.popupBox {
+		padding: 0 20rpx;
+
+		.popupBox_title {
+			font-size: 36rpx;
+			color: #1A1A1A;
+			font-weight: 700;
+			text-align: center;
+			margin-top: 45rpx;
+			margin-bottom: 65rpx;
+		}
+
+		.popupBox_del {
+			position: absolute;
+			right: 30rpx;
+			top: 40rpx;
+		}
+
+		.popupBox_list {
+			display: flex;
+			flex-wrap: wrap;
+
+			>view {
+				width: 188rpx;
+				background: #F5F5F5;
+				font-size: 24rpx;
+				color: #1A1A1A;
+				border-radius: 35rpx;
+				padding: 20rpx 0rpx;
+				margin: 0 15rpx 65rpx;
+				text-align: center;
+			}
+
+			.active {
+				background: #FFA298;
+			}
+		}
+
+		.popupBox_btn {
+			display: flex;
+			justify-content: space-between;
+			padding: 0 30rpx 60rpx;
+
+			view {
+				width: 285rpx;
+				height: 88rpx;
+				border-radius: 20rpx;
+				font-size: 32rpx;
+				text-align: center;
+				line-height: 88rpx;
+			}
+
+			.popupBox_btn_cel {
+				color: #E83A27;
+				border: 1rpx solid #e83a27;
+			}
+
+			.popupBox_btn_sub {
+				background: #E83A27;
+				color: #fff;
+			}
+		}
+	}
+
+	.loadmoreBox {
+		padding-bottom: 1rpx;
+	}
+
+	// /deep/ .u-image__loading {
+	// 	height: 180rpx !important;
+	// }
+
+	.loading {
+		width: 160rpx;
+		height: 160rpx;
+		margin-top: 40rpx;
+	}
+</style>

+ 151 - 0
pages/tabbar/personalCenter.vue

@@ -0,0 +1,151 @@
+<template>
+	<view class="container">
+		<view class="topBox">
+			<u-navbar title="个人中心" :autoBack="false" leftIcon="" titleStyle="color:#ffffff">
+			</u-navbar>
+			<view class="userInfo">
+				<image :src="userInfo.user.avatar||'/static/profile.jpg'" mode=""></image>
+				<view>{{userInfo.user.nickName}}</view>
+			</view>
+		</view>
+		<view class="list">
+			<view class="item">
+				<view class="item_l">
+					<view class="item_l_icon" style="background: #AD5825;">
+						<image src="/static/img/dept.png" mode=""></image>
+					</view>
+					<view class="item_l_title">所属部门</view>
+				</view>
+				<view class="item_r">{{userInfo.user.dept.deptName}} / {{userInfo.roleGroup}}</view>
+			</view>
+			<view class="item">
+				<view class="item_l">
+					<view class="item_l_icon" style="background: #FF9D34;">
+						<image src="/static/img/phone.png" mode=""></image>
+					</view>
+					<view class="item_l_title">手机号</view>
+				</view>
+				<view class="item_r">{{userInfo.user.phonenumber}}</view>
+			</view>
+			<view class="item" @click="goDetail('pages/personalCenter/myFavorite')">
+				<view class="item_l">
+					<view class="item_l_icon" style="background: #E67B00;">
+						<image src="/static/img/collect.png" mode=""></image>
+					</view>
+					<view class="item_l_title">我的收藏</view>
+				</view>
+				<view class="item_r"></view>
+			</view>
+			<view class="item" @click="goDetail('pages/personalCenter/trail')">
+				<view class="item_l">
+					<view class="item_l_icon" style="background: #E67300;">
+						<image src="/static/img/browse.png" mode=""></image>
+					</view>
+					<view class="item_l_title">浏览记录</view>
+				</view>
+				<view class="item_r"></view>
+			</view>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		userInfo
+	} from "@/api/index.js"
+	export default {
+		data() {
+			return {
+				userInfo:{
+					user:{
+						dept:{}
+					}
+				}
+			}
+		},
+		onShow(){
+			this.getUserInfo()
+		},
+		methods: {
+			goDetail(path) {
+				uni.$u.route(path)
+			},
+			getUserInfo(){
+				userInfo().then(res=>{
+					this.userInfo=res.data
+				})
+			}
+		}
+
+	}
+</script>
+
+<style lang="scss">
+	.topBox {
+		width: 100vw;
+		height: 430rpx;
+		background: linear-gradient(103deg, #e83a27, #a42517 86%);
+
+		.userInfo {
+			text-align: center;
+			color: #FFFFFF;
+			margin-top: 110rpx;
+
+			image {
+				width: 126rpx;
+				height: 126rpx;
+				border-radius: 50%;
+			}
+		}
+	}
+
+	/deep/ .u-navbar__content {
+		background: transparent !important;
+	}
+
+	.list {
+		min-height: 50vh;
+		background: url('../../static/img/myBg.png');
+		background-size: cover;
+		position: relative;
+		top: -50rpx;
+		padding: 100rpx 60rpx 0;
+
+		.item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding: 20rpx 0;
+			border-bottom: 1rpx solid rgba(230, 230, 230, 0.6);
+
+			.item_l {
+				display: flex;
+				align-items: center;
+				font-size: 28rpx;
+				color: #1A1A1A;
+
+				.item_l_icon {
+					width: 57rpx;
+					height: 57rpx;
+					border-radius: 50%;
+					text-align: center;
+					line-height: 70rpx;
+					margin-right: 25rpx;
+
+					image {
+						width: 36rpx;
+						height: 36rpx;
+					}
+				}
+
+				.item_l_title {}
+			}
+
+			.item_r {
+				font-size: 28rpx;
+				color: #808080;
+			}
+		}
+	}
+</style>

+ 457 - 0
pages/tabbar/resultSquare.vue

@@ -0,0 +1,457 @@
+<template>
+	<view class="container">
+		<u-sticky>
+			<view class="searchBox">
+				<u-search bgColor="rgba(217,217,217,0.3)" placeholder="请输入关键字" :showAction="false"
+					v-model="param.keywords" @search="search"></u-search>
+				<view class="menu" @click="listModeChange()">
+					<image v-if="listMode=='list'" src="/static/img/list.png" mode=""></image>
+					<image v-if="listMode=='img'" style="width:40rpx;height:34rpx" src="/static/img/img.png" mode="">
+					</image>
+					{{listMode=='img'?'图片展示':'列表展示'}}
+				</view>
+			</view>
+		</u-sticky>
+		<view class="selBox">
+			<view class="selBox_l">
+				<view @click="sortShow=true">
+					<view>{{sortValue2 ? sortValue2 : '建成年份先后'}}</view>
+					<u-icon name="arrow-down"></u-icon>
+				</view>
+				<image v-if="param.sortType==1" @click="sortTypeChange(2)" src="/static/img/switch.png" mode=""></image>
+				<image v-if="param.sortType==2" @click="sortTypeChange(1)" src="/static/img/switch_a.png" mode="">
+				</image>
+			</view>
+			<view class="selBox_r" @click="typeShow=true">
+				筛选
+				<image src="/static/img/menu1.png" mode=""></image>
+			</view>
+		</view>
+
+		<view class="imgList" v-if="listMode=='img'">
+			<view v-for="(v,i) in list" :key="i">
+				<view class="imgList_item" @click="goDetail(v)">
+					<u--image :src="v.projectListPicture" width="340rpx" height="auto" mode="widthFix">
+						<template v-slot:loading>
+							<image class="loading" src="../../static/loading.png" mode=""></image>
+						</template>
+					</u--image>
+					<view class="imgList_item_txt">{{v.projectName}}/{{v.projectTeam}}</view>
+				</view>
+			</view>
+		</view>
+		<view class="list" v-if="listMode=='list'">
+			<view class="list_item" v-for="(v,i) in list" @click="goDetail(v)">
+				<view class="list_item_l">
+					<view class="list_item_l_title">{{v.projectName}}</view>
+					<view>
+						<view>建成年份:{{v.stageFinishDate||"—"}} </view>
+						<view class="ml10">设计年份:{{v.stageDesignDate||"—"}} </view>
+					</view>
+					<view>
+						<view>占地面积:{{v.stageLandArea||"—"}}㎡ </view>
+						<view class="ml10">建筑面积:{{v.stageBuildArea||"—"}} </view>
+					</view>
+				</view>
+				<view class="list_item_r">
+					<image src="/static/img/right.png" mode=""></image>
+				</view>
+			</view>
+		</view>
+		<view class="loadmoreBox">
+			<u-loadmore v-if="list.length>0" :status="status" />
+			<u-empty v-if="list.length<=0&&status==='nomore'" textSize="16" mode="list" marginTop="100">
+			</u-empty>
+		</view>
+		<u-popup :show="typeShow" mode="bottom" round="50rpx" @close="typeClose">
+			<view class="popupBox">
+				<view class="popupBox_title">筛选</view>
+				<view class="popupBox_del" @click="typeClose"><u-icon name="close" color="#999999" size="20px"></u-icon>
+				</view>
+				<view class="popupBox_list">
+					<view v-for="(v,i) in typeList" v-if="v.projectCategoryStatus" :key="i"
+						:class="{active:param.projectTypeId==v.projectCategoryId}" @click="projectTypeIdChange(v)">
+						{{v.projectCategoryName}}</view>
+				</view>
+				<view class="popupBox_btn">
+					<view class="popupBox_btn_cel" @click="typeClose">取消</view>
+					<view class="popupBox_btn_sub" @click="search()">确认</view>
+				</view>
+			</view>
+		</u-popup>
+
+		<u-popup :show="sortShow" mode="bottom" round="50rpx" @close="sortClose">
+			<view class="popupBox">
+				<view class="popupBox_title">年份类型</view>
+				<view class="popupBox_del" @click="sortClose"><u-icon name="close" color="#999999" size="20px"></u-icon>
+				</view>
+				<view class="popupBox_list">
+					<view class="sortPad" v-for="(v,i) in sortFieArr" :key="i"
+						:class="{active:param.sortField==v.value}" @click="sortFieChange(v)">{{v.label}}</view>
+				</view>
+				<view class="popupBox_btn">
+					<view class="popupBox_btn_cel" @click="sortClose">取消</view>
+					<view class="popupBox_btn_sub" @click="search()">确认</view>
+				</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		login,
+		resultPlazaPage,
+		projectCategoryList
+	} from "@/api/index.js"
+	export default {
+		data() {
+			return {
+				listMode: "img",
+				typeShow: false,
+				// 加载前值为loadmore,加载中为loading,没有数据为nomore
+				status: 'loadmore',
+				param: {
+					pageNum: 1,
+					pageSize: 10,
+					sortType: 1,
+					projectTypeId: null,
+					sortField: null
+				},
+				list: [],
+				typeList: [],
+				sortFieArr: [{
+						label: "建成年份",
+						value: 1
+					},
+					{
+						label: "设计年份",
+						value: 2
+					},
+					{
+						label: "用地面积",
+						value: 3
+					},
+					{
+						label: "建筑面积",
+						value: 4
+					}
+				],
+				sortShow: false,
+				sortValue: '',
+				sortValue2: '',
+			}
+		},
+		onLoad() {},
+		onPullDownRefresh() {
+			this.param.pageNum = 1
+			this.getList()
+		},
+		onReachBottom() {
+			if (this.status == "loadmore") {
+				this.param.pageNum++;
+				this.getList()
+			}
+		},
+		onLoad() {
+			this.getList();
+			this.getTypeList()
+		},
+		methods: {
+			// 切换显示状态
+			listModeChange() {
+				this.listMode = this.listMode == 'list' ? 'img' : 'list'
+			},
+			// 搜索
+			search() {
+				this.sortValue2 = this.sortValue;
+				this.param.pageNum = 1
+				this.sortShow = false;
+				this.typeShow = false;
+				this.getList()
+			},
+			typeClose() {
+				this.typeShow = false;
+				this.param.projectTypeId = null;
+				// this.search()
+			},
+			sortClose() {
+				this.sortShow = false;
+				this.param.sortField = null;
+				// this.search()
+			},
+			sortTypeChange(sortType) {
+				this.param.sortType = sortType;
+				this.search()
+			},
+			projectTypeIdChange(row) {
+				this.param.projectTypeId = this.param.projectTypeId !== row.projectCategoryId ? row.projectCategoryId :
+					null;
+			},
+			sortFieChange(row) {
+				this.sortValue = row.label;
+				this.param.sortField = this.param.sortField !== row.value ? row.value : null;
+			},
+			//获取筛选的类型
+			getTypeList() {
+				projectCategoryList().then(res => {
+					this.typeList = res.data
+				})
+			},
+			goDetail(row) {
+				uni.$u.route("pages/resultSquare/detail", {
+					stageId: row.stageId
+				})
+			},
+			getList() {
+				uni.showLoading({
+					title: '加载中'
+				});
+				this.status = "loading";
+				resultPlazaPage(this.param).then(res => {
+					if (this.param.pageNum == 1) {
+						this.list = res.rows
+					} else {
+						this.list.push(...res.rows)
+					}
+					this.status = this.list.length < res.total ? "loadmore" : "nomore";
+				}).finally(e => {
+					uni.hideLoading();
+					uni.stopPullDownRefresh();
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.searchBox {
+		padding: 25rpx 30rpx;
+		display: flex;
+		border-bottom: 8rpx solid #EBECF0;
+		background: #fff;
+
+		.menu {
+			display: flex;
+			align-items: center;
+			font-size: 28rpx;
+			color: #1A1A1A;
+			margin-left: 30rpx;
+
+			image {
+				width: 31rpx;
+				height: 27rpx;
+				margin-right: 10rpx;
+				margin-top: 5rpx;
+
+			}
+		}
+
+		::v-deep .u-search__content__input {
+			background-color: transparent !important;
+		}
+	}
+
+	.selBox {
+		display: flex;
+		justify-content: space-between;
+		padding: 28rpx;
+
+		.selBox_l {
+			display: flex;
+			align-items: center;
+
+			>view {
+				width: 252rpx;
+				height: 70rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 0 15rpx;
+				box-sizing: border-box;
+				font-size: 26rpx;
+				color: #D9D9D9;
+				background: #ffffff;
+				border: 1rpx solid #cccccc;
+				border-radius: 8rpx;
+			}
+
+			image {
+				width: 32rpx;
+				height: 36rpx;
+				margin-left: 4rpx;
+			}
+		}
+
+		.selBox_r {
+			display: flex;
+			align-items: center;
+			font-size: 28rpx;
+
+			image {
+				width: 30rpx;
+				height: 30rpx;
+				margin-left: 4rpx;
+			}
+		}
+	}
+
+	.imgList {
+		padding: 0 28rpx;
+		// display: flex;
+		column-count: 2;
+		/* 定义列数为3:将图片分为3列 */
+		column-gap: 20rpx;
+		// column-width:320rpx;
+		-webkit-column-fill: auto;
+		>view {
+			-webkit-column-break-inside: avoid;
+			/* Chrome, Safari, Opera */
+			page-break-inside: avoid;
+			/* Firefox */
+			break-inside: avoid;
+			// -webkit-overflow-scrolling : touch;
+		}
+
+		/* IE 10+, Chrome, Safari, Opera */
+		.imgList_item {
+			font-size: 0;
+			width: 340rpx;
+			border-radius: 20rpx;
+			overflow: hidden;
+			padding-bottom: 30rpx;
+			/deep/ .u-image {
+				min-height: 160rpx;
+			}
+
+			>.imgList_item_txt {
+				font-size: 26rpx;
+				color: #1A1A1A;
+				background: #F2F2F2;
+				padding: 16rpx 20rpx;
+				line-height: 36rpx;
+				font-weight: 700;
+				border-radius:0 0 20rpx 20rpx;
+				
+			}
+		}
+	}
+
+	.list {
+		padding: 0rpx 28rpx 0;
+
+		.list_item {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding-bottom: 16rpx;
+			border-bottom: 1rpx solid #E6E6E6;
+			margin-bottom: 30rpx;
+
+			.list_item_l {
+				font-size: 24rpx;
+				color: #808080;
+
+				.list_item_l_title {
+					font-size: 28rpx;
+					color: #1A1A1A;
+					font-weight: 500;
+				}
+
+				>view {
+					display: flex;
+					margin-bottom: 20rpx;
+				}
+			}
+
+			.list_item_r {
+				image {
+					width: 19rpx;
+					height: 36rpx;
+				}
+			}
+		}
+	}
+
+	.popupBox {
+		padding: 0 20rpx;
+		position: relative;
+
+		.popupBox_title {
+			font-size: 36rpx;
+			color: #1A1A1A;
+			font-weight: 700;
+			text-align: center;
+			margin-top: 45rpx;
+			margin-bottom: 65rpx;
+		}
+
+		.popupBox_del {
+			position: absolute;
+			right: 30rpx;
+			top: 40rpx;
+		}
+
+		.popupBox_list {
+			display: flex;
+			flex-wrap: wrap;
+
+			>view {
+				background: #F5F5F5;
+				font-size: 24rpx;
+				color: #1A1A1A;
+				border-radius: 35rpx;
+				padding: 20rpx 70rpx;
+				margin: 0 15rpx 65rpx;
+			}
+
+			.active {
+				background: #FFA298;
+			}
+		}
+
+		.popupBox_btn {
+			display: flex;
+			justify-content: space-between;
+			padding: 0 30rpx 60rpx;
+
+			view {
+				width: 285rpx;
+				height: 88rpx;
+				border-radius: 20rpx;
+				font-size: 32rpx;
+				text-align: center;
+				line-height: 88rpx;
+			}
+
+			.popupBox_btn_cel {
+				color: #E83A27;
+				border: 1rpx solid #e83a27;
+			}
+
+			.popupBox_btn_sub {
+				background: #E83A27;
+				color: #fff;
+			}
+		}
+	}
+
+	.loadmoreBox {
+		padding-bottom: 1rpx;
+	}
+
+	.sortPad {
+		padding: 20rpx 56rpx !important;
+	}
+
+	.ml10 {
+		margin-left: 10rpx;
+	}
+	/deep/ .u-image__loading{
+		height: 180rpx !important;
+	}
+	.loading{
+		width: 160rpx;
+		height: 160rpx;
+	}
+</style>

BIN
static/favicon.ico


BIN
static/fileIcon/avi.png


BIN
static/fileIcon/dwg.png


BIN
static/fileIcon/excel.png


BIN
static/fileIcon/mp4.png


BIN
static/fileIcon/othenrFile.png


BIN
static/fileIcon/pdf.png


BIN
static/fileIcon/word.png


File diff suppressed because it is too large
+ 1 - 0
static/hybrid_html_uni.webview.1.5.5.js


BIN
static/img/achievement.png


BIN
static/img/arrow-left.png


BIN
static/img/browse.png


BIN
static/img/collect.png


BIN
static/img/dept.png


BIN
static/img/download.png


BIN
static/img/expansion.png


BIN
static/img/img.png


BIN
static/img/list.png


BIN
static/img/loading.gif


BIN
static/img/loginBg.png


BIN
static/img/logo.png


BIN
static/img/love.png


BIN
static/img/menu1.png


BIN
static/img/mm.png


BIN
static/img/myBg.png


BIN
static/img/phone.png


BIN
static/img/preview.png


BIN
static/img/right.png


BIN
static/img/star.png


BIN
static/img/switch.png


BIN
static/img/switch_a.png


BIN
static/img/zh.png


BIN
static/loading.png


BIN
static/logo.png


BIN
static/profile.jpg


BIN
static/tabbar/caseMarket.png


BIN
static/tabbar/caseMarket_a.png


BIN
static/tabbar/personalCenter.png


BIN
static/tabbar/personalCenter_a.png


BIN
static/tabbar/resultSquare.png


BIN
static/tabbar/resultSquare_a.png


File diff suppressed because it is too large
+ 1 - 0
static/uni.webview.1.5.4.js


+ 20 - 0
template.h5.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <link rel="icon" href="<%= BASE_URL %>static/favicon.ico"> <!-- 这个是新增的 -->
+        <title><%= htmlWebpackPlugin.options.title %></title>
+        <script>
+            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>
+        <link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
+    </head>
+    <body>
+        <noscript>
+            <strong>Please enable JavaScript to continue.</strong>
+        </noscript>
+        <div id="app"></div>
+    </body>
+</html>

+ 77 - 0
uni.scss

@@ -0,0 +1,77 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+@import 'uview-ui/theme.scss';
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;