diff --git a/package-lock.json b/package-lock.json index f17178a..870800f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "vue-h5-template", - "version": "2.1.0", + "name": "health-student", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5378,6 +5378,11 @@ "@sideway/pinpoint": "^2.0.0" } }, + "js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, "js-message": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", diff --git a/package.json b/package.json index 63ae9b6..611d81d 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "vue-router": "^3.5.4", "vuex": "^3.6.2", "dayjs": "^1.11.7", - "echarts": "^5.4.1" + "echarts": "^5.4.1", + "js-base64": "^2.5.2" }, "devDependencies": { "@babel/core": "^7.18.10", diff --git a/src/api/core.js b/src/api/core.js index 31b7bed..58a86d3 100644 --- a/src/api/core.js +++ b/src/api/core.js @@ -1,12 +1,14 @@ // b端的接口, 每次调用前先获取token import axios from 'axios'; -const baseUrl = process.env.VUE_APP_BASE_API.replace('webapi', 'gateway'); +import { baseApi } from '@/config'; +import prefix from '@/store/prefix'; +const baseUrl = baseApi.replace('webapi', 'gateway'); const service = axios.create({ baseURL: baseUrl }); service.interceptors.request.use(request => { - if (localStorage.getItem('gatewayToken')) { - request.headers.AccessToken = localStorage.getItem('gatewayToken'); + if (localStorage.getItem(prefix + 'gatewayToken')) { + request.headers.AccessToken = localStorage.getItem(prefix + 'gatewayToken'); } return request; }); diff --git a/src/assets/css/mixin.scss b/src/assets/css/mixin.scss index 327b6d4..aaf8601 100644 --- a/src/assets/css/mixin.scss +++ b/src/assets/css/mixin.scss @@ -1,4 +1,13 @@ // mixin +@use "sass:math"; +$background: #f2f4f5; +$blue: #2599ff; +$next: #8bc6fa; +$border_color: #d1d1d1; +$green: #189b3b; +$next_green: #8ccd9d; +$red: #ff8c8c; + // 清除浮动 @mixin clearfix { &:after { @@ -34,3 +43,71 @@ flex-wrap: $fw; -webkit-flex-wrap: $fw; } +// 雪碧图路径 +/* @mixin icon($spriteUrl) { + background: transparent url($spriteUrl) no-repeat; + background-size: 400px 400px; +} */ +@mixin icon { + background: transparent url('~@/assets/icon.png') no-repeat; + background-size: 400px 400px; +} +@mixin bgPosition( + $spriteWidth, + $spriteHeight, + $iconWidth, + $iconHeight, + $iconX, + $iconY +) { + background-position: ( + math.div($iconX ,($spriteWidth - $iconWidth)) * 100% + math.div($iconY,($spriteHeight - $iconHeight)) * 100% + ); +} + +@mixin icon_position($iconWidth, $iconHeight, $iconX, $iconY) { + $spriteWidth: 400; + $spriteHeight: 400; + @include bgPosition( + $spriteWidth, + $spriteHeight, + $iconWidth, + $iconHeight, + $iconX, + $iconY + ); + } + @mixin border { + position: absolute; + box-sizing: border-box; + content: ' '; + pointer-events: none; + top: -50%; + right: -50%; + bottom: -50%; + left: -50% !important; + border-bottom: 1px solid $border_color; + -webkit-transform: scale(.5); + transform: scale(.5); + } + + @mixin colorAndFont($color, $fontSize) { + color: $color; + font-size: $fontSize + px; + } + + @mixin center { + display: flex; + justify-content: center; + align-items: center; + } + @mixin bgimg($path, $width, $height) { + background-image: $path; + background-size: $width, $height; + width: $width + px; + height: $height + px; + display: flex; + justify-content: center; + align-items: center; +} \ No newline at end of file diff --git a/src/assets/icon.png b/src/assets/icon.png new file mode 100644 index 0000000..311bfbc Binary files /dev/null and b/src/assets/icon.png differ diff --git a/src/assets/img/callLog.png b/src/assets/img/callLog.png new file mode 100644 index 0000000..055e1b4 Binary files /dev/null and b/src/assets/img/callLog.png differ diff --git a/src/assets/img/drownReport.png b/src/assets/img/drownReport.png new file mode 100644 index 0000000..3489ecf Binary files /dev/null and b/src/assets/img/drownReport.png differ diff --git a/src/assets/img/health/blood_icon.png b/src/assets/img/health/blood_icon.png new file mode 100644 index 0000000..901f1d7 Binary files /dev/null and b/src/assets/img/health/blood_icon.png differ diff --git a/src/assets/img/health/blood_oxygen.png b/src/assets/img/health/blood_oxygen.png new file mode 100644 index 0000000..b3c53bb Binary files /dev/null and b/src/assets/img/health/blood_oxygen.png differ diff --git a/src/assets/img/health/bulb.png b/src/assets/img/health/bulb.png new file mode 100644 index 0000000..4aa2fbf Binary files /dev/null and b/src/assets/img/health/bulb.png differ diff --git a/src/assets/img/health/gps.png b/src/assets/img/health/gps.png new file mode 100644 index 0000000..a6607f1 Binary files /dev/null and b/src/assets/img/health/gps.png differ diff --git a/src/assets/img/health/gps_frequency.png b/src/assets/img/health/gps_frequency.png new file mode 100644 index 0000000..caeef61 Binary files /dev/null and b/src/assets/img/health/gps_frequency.png differ diff --git a/src/assets/img/health/health.png b/src/assets/img/health/health.png new file mode 100644 index 0000000..df0caec Binary files /dev/null and b/src/assets/img/health/health.png differ diff --git a/src/assets/img/health/heartRate.png b/src/assets/img/health/heartRate.png new file mode 100644 index 0000000..f597f82 Binary files /dev/null and b/src/assets/img/health/heartRate.png differ diff --git a/src/assets/img/health/location.png b/src/assets/img/health/location.png new file mode 100644 index 0000000..2d1f035 Binary files /dev/null and b/src/assets/img/health/location.png differ diff --git a/src/assets/img/health/psychological_icon.png b/src/assets/img/health/psychological_icon.png new file mode 100644 index 0000000..6a92ded Binary files /dev/null and b/src/assets/img/health/psychological_icon.png differ diff --git a/src/assets/img/health/report_ frequency.png b/src/assets/img/health/report_ frequency.png new file mode 100644 index 0000000..e422926 Binary files /dev/null and b/src/assets/img/health/report_ frequency.png differ diff --git a/src/assets/img/health/rest.png b/src/assets/img/health/rest.png new file mode 100644 index 0000000..40f8cc0 Binary files /dev/null and b/src/assets/img/health/rest.png differ diff --git a/src/assets/img/health/right_more.png b/src/assets/img/health/right_more.png new file mode 100644 index 0000000..50e6a01 Binary files /dev/null and b/src/assets/img/health/right_more.png differ diff --git a/src/assets/img/health/setting.png b/src/assets/img/health/setting.png new file mode 100644 index 0000000..0ed7f96 Binary files /dev/null and b/src/assets/img/health/setting.png differ diff --git a/src/assets/img/health/temperature.png b/src/assets/img/health/temperature.png new file mode 100644 index 0000000..f0ede62 Binary files /dev/null and b/src/assets/img/health/temperature.png differ diff --git a/src/assets/img/healthy.png b/src/assets/img/healthy.png new file mode 100644 index 0000000..ad2cb54 Binary files /dev/null and b/src/assets/img/healthy.png differ diff --git a/src/assets/img/home/layer.png b/src/assets/img/home/layer.png new file mode 100644 index 0000000..8179386 Binary files /dev/null and b/src/assets/img/home/layer.png differ diff --git a/src/assets/img/home/lbs_icon.png b/src/assets/img/home/lbs_icon.png new file mode 100644 index 0000000..b88553c Binary files /dev/null and b/src/assets/img/home/lbs_icon.png differ diff --git a/src/assets/img/home/md-highlight_off.svg b/src/assets/img/home/md-highlight_off.svg new file mode 100644 index 0000000..d214847 --- /dev/null +++ b/src/assets/img/home/md-highlight_off.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/img/home/message.png b/src/assets/img/home/message.png new file mode 100644 index 0000000..521c2dd Binary files /dev/null and b/src/assets/img/home/message.png differ diff --git a/src/assets/img/home/phone.png b/src/assets/img/home/phone.png new file mode 100644 index 0000000..627c0ac Binary files /dev/null and b/src/assets/img/home/phone.png differ diff --git a/src/assets/img/home/spread_left.png b/src/assets/img/home/spread_left.png new file mode 100644 index 0000000..14640c8 Binary files /dev/null and b/src/assets/img/home/spread_left.png differ diff --git a/src/assets/img/home/spread_right.png b/src/assets/img/home/spread_right.png new file mode 100644 index 0000000..f2e0fcb Binary files /dev/null and b/src/assets/img/home/spread_right.png differ diff --git a/src/assets/img/home/trajectory.png b/src/assets/img/home/trajectory.png new file mode 100644 index 0000000..324027b Binary files /dev/null and b/src/assets/img/home/trajectory.png differ diff --git a/src/assets/img/home/warning.png b/src/assets/img/home/warning.png new file mode 100644 index 0000000..db7f732 Binary files /dev/null and b/src/assets/img/home/warning.png differ diff --git a/src/assets/img/leaveDrownReport.png b/src/assets/img/leaveDrownReport.png new file mode 100644 index 0000000..c5bf8e3 Binary files /dev/null and b/src/assets/img/leaveDrownReport.png differ diff --git a/src/assets/img/noWear.png b/src/assets/img/noWear.png new file mode 100644 index 0000000..47b2f51 Binary files /dev/null and b/src/assets/img/noWear.png differ diff --git a/src/assets/img/phone_ record.png b/src/assets/img/phone_ record.png new file mode 100644 index 0000000..c4a696c Binary files /dev/null and b/src/assets/img/phone_ record.png differ diff --git a/src/assets/img/prohibition.png b/src/assets/img/prohibition.png new file mode 100644 index 0000000..e585798 Binary files /dev/null and b/src/assets/img/prohibition.png differ diff --git a/src/assets/img/spo.png b/src/assets/img/spo.png new file mode 100644 index 0000000..45fdc35 Binary files /dev/null and b/src/assets/img/spo.png differ diff --git a/src/assets/img/tooltip-sizing.png b/src/assets/img/tooltip-sizing.png new file mode 100644 index 0000000..30be8cb Binary files /dev/null and b/src/assets/img/tooltip-sizing.png differ diff --git a/src/assets/img/wear.png b/src/assets/img/wear.png new file mode 100644 index 0000000..aed0abb Binary files /dev/null and b/src/assets/img/wear.png differ diff --git a/src/common/amap.js b/src/common/amap.js new file mode 100644 index 0000000..b96e890 --- /dev/null +++ b/src/common/amap.js @@ -0,0 +1,40 @@ +export default function MapLoader(isSyncLoad = false, pluginsArr = []) { + // plugin: 字符串数组[ 'AMap.Geocoder', ... ] + return new Promise((resolve, reject) => { + try { + if (window.AMap && (pluginsArr === null || pluginsArr === undefined || pluginsArr.length === 0)) { + resolve(window.AMap); + } else { + var script = document.createElement('script'); + script.type = 'text/javascript'; + script.async = !isSyncLoad; + script.src = 'https://webapi.amap.com/maps?v=1.4.15&callback=initAMap&key=' + + '6e4a6c39ea6d18b8dd3151baa3a7c0d5' + + '&plugin=AMap.BezierCurveEditor' + + (pluginsArr ? ',' + pluginsArr.join(',') : ''); + script.onerror = reject; + document.head.appendChild(script); + + var script1 = document.createElement('script'); + script1.type = 'text/javascript'; + script1.async = false; + script1.src = 'https://webapi.amap.com/ui/1.0/main.js?v=1.0.11'; + script1.onerror = reject; + if (isSyncLoad) { + document.head.appendChild(script1); + } + + } + window.initAMap = () => { + resolve(window.AMap); + } + // JSAPI key搭配静态安全密钥以明文设置, 详情见: https://lbs.amap.com/api/jsapi-v2/guide/abc/load + window._AMapSecurityConfig = { + securityJsCode:'6a421e1233cd12dd4899e373e11bb641', + } + } catch (e) { + console.log(e); + } + + }) +} \ No newline at end of file diff --git a/src/common/own.js b/src/common/own.js new file mode 100644 index 0000000..de08c2e --- /dev/null +++ b/src/common/own.js @@ -0,0 +1,246 @@ +import { Base64 } from 'js-base64'; + +function formatTime(date) { + let datee = date.toString(); + return datee.replace(/T/g, ' ').replace(/-/g, '/'); +} + +function getNowFormatDate(val, type, flag) { + let i = 1 * val; + let sp = '-'; + const oneDay = 24 * 60 * 60 * 1000; + let date = new Date(new Date() - -i * oneDay); + let year = date.getFullYear(); + let month = date.getMonth() + 1; + let strDate = date.getDate(); + if (month >= 1 && month <= 9) { + month = '0' + month; + } + if (strDate >= 0 && strDate <= 9) { + strDate = '0' + strDate; + } + if (type == 'year') { + return year; + } else if (type == 'month') { + return year + sp + month; + } else { + if (flag) { + return year + '年' + month + '月' + strDate + '日'; + } + return year + sp + month + sp + strDate; + } +} + +// 将时间改为 *分钟前|*小时前|刚刚…… +function translateTime(date) { + return getDateDiff(formatTime(date)); +} + +function getDateDiff(date) { + let minute = 1000 * 60; + let hour = minute * 60; + let day = hour * 24; + // eslint-disable-next-line no-unused-vars + let halfamonth = day * 15; + let month = day * 30; + let result = null; + + var dateTimeStamp = new Date(date); + var now = new Date().getTime(); + var diffValue = now - dateTimeStamp; + /* if (diffValue < 0) { + console.log('结束日期不能小于开始日期!'); + console.log(`开始日期:${dateTimeStamp}结束日期:${now}`); + console.log(`参数为:${date}`); + return 'null'; // TODO 方便测试 + } */ + var monthC = diffValue / month; + var weekC = diffValue / (7 * day); + var dayC = diffValue / day; + var hourC = diffValue / hour; + var minC = diffValue / minute; + if (monthC >= 1) { + result = `${parseInt(monthC)}个月前`; + } else if (weekC >= 1) { + result = `${parseInt(weekC)}周前`; + } else if (dayC >= 1) { + result = `${parseInt(dayC)}天前`; + } else if (hourC >= 1) { + result = `${parseInt(hourC)}小时前`; + } else if (minC >= 1) { + result = `${parseInt(minC)}分钟前`; + } else result = '刚刚'; + return result; +} + +Date.prototype.Format = function (fmt) { + var o = { + 'M+': this.getMonth() + 1, //月份 + 'd+': this.getDate(), //日 + 'h+': this.getHours(), //小时 + 'm+': this.getMinutes(), //分 + 's+': this.getSeconds(), //秒 + 'q+': Math.floor((this.getMonth() + 3) / 3), //季度 + S: this.getMilliseconds() //毫秒 + }; + if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp('(' + k + ')').test(fmt)) + fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)); + return fmt; +}; + +function formatnumber(value, num) { + let _value = value.toString(); + let _dot = _value.indexOf('.'); + let _valueLen = _value.length; + if (num == 0) { + if (_dot != -1) { + _value = _value.substring(0, _dot); + } + } else { + //如果没有小数点 + if (_dot == -1) { + _value = _value + '.'; + for (let i = 1; i <= num; i++) { + _value = _value + '0'; + } + } else { + //有小数点,超出位数自动截取,否则补0 + _value = _value.substring(0, _dot + num + 1); + for (let i = _valueLen; i <= _dot + num; i++) { + _value = _value + '0'; + } + } + } + return _value; +} + +function round(src, pos, type) { + //src代表要转化的值,pos表示要保留的位数 + let num = Math.floor(src * Math.pow(10, pos)) / Math.pow(10, pos); + let val = type == 'string' ? formatnumber(num, pos) : parseFloat(formatnumber(num, pos)); + return val; +} + +/** + * 防抖使用,_type,index,item不用管,是changfield的参数 + * methods: { + 改变场数 + changefield: _debounce(function(_type, index, item) { + do something ... + }, 200) + } + */ +// 防抖 +function _debounce(fn, delay) { + // eslint-disable-next-line no-redeclare + var delay = delay || 200; + var timer; + return function () { + var th = this; + var args = arguments; + if (timer) { + clearTimeout(timer); + } + timer = setTimeout(function () { + timer = null; + fn.apply(th, args); + }, delay); + }; +} + +// 节流 +function _throttle(fn, interval) { + var last; + var timer; + // eslint-disable-next-line no-redeclare + var interval = interval || 200; + return function () { + var th = this; + var args = arguments; + var now = +new Date(); + /* + 隐式类型转换,通过调用 valueOf() 获取时间戳 */ + if (last && now - last < interval) { + clearTimeout(timer); + timer = setTimeout(function () { + last = now; + fn.apply(th, args); + }, interval); + } else { + last = now; + fn.apply(th, args); + } + }; +} + +// base64 编码 +function base64Encode(str, isURI) { + if (isURI) { + return Base64.encodeURI(str); + } + return Base64.encode(str); +} + +// base64 解码 +function base64Decode(str) { + return Base64.decode(str); +} + +/** + * 判断是否为空 + */ +function isNull(o) { + /*return o === null + || o === undefined + || o === '' + || JSON.stringify(o) === '{}' + || JSON.stringify(o) === '[]';*/ + if (o === null || o === undefined || o === '') { + return true; + // eslint-disable-next-line + } else if (Array.prototype.isPrototypeOf(o) && o.length === 0) { + return true; + // eslint-disable-next-line + } else if (Object.prototype.isPrototypeOf(o) && Object.keys(o).length === 0) { + return true; + } + return false; +} + +/** + * 判断是否为非空 + */ +function isNotNull(o) { + return !isNull(o); +} + +/** + * 清除 localStorage + * @param store 要将 $store 传进来 + */ +function clearLocalStorage(store) { + try { + for (let k in store.getters) { + store.commit(k, ''); + } + } catch (e) { + console.log(e); + } +} + +export default { + formatTime, + getDateDiff, + getNowFormatDate, + translateTime, + formatnumber, + round, + _debounce, + _throttle, + base64Encode, + base64Decode, + isNull, + isNotNull, + clearLocalStorage +}; diff --git a/src/components/NavBar.vue b/src/components/NavBar.vue index 12359e5..33a4d9e 100644 --- a/src/components/NavBar.vue +++ b/src/components/NavBar.vue @@ -8,7 +8,8 @@ :left-arrow="leftArrow" @click-left="onClickLeft" @click-right="onClickRight" - > + > + diff --git a/src/components/SubmenuList.vue b/src/components/SubmenuList.vue index 9b83902..e2bb660 100644 --- a/src/components/SubmenuList.vue +++ b/src/components/SubmenuList.vue @@ -21,10 +21,32 @@ + + + + \ No newline at end of file diff --git a/src/config/env.development.js b/src/config/env.development.js index 7b3f6e2..cff186b 100644 --- a/src/config/env.development.js +++ b/src/config/env.development.js @@ -1,8 +1,8 @@ // 本地环境配置 module.exports = { title: '健康同学', - baseUrl: 'https://id.ssjlai.com/', // 项目地址 - baseApi: 'https://id.ssjlai.com/', // 本地api请求地址,注意:如果你使用了代理,请设置成'/' + baseUrl: 'https://id.ssjlai.com/webapi', // 项目地址 + baseApi: 'https://id.ssjlai.com/webapi', // 本地api请求地址,注意:如果你使用了代理,请设置成'/' APPID: 'xxx', APPSECRET: 'xxx', $cdn: 'https://www.sunniejs.cn/static' diff --git a/src/config/env.production.js b/src/config/env.production.js index 16469bf..c1a8d5b 100644 --- a/src/config/env.production.js +++ b/src/config/env.production.js @@ -1,8 +1,8 @@ // 正式 module.exports = { title: '健康同学', - baseUrl: 'https://ai.ssjlai.com/', // 正式项目地址 - baseApi: 'https://ai.ssjlai.com/', // 正式api请求地址 + baseUrl: 'https://ai.ssjlai.com/webapi', // 正式项目地址 + baseApi: 'https://ai.ssjlai.com/webapi', // 正式api请求地址 APPID: 'xxx', APPSECRET: 'xxx', $cdn: 'https://www.sunniejs.cn/static' diff --git a/src/config/env.test.js b/src/config/env.test.js index b67dfb0..ab8dbcd 100644 --- a/src/config/env.test.js +++ b/src/config/env.test.js @@ -1,7 +1,7 @@ module.exports = { title: '健康同学', - baseUrl: 'https://id.ssjlai.com/', // 测试项目地址 - baseApi: 'https://id.ssjlai.com/', // 测试api请求地址 + baseUrl: 'https://id.ssjlai.com/webapi', // 测试项目地址 + baseApi: 'https://id.ssjlai.com/webapi', // 测试api请求地址 APPID: 'xxx', APPSECRET: 'xxx', $cdn: 'https://www.sunniejs.cn/static' diff --git a/src/config/models.js b/src/config/models.js index 35eabf1..8265168 100644 --- a/src/config/models.js +++ b/src/config/models.js @@ -85,3 +85,10 @@ export const WxOcrServiceId = { test: 'wx79ac3de8be320b71', development: 'wx79ac3de8be320b71' }; +export const ErrorAMapMsgModel = { + OUT_OF_SERVICE: 'OUT_OF_SERVICE', // 使用路径规划服务接口时可能出现该问题,规划点(包括起点、终点、途经点)不在中国陆地范围内 + NO_ROADS_NEARBY: 'NO_ROADS_NEARBY', // 使用路径规划服务接口时可能出现该问题,划点(起点、终点、途经点)附近搜不到路 + ROUTE_FAIL: 'ROUTE_FAIL', // 使用路径规划服务接口时可能出现该问题,路线计算失败,通常是由于道路连通关系导致 + OVER_DIRECTION_RANGE: 'OVER_DIRECTION_RANGE', // 使用路径规划服务接口时可能出现该问题,路线计算失败,通常是由于道路起点和终点距离过长导致 + NO_DATA: 'NO_DATA' // 此错误在服务接口status='complete'时的result.info值出现,故判断时需要注意(与以上的错误不一样,status!=='complete') +}; diff --git a/src/main.js b/src/main.js index 1a9649a..17b3398 100644 --- a/src/main.js +++ b/src/main.js @@ -7,10 +7,12 @@ import Vue from 'vue'; import App from './App.vue'; import router from './router'; import store from './store/index'; +import request from './config/request'; // 设置 js中可以访问 $cdn import { $cdn } from '@/config'; Vue.prototype.$cdn = $cdn; import dayjs from 'dayjs'; +import own from '@/common/own.js'; // 引入echarts import * as echarts from 'echarts'; // 全局引入按需引入UI库 vant @@ -22,6 +24,9 @@ import 'amfe-flexible'; Vue.prototype.$dayjs = dayjs; Vue.prototype.$echarts = echarts; Vue.prototype.$store = store; +Vue.prototype.$own = own; +Vue.prototype.$axios = request; +Vue.prototype.$green = '#189b3b'; // filters import './filters'; diff --git a/src/router/router.config.js b/src/router/router.config.js index a84d307..4b29081 100644 --- a/src/router/router.config.js +++ b/src/router/router.config.js @@ -59,6 +59,162 @@ export const constantRouterMap = [ name: 'addFamilyNumber', component: () => import('@/views/myself/addFamilyNumber'), meta: { title: '增加亲情号码', keepAlive: false } + }, + { + path: '/sendMessage', + name: 'sendMessage', + component: () => import('@/views/myself/sendMessage'), + meta: { title: '留言', keepAlive: false } + }, + { + path: '/callList', + name: 'callList', + component: () => import('@/views/myself/callList'), + meta: { title: '通话记录', keepAlive: false } + }, + { + path: '/prohibit', + name: 'prohibit', + component: () => import('@/views/myself/prohibit'), + meta: { title: '上课禁止时段', keepAlive: false } + }, + { + path: '/setupProhibitPeriod', + name: 'setupProhibitPeriod', + component: () => import('@/views/myself/setupProhibitPeriod'), + meta: { title: '设置上课禁止时段', keepAlive: false } + }, + { + path: '/clock', + name: 'clock', + component: () => import('@/views/myself/clock'), + meta: { title: '闹钟', keepAlive: false } + }, + { + path: '/setupClockPeriod', + name: 'setupClockPeriod', + component: () => import('@/views/myself/setupClockPeriod'), + meta: { title: '设置闹钟', keepAlive: false } + }, + { + path: '/changePayPassword', + name: 'changePayPassword', + component: () => import('@/views/myself/changePayPassword'), + meta: { title: '修改支付密码', keepAlive: false } + }, + { + path: '/messageList', + name: 'messageList', + component: () => import('@/views/myself/messageList'), + meta: { title: '短信代收', keepAlive: false } + }, + { + path: '/management', + name: 'management', + component: () => import('@/views/myself/management'), + meta: { title: '亲友关注', keepAlive: false } + }, + { + path: '/replace', + name: 'replace', + component: () => import('@/views/myself/replace'), + meta: { title: '管理员转让', keepAlive: false } + }, + { + path: '/sleep', + name: 'sleep', + component: () => import('@/views/myself/sleep'), + meta: { title: '休眠设置', keepAlive: false } + }, + { + path: '/watchSetting', + name: 'watchSetting', + component: () => import('@/views/myself/deviceSetting/settingIndex'), + meta: { title: '参数设置', keepAlive: false } + }, + { + path: '/sceneMode', + name: 'sceneMode', + component: () => import('@/views/myself/deviceSetting/sceneMode'), + meta: { title: '场景模式', keepAlive: false } + }, + { + path: '/locationMonitor', + name: 'locationMonitor', + component: () => import('@/views/myself/deviceSetting/locationMonitor'), + meta: { title: '定位监测', keepAlive: false } + }, + { + path: '/dangerAreaMonitor', + name: 'dangerAreaMonitor', + component: () => import('@/views/myself/deviceSetting/dangerAreaMonitor'), + meta: { title: '危险区域监测', keepAlive: false } + }, + { + path: '/drownWhiteList', + name: 'drownWhiteList', + component: () => import('@/views/myself/deviceSetting/drownWhiteList'), + meta: { title: '免告警水域', keepAlive: false } + }, + { + path: '/healthMonitor', + name: 'healthMonitor', + component: () => import('@/views/myself/deviceSetting/healthMonitor'), + meta: { title: '健康监测', keepAlive: false } + }, + { + path: '/blood', + name: 'blood', + component: () => import('@/views/myself/deviceSetting/blood'), + meta: { title: '血压监测', keepAlive: false } + }, + { + path: '/psychologicalSetting', + name: 'psychologicalSetting', + component: () => import('@/views/myself/deviceSetting/psychologicalSetting'), + meta: { title: '心理监测', keepAlive: false } + }, + { + path: '/personInfos', + name: 'personInfos', + component: () => import('@/views/myself/deviceSetting/personInfos'), + meta: { title: '个人资料设置', keepAlive: false } + }, + { + path: '/wearMonitor', + name: 'wearMonitor', + component: () => import('@/views/myself/deviceSetting/wearMonitor'), + meta: { title: '佩戴监测', keepAlive: false } + }, + { + path: '/setupSleepPeriod', + name: 'setupSleepPeriod', + component: () => import('@/views/myself/setupSleepPeriod'), + meta: { title: '休眠设置', keepAlive: false } + }, + { + path: '/help', + name: 'help', + component: () => import('@/views/myself/help'), + meta: { title: '常见问题', keepAlive: false } + }, + { + path: '/location', + name: 'location', + component: () => import('@/views/myself/location'), + meta: { title: '定位', keepAlive: false } + }, + { + path: '/trajectory', + name: 'trajectory', + component: () => import('@/views/myself/trajectory'), + meta: { title: '轨迹', keepAlive: false } + }, + { + path: '/news', + name: 'news', + component: () => import('@/views/myself/news/news'), + meta: { title: '消息', keepAlive: false } } ] } diff --git a/src/services/dialog-service.js b/src/services/dialog-service.js index f9be8fc..523d160 100644 --- a/src/services/dialog-service.js +++ b/src/services/dialog-service.js @@ -12,7 +12,7 @@ let DialogService = { cancelButtonText }) { return Dialog.confirm({ - title: title || '信息提示', + title: title || '提示', message: message || '', className: className || 'device_confirm', showCancelButton: showCancelButton || false, diff --git a/src/views/myself/addFamilyNumber.vue b/src/views/myself/addFamilyNumber.vue index 2f7a574..72dd66e 100644 --- a/src/views/myself/addFamilyNumber.vue +++ b/src/views/myself/addFamilyNumber.vue @@ -532,8 +532,8 @@ export default { diff --git a/src/views/myself/changeFamilyNumber.vue b/src/views/myself/changeFamilyNumber.vue index 5c283bb..5b64185 100644 --- a/src/views/myself/changeFamilyNumber.vue +++ b/src/views/myself/changeFamilyNumber.vue @@ -573,8 +573,8 @@ export default { padding: 0 10px; } .save { - width: 100px; - line-height: 60px; + width: 80px; + line-height: 40px; background: #1989fa; color: #fff; font-size: 30px; diff --git a/src/views/myself/changePayPassword.vue b/src/views/myself/changePayPassword.vue new file mode 100644 index 0000000..d29c06d --- /dev/null +++ b/src/views/myself/changePayPassword.vue @@ -0,0 +1,235 @@ + + + + + +> diff --git a/src/views/myself/clock.vue b/src/views/myself/clock.vue new file mode 100644 index 0000000..95807b4 --- /dev/null +++ b/src/views/myself/clock.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/src/views/myself/deviceSetting/blood.vue b/src/views/myself/deviceSetting/blood.vue new file mode 100644 index 0000000..dfca15b --- /dev/null +++ b/src/views/myself/deviceSetting/blood.vue @@ -0,0 +1,588 @@ + + + + + diff --git a/src/views/myself/deviceSetting/dangerAreaMonitor.vue b/src/views/myself/deviceSetting/dangerAreaMonitor.vue new file mode 100644 index 0000000..054e6af --- /dev/null +++ b/src/views/myself/deviceSetting/dangerAreaMonitor.vue @@ -0,0 +1,1398 @@ + + + + + diff --git a/src/views/myself/deviceSetting/drownWhiteList.vue b/src/views/myself/deviceSetting/drownWhiteList.vue new file mode 100644 index 0000000..87a4cf2 --- /dev/null +++ b/src/views/myself/deviceSetting/drownWhiteList.vue @@ -0,0 +1,199 @@ + + + + + + diff --git a/src/views/myself/deviceSetting/healthMonitor.vue b/src/views/myself/deviceSetting/healthMonitor.vue new file mode 100644 index 0000000..c8d496f --- /dev/null +++ b/src/views/myself/deviceSetting/healthMonitor.vue @@ -0,0 +1,1094 @@ + + + + + diff --git a/src/views/myself/deviceSetting/locationMonitor.vue b/src/views/myself/deviceSetting/locationMonitor.vue new file mode 100644 index 0000000..a049a1b --- /dev/null +++ b/src/views/myself/deviceSetting/locationMonitor.vue @@ -0,0 +1,407 @@ + + + + + diff --git a/src/views/myself/deviceSetting/personInfos.vue b/src/views/myself/deviceSetting/personInfos.vue new file mode 100644 index 0000000..5601306 --- /dev/null +++ b/src/views/myself/deviceSetting/personInfos.vue @@ -0,0 +1,889 @@ + + + + diff --git a/src/views/myself/deviceSetting/psychologicalSetting.vue b/src/views/myself/deviceSetting/psychologicalSetting.vue new file mode 100644 index 0000000..6852013 --- /dev/null +++ b/src/views/myself/deviceSetting/psychologicalSetting.vue @@ -0,0 +1,1288 @@ + + + + + diff --git a/src/views/myself/deviceSetting/sceneMode.vue b/src/views/myself/deviceSetting/sceneMode.vue new file mode 100644 index 0000000..feef762 --- /dev/null +++ b/src/views/myself/deviceSetting/sceneMode.vue @@ -0,0 +1,223 @@ + + + + + + diff --git a/src/views/myself/deviceSetting/settingIndex.vue b/src/views/myself/deviceSetting/settingIndex.vue new file mode 100644 index 0000000..a12bafa --- /dev/null +++ b/src/views/myself/deviceSetting/settingIndex.vue @@ -0,0 +1,886 @@ + + + + + diff --git a/src/views/myself/deviceSetting/wearMonitor.vue b/src/views/myself/deviceSetting/wearMonitor.vue new file mode 100644 index 0000000..925bfba --- /dev/null +++ b/src/views/myself/deviceSetting/wearMonitor.vue @@ -0,0 +1,1168 @@ + + + + + + diff --git a/src/views/myself/help.vue b/src/views/myself/help.vue new file mode 100644 index 0000000..b439e8d --- /dev/null +++ b/src/views/myself/help.vue @@ -0,0 +1,102 @@ + + diff --git a/src/views/myself/index.scss b/src/views/myself/index.scss index 177c930..9f2be58 100644 --- a/src/views/myself/index.scss +++ b/src/views/myself/index.scss @@ -11,7 +11,7 @@ .banner { height: 420px; width: 100%; - background-color: greenyellow; + background-color: green; border-radius: 60px; .top { height: 320px; @@ -59,8 +59,9 @@ max-width: 90px; min-width: 90px; border-radius: 10px; - background-color: green; + background-color: $green; @include flexbox(center, center, column, nowrap); + color: #fff; } } &.safe-helper { diff --git a/src/views/myself/index.vue b/src/views/myself/index.vue index 4eb8ad3..95dcbb9 100644 --- a/src/views/myself/index.vue +++ b/src/views/myself/index.vue @@ -32,11 +32,11 @@
-

桂城街道深海路105号平洲桂城广东天波教育科技有限公司

- 纬度:23.0263313634643 经度:113.175114274988 +

{{ currentDevice.address }}

+ 纬度: {{ currentDevice.lat }} 经度: {{ currentDevice.lng }}
-

进入地图 >

+

进入地图 >

@@ -77,23 +77,35 @@ export default { { imgPath: require('../../assets/logo.png'), text: '亲情号码', - bgColor: 'red', + bgColor: this.$green, showType: 'newPage', routerName: 'familyNumber' }, - { imgPath: require('../../assets/logo.png'), text: '留言', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '通话记录', bgColor: 'red' } + { + imgPath: require('../../assets/logo.png'), + text: '留言', + bgColor: this.$green, + showType: 'newPage', + routerName: 'sendMessage' + }, + { + imgPath: require('../../assets/logo.png'), + text: '通话记录', + bgColor: this.$green, + showType: 'newPage', + routerName: 'callList' + } ] }, device: { title: '孩子管理', list: [ /* { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'red' }, + { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'green' }, + { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'green' }, { imgPath: require('../../assets/logo.png'), text: '留言', bgColor: 'green' }, { imgPath: require('../../assets/logo.png'), text: '留言', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'red' }, + { imgPath: require('../../assets/logo.png'), text: '测试设置', bgColor: 'green' }, { imgPath: require('../../assets/logo.png'), text: '留言', bgColor: 'green' }, { imgPath: require('../../assets/logo.png'), text: '留言', bgColor: 'green' } */ ] @@ -101,39 +113,109 @@ export default { studyHelper: { title: '学习助手', list: [ - { imgPath: require('../../assets/logo.png'), text: '课堂禁用', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '课程表', bgColor: 'red' } + { + imgPath: require('../../assets/logo.png'), + text: '课堂禁用', + bgColor: this.$green, + showType: 'newPage', + routerName: 'prohibit' + }, + { imgPath: require('../../assets/logo.png'), text: '课程表', bgColor: 'green' } ] }, lifeHelper: { title: '生活助手', list: [ - { imgPath: require('../../assets/logo.png'), text: '闹钟', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '支付密码修改', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '短信修改', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '亲友关注', bgColor: 'red' } + { + imgPath: require('../../assets/logo.png'), + text: '闹钟', + bgColor: this.$green, + showType: 'newPage', + routerName: 'clock' + }, + { + imgPath: require('../../assets/logo.png'), + text: '支付密码修改', + bgColor: this.$green, + showType: 'newPage', + routerName: 'changePayPassword' + }, + { + imgPath: require('../../assets/logo.png'), + text: '短信代收', + bgColor: this.$green, + showType: 'newPage', + routerName: 'messageList' + }, + { + imgPath: require('../../assets/logo.png'), + text: '亲友关注', + bgColor: this.$green, + showType: 'newPage', + routerName: 'management' + } ] }, paramSetting: { title: '参数设置', list: [ - { imgPath: require('../../assets/logo.png'), text: '参数设置', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '远程设置', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '休眠设置', bgColor: 'red' } + { + imgPath: require('../../assets/logo.png'), + text: '参数设置', + bgColor: this.$green, + showType: 'newPage', + routerName: 'watchSetting' + }, + { + imgPath: require('../../assets/logo.png'), + text: '远程控制', + bgColor: this.$green, + showType: 'newDialog', + routerName: 'remote' + }, + { + imgPath: require('../../assets/logo.png'), + text: '休眠设置', + bgColor: this.$green, + showType: 'newPage', + routerName: 'sleep' + } ] }, othersSetting: { title: '其他设置', list: [ - { imgPath: require('../../assets/logo.png'), text: '账号安全', bgColor: 'green' }, - { imgPath: require('../../assets/logo.png'), text: '常见问题', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '版本信息', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '关于我们', bgColor: 'red' }, - { imgPath: require('../../assets/logo.png'), text: '退出登录', bgColor: 'red' } + { + imgPath: require('../../assets/logo.png'), + text: '常见问题', + bgColor: this.$green, + showType: 'newPage', + routerName: 'help' + }, + { + imgPath: require('../../assets/logo.png'), + text: '版本信息', + bgColor: this.$green, + showType: 'newDialog', + routerName: 'version' + }, + { imgPath: require('../../assets/logo.png'), text: '关于我们', bgColor: 'green' }, + { + imgPath: require('../../assets/logo.png'), + text: '退出登录', + bgColor: 'green', + showType: 'newDialog', + routerName: 'logout' + } ] }, - userImg: require('../../assets/logo.png') //用户头像 + userImg: require('../../assets/logo.png'), //用户头像 + currentDevice: { + address: '', + lat: '', + lng: '' + } }; }, created() {}, @@ -184,6 +266,7 @@ export default { }); if (isNotNull(item.devicesList)) { + this.currentDevice = { ...item.devicesList[0] }; item.devicesList.forEach(val => { if (val.deviceId == that.$store.getters.deviceId) { this.$store.commit('roleUser', val.roleUser); @@ -201,11 +284,15 @@ export default { .finally(() => { ToastService.clear(); }); + }, + goMap() { + this.$router.push({ + name: 'location' + }); } } }; diff --git a/src/views/myself/location.scss b/src/views/myself/location.scss new file mode 100644 index 0000000..f3371c8 --- /dev/null +++ b/src/views/myself/location.scss @@ -0,0 +1,581 @@ +.home { + + overflow: hidden; + .map-con { + height: calc(100vh - 160px); + background-color: $background; + padding: 20px; + overflow: scroll; + + .areaMask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 666; + } + + .top { + width: 100%; + position: absolute; + top: 100px; + left: 0; + font-size: 16px; + /* 掉线提示语 */ + .notice-is-online { + height: 80px; + position: relative; + z-index: 11; + .van-notice-bar { + height: 100%; + font-size: 16px; + .van-notice-bar__content { + font-size: 16px !important; + } + .van-notice-bar__left-icon { + font-size: 16px; + } + .van-notice-bar__wrap { + height: 80px; + line-height: 80px; + padding-left: 5px; + font-size: 16px; + } + .van-notice-bar__right-icon { + font-size: 16px; + } + } + } + i.news { + position: absolute; + right: 30px; + top: 30px; + width: 70px; + height: 70px; + display: flex; + align-items: center; + justify-content: center; + background-color: #fff; + border-radius: 50%; + z-index: 11; + + &:before { + content: ''; + position: absolute; + left: 10px; + top: 10px; + width: 50px; + height: 50px; + @include icon; + @include icon_position(50, 50, 0, 150); + z-index: 8; + } + + &.on { + &:after { + content: ''; + position: absolute; + right: 2px; + top: 4px; + width: 16px; + height: 16px; + background: #f35151; + border-radius: 50%; + + } + } + } + .shortcuts-container { + position: absolute; + right: 30px; + top: 15vh; + width: 110px; + padding: 20px 0; + background-color: #FFFFFF; + border-radius: 55px; + box-shadow: 0px 8px 25px 0px rgba(117,124,140,0.48); + opacity: 0.9; + z-index: 19; + .shortcuts { + position: relative; + border-width: 80%; + height: 80px; + @include center(); + flex-direction: column; + padding: 10px; + margin: 10px 0; + /* .van-image { + height: 40px; + width: 40px; + } */ + .layer { + height: 40px; + width: 28px; + } + .trajectory { + height: 40px; + width: 36px; + } + .warning { + height: 35px; + width: 40px; + } + .message { + height: 38px; + width: 38px; + } + .phone { + height: 36px; + width: 38px; + } + .spread_right { + height: 35px; + width: 34px; + } + .shortcuts-title { + display: flex; + justify-content: center; + align-items: center; + height: 40px; + p { + font-size: 24px; + line-height: 40px; + color: #666; + padding-top: 8px; + } + } + } + .hide { + @include center(); + } + // :nth-child(3)告警消息在哪里就给哪里添加样式 first-child + .shortcuts:nth-child(3) { + .news { + &:before { + } + &.on { + &:after { + content: ''; + position: absolute; + right: 1px; + top: 4px; + width: 16px; + height: 16px; + background: #f35151; + border-radius: 50%; + + } + } + } + } + .shortcuts:last-child { + border:none; + } + .shortcuts::after { + content: ''; + width: 20px; + height: 1px; + display: block; + margin: 0 auto; + border-bottom: 1px solid rgba(151, 151, 151, 0.1); + } + } + .shortcuts-hide { + position: absolute; + right: 0; + top: 60vh; + height: 68px; + width: 129px; + background-color: #FFFFFF; + z-index: 19; + padding: 19px 0; + border-top-left-radius: 53px; + border-bottom-left-radius: 53px; + box-shadow: 0px 8px 25px 0px rgba(117,124,140,0.48); + opacity: 0.9; + p { + font-size: 24px; + margin: 0 34px 0 46px; + } + i { + /* @include icon_position(50, 50, 50, 200); */ + background: no-repeat; + margin: 5px 42px 0 53px; + @include bgimg(url('../..//assets/img/home/spread_left.png'), 34, 35); + } + } + .noData { + position: absolute; + left: 0; + width: 100%; + height: 70px; + @include center(); + @include colorAndFont(#ff9625, 28); + background-color: #ffe9d2; + z-index: 12; + } + .imgArea { + position: absolute; + top: 20px; + left: 20px; + padding: 8px; + display: flex; + justify-content: flex-start; + align-items: center; + background: #fff; + border-radius: 50px; + z-index: 13; + + + img { + width: 60px !important; + height: 60px !important; + border-radius: 50%; + object-fit: cover; + } + + span { + padding: 0 12px; + @include colorAndFont(#333, 28); + } + } + + .conArea { + position: absolute; + left: 0; + top: 0; + width: 100%; + padding: 12px 0 12px 20px; + background: #fff; + box-sizing: border-box; + display: flex; + transform: translateX(-100%); + transition: left .4s ease-in-out; + z-index: 667; + overflow: scroll; + + &.active { + transform: translateX(0); + } + + .list { + @include center(); + flex-flow: column; + @include colorAndFont(#333, 24); + margin-right: 28px; + + .Myname { + &.active { + text-decoration: underline; + font-weight: bold; + } + } + + .imgA { + width: 100px; + height: 100px; + background: #c5c5c5; + border-radius: 50%; + position: relative; + @include center(); + margin-bottom: 12px; + + + + &>img { + width: 88px; + height: 88px; + border-radius: 50%; + object-fit: cover; + } + + &.active { + width: 105px; + height: 105px; + position: relative; + background: #c5c5c5; + box-shadow: 0 0 10px 4px rgba(185, 185, 185, 0.8); + + &:after { + content: ''; + position: absolute; + bottom: -15px; + width: 0; + height: 0; + border-top: 16px solid #c5c5c5; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + } + } + + &.online { + background: #5fcc0e; + + &.active { + position: relative; + background: #5fcc0e; + box-shadow: 0 0 10px 4px rgba(95, 204, 14, 0.8); + + &:after { + content: ''; + position: absolute; + bottom: -15px; + width: 0; + height: 0; + border-top: 16px solid #5fcc0e; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + } + } + } + } + + } + } + } + + .bottom { + width: 100%; + position: fixed; + left: 0; + bottom: 0; + z-index: 600; + box-shadow: 0 0 20px rgba(185, 185, 185, 0.4); + + .conArea { + position: relative; + + .toggle { + position: absolute; + left: 20px; + // top: px2rem(-238); + top: -154px; + width: 84px; + background: #fff; + border-radius: 10px; + @include center(); + flex-flow: column; + + span { + width: 84px; + height: 92px; + @include center(); + + i { + width: 50px; + height: 50px; + @include icon; + @include icon_position(50, 50, 0, 200); + + &.tole { + @include icon_position(50, 50, 300, 100); + } + } + + // &:last-child i { + // @include icon_position(50, 50, 0, 300); + + // &.on { + // -webkit-transform: rotate(360deg); + // animation: rotation 1s linear infinite; + // -moz-animation: rotation 1s linear infinite; + // -webkit-animation: rotation 1s linear infinite; + // -o-animation: rotation 1s linear infinite; + // } + // } + + } + } + .con { + margin-bottom: 5px; + padding: 20px 0 0 28px; + // min-height: px2rem(184); + background: #fff; + border-radius: 24px 24px 0 0; + // box-shadow: 0 5px 4px palegoldenrod; + + .title { + width: 600px; + @include colorAndFont(#333, 34); + margin-bottom: 36px; + } + + .adr { + // @include colorAndFont(#999, 28); + // padding-right: px2rem(140); + // margin-bottom: 36px; + + span { + margin-left: 15px; + padding: 0 8px; + height: 30px; + @include colorAndFont(#999, 20); + background: #fafafa; + border: 1px solid #b5b5b5; + border-radius: 4px; + } + } + + .states { + display: flex; + justify-content: flex-start; + align-items: center; + + span { + display: flex; + justify-content: flex-start; + align-items: center; + @include colorAndFont(#999, 24); + + em { + position: relative; + margin-right: 10px; + padding: 1px; + width: 34px; + height: 20px; + border: 2px solid #5fcc0e; + border-radius: 4px; + box-sizing: border-box; + display: flex; + align-items: center; + + i { + content: ''; + width: 100%; + height: 100%; + background: #5fcc0e; + } + + &:after { + content: ' '; + width: 4px; + height: 8px; + background: #5fcc0e; + position: absolute; + right: -4px; + } + + &.red { + @include center(); + border-color: #ff4b21; + background: transparent; + + i { + width: 11px; + height: 14px; + @include icon; + @include icon_position(11, 14, 20, 125); + } + + &:after { + background: #ff4b21; + } + } + + &.warn { + justify-content: flex-start; + border-color: #ff4b21; + background: transparent; + + i { + background: #ff4b21; + } + + &:after { + background: #ff4b21; + } + } + } + + &:first-child { + color: $blue; + margin-right: 24px; + // &:before { + // content: ''; + // margin-right: 10px; + // display: inline-block; + // width: 42px; + // height: px2rem(26); + // background: #ff8c8c; + // } + } + } + } + + .operate { + position: absolute; + right: 40px; + top: -50px; + display: flex; + justify-content: flex-start; + align-items: center; + flex-flow: column; + + span { + width: 84px; + height: 84px; + background: #fff; + border-radius: 50%; + margin-top: 4px; + margin-bottom: 20px; + box-shadow: 0 0 14px 2px rgba(150, 150, 150, 0.4); + @include center(); + + i { + width: 50px; + height: 50px; + @include icon; + @include icon_position(50, 50, 0, 300); + } + + &.position { + background: $blue; + box-shadow: 0 0 14px 2px rgba(37, 153, 255, 0.4); + i { + @include icon_position(50, 50, 0, 350); + + &.on { + -webkit-transform: rotate(360deg); + + animation: rotation 1s linear infinite; + + -moz-animation: rotation 1s linear infinite; + + -webkit-animation: rotation 1s linear infinite; + + -o-animation: rotation 1s linear infinite; + } + } + .interval-time { + @include colorAndFont(#eee, 24); + } + .icon-loading { + /* position: absolute; + top: 0; + left: 0; */ + height: 40px; + width: 40px; + .van-loading__circular { + background: #3296fa; + } + } + } + } + + em { + font-style: normal; + @include colorAndFont(#999, 20); + } + } + } + } + + + + .tarbar { + position: relative; + } + } +} +} diff --git a/src/views/myself/location.vue b/src/views/myself/location.vue new file mode 100644 index 0000000..70f02f3 --- /dev/null +++ b/src/views/myself/location.vue @@ -0,0 +1,1705 @@ + + + + + diff --git a/src/views/myself/management.vue b/src/views/myself/management.vue new file mode 100644 index 0000000..0e5656d --- /dev/null +++ b/src/views/myself/management.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/views/myself/messageList.vue b/src/views/myself/messageList.vue new file mode 100644 index 0000000..f6cec1f --- /dev/null +++ b/src/views/myself/messageList.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/src/views/myself/news/news.vue b/src/views/myself/news/news.vue new file mode 100644 index 0000000..7f1daf4 --- /dev/null +++ b/src/views/myself/news/news.vue @@ -0,0 +1,435 @@ + + + + diff --git a/src/views/myself/prohibit.vue b/src/views/myself/prohibit.vue new file mode 100644 index 0000000..8bd0ba3 --- /dev/null +++ b/src/views/myself/prohibit.vue @@ -0,0 +1,252 @@ + + + + diff --git a/src/views/myself/replace.vue b/src/views/myself/replace.vue new file mode 100644 index 0000000..23c104a --- /dev/null +++ b/src/views/myself/replace.vue @@ -0,0 +1,321 @@ + + + + diff --git a/src/views/myself/sendMessage.vue b/src/views/myself/sendMessage.vue new file mode 100644 index 0000000..d8f7527 --- /dev/null +++ b/src/views/myself/sendMessage.vue @@ -0,0 +1,157 @@ +