移动端

This commit is contained in:
peihaoyu 2020-09-16 09:25:13 +08:00
parent 2b4aab197a
commit 5a245841ce
53 changed files with 8946 additions and 0 deletions

76
HSLink-app/App.vue Normal file
View File

@ -0,0 +1,76 @@
<script>
export default {
onLaunch: function() {
console.log('App Launch');
setTimeout(() => {
uni.setTabBarBadge({
index: 1,
text: '31'
});
uni.showTabBarRedDot({
index: 3
});
}, 1000);
},
onShow: function() {
console.log('App Show');
},
onHide: function() {
console.log('App Hide');
}
};
</script>
<style>
@import "colorui/main.css";
@import "colorui/icon.css";
/* 头条小程序需要把 iconfont 样式放到组件外 */
/*每个页面公共css */
page {
height: 100%;
width: 100%;
min-height: 100%;
/* display: flex; */
font-size: 16px;
}
/* #ifdef MP-BAIDU */
page {
/* width: 100%;
height: 100%;
display: block; */
}
swan-template {
width: 100%;
min-height: 100%;
display: flex;
}
/* 原生组件模式下需要注意组件外部样式 */
custom-component {
width: 100%;
min-height: 100%;
/* display: flex; */
}
/* #endif */
/* #ifdef MP-ALIPAY */
page {
min-height: 100vh;
}
/* #endif */
/* 原生组件模式下需要注意组件外部样式 */
m-input {
width: 100%;
/* min-height: 100%; */
/* display: flex;
flex: 1; */
}
</style>

View File

@ -0,0 +1,184 @@
/*
Animation 微动画
基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28
*/
/* css 滤镜 控制黑白底色gif的 */
.gif-black{
mix-blend-mode: screen;
}
.gif-white{
mix-blend-mode: multiply;
}
/* Animation css */
[class*=animation-] {
animation-duration: .5s;
animation-timing-function: ease-out;
animation-fill-mode: both
}
.animation-fade {
animation-name: fade;
animation-duration: .8s;
animation-timing-function: linear
}
.animation-scale-up {
animation-name: scale-up
}
.animation-scale-down {
animation-name: scale-down
}
.animation-slide-top {
animation-name: slide-top
}
.animation-slide-bottom {
animation-name: slide-bottom
}
.animation-slide-left {
animation-name: slide-left
}
.animation-slide-right {
animation-name: slide-right
}
.animation-shake {
animation-name: shake
}
.animation-reverse {
animation-direction: reverse
}
@keyframes fade {
0% {
opacity: 0
}
100% {
opacity: 1
}
}
@keyframes scale-up {
0% {
opacity: 0;
transform: scale(.2)
}
100% {
opacity: 1;
transform: scale(1)
}
}
@keyframes scale-down {
0% {
opacity: 0;
transform: scale(1.8)
}
100% {
opacity: 1;
transform: scale(1)
}
}
@keyframes slide-top {
0% {
opacity: 0;
transform: translateY(-100%)
}
100% {
opacity: 1;
transform: translateY(0)
}
}
@keyframes slide-bottom {
0% {
opacity: 0;
transform: translateY(100%)
}
100% {
opacity: 1;
transform: translateY(0)
}
}
@keyframes shake {
0%,
100% {
transform: translateX(0)
}
10% {
transform: translateX(-9px)
}
20% {
transform: translateX(8px)
}
30% {
transform: translateX(-7px)
}
40% {
transform: translateX(6px)
}
50% {
transform: translateX(-5px)
}
60% {
transform: translateX(4px)
}
70% {
transform: translateX(-3px)
}
80% {
transform: translateX(2px)
}
90% {
transform: translateX(-1px)
}
}
@keyframes slide-left {
0% {
opacity: 0;
transform: translateX(-100%)
}
100% {
opacity: 1;
transform: translateX(0)
}
}
@keyframes slide-right {
0% {
opacity: 0;
transform: translateX(100%)
}
100% {
opacity: 1;
transform: translateX(0)
}
}

View File

@ -0,0 +1,69 @@
<template>
<view>
<view class="cu-custom" :style="[{height:CustomBar + 'px'}]">
<view class="cu-bar fixed" :style="style" :class="[bgImage!=''?'none-bg text-white bg-img':'',bgColor]">
<view class="action" @tap="BackPage" v-if="isBack">
<text class="cuIcon-back"></text>
<slot name="backText"></slot>
</view>
<view class="content" :style="[{top:StatusBar + 'px'}]">
<slot name="content"></slot>
</view>
<slot name="right"></slot>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
StatusBar: this.StatusBar,
CustomBar: this.CustomBar
};
},
name: 'cu-custom',
computed: {
style() {
var StatusBar= this.StatusBar;
var CustomBar= this.CustomBar;
var bgImage = this.bgImage;
var style = `height:${CustomBar}px;padding-top:${StatusBar}px;`;
if (this.bgImage) {
style = `${style}background-image:url(${bgImage});`;
}
return style
}
},
props: {
bgColor: {
type: String,
default: ''
},
isBack: {
type: [Boolean, String],
default: false
},
bgImage: {
type: String,
default: ''
},
},
methods: {
BackPage() {
if (getCurrentPages().length < 2 && 'undefined' !== typeof __wxConfig) {
let url = '/' + __wxConfig.pages[0]
return uni.redirectTo({url})
}
uni.navigateBack({
delta: 1
});
}
}
}
</script>
<style>
</style>

1226
HSLink-app/colorui/icon.css Normal file

File diff suppressed because one or more lines are too long

3912
HSLink-app/colorui/main.css Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,191 @@
<template>
<view class="search">
<view class="content" :style="{ 'border-radius': radius + 'px', border: border,backgroundColor: backgroundColor }">
<view class="content-box" :class="{ center: mode === 2 }">
<text class="icon icon-search">&#xe61c;</text>
<input class="input" :class="{ center: !active && mode === 2 }" :focus="isFocus" :placeholder="placeholder" v-model="inputVal" @focus="focus" @blur="blur" />
<!-- <view v-if="!active && mode === 2" class="input sub" @click="getFocus">请输入搜索内容</view> -->
<text v-if="isDelShow" class="icon icon-del" @click="clear">&#xe644;</text>
</view>
<view v-show="(active && show && button === 'inside') || (isDelShow && button === 'inside')" class="searchBtn" @click="search">搜索</view>
</view>
<view v-if="button === 'outside'" class="button" :class="{ active: show || active }" @click="search">
<view class="button-item">{{ !show ? searchName : '搜索' }}</view>
</view>
</view>
</template>
<script>
export default {
props: {
value: {
type: String
},
mode: {
type: Number,
default: 1
},
button: {
type: String,
default: 'outside'
},
show: {
type: Boolean,
default: true
},
radius: {
type: String,
default: '60'
},
placeholder: {
type: String,
default: '请输入搜索内容'
},
backgroundColor: {
type: String,
default: '#fff'
},
border: { type: String, default: '1px #f5f5f5 solid' }
},
data() {
return {
active: false,
inputVal: this.value,
searchName: '取消',
isDelShow: false,
isFocus: false
};
},
methods: {
focus() {
this.active = true;
},
blur() {
this.isFocus = false;
if (!this.inputVal) {
this.active = false;
}
},
clear() {
this.inputVal = '';
this.active = false;
this.$emit('search', '');
},
getFocus() {
this.isFocus = true;
},
search() {
if (!this.inputVal) return;
console.log(this.inputVal);
this.$emit('search', this.inputVal);
}
},
watch: {
value(newVal) {
this.inputVal = newVal;
},
inputVal(newVal) {
this.$emit('input', newVal);
if (newVal) {
this.searchName = '搜索';
this.isDelShow = true;
} else {
this.searchName = '取消';
this.isDelShow = false;
}
}
}
};
</script>
<style lang="scss" scoped>
.search {
display: flex;
width: 100%;
border-bottom: 1px #f5f5f5 solid;
box-sizing: border-box;
padding: 15upx;
font-size: $uni-font-size-base;
background: #fff;
.content {
display: flex;
align-items: center;
width: 100%;
height: 60upx;
border: 1px #ccc solid;
background: #fff;
overflow: hidden;
transition: all 0.2s linear;
border-radius: 30px;
padding-top: 0;
padding-bottom: 0;
.content-box {
width: 100%;
display: flex;
align-items: center;
&.center {
justify-content: center;
}
.icon {
padding: 0 15upx;
&.icon-del {
font-size: 38upx;
}
}
.input {
width: 100%;
max-width: 100%;
line-height: 60upx;
height: 60upx;
transition: all 0.2s linear;
&.center {
width: 200upx;
}
&.sub {
// position: absolute;
width: auto;
color: grey;
}
}
}
.searchBtn {
height: 100%;
flex-shrink: 0;
padding: 0 30upx;
background: $uni-color-success;
line-height: 60upx;
color: #fff;
border-left: 1px #ccc solid;
transition: all 0.3s;
}
}
.button {
display: flex;
align-items: center;
justify-content: center;
position: relative;
flex-shrink: 0;
width: 0;
transition: all 0.2s linear;
white-space: nowrap;
overflow: hidden;
&.active {
padding-left: 15upx;
width: 100upx;
}
}
}
@font-face {
font-family: 'iconfont';
src: url('https://at.alicdn.com/t/font_989023_efq0mtli526.ttf') format('truetype');
}
.icon {
font-family: iconfont;
font-size: 32upx;
font-style: normal;
color: #999;
}
</style>

