dedsudiyu 4 ay önce
işleme
a2ccc7dffc
36 değiştirilmiş dosya ile 1265 ekleme ve 0 silme
  1. 21 0
      App.vue
  2. 18 0
      api/index.js
  3. 29 0
      api/request/config.js
  4. 450 0
      api/request/request.js
  5. 21 0
      api/request/util.js
  6. 20 0
      index.html
  7. 22 0
      main.js
  8. 78 0
      manifest.json
  9. 19 0
      pages.json
  10. 157 0
      pages/home/index.vue
  11. 327 0
      pages/home/infoBoard.vue
  12. BIN
      static/346@1x.png
  13. BIN
      static/icon_06.png
  14. BIN
      static/icon_06_1.png
  15. BIN
      static/icon_aqxxp_dh.png
  16. BIN
      static/icon_sys_aqxxp@1x.png
  17. BIN
      static/icon_sys_jcjl@1x.png
  18. BIN
      static/icon_sys_jckz@1x.png
  19. BIN
      static/img_xyzc_bg@1x.png
  20. 13 0
      uni.promisify.adaptor.js
  21. 76 0
      uni.scss
  22. 0 0
      unpackage/dist/build/.automator/h5/.automator.json
  23. BIN
      unpackage/dist/build/web/H5.zip
  24. 2 0
      unpackage/dist/build/web/index.html
  25. BIN
      unpackage/dist/build/web/static/346@1x.png
  26. BIN
      unpackage/dist/build/web/static/icon_06.png
  27. BIN
      unpackage/dist/build/web/static/icon_06_1.png
  28. BIN
      unpackage/dist/build/web/static/icon_aqxxp_dh.png
  29. BIN
      unpackage/dist/build/web/static/icon_sys_aqxxp@1x.png
  30. BIN
      unpackage/dist/build/web/static/icon_sys_jcjl@1x.png
  31. BIN
      unpackage/dist/build/web/static/icon_sys_jckz@1x.png
  32. BIN
      unpackage/dist/build/web/static/img_xyzc_bg@1x.png
  33. 1 0
      unpackage/dist/build/web/static/index.2da1efab.css
  34. 7 0
      unpackage/dist/build/web/static/js/chunk-vendors.93c9d863.js
  35. 1 0
      unpackage/dist/build/web/static/js/index.120db519.js
  36. 3 0
      unpackage/dist/build/web/static/js/pages-home-index.e61de480.js

+ 21 - 0
App.vue

@@ -0,0 +1,21 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+	page {
+		height: 100%;
+		width: 100%;
+	}
+</style>

+ 18 - 0
api/index.js

@@ -0,0 +1,18 @@
+import { apiResquest,apiResquestForm,apiResquestJsonList,apiResquestFormVideo,apiResquestTimer } from '@/api/request/request.js'
+
+//获取开发配置
+export const systemConfigInfoGetConfigByType = (data) => {
+	return apiResquest({
+		url: `/system/config/info/getConfigByType`,
+		method: 'POST',
+		data: { ...data }
+	})
+};
+//查询实验室信息
+export const laboratoryAppletGetSubDetailNoAuth = (data) => {
+	return apiResquest({
+		url: `/laboratory/applet/getSubDetailNoAuth`,
+		method: 'GET',
+		data: data,
+	})
+};

+ 29 - 0
api/request/config.js

