Procházet zdrojové kódy

调整主页面

master
zhoujie před 8 měsíci
rodič
revize
0faa566ca0

+ 29
- 24
pages.json Zobrazit soubor

@@ -5,7 +5,13 @@
"style": {
"navigationBarHidden": true,
"navigationBarTitleText": "首页",
"navigationBarBackgroundColor": "#22dbc8"
"navigationBarBackgroundColor": "#073157",
"navigationStyle": "custom",
"mp-alipay": { //在支付宝小程序中如果不生效 就加上这两行代码 就会生效啦
"transparentTitle": "always",
"titlePenetrate": "YES",
"defaultTitle": "" // 将导航栏默认的 title 置空
}
}
},
{
@@ -62,8 +68,7 @@
],
"subPackages": [{
"root": "subpackage/after-sale", //售后相关
"pages": [
{
"pages": [{
"path": "transfer-page",
"style": {
"navigationBarTitleText": "",
@@ -916,7 +921,7 @@
{
"root": "subpackage/orders", //订单管理模块
"pages": [
{
"path": "essential-information-two",
"style": {
@@ -1844,24 +1849,23 @@
//其他服务模块
"root": "subpackage/carPark",
"plugins": {
"issuer-plugin": {
// "version": "dev-5d954bb916bb210d6c17397439d90f07",
"version": "1.0.2",
"provider": "wxa2d9acdd1054e69b"
}
},
"pages": [
{
"issuer-plugin": {
// "version": "dev-5d954bb916bb210d6c17397439d90f07",
"version": "1.0.2",
"provider": "wxa2d9acdd1054e69b"
}
},
"pages": [{
"path": "channelSing/select-car",
"style": {
"navigationBarTitleText": "选择车辆"
}
},
{
"path": "etc/etcDeviceInfo",
"style": {
"navigationBarTitleText": "设备信息"
}
{
"path": "etc/etcDeviceInfo",
"style": {
"navigationBarTitleText": "设备信息"
}
},
{
"path": "recharge/recharge-weixin",
@@ -1895,10 +1899,11 @@
}
],
"tabBar": {
"color": "#666666",
"selectedColor": "#00b38a",
"color": "#999",
"selectedColor": "#03385D",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"height": "100px",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "static/image/home.png",
@@ -1907,14 +1912,14 @@
},
{
"pagePath": "pages/order/order",
"iconPath": "static/image/order.png",
"selectedIconPath": "static/image/order-on.png",
"text": "订单管理"
"iconPath": "static/image/fuwu.png",
"selectedIconPath": "static/image/fuwu.png",
"text": "服务"
},
{
"pagePath": "pages/user/user",
"iconPath": "static/image/user.png",
"selectedIconPath": "static/image/user-on.png",
"iconPath": "static/image/wode.png",
"selectedIconPath": "static/image/wode.png",
"text": "我的"
}
]

+ 129
- 0
pages/index/components/flow-path-list - 副本.vue Zobrazit soubor

@@ -0,0 +1,129 @@
<!-- 办理流程 -->
<template>
<view :class="['as-layout-horizontal', index as any === 0?'active':'', 'logistics-gray']" style="overflow: visible"
v-for="(item,index) in options" :key="index">
<view class="logistics-layout">
<view class="logistics-layout-top">
<view class="title">
{{(item as ItemType).title}}
</view>
</view>
<view class="desc">
{{(item as ItemType).desc}}
</view>
</view>
</view>
</template>

<script setup lang="ts">
import { PropType } from "vue";
interface ItemType {
title : string,
desc : string,
right ?: boolean,
}

const emit = defineEmits(['more'])

const props = defineProps({
//数据列表
options: {
type: Array as PropType<ItemType[]>,
default: () => ([])
},
})
</script>

<style lang="scss" scoped>
.as-layout-horizontal {
border-left: 2px solid #00B38B;
padding-bottom: 45rpx;
margin-top: 10rpx;
position: relative;

&::after {
content: '';
left: -8rpx;
top: -10rpx;
position: absolute;
width: 12rpx;
height: 12rpx;
border-radius: 50%;
border: 2rpx solid #00B38B;
box-sizing: border-box;
}

&:last-child {
border-left: none;
padding-bottom: 0px;

&::after {
left: -4.5rpx;
}
}

.logistics-layout {
padding-left: 35rpx;

&-top {
width: 100%;
display: flex;
margin-top: -20rpx;
align-items: center;

.more {
display: flex;
align-items: center;

.label {
font-size: 24rpx;
color: #00B38B;
}

.arror {
width: 30rpx;
height: 30rpx;
}
}
}

.title {
font-size: 28rpx;
color: #0D0F26;
flex: 1;
font-weight: bold;
}

.desc {
font-size: 24rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
color: #666666;
line-height: 25px;
}
}
}

.logistics-gray {
border-color: #DCDCDC;

&::after {
background-color: #DCDCDC;
border: none;
}
}

.active {
position: relative;

&::after {
content: '';
position: absolute;
width: 12rpx;
height: 12rpx;
left: -8rpx;
border-radius: 50%;
background-color: #00B38B;
}
}
</style>

+ 58
- 85
pages/index/components/flow-path-list.vue Zobrazit soubor

@@ -1,24 +1,37 @@
<!-- 办理流程 -->
<template>
<view :class="['as-layout-horizontal', index as any === 0?'active':'', 'logistics-gray']" style="overflow: visible"
v-for="(item,index) in options" :key="index">
<view class="logistics-layout">
<view class="logistics-layout-top">
<view class="title">
{{(item as ItemType).title}}
</view>
<view class='flow-con'>
<view class="item" v-for="(item,index) in options" :key="index">
<view class="b-icon" v-if='+index > 0'>
<image :src="`${fileURL}image/newHome/xiaosan.png`" mode="aspectFill" class="img"></image>
</view>
<view class="desc">
{{(item as ItemType).desc}}
<view class="item-box">
<view class="l-img">
<image :src="item.imgUrl" mode="aspectFit" class="img"></image>
</view>
<view class="r-info">
<view class="title">
{{(item as ItemType).title}}
</view>
<view class="desc">
{{(item as ItemType).desc}}
</view>
</view>
</view>
</view>


</view>
</template>

<script setup lang="ts">
import {
fileURL,
} from "@/datas/fileURL.js";
import { PropType } from "vue";
interface ItemType {
title : string,
imgUrl : string,
desc : string,
right ?: boolean,
}
@@ -35,95 +48,55 @@
</script>

<style lang="scss" scoped>
.as-layout-horizontal {
border-left: 2px solid #00B38B;
padding-bottom: 45rpx;
margin-top: 10rpx;
position: relative;

&::after {
content: '';
left: -8rpx;
top: -10rpx;
position: absolute;
width: 12rpx;
height: 12rpx;
border-radius: 50%;
border: 2rpx solid #00B38B;
box-sizing: border-box;
}
.img {
height: 100%;
width: 100%;
}

&:last-child {
border-left: none;
padding-bottom: 0px;
.b-icon {
width: 80rpx;
height: 9rpx;
display: flex;
align-items: center;
justify-content: center;

&::after {
left: -4.5rpx;
}
.img {
height: 100%;
width: 14rpx;
}
}

.logistics-layout {
padding-left: 35rpx;
&-top {
width: 100%;
display: flex;
margin-top: -20rpx;
align-items: center;
.more {
display: flex;
align-items: center;
.item-box {
padding: 16rpx 0;
display: flex;
.l-img {
background: url(https://qtzl.etcjz.cn/default-bucket/image/newHome/banli-ju.png);
background-size: 100% 100%;
background-repeat: no-repeat;
width: 80rpx;
height: 80rpx;
padding: 22rpx;
box-sizing: border-box;

.label {
font-size: 24rpx;
color: #00B38B;
}

.arror {
width: 30rpx;
height: 30rpx;
}
}
}
}

.r-info {
margin-left: 15rpx;
.title {
font-size: 28rpx;
color: #0D0F26;
flex: 1;
font-family: PingFangSC, PingFang SC;
font-weight: bold;
font-size: 28rpx;
color: #222222;
}

.desc {
font-size: 24rpx;
margin-top: 20rpx;
margin-bottom: 20rpx;
color: #666666;
line-height: 25px;
margin-top: 8rpx;
font-family: PingFangSC, PingFang SC;
font-size: 26rpx;
color: #999999;
}
}
}

.logistics-gray {
border-color: #DCDCDC;

&::after {
background-color: #DCDCDC;
border: none;
}
}

.active {
position: relative;

&::after {
content: '';
position: absolute;
width: 12rpx;
height: 12rpx;
left: -8rpx;
border-radius: 50%;
background-color: #00B38B;
}
}
</style>

+ 916
- 0
pages/index/index - 副本.vue Zobrazit soubor

@@ -0,0 +1,916 @@
<template>
<filter>
<view class="wrapper">
<!-- Banner -->
<view class="banner">
<swiper class="swiper" circular :indicator-dots="swiper.indicatorDots" :autoplay="swiper.autoplay"
:interval="swiper.interval" :duration="swiper.duration"
indicator-active-color="rgba(0, 179, 139, 1)" :easing-function="swiper.easing">
<block v-if="state.swiperList.length >0" v-for="item in state.swiperList" :key="item.id">
<swiper-item class="swiper-item" @click="link(item)">
<image :src="fileURLList + item.imgUrl" mode="widthFix"></image>
</swiper-item>
</block>
</swiper>

<view class="notice">
<image class="icon" :src="fileURL + 'image/index/icon-notice.png'" lazy-load="false"
mode="aspectFill">
</image>
<uni-notice-bar style="width: 100%;" scrollable single :text="state.notice">
</uni-notice-bar>
</view>
</view>

<!-- 按钮导航 -->
<view class="nav">
<!-- <view class="item-box" @click="cardRecharge(1)">
<view class="item item-1">
<image :src="fileURL + 'image/index/item-1.png'" mode="aspectFill" />
</view>
<view class="text">储值卡充值</view>
</view> -->
<view class="item-box" @click="$util.navTo('/pages/bluetooth/bluetooth?routeType=4', true)">
<view class="item item-2">
<image :src="fileURL + 'image/index/item-2.png'" mode="aspectFill" />
</view>
<view class="text">卡签信息查询</view>
</view>
<view class="item-box"
@click="$util.navTo('/subpackage/personal-center/install-activation-order',true)">
<view class="item item-4">
<image :src="fileURL + 'image/index/item-4.png'" mode="aspectFill" />
</view>
<view class="text">激活服务</view>
</view>

<view class="item-box" @click="cardRecharge(3)">
<view class="item item-5">
<image :src="fileURL + 'image/index/item-5.png'" mode="aspectFill" />
</view>
<view class="text">设备注销</view>
</view>
<view class="item-box" @click="$util.navTo(`/subpackage/after-sale/equipment-upgrade/select-car`,true)">
<view class="item item-6">
<image :src="fileURL + 'image/index/item-6.png'" mode="aspectFill" />
</view>
<view class="text">设备升级</view>
</view>
<view class="item-box" @click="$util.navTo(`/subpackage/after-sale/onlineService`,true)">
<view class="item item-7">
<image :src="fileURL + 'image/index/item-7.png'" mode="aspectFill" />
</view>
<view class="text">在线客服</view>
</view>
<view class="item-box" @click="$util.navTo(`/pages/service/service`,true)">
<view class="item item-8">
<image :src="fileURL + 'image/index/item-more.png'" mode="aspectFill" />
</view>
<view class="text">更多</view>
</view>
</view>

<!--快速办理通道 -->
<view class="express-lane">
<view class="title">快速办理</view>
<view class="lane">
<view class="lane-item lane-1" :style="{ '--background': bgOrange }" @click="showMask(1)">
<image :src="fileURL + 'image/index/icon-car.png'" mode="aspectFill"></image>
<view class="text">
<text class="head">客车用户</text>
</view>
</view>
<view class="lane-item lane-2" :style="{ '--background': bgBlue }" @click="showMask(2)">
<image :src="fileURL + 'image/index/icon-truck.png'" mode="aspectFill"></image>
<view class="text">
<text class="head">货车用户</text>
</view>
</view>
</view>
</view>

<!-- 办理流程 -->
<view class="flow-path">
<scroll-view scroll-x="true" class="scroll-view">
<view class="top-menu">
<view :class="item == state.tabActive ? 'tab active' : 'tab'"
v-for="item in state.flowPathTabList" :key="item" @click="flowPathTabHandle(item)">
<view class="border"></view>{{ item }}
</view>
</view>
</scroll-view>

<view v-if="state.tabActive === '办理流程'">
<view class="flow-list">
<flow-path-list :options="state.flowList"></flow-path-list>
</view>
</view>
<view v-else-if="state.tabActive === '办理条件'">
<view class="flow-list as-gravity-center"> {{state.processeConditionText}} </view>
</view>
<view v-else-if="state.tabActive === '常见问题'">
<view class="flow-list as-gravity-center"> {{state.commonQuestionText}} </view>
</view>
</view>
</view>

<!-- 高速快讯 -->
<view class="news" v-if="state.highMsgData.length!=0">
<view class="title">高速快讯</view>
<view class="news-box">
<view class="news-item" v-for="(item,index) in state.highMsgData" :key='index' @click="link(item)">
<view class="left-text">
<view class="tit description">{{item.title}}</view>
<view class="span">{{item.copywriting}}</view>
</view>
<view class="image-box">
<image :src="fileURLList + item.imgUrl" mode="aspectFill"></image>
</view>
</view>
<view v-if="state.highMsgData.length!=0" class="more"
@click="$util.navTo('/subpackage/orders/moreHighMsg/moreHighMsg',true)">查看更多</view>
</view>
</view>
</filter>


<!-- ETC选择弹窗 -->
<view class="mask" v-if="isShowMask">

<view class="mask-content">
<filter>
<view class="mask-close">
<image :src="fileURL + 'image/index/icon-close.png'" class="icon-closed" @click="closeMask"></image>
</view>
<view class="mask-title" :style="{ '--color': color }">选择ETC用户类型</view>
<view class="mask-tab">
<view class="tab-item active" @click="toCreatOrder('1')">
<image :src="fileURL + 'image/index/icon-personal.png'" mode="aspectFill"></image>
<text class="tab-tit on">个人办理</text>
</view>
<view class="tab-item" @click="toCreatOrder('2')">
<image :src="fileURL + 'image/index/icon-unit.png'" mode="aspectFill"></image>
<text class="tab-tit on">单位办理</text>
</view>
</view>
</filter>
</view>
</view>
</template>

<script setup lang="ts">
import {
onMounted,
ref
} from "vue";
import {
onPageScroll,
onLoad, onReachBottom,onReady
} from "@dcloudio/uni-app";
import flowPathList from "./components/flow-path-list.vue";
import filter from '@/components/filter/filter.vue';
import {
request
} from "@/utils/network/request.js";
import {
stringToJson
} from "@/utils/network/encryption.js";
import {
useUserStore
} from "@/stores/user";
import {
getItem,
setItem,
StorageKeys
} from "@/utils/storage";
import {
queryKey,
querySwiper,
envs,
infoQuery,
queryHighMsg,
orderList
} from "@/utils/network/api.js";
import {
reactive
} from "vue";
import {
fileURL, fileURLList
} from "@/datas/fileURL.js";
import {
navTo,
msg,
noticeUser
} from "@/utils/utils";
import {
getCodeName
} from "@/datas/queryKey.js";
// import { jump } from "@/datas/9901Jump.js";
import navBar from "@/components/nav-bar/nav-bar2.vue";
const tools = require("../../static/etcUtil/tools.js");
const bgOrange = `url(${fileURL}image/index/bg-orange.png) center center no-repeat`;
const bgBlue = `url(${fileURL}image/index/bg-blue.png) center center no-repeat`;
const list = reactive(["您有一条待办事项,还未办理完成"])
const scrollTop = ref(0);
const isBack = ref(false);
const swiper = reactive({
indicatorDots: true,
autoplay: true,
interval: 3000,
duration: 3000,
easing: "easeInOutCubic"
})
console.log('输出内容==============', getItem(StorageKeys.OpenId), '==============')

const state = reactive({
type: 0, //1客车 2货车
userType: 1, //1个人 2单位
notice: "",
swiperList: [],
noticeList: [], //公告栏列表
flowPathTabList: ["办理流程", "办理条件", "常见问题"],
tabActive: "办理流程",
flowList: [
//办理流程数据
{
title: "第一步:产品选择",
desc: "选择购买的发行产品",
},
{
title: "第二步:信息校验",
desc: "提交车牌号、车牌颜色、收货地址相关信息",
},
{
title: "第三步:证件上传",
desc: "上传身份证、行驶证等相关信息",
},
{
title: "第四步:订单支付",
desc: "支付完成订单",
},
{
title: "第五步:签约代扣",
desc: "选择签约账户并关联",
},
],
highMsgData: '',//高速快讯内容
processeConditionText: "", //办理条件文本
commonQuestionText: "", //常见问题文本
isEnableSetGray: false
});
const isShowMask = ref(false);
const isShowBar = ref(false)
const userStore = useUserStore();
const type = 0;
const title = ref("我是测试");
const statusBarHeight = ref(0)


//监听页面滚动
onPageScroll((e) => {
if (e.scrollTop > statusBarHeight.value) {
isShowBar.value = true;
} else {
isShowBar.value = false;
}
scrollTop.value = e.scrollTop;
});
onLoad((options) => {
console.log("wechatSignNo",options)
getInfo();
})
// 页面初次渲染完成时触发
onReady(()=>{
setTimeout(()=>{
quanKeyAction()
},5000)
})

onMounted(() => {
uni.getSystemInfo({
success: (e : any) => {
statusBarHeight.value = e.statusBarHeight;
}
})
getSwiper()
});
onReachBottom(() => {
highMsg(); //高速快讯
})
// const tip = () => {
// const params = encodeURIComponent(JSON.stringify("https://webzeus.hltgz.com/throughBilManager/index"))
// tools.toUrl(`/subpackage/personal-center/webview?url=` + params);
// }
//获取轮播
const getSwiper = () => {

let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};

//调用方式
request(querySwiper, options).then((res) => {
console.log(stringToJson(res.bizContent));
const data = stringToJson(res.bizContent)
console.log("轮播图", data)
state.swiperList = data.swipers ? data.swipers : []
})
.catch((err) => {
console.log(err);
});

};

//办理流程tab选择
const flowPathTabHandle = (tab) => {
state.tabActive = tab;
if (tab == "办理条件") {
processeCondition();//办理条件
} else if (tab == "常见问题") {
commonQuestion();
}
};
//全量枚举值查询
const quanKeyAction = () => {
var data = {};
const options = {
type: 2,
data: data,
method: "POST",
showLoading: true,
};
request(queryKey, options).then((res) => {
console.log(stringToJson(res.bizContent));
const data = stringToJson(res.bizContent)
console.log("轮播图", data)
setItem('key', data.dictTypeAndItem)
})
.catch((err) => {
console.log(err);
});
}


const toCreatOrder = (val : number) => {
console.log(typeof (val));
state.userType = val;
navTo(`/subpackage/orders/choice-product?type=${state.type}&&userType=${state.userType}`)
closeMask();
};

const showMask = (val : any) => {
state.type = val; //1 客车 2货车
isShowMask.value = true;
};

const closeMask = () => {
isShowMask.value = false;
};

// 获取文本信息----用户协议
const getInfo = () => {
//参数说明
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
businessType: 'BROADCAST' //广播栏信息
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};

//调用方式
request(infoQuery, options)
.then((res) => {
let data = stringToJson(res.bizContent)
console.log(data,'公告');
state.notice = data.text
})
.catch((err) => {
console.log(err);
});
}
// 高速快讯查询接口
const highMsg = () => {
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
pageNo: 1,
pageSize: 2
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};

//调用方式
request(queryHighMsg, options).then((res) => {
console.log("高速快讯查询接口", stringToJson(res.bizContent));
state.highMsgData = stringToJson(res.bizContent).data
for (var i = 0; i < state.highMsgData.length; i++) {
state.highMsgData[i]["copywriting"] = getCodeName('COPYWRITING', state.highMsgData[i]["copywriting"])
if (state.highMsgData[i]["type"] == 3) {
state.highMsgData[i]["title"] = state.highMsgData[i]["hyperLink"]
}
}
state.highMsgData.sort(function (a, b) {
return a.sequence - b.sequence//正序
})
}).catch((err) => { console.log(err) });
}
const link = (item : any) => {
if (item.type == 1) {
const params = encodeURIComponent(JSON.stringify(item.hyperLink))
tools.toUrl(`/subpackage/personal-center/webview?url=` + params);
} else if (item.type == 2) {
navTo(item.hyperLink)
} else if (item.type == 3) {
const param = encodeURIComponent(JSON.stringify(item))
tools.toUrl(`/subpackage/orders/moreHighMsg/textDetails?item=` + param);
} else if (item.type == 4) {
uni.navigateToMiniProgram({
appId: item.hyperLink,
path: item.speedUrl,
success(res) {
console.log(res);
},
complete(res) {
console.log(res);
},
fail(res) {
console.log(res);
// 未成功跳转到车主小程序
},
});
}
}
const processeCondition = () => {
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
businessType: 'PROCESSING_CONDITIONS' //办理条件
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};

//调用方式
request(infoQuery, options)
.then((res) => {
let data = stringToJson(res.bizContent)
console.log("办理条件", data)
state.processeConditionText = data.text
})
.catch((err) => {
console.log(err);
});
}
const commonQuestion = () => {
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
businessType: 'COMMON_PROBLEM' //常见问题
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};

//调用方式
request(infoQuery, options)
.then((res) => {
let data = stringToJson(res.bizContent)
console.log("常见问题", data)
state.commonQuestionText = data.text
})
.catch((err) => {
console.log(err);
});
}
// 代办事项
const doSomething = () => {
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
"opId": getItem(StorageKeys.OpenId),
"source": "WECHAT",
"vehiclePlate": "",
"tabIndex": 3 + '',
"pageNo": 1,
"pageSize": 100,
"promotionModes": 1
},
method: "POST", //提交方式(默认POST)
};

//调用方式
request(orderList, options)
.then((res) => {
let data = stringToJson(res.bizContent)
let obj = {};
obj["id"] = 1;
obj['title'] = "您有" + data.data.length + "条未完成订单,前往处理"
state.noticeList.push(obj)
console.log("代办事项", data.data)
})
.catch((err) => {
console.log(err);
});

}
const cardRecharge = (val) => {
// #ifdef MP-ALIPAY
if (val == 1 || val == 2 || val == 3) {
msg("业务升级中,请前往九州ETC公众号进行办理。或拨打客服电话400-800-8787")
}
// #endif

// #ifdef MP-WEIXIN
if (val == 1) {
navTo('/pages/recharge/recharge-pay', true)
} else if (val == 2) {
navTo('/subpackage/after-sale/rescind-carId/rescind-carId-select', true)
} else if (val == 3) {
navTo('/subpackage/after-sale/activation-once-again/select-car?type=2', true)
}
// #endif
}
</script>

<style>
page {
background: #eef7f7;
}
</style>
<style lang="scss" scoped>
.statusBar {
width: 100%;
position: sticky;
background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
top: 0;
left: 0;
z-index: 999;
}

.banner {
position: relative;
}

.banner swiper {
height: 470rpx;
width: 750rpx;
}

.banner .notice {
position: absolute;
background: rgba(0, 0, 0, 0.28);
border-radius: 30rpx;
width: 500rpx;
height: 60rpx;
bottom: 46rpx;
left: 125rpx;
display: flex;
justify-content: center;
align-items: center;
padding: 0 20rpx;
box-sizing: border-box;

::v-deep .uni-noticebar {
background: none !important;
margin-bottom: 0;

text {
font-size: 24rpx !important;
color: #ffffff !important;
}
}
}

.banner .notice .icon {
width: 40rpx;
height: 40rpx;
margin: 10rpx;
}

.banner .notice .notice-text {
font-size: 24rpx;
color: #ffffff;
flex: 1;
}

.swiper-item image {
width: 100%;
height: auto;
}

.nav {
display: flex;
flex-wrap: wrap;
padding: 0 35rpx;
font-size: 28rpx;
}

.nav .item-box {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

.nav .item {
width: 80rpx;
height: 80rpx;
border-radius: 30rpx;
display: flex;
justify-content: center;
align-items: center;
margin: 50rpx 45rpx 20rpx 45rpx;
}

.nav .text {
font-size: 24rpx;
color: #172843;
}

.item-1 {
background: linear-gradient(133deg, #5fff9b 0%, #00b38b 100%);
}

.item-2 {
background: linear-gradient(-50deg, #018ffd 0%, #27fcff 100%);
}

.item-3 {
background: linear-gradient(-47deg, #f88721 0%, #fecd61 100%);
}

.item-4 {
background: linear-gradient(-47deg, #018ffd 0%, #27fcff 100%);
}

.item-5 {
background: linear-gradient(-44deg, #018ffd 0%, #27fcff 100%);
}

.item-6 {
background: linear-gradient(-50deg, #f88721 0%, #fecd61 100%);
}

.item-7 {
background: linear-gradient(129deg, #5fff9b 0%, #00b38b 100%);
}

.item-8 {
background: linear-gradient(124deg, #b8f0f2 0%, #62aeb1 100%);
}

.item image {
width: 56rpx;
height: 56rpx;
}

.express-lane {
font-size: 36rpx;
font-weight: 400;
color: #000000;
padding-top: 30rpx;
}

.express-lane .title {
padding-left: 30rpx;
margin: 0rpx 0 20rpx;
font-size: 32rpx;
font-weight: bold;
}

.lane {
display: flex;
justify-content: space-evenly;
}

.lane-item {
width: 330rpx;
height: 150rpx;
border-radius: 20rpx;
display: flex;
justify-content: center;
align-items: center;
}

.lane-item image {
width: 120rpx;
height: 100rpx;
margin: 0 18rpx;
}

.lane-item .text {
display: flex;
flex-direction: column;
justify-content: center;
color: #ffffff;
flex: 1;
}

.lane-item .head {
font-size: 30rpx;
font-weight: bold;
}

.lane-item .decribe {
font-size: 24rpx;
}

.lane-1 {
background: var(--background);
}

.lane-2 {
background: var(--background);
}

.news {
padding: 30rpx 30rpx 0 30rpx;
}

.news .title {
font-size: 32rpx;
font-weight: bold;
}

.news .left-text {
flex: 1;
margin-right: 100rpx;
}

.news-box {
background: #ffffff;
border-radius: 20rpx;
padding: 0 32rpx;
box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
margin: 20rpx 0 50rpx;
}

.news .tit {
font-size: 26rpx;
color: #172843;
}

.news .news-item {
display: flex;
border-bottom: 1px solid #dcdcdc;
padding: 32rpx 0 15rpx;
}

.news .image-box image {
width: 100rpx;
height: 100rpx;
border-radius: 10rpx;
}

.news .span {
font-size: 22rpx;
display: inline-block;
text-align: center;
background: #bae0f1;
border-radius: 6rpx;
color: #0a8f8a;
padding: 4rpx 8rpx;
}

.news .more {
font-size: 24rpx;
text-align: center;
color: #0a8f8a;
padding: 22rpx 0;
}

.mask {
background: $uni-bg-color-mask;
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
}

.mask-content {
background: $uni-bg-color;
width: 570rpx;
height: 480rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
border-radius: 20rpx;
}

.mask-close {
text-align: right;
}

.mask-title {
text-align: center;
font-size: 32rpx;
color: $uni-text-color-black;
margin-bottom: 50rpx;
}

.mask-tab {
display: flex;
justify-content: space-evenly;
}

.icon-closed {
width: 48rpx;
height: 48rpx;
margin: 24rpx 24rpx 0 0;
}

.tab-item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}

.tab-tit {
font-size: 32rpx;
margin-top: 20rpx;
color: #666;
}

.tab-item image {
width: 160rpx;
height: 160rpx;
}

.backlog-notice {
margin: 50rpx 30rpx 0rpx;
}

.flow-path {
padding: 20rpx 0rpx 20rpx;

.scroll-view {
white-space: nowrap;
top: 0;
}

.top-menu {
display: flex;
}

.top-menu .tab {
font-size: 28rpx;
padding: 38rpx 30rpx;
color: #666666;
position: relative;
}

.top-menu .active .border {
position: absolute;
width: 70%;
height: 16rpx;
background: #00b38b;
opacity: 0.3;
bottom: 40rpx;
z-index: -99;
left: 15%;
border-radius: 6rpx;
}

.top-menu .active {
font-weight: bold;
font-size: 32rpx;
color: #0d0f26;
}

.top-menu .active::before {
width: 100%;
height: 16rpx;
background: #00b38b;
opacity: 0.3;
}

.flow-list {
margin: 0rpx 30rpx;
min-height: 700rpx;
background: #ffffff;
box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
border-radius: 20rpx;
padding: 55rpx 30rpx 30rpx;
}
}

.description {
overflow: hidden;
-webkit-line-clamp: 2;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
}
</style>

+ 621
- 647
pages/index/index.vue
Diff nebyl zobrazen, protože je příliš veliký
Zobrazit soubor


binární
static/image/fuwu.png Zobrazit soubor


binární
static/image/shouye.png Zobrazit soubor


binární
static/image/shouye1.png Zobrazit soubor


binární
static/image/wode.png Zobrazit soubor


Načítá se…
Zrušit
Uložit