View File

@ -0,0 +1,123 @@
<template>
<view class="noData hideToShow" :style="{ backgroundColor: bgColor }">
<view class="image"><image src="@/static/img/noData.png"></image></view>
<!-- 网络连接失败默认显示内容 -->
<view class="content" v-if="netType == 'none' && custom == false">
<text class="title" :style="{ color: mainColor }">{{ mainText }}</text>
<text class="desc" :style="{ color: viceColor }">{{ viceText }}</text>
<!-- #ifdef MP -->
<button class="btn" type="default" @tap="setting(true)">刷新试试</button>
<!-- #endif -->
</view>
<!-- 自定义内容 -->
<slot />
</view>
</template>
<script>
import { mapGetters } from 'vuex';
import settings from '@/static/js/settings.js';
export default {
props: {
isShow: {
type: Boolean,
default: false
},
/* 背景颜色自定义 */
bgColor: {
type: String,
default: '#ffffff'
},
/* 标题颜色自定义 */
mainColor: {
type: String,
default: '#373a40'
},
/* 描述颜色自定义 */
viceColor: {
type: String,
default: '#8b8b8b'
},
//
custom: {
type: false,
default: false
}
},
computed: {
...mapGetters(['netWorkStatus'])
},
data() {
return {
type: '',
netType: this.networkType,
mainText: '网络居然崩溃了',
viceText: '别紧张,去检测一下网络设置',
netWorkImg: '/static/images/noNetWork.png',
noDataImg: '/static/images/notFound.png'
};
},
methods: {
setting(status) {
/* 检查到网络已打开,请点击按钮手动刷新数据 */
if (status) {
this.$emit('handle', status);
/* 如果没有网络,打开系统设置检查网络连接 */
} else {
settings.open(settings.SETTINGS);
}
}
}
};
</script>
<style lang="less" scoped>
.noData {
padding: 100rpx;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
.image {
width: 187upx;
height: 120upx;
image {
width: 100%;
height: 100%;
}
}
.title{
color: #bfbfbf!important;
}
.content {
color: #bfbfbf!important;
width: 100%;
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
letter-spacing: 1upx;
.title {
font-size: 36upx;
}
.desc {
font-size: 28upx;
margin-top: 6upx;
}
.btn {
width: 160upx;
height: 65upx;
color: #868d91;
font-size: 24upx;
margin-top: 34upx;
border-radius: 36upx;
border: 1upx solid #d4d4d4;
}
.btn::after {
border: none;
}
}
}
</style>

View File

@ -0,0 +1,16 @@
@font-face {font-family: "iconfont";
src: url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAKUAAsAAAAABlAAAAJJAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcApcdgE2AiQDCAsGAAQgBYRtBy8bmwXIrjBu4UkbIjvjLimCmu1EP9KHAd4jgmi/3+zde18toRbpnkUTzRKRUkgQE6RA9xL+tMuG6RYp8bFsgmbcecAB9mDhH67tDS3pQsIsmSbPL7chM1RKsFr5mNDBoUDPJItlaZG8fvhi/tciWcbRfJ7L6U2gA1l9oBz3orEmTRpAvTigAPfCKLISSiNtGLvAJdwn0DCHgMfN/kgLK1jLAvE0p7YWzoUVCparCZWavYV4U6qllxTNa/j5+JeKMEmZWQ1njw1PK39hF+TnFG59QoSADpfI2AEUxFVt+oQpGIc10pYlYF+1wRfTfZfYq12wv86qboEZqLgnpau61VyC21L06V8d9cuJmT795hWPJp8ayHj0wrZNx+/+1Nzdf8MBtu9H2p+tgB5tn/W1PEZvgeD5Xf/if61ZgE9foa3Qz0ttd57gtyh79hS62nKmQlXWDiczp2tqaGAK+we+sZbxPeRDzXiEt2o2RVazQhbsDkpNu6io2UPDNn24aagxRVHHlgkQehaSjg9kPYcs2IvSxENFL0w03ASd2bQW82is0d6iB+YE2ZWCOO5tNKodIN0xe51Vh/wE15t5DGQsUcy1UOB6jg19T1NjSyCsJQcFHkPGJJS1XKC7jaXtVpV4nNS9KGYl16KOrCHbFvIA4wRkLkkg/uitaOn9A4jaYWzrlq6a/ARa25hPDiRG9CBbBtGr616e6faolGGLAMGaxAEFZiGGkUCpn7WAXFsxaURSKeH2oNDXEFvfxL/uGDRY1hT2lKy8Y3KDmgYA') format('woff2')
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-close:before {
content: "\e622";
}

View File

@ -0,0 +1,420 @@
<template>
<view v-if="isShow">
<view
@tap.stop.prevent
@touchmove.stop.prevent
class="wyb-popup-box"
:style="{
transitionDuration: duration + 'ms',
opacity: contentOpacity || (type === 'center' ? 0 : 1),
transform: contentTransform || autoTransform,
zIndex: zIndex,
borderTopRightRadius: type === 'center' || type === 'bottom' || type === 'left' ? radius + 'px' : 0,
borderTopLeftRadius: type === 'center' || type === 'bottom' || type === 'right' ? radius + 'px' : 0,
borderBottomRightRadius: type === 'center' || type === 'top' || type === 'left' ? radius + 'px' : 0,
borderBottomLeftRadius: type === 'center' || type === 'top' || type === 'right' ? radius + 'px' : 0,
width: autoWidth,
height: autoHeight,
minWidth: width + 'rpx',
minHeight: height + 'rpx',
top: sizeChange && type === 'center' ? winReTop : autoTop,
bottom: autoBottom,
left: autoLeft,
right: autoRight,
backgroundColor: bgColor}">
<view
class="wyb-popup-close"
v-if="showCloseIcon"
:style="{
width: closeIcon ? closeIconSize + 'rpx' : 'auto',
height: closeIcon ? closeIconSize + 'rpx' : 'auto',
top: closeIconPos === 'top-right' || closeIconPos === 'top-left' ? vertOffset + 'rpx' : 'auto',
bottom: closeIconPos === 'bottom-right' || closeIconPos === 'bottom-left' ? vertOffset + 'rpx' : 'auto',
left: closeIconPos === 'bottom-left' || closeIconPos === 'top-left' ? horiOffset + 'rpx' : 'auto',
right: closeIconPos === 'bottom-right' || closeIconPos === 'top-right' ? horiOffset + 'rpx' : 'auto'}">
<image class="wyb-popup-custom-close" v-if="showCloseIcon&&closeIcon" :src="closeIcon" @tap="hide" :style="{
width: closeIconSize + 'rpx',
height: closeIconSize + 'rpx'}" />
<view v-if="showCloseIcon&&!closeIcon" class="iconfont icon-close" @tap="hide" />
</view>
<scroll-view
class="wyb-popup-container"
:style="{
width: autoWidth,
height: autoHeight}"
:enable-flex="true"
:scroll-y="scrollY"
:scroll-x="scrollX">
<view class="wyb-popup-slot"><slot></slot></view>
</scroll-view>
</view>
<view
class="wyb-popup-mask"
@tap.stop="close"
@touchmove.stop.prevent
:style="{
opacity: maskOpacity,
transitionDuration: duration + 'ms',
backgroundColor: 'rgba(0, 0, 0, ' + maskAlpha + ')',
zIndex: zIndex - 1}" />
</view>
</template>
<script>
export default {
data() {
return {
w: uni.getSystemInfoSync().screenWidth,
h: uni.getSystemInfoSync().screenHeight,
isShow: false,
winReBottom: '',
winReTop: '',
sizeChange: false,
contentOpacity: null,
contentTransform: null,
maskOpacity: 0
}
},
computed: {
autoCenterTop() {
let statusBarHeight = uni.getSystemInfoSync().statusBarHeight
let windowHeight = uni.getSystemInfoSync().windowHeight
let popupHeight = this.rpxToPx(this.height)
let navHeight = 44
let result = `${(windowHeight - popupHeight) / 2 - this.negativeTop}px`
return result
},
autoTransform() {
let result = ''
switch(this.type) {
case 'center':
if (this.centerAnim === 'zoom-lessen') {
result = `scale(${this.zoomLessenMulti})`
} else if (this.centerAnim === 'slide-up') {
result = `translateY(${100 * this.slideMulti}%)`
} else if (this.centerAnim === 'slide-down') {
result = `translateY(${-100 * this.slideMulti}%)`
} else if (this.centerAnim === 'fade') {
result = 'auto'
}
break
case 'bottom':
result = 'translateY(100%)'
break
case 'top':
result = 'translateY(-100%)'
break
case 'left':
result = 'translateX(-100%)'
break
case 'right':
result = 'translateX(100%)'
break
}
return result
},
autoWidth() {
if (this.type === 'center') {
return `${this.width}rpx`
} else {
if (this.mode === 'size-fixed') {
if (this.type === 'top' || this.type === 'bottom') {
return '100%'
} else {
return `${this.width}rpx`
}
} else {
if (this.type === 'top' || this.type === 'bottom') {
return '100%'
} else {
return 'auto'
}
}
}
},
autoHeight() {
if (this.type === 'center') {
return `${this.height}rpx`
} else {
if (this.mode === 'size-fixed') {
if (this.type === 'left' || this.type === 'right') {
return '100%'
} else {
return `${this.height}rpx`
}
} else {
if (this.type === 'left' || this.type === 'right') {
return '100%'
} else {
return 'auto'
}
}
}
},
autoTop() {
if (this.type === 'center') {
return this.autoCenterTop
} else if (this.type === 'bottom') {
return 'auto'
} else {
return 0
}
},
autoBottom() {
if (this.type === 'center' || this.type === 'top') {
return 'auto'
} else {
return 0
}
},
autoLeft() {
if (this.type === 'center') {
return `${(this.w - this.rpxToPx(this.width)) / 2}px`
} else if (this.type === 'right') {
return 'auto'
} else {
return 0
}
},
autoRight() {
if (this.type === 'center' || this.type === 'left') {
return 'auto'
} else {
return 0
}
}
},
props: {
type: {
type: String,
default: 'bottom'
},
mode: {
type: String,
default: 'size-auto'
},
height: {
type: [String, Number],
default: 400
},
width: {
type: [String, Number],
default: 500
},
radius: {
type: [String, Number],
default: 0
},
zIndex: {
type: [String, Number],
default: 10076
},
maskClickClose: {
type: Boolean,
default: true
},
maskAlpha: {
type: Number,
default: 0.5
},
duration: {
type: Number,
default: 400
},
showCloseIcon: {
type: Boolean,
default: false
},
scrollY: {
type: Boolean,
default: false
},
scrollX: {
type: Boolean,
default: false
},
closeIconPos: {
type: String,
default: 'top-right'
},
closeIcon: {
type: String,
default: ''
},
closeIconSize: {
type: [String, Number],
default: '20'
},
vertOffset: {
type: [String, Number],
default: '22'
},
horiOffset: {
type: [String, Number],
default: '22'
},
centerAnim: {
type: String,
default: 'zoom-lessen'
},
bgColor: {
type: String,
default: '#ffffff'
},
zoomLessenMulti: {
type: Number,
default: 1.15
},
slideMulti: {
type: Number,
default: 1
},
negativeTop: {
type: Number,
default: 0
}
},
mounted() {
// #ifdef H5
let winHeight = uni.getSystemInfoSync().windowHeight
uni.onWindowResize(res => {
this.sizeChange = true
if (this.type === 'bottom') {
this.winReBottom = winHeight - res.size.windowHeight + 'px'
} else if (this.type === 'center') {
this.winReTop = ((res.size.windowHeight - this.rpxToPx(this.height)) / 2 - this.negativeTop) + 'px'
}
})
// #endif
},
methods: {
close() {
this.maskClickClose && this.hide()
},
show() {
this.isShow = true
// #ifndef H5
this.$nextTick(() => {
this.maskIn()
this.contentIn()
this.wait(this.duration + 1).then(() => {
this.$emit('show', {
pageScroll: false,
overflow: 'hidden'
})
})
})
// #endif
// #ifdef H5
this.wait(10).then(() => {
this.maskIn()
this.contentIn()
this.wait(this.duration + 1).then(() => {
this.$emit('show', {
pageScroll: false,
overflow: 'hidden'
})
})
})
// #endif
},
hide() {
this.contentOut()
this.maskOut()
this.wait(this.duration + 1).then(() => {
this.isShow = false
this.$emit('hide', {
pageScroll: true,
overflow: 'scroll'
})
})
},
contentIn() {
switch (this.type) {
case 'center':
if (this.centerAnim === 'zoom-lessen') {
this.contentOpacity = 1
this.contentTransform = 'scale(1)'
} else if (this.centerAnim === 'slide-up' || this.centerAnim === 'slide-down') {
this.contentOpacity = 1
this.contentTransform = 'translateY(0)'
} else if (this.centerAnim === 'fade') {
this.contentOpacity = 1
}
break
case 'bottom':
case 'top':
this.contentTransform = 'translateY(0)'
break
case 'left':
case 'right':
this.contentTransform = 'translateX(0)'
break
}
},
contentOut() {
this.contentOpacity = null
this.contentTransform = null
},
maskIn() {
this.maskOpacity = 1
},
maskOut() {
this.maskOpacity = 0
},
rpxToPx(rpx) {
return rpx / 750 * this.w
},
wait(time) {
return new Promise(resolve => {
setTimeout(() => {
resolve()
}, time)
})
}
}
}
</script>
<style>
@import "./iconfont.css";
.wyb-popup-box{
position: fixed;
transition-timing-function: ease-out;
transition-property: opacity, transform;
}
.wyb-popup-container {
position: relative;
box-sizing: border-box;
}
.wyb-popup-slot {
width: 100%;
height: 100%;
}
.wyb-popup-mask {
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
transition-timing-function: ease;
transition-property: opacity, transform;
}
.wyb-popup-close {
position: absolute;
fontSize: 40rpx;
color: #808080;
z-index: 20000;
}
.wyb-popup-custom-close {
left: 0;
top: 0;
position: absolute;
}
</style>