@@ -0,0 +1,29 @@
+const config = {
+	base_url: 'http://192.168.1.43/api', //43服务器
+	// base_url: 'http://192.168.1.8/api',//1.8服务器
+	// base_url: 'http://192.168.1.9:8080',//柴
+	// base_url: 'http://192.168.1.24:8080',//林总
+	// base_url: 'http://192.168.1.7:8080',//刘波
+	// base_url: 'http://192.168.1.17:8080',//小飞
+	// base_url: 'http://192.168.1.43/api',//小飞
+	// base_url: 'http://192.168.1.20:8080',//志伟
+	// base_url: 'http://192.168.1.39:8080',//高升
+	// base_url: 'http://192.168.1.29:8080',//何成
+	// base_url: 'https://demo.zjznai.com/xzgd/',
+	// base_url: 'https://lab.zjznai.com/labNhSystem/',//43服务器高升测试
+	// base_url: 'https://lab.zjznai.com/labTest/',//1.8外网
+	// base_url: 'https://lab.zjznai.com/labAppTest/',//43服务器线上
+	// base_url: 'https://lab.zjznai.com/appTest/',//88服务器线上
+	// base_url: 'https://lab.zjznai.com/labSystem/', //矿大地址
+	// base_url: 'https://lab.zjznai.com/jdlabSystem/', //交大地址
+	// base_url: 'https://lab.zjznai.com/jndxlabSystem/', //暨大地址
+	// base_url: 'https://lab.zjznai.com/api/', //暨大化材
+	// base_url: 'https://lab.zjznai.com/kdwclabSystem/', //矿大文昌地址
+	// base_url: 'https://znyj.zjznai.suda.edu.cn/labSystem/', //苏大临时地址
+	 // base_url: 'https://labcontrol.nwafu.edu.cn/api/', //西北农林
+	// base_url: 'http://172.16.0.65/api/', //西北农林
+	//base_url: 'https://lab.zjznai.com/labapp/', //43测试
+}
+export {
+	config
+}

+ 450 - 0
api/request/request.js

