Browse Source

对接了接口

master
longjieli 9 months ago
parent
commit
acade8af01
13 changed files with 539 additions and 197 deletions
  1. +1
    -1
      App.vue
  2. +2
    -2
      api/api.js
  3. +36
    -9
      components/PrivacyAgreementPoup/PrivacyAgreementPoup.vue
  4. +1
    -1
      config.js
  5. +7
    -0
      pages.json
  6. +45
    -9
      pages/center/center.vue
  7. +9
    -5
      pages/finish/finish.vue
  8. +151
    -132
      pages/login/login.vue
  9. +232
    -0
      pages/order/order.vue
  10. +14
    -6
      pages/repair/repair.vue
  11. +15
    -8
      pages/repairList/repairList.vue
  12. +25
    -23
      store/store.js
  13. +1
    -1
      uni.scss

+ 1
- 1
App.vue View File

@ -4,7 +4,7 @@
},
onShow: function() {
// this.$store.commit('initConfig')
this.$store.commit('initConfig')
},
onHide: function() {


+ 2
- 2
api/api.js View File

@ -11,8 +11,6 @@ const config = {
loginLogin: { url: '/school/login/login', method: 'GET' , limit : 500 },
//修改个人信息接口
updateInfo: { url: '/api/info/updateInfo', method: 'POST' , limit : 500 },
//获取用户信息接口
getInfo: { url: '/api/info/getInfo', method: 'GET' , limit : 500 },
//增加报修单
addSchoolOrder : {url : '/school-api/addSchoolOrder', method : 'GET', limit : 500},
//驳回
@ -25,6 +23,8 @@ const config = {
getActorGoList : {url : '/school-api/getActorGoList', method : 'GET', limit : 500},
//获取室号
getFloorList : {url : '/school-api/getFloorList', method : 'GET', limit : 500},
//分配给维修的维修单
getSchoolOrderList : {url : '/school-api/getSchoolOrderList', method : 'GET', limit : 500},
}


+ 36
- 9
components/PrivacyAgreementPoup/PrivacyAgreementPoup.vue View File

@ -6,7 +6,7 @@
</view>
<view class="content_pri">
<view class="text">
欢迎来到xx报修!我们根据最新的法律法规监管政策要求更新了用户协议隐私政策,请您认真阅读
欢迎来到校园报修!我们根据最新的法律法规监管政策要求更新了用户协议隐私政策,请您认真阅读
</view>
</view>
<view class="config">
@ -14,18 +14,20 @@
<view class="content">
<view style="display: flex;">
<uv-checkbox size="30rpx" :name="1"></uv-checkbox>
同意<text @tap="handleOpenPrivacyContract">xx报修隐私政策</text>
同意<text @tap="handleOpenPrivacyContract">校园报修隐私政策</text>
</view>
<view class="">
以及<text>用户协议</text>
以及<text @tap="handleOpenPrivacyContract">用户协议</text>
</view>
</view>
</uv-checkbox-group>
</view>
<view class="pri_btn">
<!-- <button class="confuse_btn" @click="confusePrivacy">拒绝</button> -->
<button class="confirm_btn" id="agree-btn" open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
<button
class="confirm_btn" id="agree-btn"
open-type="agreePrivacyAuthorization"
@agreeprivacyauthorization="handleAgreePrivacyAuthorization">同意</button>
</view>
</view>
</uv-popup>
@ -40,6 +42,25 @@
checkboxValue : false
}
},
mounted() {
if(wx.getPrivacySetting){
wx.getPrivacySetting({
success: res => {
// console.log(res)
if (res.needAuthorization) {
//
this.init()
}
},
fail: () => {}
})
}
},
// created(){
// setTimeout(() => {
// this.init()
// },2000)
// },
methods: {
//
@ -74,10 +95,16 @@
//
handleAgreePrivacyAuthorization() {
// id
this.resolvePrivacyAuthorization({
buttonId: 'agree-btn',
event: 'agree'
})
// this.resolvePrivacyAuthorization({
// buttonId: 'agree-btn',
// event: 'agree'
// })
if(!this.checkboxValue){
return uni.showToast({
icon: 'none',
title: '请勾选同意《校园报修隐私政策》和《用户协议》'
})
}
this.$refs.popup.close()
},


+ 1
- 1
config.js View File

@ -14,7 +14,7 @@ const type = 'dev'
const config = {
dev : {
// baseUrl : 'http://admin.anqi.shop/a-notice-api',
baseUrl : 'http://h5.xzaiyp.top/a-notice-api/',
baseUrl : 'http://h5.xzaiyp.top/school-api',
},
prod : {
baseUrl : 'http://xxx.xxx.xxx/xxx',


+ 7
- 0
pages.json View File

@ -40,6 +40,13 @@
"style": {
"navigationBarTitleText": "获取用户信息"
}
},
{
"path" : "pages/order/order",
"style" :
{
"navigationBarTitleText" : ""
}
}
],
"globalStyle": {


+ 45
- 9
pages/center/center.vue View File

@ -4,15 +4,17 @@
<view class="content">
<view class="topBox">
<view class="users">
<view class="u-top" v-if="userInfo.appletOpenid">
<image class="img" :src="userInfo.headImage" mode="widthFix"></image>
<view class="u-top" v-if="userInfo.account">
<image class="img"
src="https://tennis-oss.xzaiyp.top/2024-09-03/05f052bb-2c66-4886-8ad0-09703269690d.jpg"
mode="widthFix"></image>
<view class="tit">
{{ userInfo.nickName }}
{{ userInfo.name }}
</view>
</view>
<view class="u-top" v-else>
<image class="img"
src="https://img2.baidu.com/it/u=2953585264,744730101&fm=253&fmt=auto&app=138&f=JPEG?w=360&h=360"
src="https://tennis-oss.xzaiyp.top/2024-09-03/05f052bb-2c66-4886-8ad0-09703269690d.jpg"
mode="widthFix"></image>
<view class="tit">
登录 / 注册
@ -23,8 +25,12 @@
<view class="lists">
<uni-list>
<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon1" showArrow title="我的报修" clickable
@click="clickList" />
<uni-list-item v-if="userInfo.isDai == '0'" :show-extra-icon="true" :extra-icon="extraIcon1"
showArrow title="我的报修" clickable @click="clickList" />
<uni-list-item v-if="userInfo.isDai == '1'" :show-extra-icon="true" :extra-icon="extraIcon2" showArrow title="指派给我的维修单" clickable
@click="toOrder" />
<uni-list-item :show-extra-icon="true" :extra-icon="extraIcon3" showArrow title="退出登录" clickable
@click="logout" />
</uni-list>
</view>
</view>
@ -51,20 +57,50 @@
color: '#666666',
size: '22',
type: 'auth'
},
extraIcon2: {
color: '#666666',
size: '22',
type: 'chatbubble-filled'
},
extraIcon3: {
color: '#666666',
size: '22',
type: 'closeempty'
}
}
},
onShow() {
if (uni.getStorageSync('token')) {
this.$store.commit('getUserInfo')
//
if (!this.userInfo.id) {
this.logout()
}
},
methods: {
clickList() {
uni.navigateTo({
url: '/pages/repairList/repairList'
})
},
//退
logout() {
uni.navigateTo({
url: '/pages/login/login'
})
uni.removeStorageSync('token');
uni.removeStorageSync('userInfo');
this.$store.commit('setUserInfo', {})
},
//
toOrder() {
uni.navigateTo({
url: '/pages/order/order'
})
}
}
}
</script>
@ -81,7 +117,7 @@
position: relative;
z-index: 1;
overflow: hidden;
padding: 60rpx 20rpx 20rpx;
padding: 20rpx 20rpx 20rpx;
box-sizing: border-box;
}