17
HSLink-app/main.js Normal file
View File

@ -0,0 +1,17 @@
import Vue from 'vue';
import App from './App';
import '@/static/css/public.css';
import '@/static/js/public.js';
import store from './store';
Vue.config.productionTip = false;
Vue.prototype.$store = store;
App.mpType = 'app';
const app = new Vue({
store,
...App
})
app.$mount()

59
HSLink-app/manifest.json Normal file
View File

@ -0,0 +1,59 @@
{
"name" : "peinikanxue",
"appid" : "__UNI__7C9492E",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
"app-plus" : {
"usingComponents" : true,
"compilerVersion" : 3,
/* 5+App */
"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.READ_CONTACTS\"/>",
"<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.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<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.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
"ios" : {},
/* ios */
"sdkConfigs" : {}
}
},
/* SDK */
"quickapp" : {},
/* */
"mp-weixin" : {
/* */
"appid" : "",
"setting" : {
"urlCheck" : true
},
"usingComponents" : true
}
}

148
HSLink-app/pages.json Normal file
View File

@ -0,0 +1,148 @@
{
"pages": [
//pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/login/login",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "登录",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/tabbar/homepage/homepage",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "首页",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/tabbar/homepage/data-details",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "文章内容",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/tabbar/follow/follow",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "关注",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/tabbar/release/release",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "发布",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/tabbar/message/message",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "消息",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/tabbar/my/my",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "我",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/release-detial/release-release/release-release",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "发图文",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/release-detial/release-video/release-video",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "发视频",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
},
{
"path": "pages/release-detial/release-qa/release-qa",
"style": {
"enablePullDownRefresh": true,
"navigationBarTitleText": "提问",//
"navigationBarBackgroundColor": "#333",//
"navigationBarTextStyle": "white" //whiteblack
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"borderStyle": "black",
"backgroundColor": "#333",
"color": "#FFFFFF",
"selectedColor": "#f33e54",
"list": [{
"pagePath": "pages/tabbar/homepage/homepage",
"iconPath": "static/img/tabbar/home.png",
"selectedIconPath": "static/img/tabbar/homeactive.png",
"text": "首页"
},
{
"pagePath": "pages/tabbar/follow/follow",
"iconPath": "static/img/tabbar/guanzhu.png",
"selectedIconPath": "static/img/tabbar/guanzhuactive.png",
"text": "关注"
},
//#ifdef MP-WEIXIN
{
"pagePath": "pages/tabbar/release/release",
"iconPath": "static/img/tabbar/add.png",
"selectedIconPath": "static/img/tabbar/addactive.png",
"text": "发布"
},
//#endif
//#ifndef MP-WEIXIN
{
"pagePath": "pages/tabbar/release/release",
"iconPath": "static/img/tabbar/add.png",
"selectedIconPath": "static/img/tabbar/addactive.png"
},
//#endif
{
"pagePath": "pages/tabbar/message/message",
"iconPath": "static/img/tabbar/news.png",
"selectedIconPath": "static/img/tabbar/newsactive.png",
"text": "消息"
},
{
"pagePath": "pages/tabbar/my/my",
"iconPath": "static/img/tabbar/me.png",
"selectedIconPath": "static/img/tabbar/meactive.png",
"text": "我"
}
]
}
}

View File

@ -0,0 +1,453 @@
<template>
<view class="login">
<view class="login-main">
<view class="login-logo">
</view>
<view class="login-list flex border-all">
<view class="iconfont icon-shoujihao flex"></view>
<view class="login-input">
<input type="number" maxlength="11" placeholder="请输入手机号" class="is-input1 " v-model="phone" />
</view>
</view>
<view class="login-list flex border-all">
<view class="iconfont icon-yanzhengma flex"></view>
<view class="login-input">
<input type="number" maxlength="6" placeholder="请输入验证码" class="is-input1 " v-model="code" />
</view>
<view class="code-sx"></view>
<view class="codeimg" @click.stop="getCode()">{{getCodeText}}</view>
</view>
<button class="cu-btn login-btn" @tap="doLogin"> / </button>
<view class="login-tip">点击登录表示同意
<navigator>软件许可及服务协议</navigator>
</view>
</view>
<view class="login-footer">
<view class="footer-tip flex">其他登录方式</view>
<view class="footer-other flex">
<view class="other-list">
<image src="../../static/ic-QQ@2x.png" mode="aspectFill" @tap="login_qq()"></image>
</view>
<view class="other-list">
<image src="../../static/ic-weixin@2x.png" mode="aspectFill" @tap="login_weixin()"></image>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
phone: "",
code: '',
key: '',
getCodeText: '获取验证码',
getCodeBtnColor: "#ffffff",
getCodeisWaiting: false,
}
},
onLoad() {
this.checkGuide();
},
methods: {
checkGuide() {
//
const launchFlag = uni.getStorageSync('launchFlag');
if (launchFlag) {
this.isLogin();
} else {
uni.redirectTo({
url: '/pages/guide/list'
});
}
},
isLogin() {
//
try {
const value = uni.getStorageSync('access_token');
if (value) {
//
console.log("已登录用户:", value);
uni.switchTab({
url: '/pages/index/index'
});
}
} catch (e) {
}
},
Timer() {},
getCode() {
let _this = this;
uni.hideKeyboard()
if (_this.getCodeisWaiting) {
return;
}
if (!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(_this.phone))) {
uni.showToast({
title: '请填写正确手机号码',
icon: "none"
});
return false;
}
_this.getCodeText = "发送中..."
_this.getCodeisWaiting = true;
_this.getCodeBtnColor = "rgba(255,255,255,0.5)"
uni.request({
url: _this.websiteUrl + '/sms/notification-sms/codes',
data: {
'phone': _this.phone
},
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
//
},
success: (res) => {
_this.key = res.data.data.key;
//TODO
_this.code = res.data.data.code;
}
});
//
setTimeout(() => {
//uni.showToast({title: '',icon:"none"});
_this.setTimer();
}, 1000)
},
setTimer() {
let holdTime = 59,
_this = this;
_this.getCodeText = "重新获取(60)"
_this.Timer = setInterval(() => {
if (holdTime <= 0) {
_this.getCodeisWaiting = false;
_this.getCodeBtnColor = "#ffffff";
_this.getCodeText = "获取验证码"
clearInterval(_this.Timer);
return;
}
_this.getCodeText = "重新获取(" + holdTime + ")"
holdTime--;
}, 1000)
},
doLogin() {
let _this = this;
uni.hideKeyboard()
//
// if(!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.phone))){
// uni.showToast({title: '',icon:"none"});
// return false;
// }
uni.request({
url: _this.websiteUrl + '/token/sys/login-sms',
data: {
'key': _this.key,
'code': _this.code,
'phone': _this.phone
},
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
success: (res) => {
if (res.data.code == 200) {
_this.login(true, res.data.data, function() {
_this.getRongyToken();
});
} else {
uni.showToast({
title: '验证码不正确',
icon: "none"
});
return false;
}
}
});
},
//QQ
login_qq() {
let _this = this;
uni.login({
provider: 'qq',
success: function(loginRes) {
//
uni.getUserInfo({
provider: 'qq',
success: function(infoRes) {
_this.other_login(loginRes, infoRes, 'qq')
}
});
}
});
},
//
login_weixin() {
let _this = this;
uni.login({
provider: 'weixin',
success: function(loginRes) {
//
uni.getUserInfo({
provider: 'weixin',
success: function(infoRes) {
_this.other_login(loginRes, infoRes, 'wx');
}
});
}
});
},
//
other_login(loginRes, infoRes, type) {
let _this = this;
let url;
let pram = {};
// _this.loginRes=JSON.stringify(loginRes).toString();
// _this.infoRes=JSON.stringify(infoRes).toString();
switch (type) {
case 'qq':
url = '/token/sys/login-qq';
pram = {
'openid': loginRes.authResult.openid,
'nickname': infoRes.userInfo.nickname,
'gender': infoRes.userInfo.gender,
'province': infoRes.userInfo.province,
'city': infoRes.userInfo.city,
'figureurl': infoRes.userInfo.figureurl_qq
}
break;
case 'wx':
url = '/token/sys/login-wechat';
pram = {
'openid': loginRes.authResult.openid,
'nickname': infoRes.userInfo.nickName,
'sex': infoRes.userInfo.gender,
'province': infoRes.userInfo.province,
'city': infoRes.userInfo.city,
'country': infoRes.userInfo.country,
'headimgurl': infoRes.userInfo.avatarUrl,
'unionid': loginRes.authResult.unionid
}
break;
default:
}
uni.request({
url: _this.websiteUrl + url,
data: pram,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
success: (res) => {
if (res.data.code == 200) {
//_this.testData=JSON.stringify(res.data.data).toString();;
_this.login(true, res.data.data, function() {
_this.getRongyToken();
});
}
}
});
},
async getRongyToken() {
let _this = this,
url = '/app/api/v1.0/rongy/getRongyToken',
param = {},
method = 'GET';
_this.sendRequest(url, param, method, (res) => {
let data = {
'appKey': 'xxxxxxx',
'token': res.token,
'targetIds': res.rongyUserId,
'targetName': res.userName,
'targetAvatar': res.portrait
}
uni.setStorage({
key: 'ryData',
data: data
});
});
},
}
}
</script>
<style lang="scss">
page {
background-color: #FFFFFF;
}
.flex{
display: flex;
}
.login {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.login-main {
flex: 1;
padding: 0 70upx;
.login-logo {
width: 248upx;
height: 242upx;
padding-bottom: 50upx;
margin: 200upx auto 0 auto;
image {
width: 100%;
height: 100%;
}
}
.logo-tip {
text-align: center;
padding-top: 25upx;
font-size: 32upx;
font-weight: 200;
color: rgba(51, 51, 51, 1);
padding-bottom: 50upx;
}
.login-list {
margin-top: 35upx;
height: 100upx;
align-items: center;
padding: 0 30upx;
&.border-all {
&:after {
border: 1px solid #D0D0D0;
border-radius: 100upx;
}
}
.iconfont {
width: 65upx;
font-size: 44upx;
align-items: center;
&:after {
margin-left: 20upx;
content: '';
width: 2upx;
height: 35upx;
background: #D0D0D0;
display: block;
}
}
.login-input {
flex: 1;
input {
font-size: 28upx;
color: #333333;
padding-left: 20upx;
}
}
.code-sx {
content: '';
width: 2upx;
height: 25upx;
background: #D0D0D0;
margin-right: 25upx;
}
.codeimg {
font-size: 24upx;
color: #999999;
}
}
.login-btn {
margin-top: 70upx;
height: 96upx;
width: 100%;
background: linear-gradient(-90deg, rgba(80, 85, 168, 1), rgba(104, 110, 210, 1));
border-radius: 47upx;
font-size: 34upx;
color: #ffffff;
}
.login-tip {
padding-top: 26upx;
font-size: 22upx;
color: #666666;
text-align: center;
navigator {
margin-left: 10upx;
display: inline-block;
color: #5055A8;
}
}
}
.login-footer {
padding: 0 70upx;
.footer-tip {
align-items: center;
font-size: 24upx;
color: #999999;
text-align: center;
&:before {
flex: 1;
content: '';
height: 2upx;
background: #D0D0D0;
margin-right: 30upx;
}
&:after {
margin-left: 30upx;
flex: 1;
content: '';
height: 2upx;
background: #D0D0D0;
}
}
.footer-other {
padding: 40upx 0 100upx 0;
justify-content: center;
.other-list {
width: 80upx;
height: 80upx;
margin: 0 75upx;
image {
width: 100%;
height: 100%;
}
}
}
}
</style>

View File

@ -0,0 +1,21 @@
<template>
<view class="content">
页面 - 提问
</view>
</template>
<script>
export default {
data() {
return {};
}
};
</script>
<style>
.content {
text-align: center;
height: 400upx;
margin-top: 200upx;
}
</style>

View File

@ -0,0 +1,29 @@
<template>
<view class="content">
页面 - 发图文
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
}
}
</script>
<style>
.content {
text-align: center;
height: 400upx;
margin-top: 200upx;
}
</style>