@@ -0,0 +1,450 @@
+import {
+	config
+} from './config.js'
+import {
+	tansParams
+} from "./util.js";
+
+export const apiResquest = (prams) => {
+	return new Promise((resolve, reject) => {
+		let url = config.base_url + prams.url;
+		uni.showLoading({
+			title: '加载中',
+			mask: true
+		});
+		// get请求映射params参数
+		if (prams.method === 'GET' && prams.data) {
+			url = url + '?' + tansParams(prams.data);
+			url = url.slice(0, -1);
+			prams.data = {};
+		}
+
+		return uni.request({
+			url: url,
+			data: {
+				...prams.data
+			},
+			method: prams.method,
+			header: {
+				'content-type': 'application/json;charset=utf-8',
+				// 'Authorization': uni.getStorageSync('token')
+				// 'Authorization': 'dbe91a38-a310-4c10-8d29-3e025e80bbb3'
+			},
+			success: (res) => {
+				// 成功
+				uni.hideLoading()
+				if (res.statusCode == 200) {
+					if (res.data.code == 200) {
+						resolve(res);
+					} else if (res.data.code == 401) {
+						loginTimeout();
+					} else {
+						uni.showToast({
+							mask: true,
+							icon: "none",
+							position: "center",
+							title: res.data.message,
+							duration: 2000
+						});
+						resolve(res);
+					}
+				} else if (res.statusCode == 401) {
+					loginTimeout();
+				} else {
+					uni.showToast({
+						mask: true,
+						icon: "none",
+						position: "center",
+						title: '连接异常,请联系管理员.',
+						duration: 2000
+					});
+					resolve(res);
+				}
+			},
+			fail: (err) => {
+				// 失败
+				uni.hideLoading()
+				uni.showToast({
+					mask: true,
+					icon: "none",
+					position: "center",
+					title: '出错啦~请联系管理员!',
+					duration: 2000
+				});
+			},
+			complete: () => {
+				// 完成
+			}
+		});
+	})
+}
+
+export const apiResquestOutside = (prams) => {
+	return new Promise((resolve, reject) => {
+		let url =  prams.url;
+		uni.showLoading({
+			title: '加载中',
+			mask: true
+		});
+		// get请求映射params参数
+		if (prams.method === 'GET' && prams.data) {
+			url = url + '?' + tansParams(prams.data);
+			url = url.slice(0, -1);
+			prams.data = {};
+		}
+
+		return uni.request({
+			url: url,
+			data: {
+				...prams.data
+			},
+			method: prams.method,
+			header: {
+				'content-type': 'application/json;charset=utf-8',
+				'Authorization': uni.getStorageSync('token')
+			},
+			success: (res) => {
+				// 成功
+				uni.hideLoading()
+				if (res.statusCode == 200) {
+					if (res.data.code == 200) {
+						resolve(res);
+					} else if (res.data.code == 401) {
+						loginTimeout();
+					} else {
+						uni.showToast({
+							mask: true,
+							icon: "none",
+							position: "center",
+							title: res.data.message,
+							duration: 2000
+						});
+						resolve(res);
+					}
+				} else if (res.statusCode == 401) {
+					loginTimeout();
+				} else {
+					uni.showToast({
+						mask: true,
+						icon: "none",
+						position: "center",
+						title: '连接异常,请联系管理员.',
+						duration: 2000
+					});
+					resolve(res);
+				}
+			},
+			fail: (err) => {
+				// 失败
+				uni.hideLoading()
+				uni.showToast({
+					mask: true,
+					icon: "none",
+					position: "center",
+					title: '出错啦~请联系管理员!',
+					duration: 2000
+				});
+			},
+			complete: () => {
+				// 完成
+			}
+		});
+	})
+}
+export const apiResquestForm = (prams) => {
+	return new Promise((resolve, reject) => {
+		let url = config.base_url + prams.url;
+		uni.showLoading({
+			title: '加载中',
+			mask: true
+		});
+		// get请求映射params参数
+		if (prams.method === 'GET' && prams.data) {
+			url = url + '?' + tansParams(prams.data);
+			url = url.slice(0, -1);
+			prams.data = {};
+		}
+		return uni.request({
+			url: url,
+			data: {
+				...prams.data
+			},
+			method: prams.method,
+			header: {
+				'content-type': 'application/x-www-form-urlencoded',
+				'Authorization': uni.getStorageSync('token')
+			},
+			success: (res) => {
+				// 成功
+				uni.hideLoading()
+				if (res.statusCode == 200) {
+					if (res.data.code == 200) {
+						resolve(res);
+					} else if (res.data.code == 401) {
+						loginTimeout();
+					} else {
+						uni.showToast({
+							mask: true,
+							icon: "none",
+							position: "center",
+							title: res.data.message,
+							duration: 2000
+						});
+						resolve(res);
+					}
+				} else if (res.statusCode == 401) {
+					loginTimeout();
+				} else {
+					uni.showToast({
+						mask: true,
+						icon: "none",
+						position: "center",
+						title: '连接异常,请联系管理员.',
+						duration: 2000
+					});
+					resolve(res);
+				}
+			},
+			fail: (err) => {
+				// 失败
+				uni.hideLoading()
+				uni.showToast({
+					mask: true,
+					icon: "none",
+					position: "center",
+					title: '出错啦~请联系管理员!',
+					duration: 2000
+				});
+			},
+			complete: () => {
+				// 完成
+			}
+		});
+	})
+}
+export const apiResquestJsonList = (prams) => {
+	return new Promise((resolve, reject) => {
+		let url = config.base_url + prams.url;
+		uni.showLoading({
+			title: '加载中',
+			mask: true
+		});
+		// get请求映射params参数
+		if (prams.method === 'GET' && prams.data) {
+			url = url + '?' + tansParams(prams.data);
+			url = url.slice(0, -1);
+			prams.data = {};
+		}
+		return uni.request({
+			url: url,
+			data: prams.data,
+			method: prams.method,
+			header: {
+				'content-type': 'application/json',
+				'Authorization': uni.getStorageSync('token')
+			},
+			success: (res) => {
+				// 成功
+				uni.hideLoading()
+				if (res.statusCode == 200) {
+					if (res.data.code == 200) {
+						resolve(res);
+					} else if (res.data.code == 401) {
+						loginTimeout();
+					} else {
+						uni.showToast({
+							mask: true,
+							icon: "none",
+							position: "center",
+							title: res.data.message,
+							duration: 2000
+						});
+						resolve(res);
+					}
+				} else if (res.statusCode == 401) {
+					loginTimeout();
+				} else {
+					uni.showToast({
+						mask: true,
+						icon: "none",
+						position: "center",
+						title: '连接异常,请联系管理员.',
+						duration: 2000
+					});
+					resolve(res);
+				}
+			},
+			fail: (err) => {
+				// 失败
+				uni.hideLoading()
+				uni.showToast({
+					mask: true,
+					icon: "none",
+					position: "center",
+					title: '出错啦~请联系管理员!',
+					duration: 2000
+				});
+			},
+			complete: () => {
+				// 完成
+			}
+		});
+	})
+}
+export const apiResquestFormVideo = (prams) => {
+	return new Promise((resolve, reject) => {
+		let url = uni.getStorageSync('cameraExtranetAgent') + prams.url;
+		uni.showLoading({
+			title: '加载中',
+			mask: true
+		});
+		// get请求映射params参数
+		if (prams.method === 'GET' && prams.data) {
+			url = url + '?' + tansParams(prams.data);
+			url = url.slice(0, -1);
+			prams.data = {};
+		}
+		return uni.request({
+			url: url,
+			data: {
+				...prams.data
+			},
+			method: prams.method,
+			header: {
+				'content-type': 'application/x-www-form-urlencoded',
+				'Authorization': uni.getStorageSync('token')
+			},
+			success: (res) => {
+				// 成功
+				uni.hideLoading()
+				if (res.statusCode == 200) {
+					if (res.data.code == 200) {
+						resolve(res);
+					} else if (res.data.code == 401) {
+						loginTimeout();
+					} else {
+						uni.showToast({
+							mask: true,
+							icon: "none",
+							position: "center",
+							title: res.data.message,
+							duration: 2000
+						});
+						resolve(res);
+					}
+				} else if (res.statusCode == 401) {
+					loginTimeout();
+				} else {
+					uni.showToast({
+						mask: true,
+						icon: "none",
+						position: "center",
+						title: '连接异常,请联系管理员.',
+						duration: 2000
+					});
+					resolve(res);
+				}
+			},
+			fail: (err) => {
+				// 失败
+				uni.hideLoading()
+				uni.showToast({
+					mask: true,
+					icon: "none",
+					position: "center",
+					title: '出错啦~请联系管理员!',
+					duration: 2000
+				});
+			},
+			complete: () => {
+				// 完成
+			}
+		});
+	})
+}
+export const apiResquestTimer = (prams) => {
+	return new Promise((resolve, reject) => {
+		let url = config.base_url + prams.url;
+		// get请求映射params参数
+		if (prams.method === 'GET' && prams.data) {
+			url = url + '?' + tansParams(prams.data);
+			url = url.slice(0, -1);
+			prams.data = {};
+		}
+
+		return uni.request({
+			url: url,
+			data: {
+				...prams.data
+			},
+			method: prams.method,
+			header: {
+				'content-type': 'application/json;charset=utf-8',
+				'Authorization': uni.getStorageSync('token')
+			},
+			success: (res) => {
+				// 成功
+				uni.hideLoading()
+				if (res.statusCode == 200) {
+					if (res.data.code == 200) {
+						resolve(res);
+					} else if (res.data.code == 401) {
+						loginTimeout();
+					} else {
+						uni.showToast({
+							mask: true,
+							icon: "none",
+							position: "center",
+							title: res.data.message,
+							duration: 2000
+						});
+						resolve(res);
+					}
+				} else if (res.statusCode == 401) {
+					loginTimeout();
+				} else {
+					uni.showToast({
+						mask: true,
+						icon: "none",
+						position: "center",
+						title: '连接异常,请联系管理员.',
+						duration: 2000
+					});
+					resolve(res);
+				}
+			},
+			fail: (err) => {
+				// 失败
+				uni.hideLoading()
+				uni.showToast({
+					mask: true,
+					icon: "none",
+					position: "center",
+					title: '出错啦~请联系管理员!',
+					duration: 2000
+				});
+			},
+			complete: () => {
+				// 完成
+			}
+		});
+	})
+}
+//登录超时-退出至登录页面
+export function loginTimeout(params) {
+	uni.showToast({
+		mask: true,
+		icon: "none",
+		position: "center",
+		title: "登录超时,请重新登录~",
+		duration: 2000
+	});
+	uni.removeStorageSync('token');
+	uni.removeStorageSync('userId');
+	uni.removeStorageSync('userType');
+	setTimeout(function() {
+		uni.redirectTo({
+			url: '/pages/views/login/login',
+		});
+	}, 2000);
+}

