移动端
76
HSLink-app/App.vue
Normal 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>
|
184
HSLink-app/colorui/animation.css
Normal 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)
|
||||
}
|
||||
}
|
69
HSLink-app/colorui/components/cu-custom.vue
Normal 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
3912
HSLink-app/colorui/main.css
Normal file
191
HSLink-app/components/mehaotian-search/mehaotian-search.vue
Normal 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"></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"></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>
|
123
HSLink-app/components/noData/noData.vue
Normal 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>
|
16
HSLink-app/components/wyb-popup/iconfont.css
Normal 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";
|
||||
}
|
||||
|
420
HSLink-app/components/wyb-popup/wyb-popup.vue
Normal 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
@ -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
@ -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
@ -0,0 +1,148 @@
|
||||
{
|
||||
"pages": [
|
||||
//pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
||||
{
|
||||
"path": "pages/login/login",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "登录",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/tabbar/homepage/homepage",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "首页",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/tabbar/homepage/data-details",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "文章内容",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/tabbar/follow/follow",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "关注",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/tabbar/release/release",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "发布",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/tabbar/message/message",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "消息",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/tabbar/my/my",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "我",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/release-detial/release-release/release-release",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "发图文",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/release-detial/release-video/release-video",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "发视频",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/release-detial/release-qa/release-qa",
|
||||
"style": {
|
||||
"enablePullDownRefresh": true,
|
||||
"navigationBarTitleText": "提问",//顶部名称
|
||||
"navigationBarBackgroundColor": "#333",//顶部背景色
|
||||
"navigationBarTextStyle": "white" //文字颜色,目前只支持white和black这两种颜色(小程序)
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"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": "我"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
453
HSLink-app/pages/login/login.vue
Normal 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>
|
21
HSLink-app/pages/release-detial/release-qa/release-qa.vue
Normal 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>
|
@ -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>
|
@ -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>
|
437
HSLink-app/pages/tabbar/follow/follow.vue
Normal 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>
|
206
HSLink-app/pages/tabbar/homepage/data-details.vue
Normal 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>
|
120
HSLink-app/pages/tabbar/homepage/homepage.vue
Normal 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>
|
29
HSLink-app/pages/tabbar/message/message.vue
Normal 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>
|
29
HSLink-app/pages/tabbar/my/my.vue
Normal 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>
|
139
HSLink-app/pages/tabbar/release/release.vue
Normal 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>
|
125
HSLink-app/static/css/main.css
Normal 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;
|
||||
}
|
81
HSLink-app/static/css/public.css
Normal 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;
|
||||
}
|
322
HSLink-app/static/css/style.css
Normal 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;
|
||||
}
|
BIN
HSLink-app/static/ic-QQ@2x.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
HSLink-app/static/ic-weixin@2x.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
157
HSLink-app/static/iconfont.css
Normal 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";
|
||||
}
|
||||
|
BIN
HSLink-app/static/iconfont.ttf
Normal file
BIN
HSLink-app/static/img/fabulous.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
HSLink-app/static/img/fabuloused.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
HSLink-app/static/img/noData.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
HSLink-app/static/img/qa.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
HSLink-app/static/img/release.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
HSLink-app/static/img/tabbar/add.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
HSLink-app/static/img/tabbar/addactive.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
HSLink-app/static/img/tabbar/guanzhu.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
HSLink-app/static/img/tabbar/guanzhuactive.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
HSLink-app/static/img/tabbar/home.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
HSLink-app/static/img/tabbar/homeactive.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
HSLink-app/static/img/tabbar/me.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
HSLink-app/static/img/tabbar/meactive.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
HSLink-app/static/img/tabbar/news.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
HSLink-app/static/img/tabbar/newsactive.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
HSLink-app/static/img/video.png
Normal file
After Width: | Height: | Size: 20 KiB |
64
HSLink-app/static/js/public.js
Normal 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 }
|
62
HSLink-app/static/js/settings.js
Normal 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
|
||||
}
|
1
HSLink-app/static/js/uni.webview.1.5.2.js
Normal 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
After Width: | Height: | Size: 5.2 KiB |
BIN
HSLink-app/static/yticon.ttf
Normal file
27
HSLink-app/store/index.js
Normal 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
@ -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;
|
98
HSLink-app/util/request.js
Normal 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
|
||||
}
|