View File

@ -0,0 +1,29 @@
<template>
<view class="content">
页面 - 发视频
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
}
}
</script>
<style>
.content {
text-align: center;
height: 400upx;
margin-top: 200upx;
}
</style>

View File

@ -0,0 +1,437 @@
<template>
<view class="content">
页面 - 2
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello',
list: [{
"_entityName": "uap_Menu",
"id": "2eb4cb5f-4e80-019e-9d46-ac1b55d010bf",
"orderNo": 1,
"level": 1,
"version": 2,
"levelText": "1级菜单",
"name": "预警发布",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "7b406372-7da6-c396-b944-4ea3ea93de23",
"orderNo": 2,
"level": 1,
"version": 1,
"levelText": "1级菜单",
"name": "预警反馈",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "f71d90fe-a394-8104-88eb-4bb651491420",
"orderNo": 3,
"level": 1,
"version": 3,
"levelText": "1级菜单",
"name": "风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "f7dc6070-4b7a-4501-c459-c47ee54727ac",
"orderNo": 4,
"level": 1,
"version": 4,
"levelText": "1级菜单",
"name": "到岗到位人员关联",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "02c9ac9c-2acd-b03b-beb4-80701b2e6fd3",
"parent": {
"_entityName": "uap_Menu",
"id": "7b406372-7da6-c396-b944-4ea3ea93de23",
"orderNo": 2,
"level": 1,
"version": 1,
"levelText": "1级菜单",
"name": "预警反馈",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 1,
"appButtons": "/static/early_warning_feedback.png",
"level": 2,
"appUrl": "/pages/early-warning-feedback/early-warning-feedback-management",
"version": 3,
"url": "srm_WarnFeedback.browse",
"levelText": "2级菜单",
"name": "预警反馈管理",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "66afd592-d13b-09bb-44f9-64c853302b13",
"parent": {
"_entityName": "uap_Menu",
"id": "f71d90fe-a394-8104-88eb-4bb651491420",
"orderNo": 3,
"level": 1,
"version": 3,
"levelText": "1级菜单",
"name": "风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 1,
"level": 2,
"version": 2,
"url": "srm_WarnInfoReleaseStatistics.browse",
"levelText": "2级菜单",
"name": "安全风险预警发布统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "98118247-3b5b-9b29-cf9b-5ef67e60e174",
"parent": {
"_entityName": "uap_Menu",
"id": "2eb4cb5f-4e80-019e-9d46-ac1b55d010bf",
"orderNo": 1,
"level": 1,
"version": 2,
"levelText": "1级菜单",
"name": "预警发布",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 1,
"appButtons": "/static/early_warning_release.png",
"level": 2,
"appUrl": "/pages/early-warning-release/early-warning-notice",
"version": 2,
"url": "srm_WarnInfo.browse",
"levelText": "2级菜单",
"name": "预警发布管理",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "9060b850-abdb-7637-6ea3-4cc0ea80b96d",
"parent": {
"_entityName": "uap_Menu",
"id": "f7dc6070-4b7a-4501-c459-c47ee54727ac",
"orderNo": 4,
"level": 1,
"version": 4,
"levelText": "1级菜单",
"name": "到岗到位人员关联",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 1,
"level": 2,
"version": 10,
"url": "srm_PersonOnDuty.browse",
"levelText": "2级菜单",
"name": "到岗到位人员管理",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "0c706e19-e26f-3ded-174b-efc8d6fa5ee3",
"parent": {
"_entityName": "uap_Menu",
"id": "f71d90fe-a394-8104-88eb-4bb651491420",
"orderNo": 3,
"level": 1,
"version": 3,
"levelText": "1级菜单",
"name": "风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 2,
"level": 2,
"version": 2,
"url": "srm_WarnInfoCloseLoop.browse",
"levelText": "2级菜单",
"name": "安全风险预警闭环统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "46be89dc-a558-5167-f74d-e5848019dc06",
"parent": {
"_entityName": "uap_Menu",
"id": "f71d90fe-a394-8104-88eb-4bb651491420",
"orderNo": 3,
"level": 1,
"version": 3,
"levelText": "1级菜单",
"name": "风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 3,
"level": 2,
"version": 2,
"url": "srm_WarnInfoFutureSevenDaysPowerGridStatistics.browse",
"levelText": "2级菜单",
"name": "未来七日电网风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}, {
"_entityName": "uap_Menu",
"id": "4e0e395f-049f-4494-aa37-38f54f0bd8f4",
"parent": {
"_entityName": "uap_Menu",
"id": "f71d90fe-a394-8104-88eb-4bb651491420",
"orderNo": 3,
"level": 1,
"version": 3,
"levelText": "1级菜单",
"name": "风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
},
"orderNo": 4,
"level": 2,
"version": 2,
"url": "srm_WarnInfoFutureSevenDaysTaskStatistics.browse",
"levelText": "2级菜单",
"name": "未来七日作业风险预警统计",
"operationSystem": {
"_entityName": "uap_OperationSystem",
"id": "57b5aadb-3dac-1272-65e2-f17510151a3b",
"type": "INTERNAL",
"version": 1,
"url": "#",
"name": "安全风险管理",
"createUser": "admin",
"status": "ENABLE"
},
"showIcon": "FALSE",
"status": "ENABLE"
}],
}
},
onLoad() {
},
mounted() {
console.log("data",this.list);
this.ergodic();
},
methods: {
//
ergodic() {
let menuList = [];
this.list.forEach(item=>{
if (item.level === 1) {
menuList.push({
id: item.id,
menuName: item.name,
subMenuList: []
});
}
});
this.list.forEach(item=>{
if (item.level === 2) {
menuList.forEach(i=>{
if (i.id === item.parent.id) {
i.subMenuList.push({
menuName: item.name,
url: item.appUrl
})
}
})
}
});
console.log("menuList",menuList);
}
}
}
</script>
<style>
.content {
text-align: center;
height: 400upx;
margin-top: 200upx;
}
</style>

View File

@ -0,0 +1,206 @@
<template>
<view class="page">
<view class="title">
{{noticeInfo.title}}
</view>
<view class="label">
{{noticeInfo.label}}
</view>
<view class="author-and-time">
<view class="author">
{{noticeInfo.real_name}}
</view>
<view class="time">
{{noticeInfo.release_time}}
</view>
</view>
<view class="content">
{{noticeInfo.content}}
</view>
<view class="feedback">
<view class="reading-volume">
阅读 245
</view>
<view class="fabulous">
<image src="@/static/img/fabuloused.png" mode="" v-if="noticeInfo.fabulous === true"></image>
<image src="@/static/img/fabulous.png" mode="" v-if="noticeInfo.fabulous === false">
<text>点赞 123</text>
</view>
</view>
<view class="no-message" v-if="noMessage === true">
写留言
</view>
<view class="leave-message" v-if="noMessage === false">
<view class="message-title">
<view class="left">
精选留言
</view>
<view class="right" @tap="addMessage">
写留言
</view>
</view>
<view class="one-message" v-for="item in messageList">
<view class="left">
<view class="header-photo">
{{item.real_name.slice(0,1)}}
</view>
<view class="message">
<view class="name">
{{item.real_name}}
</view>
<view class="message-content">
{{item.content}}
</view>
</view>
</view>
<view class="message-fabulous">
<image src="@/static/img/fabuloused.png" mode="" v-if="noticeInfo.messageFabulous === true"></image>
<image src="@/static/img/fabulous.png" mode="" v-if="noticeInfo.messageFabulous === false">
<text>123</text>
</view>
</view>
</view>
</view>
</template>
<script>
import request from '@/util/request.js';
export default {
data() {
let noticeInfo = uni.getStorageSync('notice');
noticeInfo.fabulous = true;
noticeInfo.messageFabulous = true;
return {
//
noticeInfo: noticeInfo,
//
noMessage: false,
//
messageList: []
}
},
onLoad() {
},
mounted() {
this.getMessageList()
},
methods: {
//
getMessageList() {
request.post('/hs/getOneContent',{id: this.noticeInfo.id})
.then(res=>{
this.noMessage = res.data.data.message.length === 0 ? true : false;
this.messageList = res.data.data.message;
console.log("一条数据数据",res);
},err=>{
console.log("err",err);
})
},
addMessage() {
request.post('/hs/addMessage',{
noticeId: this.noticeInfo.id
// userId:
}).then(res=>{
console.log("新增留言结果",res);
},err=>{
console.log("err",err);
})
}
}
}
</script>
<style scoped>
.message-title .left{
color: #a7a7a7;
}
.message-title .right{
color: #1296DB;
}
.message-title{
padding: 20rpx;
display: flex;
flex-flow: wrap;
justify-content: space-between;
}
.message .name{
color: #a7a7a7;
margin-bottom: 10rpx;
}
.left .message{
margin-left: 32rpx;
}
.one-message .left{
display: flex;
justify-content: center;
align-items: center;
}
.one-message .header-photo{
color: #1296DB;
border: 1rpx solid #1296DB;
border-radius: 50%;
width: 76rpx;
height: 76rpx;
text-align: center;
line-height: 76rpx;
}
.one-message{
display: flex;
padding: 20rpx;
justify-content: space-between;
align-items: center;
}
.no-message{
text-align: center;
padding: 20rpx 0;
}
.reading-volume, .fabulous, .no-message, .message-fabulous{
color: #1296DB;
}
.fabulous image, .message-fabulous image{
width: 36rpx;
height: 36rpx;
display: inline-block;
}
.label{
margin-left: 20rpx;
border-radius: 10rpx;
width: 4rem;
text-align: center;
color: #ff9041;
border: 1rpx solid #ff9041;
}
.content{
padding: 20rpx!important;
}
.author-and-time, .feedback{
display: flex;
}
.author{
color: #08ACEE;
}
.time{
color: #a5a5a5;
}
.author, .time, .reading-volume, .fabulous{
display: flex;
justify-content: center;
align-items: center;
padding-left: 20rpx;
height: 60rpx;
line-height: 60rpx;
}
.title{
padding: 20rpx;
font-size: 36rpx;
}
.page{
margin: 20rpx;
background-color: #FFFFFF;
border-radius: 10rpx;
}
</style>

View File

@ -0,0 +1,120 @@
<template>
<view class="content">
<m-search
:show="false"
placeholder="搜索"
button="none"
backgroundColor="#efecec"
v-model="searchStr"
></m-search>
<view class="noData" v-if="noData === true">
<noData :custom="true"><view class="title" @tap="update()">暂无数据,点击重新加载</view></noData>
</view>
<view class="list cu-card article dynamic" v-else-if="noData === false">
<view class="cu-item" style="padding:0" v-for="(item,index) in noticeListQuery" :key="index">
<view class="cu-list menu solid-bottom" @click="goToDetails(item)">
<view class="cu-item arrow" style="min-height: 90rpx;padding-top: 10rpx;">
<view class="action">
<view class="action">
<view class='cu-tag radius bg-orange light margin-right-xs'>{{item.type}}</view>
<text class="text-black text-lg">{{item.title}}</text>
</view>
</view>
</view>
</view>
<view class="text-content" style="margin:10rpx 0 0 0;">
<text class="text-gray">文章标签</text>
<text class="">{{item.label}}</text>
</view>
<view class="text-content" style="margin:10rpx 0 0 0;">
<text class="text-gray">发表人</text>
<text class="">{{item.real_name}}</text>
</view>
<view class="text-content" style="margin:10rpx 0 0 0;">
<text class="text-gray">发表时间</text>
<text class="">{{item.release_time}}</text>
</view>
</view>
</view>
</view>
</template>
<script>
import request from '@/util/request.js';
import mSearch from '@/components/mehaotian-search/mehaotian-search.vue';
import noData from '@/components/noData/noData.vue';
export default {
components: {
mSearch,
noData
},
data() {
return {
//
noData: false,
//
searchStr: '',
//
noticeList: [],
};
},
computed: {
//
noticeListQuery(){
return this.noticeList.filter(notice => {
return notice.title.indexOf(this.searchStr) != -1 || notice.type.indexOf(this.searchStr) != -1
|| notice.real_name.indexOf(this.searchStr) != -1
})
}
},
onLoad() {
},
onShow() {
this.getAllData();
},
methods: {
//
goToDetails(item) {
uni.setStorageSync("notice",item);
uni.navigateTo({
url: '/pages/tabbar/homepage/data-details'
})
},
//
getAllData() {
request.post('/hs/getAllContent',{})
.then(res=>{
res.data.data.parentAdvice.forEach(item=>{
this.$set(item,'type','家长意见');
});
res.data.data.schoolNoticeList.forEach(item=>{
this.$set(item,'type','校园通知');
});
res.data.data.studentThinking.forEach(item=>{
this.$set(item,'type','学生想法');
})
this.noticeList = res.data.data.parentAdvice.concat(res.data.data.schoolNoticeList, res.data.data.studentThinking);
this.noData = this.noticeList.length === 0 ? true : false;
console.log("首页数据",this.noticeList);
},err=>{
console.log("err",err);
})
}
}
};
</script>
<style scoped>
.content {
min-height: 85vh;
}
.text-gray{
display: inline-block;
width: 4rem;
}
.cu-card>.cu-item{
margin: 20rpx!important;
}
</style>

View File

@ -0,0 +1,29 @@
<template>
<view class="content">
页面 - 4
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
}
}
</script>
<style>
.content {
text-align: center;
height: 400upx;
margin-top: 200upx;
}
</style>

View File

@ -0,0 +1,29 @@
<template>
<view class="content">
页面 - 5
</view>
</template>
<script>
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
},
methods: {
}
}
</script>
<style>
.content {
text-align: center;
height: 400upx;
margin-top: 200upx;
}
</style>