+ 9
- 5
pages/finish/finish.vue View File

@ -4,8 +4,8 @@
<!-- <navbar title="结单" :leftClick="leftClick"></navbar> -->
<uv-form labelPosition="top" :model="form" errorType="toast" :rules="rules" ref="form" labelWidth="140">
<uv-form-item label="处理结果" prop="successTitle">
<uv-input @focus="processingPickerOpen" placeholder="请选择处理结果" v-model="form.successTitle"
<uv-form-item @click="processingPickerOpen" label="处理结果" prop="successTitle">
<uv-input readonly placeholder="请选择处理结果" v-model="form.successTitle"
:fontSize="30"></uv-input>
</uv-form-item>
@ -38,7 +38,7 @@
title="选择处理结果" @confirm="floorConfirm"></uv-picker>
<!-- 图片操作菜单 -->
<uv-action-sheet ref="actionSheet" :actions="list" :round="20" cancelText="取消" title="图片操作"
<uv-action-sheet ref="actionSheet" :actions="list" :round="20" safeAreaInsetBottom
@select="selectImageSheet"> </uv-action-sheet>
</uv-form>
</view>
@ -165,13 +165,13 @@
viewImageAsList() {
this.$utils.previewImage({
current: this.currentIndex,
urls: this.form.images
urls: this.form.successImage
})
},
//
deleteImageAsList() {
this.form.images = this.form.images.filter((_, index) => {
this.form.successImage = this.form.successImage.filter((_, index) => {
return index != this.currentIndex
})
},
@ -225,4 +225,8 @@
.image-item image {
width: 100%;
}
/deep/ .uv-safe-area-inset-bottom {
padding-bottom: 0 !important
}
</style>

+ 151
- 132
pages/login/login.vue View File

@ -1,140 +1,159 @@
<template>
<view class="content">
<view class="topBox">
<h3 class="title">登录</h3>
<h3>欢迎使用xx报修</h3>
</view>
<view class="inputBox">
<view class="ipt">
<h4>学号</h4>
<input type="text" value="" placeholder="请输入学生学号" />
</view>
<view class="ipt">
<h4>密码</h4>
<input type="text" value="" placeholder="请输入密码" />
</view>
<button class="loginBtn">登录</button>
<!-- <button class="registerBtn">注册</button> -->
<!-- <view class="tipbox">
<view class="txt">
其他账号登录
</view>
<view class="otherUser">
<uni-icons type="qq" size="40" color="rgb(66,157,250)"></uni-icons>
<uni-icons type="weixin" size="40" color="rgb(2,187,17)"></uni-icons>
</view>
</view> -->
</view>
</view>
<view class="content">
<view class="topBox">
<h3 class="title">登录</h3>
<h3>欢迎使用xx报修</h3>
</view>
<view class="inputBox">
<view class="ipt">
<h4>手机号</h4>
<input v-model="form.account" type="text" value="" placeholder="请输入手机号" />
</view>
<view class="ipt">
<h4>密码</h4>
<input v-model="form.password" type="password" value="" placeholder="请输入密码" />
</view>
<button @click="login" class="loginBtn">登录</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
export default {
data() {
return {
form: {
account: '',
password: ''
}
}
},
methods: {
//
login() {
if(this.form.account.trim() == ''){
return uni.showToast({
icon: 'none',
title: '请填写手机号'
})
}
if(this.form.password.trim() == ''){
return uni.showToast({
icon: 'none',
title: '请填写密码'
})
}
this.$api('loginLogin', this.form, res => {
if (res.code == 200) {
uni.setStorageSync('token', res.result.token);
uni.setStorageSync('userInfo', JSON.stringify(res.result.userInfo));
this.$store.commit('setUserInfo',res.result.userInfo)
uni.switchTab({
url: '/pages/repair/repair'
})
}
})
}
}
}
</script>
<style scoped>
.content {
height: 100vh;
background-color: #f5f5f5;
/* 微信小程序不允许使用本地图片 */
/* background: url("@/static/login/bj.jpg") no-repeat center; */
/* 所以这里我把背景图片上传在阿里云oss.下面这个地址是阿里云oss图片地址 */
background: url("https://tennis-oss.xzaiyp.top/2024-09-02/0030f0ef-4270-47dc-a870-b24bffb6ce28.jpg") no-repeat center;
background-size: cover;
}
.topBox {
font-size: 34rpx;
color: #fff;
padding: 80rpx 50rpx;
}
.topBox .title{
font-size: 45rpx;
}
h3 {
margin-bottom: 10rpx;
}
.inputBox {
position: fixed;
bottom: 0;
left: 0;
width: 750rpx;
height: 85vh;
background-color: #fff;
border-top-left-radius: 40rpx;
border-top-right-radius: 40rpx;
padding: 60rpx;
box-sizing: border-box;
}
.ipt {
margin-bottom: 50rpx;
}
.ipt h4 {
margin-bottom: 20rpx;
font-size: 36rpx;
color: #333;
}
.ipt input {
border-bottom: 1px solid #dedede;
padding-bottom: 20rpx;
font-size: 28rpx;
}
.loginBtn {
margin-top: 20rpx;
line-height: 85rpx;
text-align: center;
background: #3c9cff;
border-radius: 40rpx;
color: #fff;
margin-top: 50rpx;
}
.registerBtn {
margin-top: 20rpx;
line-height: 85rpx;
text-align: center;
border-radius: 40rpx;
color: #ccc;
margin-top: 50rpx;
border: none;
}
.tipbox {
position: fixed;
bottom: 120rpx;
left: 50%;
transform: translate(-50%, -120px);
}
.otherUser {
margin-top: 30rpx;
display: flex;
justify-content: center;
}
.txt {
font-size: 28rpx;
color: #969696;
}
.otherUser .uni-icons {
margin-left: 20rpx;
}
.content {
height: 100vh;
/* 微信小程序不允许使用本地图片 */
/* background: url("@/static/login/bj.jpg") no-repeat center; */
/* 所以这里我把背景图片上传在阿里云oss.下面这个地址是阿里云oss图片地址 */
background: url("https://tennis-oss.xzaiyp.top/2024-09-02/0030f0ef-4270-47dc-a870-b24bffb6ce28.jpg") no-repeat center;
background-size: cover;
}
.topBox {
font-size: 34rpx;
color: #fff;
padding: 80rpx 50rpx;
}
.topBox .title {
font-size: 45rpx;
}
h3 {
margin-bottom: 10rpx;
}
.inputBox {
position: fixed;
bottom: 0;
left: 0;
width: 750rpx;
height: 85vh;
background-color: #fff;
border-top-left-radius: 40rpx;
border-top-right-radius: 40rpx;
padding: 60rpx;
box-sizing: border-box;
}
.ipt {
margin-bottom: 50rpx;
}
.ipt h4 {
margin-bottom: 20rpx;
font-size: 36rpx;
color: #333;
}
.ipt input {
border-bottom: 1px solid #dedede;
padding-bottom: 20rpx;
font-size: 28rpx;
}
.loginBtn {
margin-top: 20rpx;
line-height: 85rpx;
text-align: center;
background: #3c9cff;
border-radius: 40rpx;
color: #fff;
margin-top: 50rpx;
}
.registerBtn {
margin-top: 20rpx;
line-height: 85rpx;
text-align: center;
border-radius: 40rpx;
color: #ccc;
margin-top: 50rpx;
border: none;
}
.tipbox {
position: fixed;
bottom: 120rpx;
left: 50%;
transform: translate(-50%, -120px);
}
.otherUser {
margin-top: 30rpx;
display: flex;
justify-content: center;
}
.txt {
font-size: 28rpx;
color: #969696;
}
.otherUser .uni-icons {
margin-left: 20rpx;
}
</style>

+ 232
- 0
pages/order/order.vue View File

@ -0,0 +1,232 @@
<template>
<view class="repairList reserveSpace">
<view class="tab">
<uv-tabs :list="list" lineWidth="60" lineHeight="10" @click="selectTag"></uv-tabs>
</view>
<view class="repairList-main">
<view v-for="item in repairList" :key="item.id" class="repairItem">
<view class="repairMain">
<!-- <view class="userName">用户名</view> -->
<view class="build">
<view>
<text style="margin-right: 10rpx;">{{ item.building }}</text>
<text> {{ item.room }}</text>
</view>
<text style="font-size: 26rpx;">{{ item.createTime }}</text>
</view>
<view class="desc">
<uv-read-more :shadowStyle="shadowStyle" show-height="80rpx" fontSize="30rpx" :toggle="true">
<view>
{{ item.context }}
</view>
</uv-read-more>
</view>
<view class="repairImages">
<view v-for="(image,index) in item.image" :key="index" class="image-item">
<image @click="viewImageAsList(index,item.image)" :src="image" mode="widthFix"></image>
</view>
</view>
<view class="btns">
<view v-if="userInfo.isDai == '1' && !item.cleckState" @click="toReject(item.id)" class="btn">驳回
</view>
<view v-if="userInfo.isDai == '1' && !item.cleckState" @click="toFinish(item.id)" class="btn">结单
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState,
} from 'vuex'
export default {
data() {
return {
list: [{
name: '待完成',
}, {
name: '已完成',
}],
current: 0,
currentIndex: 0,
repairList: [], //
queryParams: {
pageNo: 1,
pageSize: 3,
state: 0
},
total: 0
}
},
onShow() {
this.getRepairList()
},
//
onReachBottom() {
if (this.queryParams.pageSize <= this.total) {
this.queryParams.pageSize += 3
this.getRepairList()
}
},
methods: {
//
toReject(id) {
uni.navigateTo({
url: `/pages/reject/reject?orderId=${id}`
})
},
//
toFinish(id) {
uni.navigateTo({
url: `/pages/finish/finish?orderId=${id}`
})
},
//
viewImageAsList(index, imgArr) {
this.currentIndex = index
this.$utils.previewImage({
current: this.currentIndex,
urls: imgArr
})
},
//
selectTag(tag) {
this.queryParams.state = tag.index
this.getRepairList()
},
//
getRepairList() {
this.$api('getSchoolOrderList', this.queryParams, res => {
if (res.code == 200) {
res.result.records.forEach(item => {
item.image ? item.image = item.image.split(',') : item.image = []
})
this.repairList = res.result.records
this.total = res.result.total
}
})
}
},
computed: {
shadowStyle() {
return {
// #ifndef APP-NVUE
backgroundImage: "linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 80%)",
// #endif
// #ifdef APP-NVUE
// nvuebackgroundImage
backgroundImage: "linear-gradient(to top, #fff, rgba(255, 255, 255, 0.5))",
// #endif
paddingTop: "50px",
marginTop: "-50px",
}
},
...mapState(['userInfo']),
}
}
</script>
<style scoped>
.repairList {
background: #f8f8f8;
}
.tab {
display: flex;
align-items: center;
height: 80rpx;
background: white;
margin-bottom: 20rpx;
}
.repairList-main {
min-height: 100vh;
}
.repairItem {
display: flex;
background: white;
width: 96%;
margin: 0rpx auto;
border-radius: 20rpx;
margin-bottom: 20rpx;
}
.repairMain {
width: 100%;
box-sizing: border-box;
padding-left: 20rpx;
}
/*
.userName {
font-size: 32rpx;
margin: 10rpx 0rpx;
} */
.build {
display: flex;
justify-content: space-between;
font-size: 28rpx;
margin: 20rpx 0rpx;
}
.desc {
overflow-y: scroll;
margin-bottom: 20rpx;
}
.repairImages {
display: flex;
flex-wrap: wrap;
margin: 10rpx 0rpx;
}
.image-item {
width: 24%;
margin-left: 1%;
height: 180rpx;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
padding: 20rpx;
background: #f5f5f5;
border-radius: 20rpx;
}
.image-item image {
width: 100%;
}
.btns {
margin: 20rpx 0rpx;
display: flex;
justify-content: flex-end;
}
.btn {
width: 200rpx;
height: 50rpx;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50rpx;
margin-left: 15rpx;
font-size: 30rpx;
color: white;
background: #f9ae3d;
}
.btn:nth-child(2) {
background: #3c9cff;
}
</style>

+ 14
- 6
pages/repair/repair.vue View File

@ -60,7 +60,7 @@
@confirm="roomConfirm"></uv-picker>
<!-- 图片操作菜单 -->
<uv-action-sheet ref="actionSheet" :actions="list" :round="20" cancelText="取消" title="图片操作"
<uv-action-sheet ref="actionSheet" :actions="list" :round="20" safeAreaInsetBottom
@select="selectImageSheet"> </uv-action-sheet>
<!-- 隐私政策 -->
@ -186,9 +186,7 @@
//
selectImageSheet(imageSheet) {
let {
id
} = imageSheet
let { id } = imageSheet
if (id) {
this.deleteImageAsList()
} else {
@ -200,13 +198,13 @@
viewImageAsList() {
this.$utils.previewImage({
current: this.currentIndex,
urls: this.form.images
urls: this.form.image
})
},
//
deleteImageAsList() {
this.form.images = this.form.images.filter((_, index) => {
this.form.image = this.form.image.filter((_, index) => {
return index != this.currentIndex
})
},
@ -229,6 +227,12 @@
//
roomPickerOpen() {
if(!this.form.building){
return uni.showToast({
icon : 'none',
title: '请先选择楼栋信息'
})
}
this.$refs.roomPicker.open();
},
@ -337,4 +341,8 @@
.image-item image {
width: 100%;
}
/deep/ .uv-safe-area-inset-bottom {
padding-bottom: 0 !important
}
</style>

+ 15
- 8
pages/repairList/repairList.vue View File

@ -1,3 +1,4 @@
<!-- 报修列表(学生) -->
<template>
<view class="repairList reserveSpace">
<view class="tab">
@ -27,10 +28,12 @@
<image @click="viewImageAsList(index,item.image)" :src="image" mode="widthFix"></image>
</view>
</view>
<view class="btns">
<view @click="toReject(item.id)" class="btn">驳回</view>
<view @click="toFinish(item.id)" class="btn">结单</view>
</view>
<!-- <view class="btns">
<view v-if="userInfo.isDai == '1' && !item.cleckState" @click="toReject(item.id)" class="btn">驳回
</view>
<view v-if="userInfo.isDai == '1' && !item.cleckState" @click="toFinish(item.id)" class="btn">结单
</view>
</view> -->
</view>
</view>
</view>
@ -38,6 +41,9 @@
</template>
<script>
import {
mapState,
} from 'vuex'
export default {
data() {
return {
@ -52,9 +58,9 @@
queryParams: {
pageNo: 1,
pageSize: 3,
// state : 0
state: 0
},
total : 0
total: 0
}
},
onShow() {
@ -62,7 +68,7 @@
},
//
onReachBottom() {
if(this.queryParams.pageSize <= this.total){
if (this.queryParams.pageSize <= this.total) {
this.queryParams.pageSize += 3
this.getRepairList()
}
@ -123,7 +129,8 @@
paddingTop: "50px",
marginTop: "-50px",
}
}
},
...mapState(['userInfo']),
}
}
</script>


+ 25
- 23
store/store.js View File

@ -19,24 +19,29 @@ const store = new Vuex.Store({
mutations: {
// 初始化配置
initConfig(state) {
let config = ['preferential', 'wx']
config.forEach(k => {
api('getConfig', {
keyValue : k
}, res => {
if (res.code == 200) {
state.configList[k] = res.result
}
})
})
// let config = ['preferential', 'wx']
// config.forEach(k => {
// api('getConfig', {
// keyValue : k
// }, res => {
// if (res.code == 200) {
// state.configList[k] = res.result
// }
// })
// })
// let apiConfig = [ 'getPrivacyPolicy' , 'getUserAgreement' ] //需要访问不同接口才能得到的配置数据
// let key = ['privacyAgreement','userAgreement']
// apiConfig.forEach((item,index) => {
// api(item,res => {
// state.configList[key[index]] = res.result
// })
// })
//初始化用户信息(防止用户每次点击重新进入小程序用户信息都没有了)
if(uni.getStorageSync('token') && uni.getStorageSync('userInfo')){
state.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
}
let apiConfig = [ 'getPrivacyPolicy' , 'getUserAgreement' ] //需要访问不同接口才能得到的配置数据
let key = ['privacyAgreement','userAgreement']
apiConfig.forEach((item,index) => {
api(item,res => {
state.configList[key[index]] = res.result
})
})
},
login(state) {
uni.login({
@ -71,12 +76,9 @@ const store = new Vuex.Store({
}
})
},
getUserInfo(state) {
api('getInfo', res => {
if(res.code == 200){
state.userInfo = res.result
}
})
setUserInfo(state,userInfo) {
state.userInfo = userInfo
console.log(state.userInfo);
},
},
actions: {},


+ 1
- 1
uni.scss View File

@ -72,4 +72,4 @@ $uni-font-size-title:20px;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle:26px;
$uni-color-paragraph: #3F536E; // 文章段落颜色
$uni-font-size-paragraph:15px;
$uni-font-size-paragraph:15px;

Loading…
Cancel
Save