+ 21 - 0
api/request/util.js

@@ -0,0 +1,21 @@
+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
+}

+ 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>

+ 22 - 0
main.js

@@ -0,0 +1,22 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+  ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 78 - 0
manifest.json

@@ -0,0 +1,78 @@
+{
+    "name" : "H5InfoBoard",
+    "appid" : "__UNI__F8D892F",
+    "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" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "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" : {
+            "base" : "boardh5",
+            "mode" : "hash"
+        }
+    }
+}

+ 19 - 0
pages.json

@@ -0,0 +1,19 @@
+{
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/home/index",
+			"style": {
+				"navigationBarTitleText": "",
+				"navigationBarTextStyle": "white", //导航文字颜色
+				"navigationStyle": "custom" //关闭原生导航
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	},
+	"uniIdRouter": {}
+}

+ 157 - 0
pages/home/index.vue

@@ -0,0 +1,157 @@
+<template>
+	<view id="infoBoardHome">
+		<view class="title-box">{{title}}</view>
+		<view class="type-button-max-box" v-if="showType">
+			<view class="check-button" @click="goPage('1')">
+				<img src="@/static/icon_sys_aqxxp@1x.png">
+				<view style="color:#00DEDE;">安全信息牌</view>
+			</view>
+			<view class="null-border"></view>
+			<view class="check-button" @click="goPage('2')">
+				<img src="@/static/icon_sys_jckz@1x.png">
+				<view>监测控制</view>
+			</view>
+			<view class="null-border"></view>
+			<view class="check-button" @click="goPage('3')">
+				<img src="@/static/icon_sys_jcjl@1x.png">
+				<view>进出记录</view>
+			</view>
+		</view>
+		<view class="flex-box-page">
+			<infoBoard :dataInfo="infoData" v-if="showType"></infoBoard>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		systemConfigInfoGetConfigByType,
+		laboratoryAppletGetSubDetailNoAuth,
+	} from '@/api/index.js'
+	import infoBoard from '@/pages/home/infoBoard.vue'
+	export default {
+		name:"infoBoardHome",
+		components:{
+			infoBoard
+		},
+		data() {
+			return {
+				title:'实验室',
+				infoData:{},
+				showType:false,
+			}
+		},
+		onLoad() {
+			
+		},
+		onShow(){
+			// this.systemConfigInfoGetConfigByType();
+			let url = window.location.href;
+			if(url.indexOf('infoId') != -1){
+				let codeData = {};
+				if(url.indexOf('&') == -1){
+					let list = url.split("?");
+					list.forEach((item) => {
+						codeData[item.split("=")[0]] = item.split("=")[1];
+					})
+				}else{
+					let list = url.split("?")[1].split("&");
+					list.forEach((item) => {
+						codeData[item.split("=")[0]] = item.split("=")[1];
+					})
+				}
+				this.laboratoryAppletGetSubDetailNoAuth(codeData.infoId);
+			}else{
+				uni.showToast({
+					title: '二维码无效,请扫描实验室二维码',
+					icon:'none',
+					duration: 2000
+				});
+			}
+		},
+		methods: {
+			goPage(type){
+				if(type != '1'){
+					uni.showToast({
+						title: '功能暂未开通',
+						icon:'none',
+						duration: 2000
+					});
+				}
+			},
+			//查询公共配置
+			async systemConfigInfoGetConfigByType(infoId) {
+				const {
+					data
+				} = await systemConfigInfoGetConfigByType({ category: 2, configType: 5 });
+				if (data.code == 200) {
+					
+				}
+			},
+			//实验室详情
+			async laboratoryAppletGetSubDetailNoAuth(infoId) {
+				let obj = {infoId:infoId};
+				const {
+					data
+				} = await laboratoryAppletGetSubDetailNoAuth(obj);
+				if (data.code == 200) {
+					for(let i=0;i<data.data.labInfoBrandModels.length;i++){
+						data.data.labInfoBrandModels[i].showType = true;
+					}
+					this.$set(this,'infoData',data.data);
+					this.$set(this,'showType',true);
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="stylus" scoped>
+	#infoBoardHome {
+		height: 100%;
+		display: flex;
+		flex-direction: column;
+		overflow: hidden;
+		.title-box{
+			height:100rpx;
+			line-height:100rpx;
+			text-align: center;
+			background-color: #0183FA;
+			color:#fff;
+			font-size:32rpx;
+			display block
+			overflow hidden
+			text-overflow ellipsis
+			white-space nowrap
+		}
+		.type-button-max-box{
+			height:180rpx;
+			display: flex;
+			.check-button{
+				flex:1;
+				img{
+					display: block;
+					height:80rpx;
+					width:80rpx;
+					margin:16rpx auto 11rpx;
+				}
+				view{
+					font-size:30rpx;
+					text-align: center;
+				}
+			}
+			.null-border{
+				height:40rpx;
+				width:2rpx;
+				margin-top:74rpx;
+				background-color:#D8D8D8 ;
+			}
+		}
+		.flex-box-page{
+			flex:1;
+			display: flex;
+			flex-direction: column;
+			overflow: hidden;
+		}
+	}
+</style>

+ 327 - 0
pages/home/infoBoard.vue

@@ -0,0 +1,327 @@
+<template>
+	<view id="infoBoard">
+		
+		<view class="sub-info-box">
+			<view class="top-border-box"></view>
+			<img class="positionImg" src="@/static/img_xyzc_bg@1x.png">
+			<view class="sub-info-min-bnox">
+				<img class="left-max-box" src="@/static/346@1x.png" alt="">
+				<view class="center-max-box">
+					<view class="center-top-p">
+						<view class="center-name">{{dataInfo.subName}}</view>
+						<view class="center-text" v-if="dataInfo.levelName||dataInfo.typeName"
+						:style="'border:4rpx solid '+(dataInfo.levelColor?dataInfo.levelColor:'#999')+';color:'+(dataInfo.levelColor?dataInfo.levelColor:'#999')+';'">
+							<view v-if="dataInfo.levelName">{{dataInfo.levelName}}</view>
+							<view v-if="dataInfo.levelName&&dataInfo.typeName" class="null-p" :style="'background-color:'+(dataInfo.levelColor?dataInfo.levelColor:'#999')+';'"></view>
+							<view v-if="dataInfo.typeName">{{dataInfo.typeName}}</view>
+						</view>
+					</view>
+					<view class="center-bottom-p">
+						{{dataInfo.roomNum?dataInfo.roomNum+' & ':''}}{{dataInfo.buildName}}{{dataInfo.floorName}}
+					</view>
+				</view>
+				<view class="right-max-box" v-if="dataInfo.subArea">
+					{{dataInfo.subArea}}㎡
+				</view>
+			</view>
+			<view class="dept-box">
+				<view>学院单位</view>
+				<view>{{dataInfo.deptName}}</view>
+			</view>
+			<view class="user-max-box">
+				<view class="user-title-box" @click="viewButton(1)">
+						<view>实验室负责人</view>
+						<img v-if="manageType" src="@/static/icon_06_1.png">
+						<img v-else src="@/static/icon_06.png">
+				</view>
+				<Transition name="slide" appear>
+					<view class="user-for-box" v-if="manageType" @click="makePhoneCall(dataInfo.adminPhone)">
+						<view>{{dataInfo.adminName}}</view>
+						<img src="@/static/icon_aqxxp_dh.png">
+						<view>{{dataInfo.adminPhone}}</view>
+					</view>
+				</Transition>
+			</view>
+			<view class="user-max-box" v-if="dataInfo.safeUserList[0]">
+				<view class="user-title-box" @click="viewButton(2)">
+						<view>实验室安全员</view>
+						<img v-if="secureType" src="@/static/icon_06_1.png">
+						<img v-else src="@/static/icon_06.png">
+				</view>
+				<Transition name="slide" appear>
+					<view v-if="secureType">
+						<view class="user-for-box" @click="makePhoneCall(item.safeUserPhone)"
+						v-for="(item,index) in dataInfo.safeUserList" :key="index">
+							<view>{{item.safeUserName}}</view>
+							<img src="@/static/icon_aqxxp_dh.png">
+							<view>{{item.safeUserPhone}}</view>
+						</view>
+					</view>
+				</Transition>
+			</view>
+			<view class="for-models-max-box"
+			v-for="(item,index) in dataInfo.labInfoBrandModels" :key="index">
+				<view class="for-models-title-box" @click="viewButton(3,index)">
+					<view>{{item.brandName}}</view>
+					<img v-if="item.showType" src="@/static/icon_06_1.png">
+					<img v-else src="@/static/icon_06.png">
+				</view>
+				<Transition name="slide" appear>
+					<view class="for-models-text-box" v-if="item.showType && item.brandType == 1">
+						<view v-for="(minItem,minIndex) in item.publicList" :key="minIndex">
+							{{minIndex+1}}. {{minItem.infoName}}
+						</view>
+					</view>
+					<view class="for-models-img-box" v-if="item.showType && item.brandType == 2">
+						<img v-for="(minItem,minIndex) in item.publicList" :key="minIndex"
+						:src="baseUrl+minItem.infoContent">
+					</view>
+				</Transition>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		config
+	} from '@/api/request/config.js'
+	export default {
+		name:'infoBoard',
+		props: {
+			dataInfo:{},
+		},
+		data() {
+			return {
+				baseUrl:config.base_url+'/',
+				manageType:true,
+				secureType:true,
+			}
+		},
+		methods: {
+			//收起展开
+			viewButton(type,index){
+				if(type == 1){
+					this.manageType = !this.manageType;
+				}else if(type == 2){
+					this.secureType = !this.secureType;
+				}else if(type == 3){
+					this.dataInfo.labInfoBrandModels[index].showType = !this.dataInfo.labInfoBrandModels[index].showType;
+				}
+			},
+			//拨打电话
+			makePhoneCall(phone){
+				uni.makePhoneCall({
+					phoneNumber: phone //仅为示例
+				});
+			},
+		}
+	}
+</script>
+
+<style lang="stylus" scoped>
+	#infoBoard {
+		flex:1;
+		display: flex;
+		flex-direction: column;
+		overflow-y: scroll;
+		padding-top:28rpx;
+		.sub-info-box{
+			position: relative;
+			.positionImg{
+				position: absolute;
+				top:-28rpx;
+				left:105rpx;
+				display: inline-block;
+				height:31rpx;
+				width:47rpx;
+			}
+			.top-border-box{
+				height:3rpx;
+				background-color: #F5F5F5;
+			}
+			.sub-info-min-bnox{
+				display: flex;
+				height:150rpx;
+				border-bottom:20rpx solid #F5F5F5;
+				.left-max-box{
+					display: inline-block;
+					width:80rpx;
+					height:80rpx;
+					margin:35rpx 25rpx 0 30rpx;
+				}
+				.center-max-box{
+					flex:1;
+					font-size: 30rpx;
+					.center-top-p{
+						margin-top:28rpx;
+						height:42rpx;
+						line-height:42rpx;
+						display: flex;
+						.center-name{
+							margin-right:16rpx;
+							max-width:320rpx;
+							display block
+							overflow hidden
+							text-overflow ellipsis
+							white-space nowrap
+						}
+						.center-text{
+							padding:0 8rpx;
+							line-height:32rpx;
+							font-size:24rpx;
+							display: flex;
+							border-radius:8rpx;
+							.null-p{
+								width:4rpx;
+								margin:0 8rpx;
+							}
+						}
+					}
+					.center-bottom-p{
+						margin-top:11rpx;
+						height:42rpx;
+						line-height:42rpx;
+						color:#666;
+						display block
+						overflow hidden
+						text-overflow ellipsis
+						white-space nowrap
+						max-width:500rpx;
+					}
+				}
+				.right-max-box{
+					width:100rpx;
+					line-height:150rpx;
+					background: rgba(1,131,250,0.2);
+					color:#0183FA;
+					font-size:28rpx;
+					text-align: center;
+				}
+			}
+			.dept-box{
+				display: flex;
+				view{
+					flex:1;
+					line-height:100rpx;
+					font-size:30rpx;
+				}
+				view:nth-child(1){
+					margin-left:30rpx;
+					color:#333;
+				}
+				view:nth-child(2){
+					margin-right:26rpx;
+					text-align: right;
+					color:#666;
+				}
+			}
+			.user-max-box{
+				.user-title-box{
+					display: flex;
+					border-top:1rpx solid #E0E0E0;
+					view{
+						flex:1;
+						line-height:100rpx;
+						margin-left:30rpx;
+					}
+					img{
+						display: inline-block;
+						width:18rpx;
+						height:10rpx;
+						margin:48rpx 32rpx 0;
+					}
+				}
+				.user-for-box{
+					display: flex;
+					border-top:1rpx solid #E0E0E0;
+					view{
+						line-height:100rpx;
+						font-size:30rpx;
+					}
+					view:nth-child(1){
+						color:#666;
+						flex:1;
+						margin-left:30rpx;
+					}
+					img:nth-child(2){
+						display: inline-block;
+						width:30rpx;
+						height:30rpx;
+						margin-right:7rpx;
+						margin-top:37rpx;
+					}
+					view:nth-child(3){
+						color:#0183FA;
+						margin-right:38rpx;
+					}
+				}
+			}
+			.for-models-max-box{
+				.for-models-title-box{
+					display: flex;
+					border-top:1rpx solid #E0E0E0;
+					view{
+						flex:1;
+						line-height:100rpx;
+						margin-left:30rpx;
+					}
+					img{
+						display: inline-block;
+						width:18rpx;
+						height:10rpx;
+						margin:48rpx 32rpx 0;
+					}
+				}
+				.for-models-text-box{
+					border-top:1rpx solid #E0E0E0;
+					padding:26rpx 0 26rpx;
+					view{
+						font-size:28rpx;
+						line-height:39rpx;
+						margin:13rpx 30rpx;
+						color:#666;
+						
+					}
+				}
+				.for-models-img-box{
+					border-top:1rpx solid #E0E0E0;
+					padding:10rpx 0 20rpx;
+					img{
+						display: inline-block;
+						width:112rpx;
+						height:151rpx;
+						margin:20rpx 0 0 32rpx;
+					}
+				}
+			}
+		}
+		
+		/* 进入动画的起始点 */
+		.slide-enter{
+		  opacity: 0;
+			transform: translateX(20px);
+		}
+		/* 进入动画的过程 */
+		.slide-enter-active{
+		  transition: all .3s ease-out;
+		}
+		/* 进入动画的最终位置 */
+		.slide-enter-to{
+		  opacity: 1;
+		}
+		/* 离开动画的起始点 */
+		.slide-leave{
+		  opacity: 1;
+		}
+		/* 离开动画的过程 */
+		.slide-leave-active{
+			transition: all 0.4s cubic-bezier(1, 0.5, 0.8, 1);
+		}
+		/* 离开动画的最终位置 */
+		.slide-leave-to{
+			transform: translateX(20px);
+		  opacity: 0;
+		}
+	}
+</style>

BIN
static/346@1x.png


BIN
static/icon_06.png


BIN
static/icon_06_1.png


BIN
static/icon_aqxxp_dh.png


BIN
static/icon_sys_aqxxp@1x.png


BIN
static/icon_sys_jcjl@1x.png


BIN
static/icon_sys_jckz@1x.png


BIN
static/img_xyzc_bg@1x.png


+ 13 - 0
uni.promisify.adaptor.js

@@ -0,0 +1,13 @@
+uni.addInterceptor({
+  returnValue (res) {
+    if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+      return res;
+    }
+    return new Promise((resolve, reject) => {
+      res.then((res) => {
+        if (!res) return resolve(res) 
+        return res[0] ? reject(res[0]) : resolve(res[1])
+      });
+    });
+  },
+});

+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$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:16px;
+
+/* 图片尺寸 */
+$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;

+ 0 - 0
unpackage/dist/build/.automator/h5/.automator.json


BIN
unpackage/dist/build/web/H5.zip


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
unpackage/dist/build/web/index.html


BIN
unpackage/dist/build/web/static/346@1x.png


BIN
unpackage/dist/build/web/static/icon_06.png


BIN
unpackage/dist/build/web/static/icon_06_1.png


BIN
unpackage/dist/build/web/static/icon_aqxxp_dh.png


BIN
unpackage/dist/build/web/static/icon_sys_aqxxp@1x.png


BIN
unpackage/dist/build/web/static/icon_sys_jcjl@1x.png


BIN
unpackage/dist/build/web/static/icon_sys_jckz@1x.png


BIN
unpackage/dist/build/web/static/img_xyzc_bg@1x.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
unpackage/dist/build/web/static/index.2da1efab.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 7 - 0
unpackage/dist/build/web/static/js/chunk-vendors.93c9d863.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
unpackage/dist/build/web/static/js/index.120db519.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
unpackage/dist/build/web/static/js/pages-home-index.e61de480.js