View File

@ -0,0 +1,139 @@
<template>
<view class="content" :class="{'active':active}">
<image class="logo" :class="{'active':active}" src="../../../static/logo.png" mode="aspectFit"></image>
<view class="tabbar-box-wrap">
<view class="tabbar-box">
<view class="tabbar-box-item" @click="goToPage('/pages/release-detial/release-release/release-release')">
<image class="box-image" src="../../../static/img/release.png" mode="aspectFit"></image>
<text class="explain">发图文</text>
</view>
<view class="tabbar-box-item" @click="goToPage('/pages/release-detial/release-release/release-video')">
<image class="box-image" src="../../../static/img/video.png" mode="aspectFit"></image>
<text class="explain">发视频</text>
</view>
<view class="tabbar-box-item" @click="goToPage('/pages/release-detial/release-release/release-qa')">
<image class="box-image" src="../../../static/img/qa.png" mode="aspectFit"></image>
<text class="explain">提问</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
active: false
};
},
onLoad() {},
onShow() {
// setTimeout(() => {
this.active = true;
// }, 500);
},
onHide() {
this.active = false;
},
methods: {
goToPage(url) {
if (!url) return;
uni.navigateTo({
url
});
}
}
};
</script>
<style lang="scss" scoped>
.content {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
/* #ifdef H5 */
height: calc(100vh - var(--window-bottom) - var(--window-top));
/* #endif */
/* #ifndef H5 */
height: 100vh;
/* #endif */
transition: opacity 0.3s;
background: #999;
opacity: 0;
&.active {
opacity: 1;
}
.logo {
position: relative;
margin-top: -400upx;
width: 200upx;
height: 200upx;
// z-index: -1;
opacity: 0;
transition: opacity 0.3s;
&.active {
opacity: 1;
}
}
}
.tabbar-box-wrap {
position: absolute;
width: 100%;
padding: 50upx;
box-sizing: border-box;
bottom: 0;
left: 0;
.tabbar-box {
position: relative;
display: flex;
width: 100%;
background: #fff;
border-radius: 20upx;
padding: 15upx 20upx;
box-sizing: border-box;
z-index: 2;
box-shadow: 0px 2px 5px 2px rgba(0, 0, 0, 0.1);
&:after {
content: '';
position: absolute;
bottom: -16upx;
left: 0;
right: 0;
margin: auto;
width: 50upx;
height: 50upx;
transform: rotate(45deg);
background: #fff;
z-index: 1;
box-shadow: 2px 2px 5px 1px rgba(0, 0, 0, 0.1);
border-radius: 2px;
}
&:before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #ffffff;
border-radius: 20upx;
z-index: 2;
}
.tabbar-box-item {
// position: relative;
width: 100%;
z-index: 3;
margin: 10upx;
color: $uni-color-subtitle;
text-align: center;
font-size: $uni-font-size-base;
.box-image {
width: 100%;
height: $uni-img-size-lg;
}
}
}
}
</style>

View File

@ -0,0 +1,125 @@
.login {
height: auto;
width: auto;
display: flex;
flex-direction: row;
justify-content:center;
/* margin-top: 128upx; */
}
.content {
height: auto;
width: auto;
display: flex;
flex-direction: column;
justify-content:center;
/* margin-top: 128upx; */
}
/* 头部 logo */
.header {
/* width:400upx;
height:200upx; */
/* box-shadow:0upx 0upx 60upx 0upx rgba(0,0,0,0.1); */
border-radius:50%;
/* background-color: #000000;
*/ margin-top: 30upx;
/* margin-bottom: 30upx; */
margin-left: auto;
margin-right: auto;
}
.header image{
width:200upx;
height:200upx;
border-radius:50%;
text-align:center;
}
.title{
text-align:center;
/* margin-bottom: 70upx; */
font-weight:900;
font-size: 18px;
}
/* 主体 */
.main {
display: flex;
flex-direction: column;
padding-left: 90upx;
padding-right: 90upx;
}
.tips {
color: #999999;
font-size: 28upx;
margin-top: 64upx;
margin-left: 48upx;
/* margin-bottom:30px; */
}
/* 其他登录方式 */
.other_login{
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
margin-top: 256upx;
text-align: center;
}
.login_icon{
border: none;
font-size: 128upx;
margin: 0 64upx 0 64upx;
color: rgba(0,0,0,0.7)
}
.wechat_color{
color: #83DC42;
}
.weibo_color{
color: #F9221D;
}
.github_color{
color: #24292E;
}
/* 底部 */
.footer{
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 28upx;
margin-top: 64upx;
color: rgba(0,0,0,0.7);
text-align: center;
height: 40upx;
line-height: 40upx;
}
.footer text{
font-size: 24upx;
margin-left: 15upx;
margin-right: 15upx;
}
/*
2019-10-28 ljl 登录输入框样式
*/
.ljl_title{
background: #f3f3f3;
font-size:10px;
text-indent: 10px;
padding-top:5px;
color:#cccdd1;
height: 100upx;
border-radius: 30upx;
width: 90%;
margin: auto;
}
.main-list,.ljl_top{
margin-top: -24upx !important;
}
.ljl_tt{
margin-top: 25upx;
border-bottom: 1upx solid #cdcdcd;
}

View File

@ -0,0 +1,81 @@
.uni-list-item__content-title{
/* padding-bottom: 20rpx; */
/* border-bottom: 1rpx solid #F6F6F6; */
font-size: 30rpx!important;
}
.uni-list-item__content-note{
font-size: 30rpx!important;
}
.uni-list-item__container:after{
background-color: rgba(0,0,0,0)!important;
}
.uni-btn-icon{
color: #FFFFFF!important;
}
uni-page-body .content{
padding: 0!important;
}
uni-page-body .content .list{
background-color: #F1F1F1!important;
padding-top: 1rpx;
}
uni-page-body .content .list .one{
margin: 20rpx;
border-radius: 10rpx;
}
.uni-list-item{
padding: 20rpx!important;
margin: 20rpx!important;
background: #FFFFFF!important;
border-radius: 10rpx;
}
.uni-list{
background-color: #F1F1F1!important;
}
.content-top{
margin-top: 10rpx;
}
.green-button{
background-color: #1D9081!important;
color: #FFFFFF;
}
.uni-radio-input-checked{
background-color: rgb(113,217,177)!important;
border-color: rgb(113,217,177)!important;
}
.uni-checkbox-input{
border-color: rgb(165, 165, 165)!important;
}
uni-checkbox.checked .uni-checkbox-input{
background-color: rgb(113,217,177)!important;
border-color: rgb(113,217,177)!important;
}
.search{
z-index: 999;
padding: 20rpx 20rpx 68rpx 20rpx!important;
border-bottom: 0!important; }
.search .content .uni-input-input{
text-align: left!important;
}
.search .content{
padding-bottom: 0;
position: fixed;
z-index: 999;
width: 96%!important;
}
.uni-picker-container .uni-picker-action.uni-picker-action-confirm{
color: #1D9081;
}
.cu-list .cu-item .text-black{
position: absolute;
display: inline-block;
width: 450rpx!important;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.uni-input-input{
text-align: right!important;
}

View File

@ -0,0 +1,322 @@
/* 公共样式表css */
html,body {
background-color: red;
color: #333;
margin: 0;
height: 100%;
font-family: "Myriad Set Pro","Helvetica Neue",Helvetica,Arial,Verdana,sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-weight: normal;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
a {
text-decoration: none;
color: #000;
}
a, label, button, input, select {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
img {
border: 0;
}
body {
background: #f4f4f4;
color: #666;
}
html, body, div, dl, dt, dd, ol, ul, li, h1, h2, h3, h4, h5, h6, p, blockquote, pre, button, fieldset, form, input, legend, textarea, th, td {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
color: #08acee;
}
button {
outline: 0;
}
img {
border: 0;
}
button,input,optgroup,select,textarea {
margin: 0;
font: inherit;
color: inherit;
outline: none;
}
li {
list-style: none;
}
a {
color: #666;
}
.clearfix::after {
clear: both;
content: ".";
display: block;
height: 0;
visibility: hidden;
}
.clearfix {
}
/* 必要布局样式css */
.aui-flexView {
width: 100%;
height: 100%;
margin: 0 auto;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
.aui-scrollView {
width: 100%;
height: 100%;
-webkit-box-flex: 1;
-webkit-flex: 1;
-ms-flex: 1;
flex: 1;
overflow-y: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
position: relative;
/* margin-top: -44px; */
}
.aui-navBar {
height: 44px;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
z-index: 1002;
background: #ffffff;
}
.aui-navBar:after {
content: '';
position: absolute;
z-index: 2;
bottom: 0;
left: 0;
width: 100%;
height: 1px;
border-bottom: 1px solid #ffffff;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
}
.aui-navBar-item {
height: 44px;
min-width: 25%;
-webkit-box-flex: 0;
-webkit-flex: 0 0 25%;
-ms-flex: 0 0 25%;
flex: 0 0 25%;
padding: 0 0.9rem;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
font-size: 0.7rem;
white-space: nowrap;
overflow: hidden;
color: #a0a0a0;
position: relative;
}
.aui-navBar-item:first-child {
-webkit-box-ordinal-group: 2;
-webkit-order: 1;
-ms-flex-order: 1;
order: 1;
margin-right: -25%;
font-size: 0.9rem;
font-weight: bold;
}
.aui-navBar-item:last-child {
-webkit-box-ordinal-group: 4;
-webkit-order: 3;
-ms-flex-order: 3;
order: 3;
-webkit-box-pack: end;
-webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
}
.aui-center {
-webkit-box-ordinal-group: 3;
-webkit-order: 2;
-ms-flex-order: 2;
order: 2;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
height: 44px;
width: 50%;
margin-left: 25%;
}
.aui-center-title {
text-align: center;
width: 100%;
white-space: nowrap;
overflow: hidden;
display: block;
text-overflow: ellipsis;
font-size: 0.95rem;
color: #3c3c3c;
}
.icon {
width: 20px;
height: 20px;
display: block;
border: none;
float: left;
background-size: 20px;
background-repeat: no-repeat;
}
.icon-return {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAACh0lEQVRoQ+3ZMW8TMRQH8PcOsTBQISExVCIRCwgWFvZ+hZYBpIrEcTYkBsTGlI2VDamL3YEBpWJoR1BJaOlXYEzyDYp0bMRGRjnJoDuWs/1e3EbKeHf55b33vzsb4YJ98IJ54RKce8XZV1gIcQ8AviDiD2vtC631pzZFYQ2WUt611p4CwM0VcqqU2soSXIN1ztdKqTfZgRuw75RSz9tg3bHsWjomlh04NpYVOAWWDbjf7z8oimLipbH7bUopJdvO7L/Hk8+wwyLiCSLe8H6cww4BwGYFTo0lbWkKLBmYCksCrsNaa99rrZ/FmFnS0GrCdrvd3mg0MqEDqu58yVKaAzZZSwshHgLAsX/rcW2csrJVtaNXeIWdIuL16qJU2OgVrsMCwEGn03mSamaThVYTtizLp+PxeJkioJKFFldslJbmjA0O5o4NCm7AHpZluUM5s1FCSwjxCAA++7ceADiczWaPJ5PJL6qAihJaUspdY8w+Il7xLsASG6SlhRA/EfGa91BxNJ/Pd7hVNtiT1mAwOAeADXdCa637Hi0Wi3zBUsptY8wHRLzqwIh/nlbzbWmna0roLEOrmo11QQd9W1oHdFDwOrR3cLCH/uuFn0uQRQE7dMPKJHl6RwNzRUcF/w9N9VIRHVyhazbLDihWP5KAHbphOzQ5OhmYCzopmAM6OZgaTQL20FMAuOUtHESfaTLwCn3HWnuWEk0KpkCTg1OjWYArtDHmKyJu+jMdeh+KDdghh8NhZ7lcfvPRoXcaWYFToNmBY6NZgj20m+nb3pr3W631yzY7GWzBDtXr9TaLojjz0N+VUvezBXvoPQBw0Fda649Zg9vg6o5l3dKhse58l+AY/yqnc/4GvNDoTFOq8FwAAAAASUVORK5CYII=");
}
.icon-sys {
background-image: url("data:image/png;base64,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");
margin-right: 10px;
}
.icon-fre {
background-image: url("data:image/png;base64,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");
}
.aui-news-box {
margin-top: 8px;
background: #fff;
}
.aui-news-item {
padding: 15px;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.aui-news-item-hd {
margin-right: .8em;
width: 55px;
height: 55px;
line-height: 55px;
text-align: center;
background: #fff;
border-radius: 15px;
}
.aui-news-item-hd img {
width: 100%;
max-height: 100%;
vertical-align: top
}
.aui-news-item-bd {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-width: 0;
}
.aui-news-item-bd h4 {
font-weight: 400;
font-size: 16px;
width: auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
word-wrap: normal;
word-wrap: break-word;
word-break: break-all;
padding-bottom: 10px;
color: #333;
}
.aui-news-item-bd p {
color: #848689;
font-size: 13px;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.aui-news-item:before {
content: '';
position: absolute;
z-index: 2;
bottom: 0;
left: 0;
width: 100%;
height: 1px;
border-bottom: 1px solid #d8d8d8;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
left: 20px;
}
.aui-news-item-fr {
text-align: right;
font-size: 13px;
color: #8c8c8c;
margin-top: -25px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

@ -0,0 +1,157 @@
@font-face {font-family: "iconfont";
src:
url('./static/iconfont.ttf') format('truetype')
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-search:before {
content: "\e614";
}
.icon-haoyou:before {
content: "\e62e";
}
.icon-play:before {
content: "\e630";
}
.icon-stop:before {
content: "\e635";
}
.icon-address:before {
content: "\e62c";
}
.icon-more:before {
content: "\e840";
}
.icon-addre:before {
content: "\e700";
}
.icon-right:before {
content: "\e61c";
}
.icon-message:before {
content: "\e671";
}
.icon-history:before {
content: "\e8bd";
}
.icon-left:before {
content: "\e602";
}
.icon-share:before {
content: "\e694";
}
.icon-yanzhengma:before {
content: "\e7a1";
}
.icon-zhiwei:before {
content: "\e63e";
}
.icon-shoucang2:before {
content: "\e605";
}
.icon-time:before {
content: "\e600";
}
.icon-fatie:before {
content: "\e629";
}
.icon-CombinedShape:before {
content: "\e638";
}
.icon-fenxiang:before {
content: "\e667";
}
.icon-E607:before {
content: "\e647";
}
.icon-guangchang:before {
content: "\e601";
}
.icon-vnums:before {
content: "\e615";
}
.icon-set:before {
content: "\eb40";
}
.icon-tongxunlu:before {
content: "\e604";
}
.icon-xuexijilu:before {
content: "\e6a3";
}
.icon-daoshi:before {
content: "\e6d7";
}
.icon-aixin:before {
content: "\e83f";
}
.icon-aixin1:before {
content: "\e85c";
}
.icon-collect:before {
content: "\e603";
}
.icon-xuanze:before {
content: "\e60b";
}
.icon-shoujihao:before {
content: "\e67d";
}
.icon-xuanze1:before {
content: "\e6cb";
}
.icon-shuaxin:before {
content: "\e87e";
}
.icon-shezhi:before {
content: "\e611";
}
.icon-down-copy:before {
content: "\e85d";
}
.icon-up-copy:before {
content: "\e85e";
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,64 @@
/* 一些公共方法 */
import request from '@/util/request.js';
//获取当前时间
const getNowDate = function() {
const myDate = new Date();
let year = myDate.getFullYear();
let month = myDate.getMonth()+1 < 10 ? '0'+(myDate.getMonth()+1) : myDate.getMonth()+1;
let date = myDate.getDate() < 10 ? '0'+myDate.getDate() : myDate.getDate();
return year+"-"+month+"-"+date
};
export { getNowDate }
//格式化时间方法
const dateFormat = function (fmt, date) {
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
};
export { dateFormat }
//排序方法
const sortBy = function(attr,rev){
//第二个参数没有传递 默认升序排列
if(rev === undefined){
rev = 1;
}else{
rev = (rev) ? 1 : -1;
}
return function(a,b){
a = a[attr];
b = b[attr];
if(a < b){
return rev * -1;
}
if(a > b){
return rev * 1;
}
return 0;
}
};
export { sortBy }
//获取专业列表
const getMajorList = function() {
let majorList = request.get('/rest/v2/services/saftyedutrain_AppOnlineQAService/getMajor')
return majorList;
};
export { getMajorList }

View File

@ -0,0 +1,62 @@
/**
* 打开设置页面
* @param {String} setting 设置页面标识
* 参考Android原生android.provider.Settings类中定义的常量
*/
function openSetting(setting) {
try {
var os = plus.os.name;
if ('Android' == os) {
var main = plus.android.runtimeMainActivity();
var intent = plus.android.newObject('android.content.Intent', setting);
main.startActivity(intent);
} else {
//unsupport, nothing to do.
}
} catch (e) {
console.error('error @openSettings!!');
}
}
function openAppSetting() {
try {
var os = plus.os.name;
if ('Android' == os) {
var main = plus.android.runtimeMainActivity();
var intent = plus.android.newObject('android.content.Intent', 'android.settings.APPLICATION_DETAILS_SETTINGS');
var uri = plus.android.invoke('android.net.Uri', 'fromParts', 'package', main.getPackageName(), null);
plus.android.invoke(intent, 'setData', uri);
main.startActivity(intent);
} else {
//unsupport, nothing to do.
}
} catch (e) {
console.error('error @openAppSetting!!');
}
}
module.exports = {
SETTINGS: 'android.settings.SETTINGS',
APN_SETTINGS: 'android.settings.APN_SETTINGS',
LOCATION_SOURCE_SETTINGS: 'android.settings.LOCATION_SOURCE_SETTINGS',
USER_SETTINGS: 'android.settings.USER_SETTINGS',
WIRELESS_SETTINGS: 'android.settings.WIRELESS_SETTINGS',
SECURITY_SETTINGS: 'android.settings.SECURITY_SETTINGS',
PRIVACY_SETTINGS: 'android.settings.PRIVACY_SETTINGS',
WIFI_SETTINGS: 'android.settings.WIFI_SETTINGS',
WIFI_IP_SETTINGS: 'android.settings.WIFI_IP_SETTINGS',
BLUETOOTH_SETTINGS: 'android.settings.BLUETOOTH_SETTINGS',
CAST_SETTINGS: 'android.settings.CAST_SETTINGS',
DATE_SETTINGS: 'android.settings.DATE_SETTINGS',
SOUND_SETTINGS: 'android.settings.SOUND_SETTINGS',
DISPLAY_SETTINGS: 'android.settings.DISPLAY_SETTINGS',
LOCALE_SETTINGS: 'android.settings.LOCALE_SETTINGS',
VOICE_INPUT_SETTINGS: 'android.settings.VOICE_INPUT_SETTINGS',
INPUT_METHOD_SETTINGS: 'android.settings.INPUT_METHOD_SETTINGS',
MANAGE_APPLICATIONS_SETTINGS: 'android.settings.MANAGE_APPLICATIONS_SETTINGS',
DEVICE_INFO_SETTINGS: 'android.settings.DEVICE_INFO_SETTINGS',
NOTIFICATION_SETTINGS: 'android.settings.NOTIFICATION_SETTINGS',
open: openSetting,
openAppSetting: openAppSetting
}

View File

@ -0,0 +1 @@
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).uni=n()}(this,(function(){"use strict";try{var e={};Object.defineProperty(e,"passive",{get:function(){!0}}),window.addEventListener("test-passive",null,e)}catch(e){}var n=Object.prototype.hasOwnProperty;function t(e,t){return n.call(e,t)}var i=[],a=function(e,n){var t={options:{timestamp:+new Date},name:e,arg:n};if(window.__dcloud_weex_postMessage||window.__dcloud_weex_){if("postMessage"===e){var a={data:[n]};return window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessage(a):window.__dcloud_weex_.postMessage(JSON.stringify(a))}var o={type:"WEB_INVOKE_APPSERVICE",args:{data:t,webviewIds:i}};window.__dcloud_weex_postMessage?window.__dcloud_weex_postMessageToService(o):window.__dcloud_weex_.postMessageToService(JSON.stringify(o))}if(!window.plus)return window.parent.postMessage({type:"WEB_INVOKE_APPSERVICE",data:t,pageId:""},"*");if(0===i.length){var r=plus.webview.currentWebview();if(!r)throw new Error("plus.webview.currentWebview() is undefined");var d=r.parent(),s="";s=d?d.id:r.id,i.push(s)}if(plus.webview.getWebviewById("__uniapp__service"))plus.webview.postMessageToUniNView({type:"WEB_INVOKE_APPSERVICE",args:{data:t,webviewIds:i}},"__uniapp__service");else{var w=JSON.stringify(t);plus.webview.getLaunchWebview().evalJS('UniPlusBridge.subscribeHandler("'.concat("WEB_INVOKE_APPSERVICE",'",').concat(w,",").concat(JSON.stringify(i),");"))}},o={navigateTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;a("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;a("redirectTo",{url:encodeURI(n)})},getEnv:function(e){window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a("postMessage",e.data||{})}},r=/uni-app/i.test(navigator.userAgent),d=/Html5Plus/i.test(navigator.userAgent),s=/complete|loaded|interactive/;var w=window.my&&navigator.userAgent.indexOf("AlipayClient")>-1;var u=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var g=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var v=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.qa&&/quickapp/i.test(navigator.userAgent);for(var l,_=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},f=[function(e){if(r||d)return window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&s.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),o},function(e){if(v)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(w){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(u)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(g)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(p){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){return document.addEventListener("DOMContentLoaded",e),o}],m=0;m<f.length&&!(l=f[m](_));m++);l||(l={});var E="undefined"!=typeof uni?uni:{};if(!E.navigateTo)for(var b in l)t(l,b)&&(E[b]=l[b]);return E.webView=l,E}));

BIN
HSLink-app/static/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

27
HSLink-app/store/index.js Normal file
View File

@ -0,0 +1,27 @@
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
/**
* 是否需要强制登录
*/
forcedLogin: false,
hasLogin: false,
userName: ""
},
mutations: {
login(state, userName) {
state.userName = userName || '新用户';
state.hasLogin = true;
},
logout(state) {
state.userName = "";
state.hasLogin = false;
}
}
})
export default store

76
HSLink-app/uni.scss Normal file
View File

@ -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:24upx;
$uni-font-size-base:28upx;
$uni-font-size-lg:32upx;
/* 图片尺寸 */
$uni-img-size-sm:40upx;
$uni-img-size-base:52upx;
$uni-img-size-lg:80upx;
/* Border Radius */
$uni-border-radius-sm: 4upx;
$uni-border-radius-base: 6upx;
$uni-border-radius-lg: 12upx;
$uni-border-radius-circle: 50%;
/* 水平间距 */
$uni-spacing-row-sm: 10px;
$uni-spacing-row-base: 20upx;
$uni-spacing-row-lg: 30upx;
/* 垂直间距 */
$uni-spacing-col-sm: 8upx;
$uni-spacing-col-base: 16upx;
$uni-spacing-col-lg: 24upx;
/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title: #2C405A; // 文章标题颜色
$uni-font-size-title:40upx;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle:36upx;
$uni-color-paragraph: #3F536E; // 文章段落颜色
$uni-font-size-paragraph:30upx;

View File

@ -0,0 +1,98 @@
const baseUrl = 'http://192.168.10.29:8048'; //服务器地址
const get = (url, data) => {
let httpDefaultOpts = {
url: baseUrl+url,
data: data,
method: 'get',
header: {
'X-Requested-With': 'XMLHttpRequest',
"Accept": "application/json",
"Content-Type": "application/json; charset=UTF-8"
},
dataType: 'json',
}
let promise = new Promise(function(resolve, reject) {
uni.request(httpDefaultOpts).then(
(res) => {
resolve(res[1])
}
).catch(
(response) => {
reject(response)
}
)
})
return promise
};
const post = (url, data) => {
let httpDefaultOpts = {
url: baseUrl+url,
data: data,
method: 'post',
header: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/json'
},
dataType: 'json',
}
let promise = new Promise(function(resolve, reject) {
uni.request(httpDefaultOpts).then(
(res) => {
resolve(res[1])
}
).catch(
(response) => {
reject(response)
}
)
})
return promise
};
//带Token请求
const httpTokenRequest = (opts, data) => {
let token = "";
uni.getStorage({
key: 'token',
success: function(ress) {
token = ress.data
}
});
//此token是登录成功后后台返回保存在storage中的
let httpDefaultOpts = {
url: baseUrl+opts.url,
data: data,
method: opts.method,
header: opts.method == 'get' ? {
'Token': token,
'X-Requested-With': 'XMLHttpRequest',
"Accept": "application/json",
"Content-Type": "application/json; charset=UTF-8"
} : {
'Token': token,
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
dataType: 'json',
}
let promise = new Promise(function(resolve, reject) {
uni.request(httpDefaultOpts).then(
(res) => {
resolve(res[1])
}
).catch(
(response) => {
reject(response)
}
)
})
return promise
};
export default {
baseUrl,
get,
post,
httpTokenRequest
}