master
jevononlie 5 months ago
parent 734b3b8101
commit dd4163ceca

@ -51,19 +51,6 @@
"navigationBarTitleText": "完成订单详情"
}
},
{
"path": "pages/newsList/newsList",
"style": {
"navigationBarTitleText": "消息列表",
"navigationStyle": "custom"
}
},
{
"path": "pages/orderAuto/orderAuto",
"style": {
"navigationBarTitleText": "自动接单"
}
},
{
"path": "pages/my/my",
"style": {

@ -96,9 +96,6 @@ const handleWallet = () => {
</view>
</view>
</view>
<!-- <navigator class="settings" url="/pagesMember/settings/settings" hover-class="none">
设置
</navigator> -->
</view>
<!-- 我的订单 -->
<view class="orders">
@ -119,10 +116,6 @@ const handleWallet = () => {
<uni-icons type="cart" color="#3775F6" size="20"></uni-icons>
<view class="label"> 已完成订单 </view>
</button>
<!-- <button hover-class="none" class="item arrow" @click="handleOrderAuto">
<image class="img" src="/static/images/order_auto_my.png" mode="scaleToFill" />
<view class="text"> 自动接单 </view>
</button> -->
<navigator v-if="orgFund != null" class="settings item arrow" @click="handleWallet" hover-class="none">
<uni-icons type="wallet" color="#3775F6" size="20"></uni-icons>
<view class="label"> 商户充值记录 </view>

@ -1,161 +0,0 @@
<script setup lang="ts">
import { onMounted, ref } from 'vue'
import type { OrderListParams } from '@/types/order'
//
const isFinish = ref(false)
//
const isTriggered = ref(false)
// porps
const props = defineProps<{
orderState: number
}>()
//
const isLoading = ref(false)
//
const queryParams: Required<OrderListParams> = {
page: 1,
pageSize: 5,
orderState: props.orderState,
}
const dataList = ref([
{
id: 1,
name: 'dd',
},
{
id: 2,
name: 'dd',
},
{
id: 3,
name: 'dd',
},
{
id: 4,
name: 'dd',
},
{
id: 5,
name: 'dd',
},
])
const getMemberOrderData = async () => {
// 退
if (isLoading.value) return
// 退
if (isFinish.value === true) {
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
}
//
isLoading.value = true
//
const res = await getListOrderAPI(queryParams)
// debugger
//
isLoading.value = false
//
orderList.value.push(...res.result.items)
//
if (queryParams.page < res.result.pages) {
//
queryParams.page++
} else {
//
isFinish.value = true
}
}
onMounted(() => {
// getMemberOrderData()
// const arr: object[] = [
// {
// id: 1,
// name: '233'
// }
// ]
// orderList.value.push(...arr)
})
//
const onRefresherrefresh = async () => {
//
isTriggered.value = true
//
queryParams.page = 1
orderList.value = []
isFinish.value = false
//
await getMemberOrderData()
//
isTriggered.value = false
}
</script>
<template>
<scroll-view
enable-back-to-top
scroll-y
class="orders"
refresher-enabled
:refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh"
@scrolltolower="getMemberOrderData"
>
<view class="dataList">
<view class="item" v-for="item in dataList" :key="item.id">
<image src="/static/images/news_icon.png" mode="aspectFit" class="img"></image>
<view class="right">
<view class="hd">
<view class="title">13277590688</view>
<view class="time">4分钟前</view>
</view>
<view class="info">什么时间到</view>
</view>
</view>
</view>
</scroll-view>
</template>
<style lang="scss">
.dataList {
padding: 20rpx 20rpx;
.item {
display: flex;
justify-content: flex-start;
align-items: center;
margin: 20rpx 0;
padding: 20rpx 10rpx;
border-radius: 16rpx;
box-shadow: 0px 0px 8px 0px rgba(164, 182, 203, 0.33);
.img {
width: 72rpx;
height: 72rpx;
margin-right: 20rpx;
}
.right {
flex: 1;
margin-right: 10rpx;
.hd {
display: flex;
flex-direction: row;
justify-content: space-between;
.title {
color: #3d3d3d;
font-size: 32rpx;
}
.time {
color: #afb0b6;
font-size: 28rpx;
}
}
.info {
color: #868891;
margin: 20rpx 0;
font-size: 30rpx;
}
}
}
}
</style>

@ -1,161 +0,0 @@
<script setup lang="ts">
import { onMounted, ref } from 'vue'
import type { OrderListParams } from '@/types/order'
//
const isFinish = ref(false)
//
const isTriggered = ref(false)
// porps
const props = defineProps<{
orderState: number
}>()
//
const isLoading = ref(false)
//
const queryParams: Required<OrderListParams> = {
page: 1,
pageSize: 5,
orderState: props.orderState,
}
const dataList = ref([
{
id: 1,
name: 'dd',
},
{
id: 2,
name: 'dd',
},
{
id: 3,
name: 'dd',
},
{
id: 4,
name: 'dd',
},
{
id: 5,
name: 'dd',
},
])
const getMemberOrderData = async () => {
// 退
if (isLoading.value) return
// 退
if (isFinish.value === true) {
return uni.showToast({ icon: 'none', title: '没有更多数据~' })
}
//
isLoading.value = true
//
// const res = await getListOrderAPI(queryParams)
// debugger
//
isLoading.value = false
//
orderList.value.push(...res.result.items)
//
if (queryParams.page < res.result.pages) {
//
queryParams.page++
} else {
//
isFinish.value = true
}
}
onMounted(() => {
// getMemberOrderData()
// const arr: object[] = [
// {
// id: 1,
// name: '233'
// }
// ]
// orderList.value.push(...arr)
})
//
const onRefresherrefresh = async () => {
//
isTriggered.value = true
//
queryParams.page = 1
orderList.value = []
isFinish.value = false
//
await getMemberOrderData()
//
isTriggered.value = false
}
</script>
<template>
<scroll-view
enable-back-to-top
scroll-y
class="orders"
refresher-enabled
:refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh"
@scrolltolower="getMemberOrderData"
>
<view class="dataList">
<view class="item" v-for="item in dataList" :key="item.id">
<image src="/static/images/news_icon.png" mode="aspectFit" class="img"></image>
<view class="right">
<view class="hd">
<view class="title">平台运营中心</view>
<view class="time">4分钟前</view>
</view>
<view class="info">派送给您编号HS21545455244...</view>
</view>
</view>
</view>
</scroll-view>
</template>
<style lang="scss">
.dataList {
padding: 20rpx 20rpx;
.item {
display: flex;
justify-content: flex-start;
align-items: center;
margin: 20rpx 0;
padding: 20rpx 10rpx;
border-radius: 16rpx;
box-shadow: 0px 0px 8px 0px rgba(164, 182, 203, 0.33);
.img {
width: 72rpx;
height: 72rpx;
margin-right: 20rpx;
}
.right {
flex: 1;
margin-right: 10rpx;
.hd {
display: flex;
flex-direction: row;
justify-content: space-between;
.title {
color: #3d3d3d;
font-size: 32rpx;
}
.time {
color: #afb0b6;
font-size: 28rpx;
}
}
.info {
color: #868891;
margin: 20rpx 0;
font-size: 30rpx;
}
}
}
}
</style>

@ -1,141 +0,0 @@
<script setup lang="ts">
import { ref } from 'vue'
import newsItem from './components/newsItem.vue'
import noticeItem from './components/noticeItem.vue'
//
const { safeAreaInsets } = uni.getSystemInfoSync()
// tabs
const orderTabs = ref([
{ orderState: 0, title: '通知', isRender: false },
{ orderState: 1, title: '私信', isRender: false },
])
//
const activeIndex = ref(orderTabs.value.findIndex((v) => v.orderState === Number(0)))
//
orderTabs.value[activeIndex.value].isRender = true
</script>
<template>
<!-- <CartMain /> -->
<view class="viewport">
<!-- 自定义导航栏: 默认透明不可见, scroll-view 滚动到 50 时展示 -->
<view class="navbar" :style="{ paddingTop: safeAreaInsets?.top + 'px' }">
<view class="wrap">
<navigator open-type="navigateBack" class="back icon-left"></navigator>
<view class="title"></view>
</view>
</view>
<view class="tabs">
<text
class="item"
:class="{ active: activeIndex == index }"
v-for="(item, index) in orderTabs"
:key="item.title"
@tap="
() => {
activeIndex = index
item.isRender = true
}
"
>
{{ item.title }}
</text>
<!-- 游标 -->
<view class="cursor" :style="{ left: activeIndex ? '65%' : '14%' }"></view>
</view>
<!-- 滑动容器 -->
<swiper class="swiper" :current="activeIndex" @change="activeIndex = $event.detail.current">
<!-- 滑动项 -->
<swiper-item v-for="item in orderTabs" :key="item.title">
<newsItem v-if="activeIndex" />
<noticeItem v-else />
</swiper-item>
</swiper>
</view>
</template>
<style lang="scss">
page {
height: 100%;
}
.viewport {
height: 100%;
display: flex;
flex-direction: column;
// background-color: #3775F6;
.navbar {
width: 750rpx;
color: #000;
position: fixed;
top: 0;
left: 0;
z-index: 9;
/* background-color: #f8f8f8; */
background-color: #3775f6;
.wrap {
position: relative;
background-color: #3775f6;
.title {
height: 44px;
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
/* color: #000; */
color: #fff;
}
.back {
position: absolute;
left: 0;
height: 44px;
width: 44px;
font-size: 44rpx;
display: flex;
align-items: center;
justify-content: center;
/* color: #000; */
color: #fff;
}
}
}
.tabs {
display: flex;
justify-content: space-around;
line-height: 60rpx;
background-color: #3775f6;
position: relative;
z-index: 9;
margin-top: 128rpx;
width: 100%;
.item {
flex: 1;
text-align: center;
padding: 20rpx;
font-size: 28rpx;
color: #fff;
// &.active {
// border-bottom: 2rpx solid #5386e4;
// }
}
.cursor {
position: absolute;
left: 13%;
bottom: 0;
width: 20%;
height: 6rpx;
padding: 0 50rpx;
background-color: #fff;
/* 过渡效果 */
transition: all 0.4s;
}
}
// swiper
.swiper {
background-color: #f7f7f8;
}
}
</style>

@ -1,509 +0,0 @@
<script setup lang="ts">
import type { InputNumberBoxEvent } from '@/components/vk-data-input-number-box/vk-data-input-number-box'
import { useGuessList } from '@/composables'
import {
deleteMemberCartAPI,
getMemberCartAPI,
putMemberCartBySkuIdAPI,
putMemberCartSelectedAPI,
} from '@/services/cart'
import { useMemberStore } from '@/stores'
import type { CartItem } from '@/types/cart'
import { onShow } from '@dcloudio/uni-app'
import { computed, ref } from 'vue'
//
defineProps<{
safeAreaInsetBottom?: boolean
}>()
//
const { safeAreaInsets } = uni.getSystemInfoSync()
// Store
const memberStore = useMemberStore()
//
const cartList = ref<CartItem[]>([])
//
const showCartList = ref(true)
const getMemberCartData = async () => {
const res = await getMemberCartAPI()
cartList.value = res.result
showCartList.value = res.result.length > 0
}
// :
onShow(() => {
if (memberStore.profile) {
getMemberCartData()
}
})
//
const onDeleteCart = (skuId: string) => {
//
uni.showModal({
content: '是否删除',
confirmColor: '#3775F6',
success: async (res) => {
if (res.confirm) {
//
await deleteMemberCartAPI({ ids: [skuId] })
//
getMemberCartData()
}
},
})
}
//
const onChangeCount = (ev: InputNumberBoxEvent) => {
putMemberCartBySkuIdAPI(ev.index, { count: ev.value })
}
// -
const onChangeSelected = (item: CartItem) => {
// -
item.selected = !item.selected
//
putMemberCartBySkuIdAPI(item.skuId, { selected: item.selected })
}
//
const isSelectedAll = computed(() => {
return cartList.value.length && cartList.value.every((v) => v.selected)
})
// -
const onChangeSelectedAll = () => {
//
const _isSelectedAll = !isSelectedAll.value
//
cartList.value.forEach((item) => {
item.selected = _isSelectedAll
})
//
putMemberCartSelectedAPI({ selected: _isSelectedAll })
}
//
const selectedCartList = computed(() => {
return cartList.value.filter((v) => v.selected)
})
//
const selectedCartListCount = computed(() => {
return selectedCartList.value.reduce((sum, item) => sum + item.count, 0)
})
//
const selectedCartListMoney = computed(() => {
return selectedCartList.value
.reduce((sum, item) => sum + item.count * item.nowPrice, 0)
.toFixed(2)
})
//
const gotoPayment = () => {
if (selectedCartListCount.value === 0) {
return uni.showToast({
icon: 'none',
title: '请选择商品',
})
}
//
uni.navigateTo({ url: '/pagesOrder/create/create' })
}
//
const { guessRef, onScrolltolower } = useGuessList()
</script>
<template>
<scroll-view enable-back-to-top scroll-y class="scroll-view" @scrolltolower="onScrolltolower">
<!-- 已登录: 显示购物车 -->
<template v-if="memberStore.profile">
<!-- 购物车列表 -->
<view class="cart-list" v-if="showCartList">
<!-- 优惠提示 -->
<view class="tips">
<text class="label">满减</text>
<text class="desc">满1件, 即可享受9折优惠</text>
</view>
<!-- 滑动操作分区 -->
<uni-swipe-action>
<!-- 滑动操作项 -->
<uni-swipe-action-item v-for="item in cartList" :key="item.skuId" class="cart-swipe">
<!-- 商品信息 -->
<view class="goods">
<!-- 选中状态 -->
<text
@tap="onChangeSelected(item)"
class="checkbox"
:class="{ checked: item.selected }"
></text>
<navigator
:url="`/pages/goods/goods?id=${item.id}`"
hover-class="none"
class="navigator"
>
<image mode="aspectFill" class="picture" :src="item.picture"></image>
<view class="meta">
<view class="name ellipsis">{{ item.name }}</view>
<view class="attrsText ellipsis">{{ item.attrsText }}</view>
<view class="price">{{ item.nowPrice }}</view>
</view>
</navigator>
<!-- 商品数量 -->
<view class="count">
<vk-data-input-number-box
v-model="item.count"
:min="1"
:max="item.stock"
:index="item.skuId"
@change="onChangeCount"
/>
</view>
</view>
<!-- 右侧删除按钮 -->
<template #right>
<view class="cart-swipe-right">
<button @tap="onDeleteCart(item.skuId)" class="button delete-button">删除</button>
</view>
</template>
</uni-swipe-action-item>
</uni-swipe-action>
</view>
<!-- 购物车空状态 -->
<view class="cart-blank" v-else>
<image src="/static/images/blank_cart.png" class="image" />
<text class="text">购物车还是空的快来挑选好货吧</text>
<navigator url="/pages/index/index" hover-class="none">
<button class="button">去首页看看</button>
</navigator>
</view>
<!-- 吸底工具栏 -->
<view
v-if="showCartList"
class="toolbar"
:style="{ paddingBottom: safeAreaInsetBottom ? safeAreaInsets?.bottom + 'px' : 0 }"
>
<text @tap="onChangeSelectedAll" class="all" :class="{ checked: isSelectedAll }">全选</text>
<text class="text">合计:</text>
<text class="amount">{{ selectedCartListMoney }}</text>
<view class="button-grounp">
<view
@tap="gotoPayment"
class="button payment-button"
:class="{ disabled: selectedCartListCount === 0 }"
>
去结算({{ selectedCartListCount }})
</view>
</view>
</view>
</template>
<!-- 未登录: 提示登录 -->
<view class="login-blank" v-else>
<text class="text">登录后可查看购物车中的商品</text>
<navigator url="/pages/login/login" hover-class="none">
<button class="button">去登录</button>
</navigator>
</view>
<!-- 猜你喜欢 -->
<XtxGuess ref="guessRef" />
<!-- 底部占位空盒子 -->
<view class="toolbar-height"></view>
</scroll-view>
</template>
<style lang="scss">
//
:host {
height: 100vh;
display: flex;
flex-direction: column;
overflow: hidden;
background-color: #f7f7f8;
}
//
.scroll-view {
flex: 1;
background-color: #f7f7f8;
}
//
.cart-list {
padding: 0 20rpx;
//
.tips {
display: flex;
align-items: center;
line-height: 1;
margin: 30rpx 10rpx;
font-size: 26rpx;
color: #666;
.label {
color: #fff;
padding: 7rpx 15rpx 5rpx;
border-radius: 4rpx;
font-size: 24rpx;
background-color: #3775F6;
margin-right: 10rpx;
}
}
//
.goods {
display: flex;
padding: 20rpx 20rpx 20rpx 80rpx;
border-radius: 10rpx;
background-color: #fff;
position: relative;
.navigator {
display: flex;
}
.checkbox {
position: absolute;
top: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
width: 80rpx;
height: 100%;
&::before {
content: '\e6cd';
font-family: 'erabbit' !important;
font-size: 40rpx;
color: #444;
}
&.checked::before {
content: '\e6cc';
color: #3775F6;
}
}
.picture {
width: 170rpx;
height: 170rpx;
}
.meta {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
margin-left: 20rpx;
}
.name {
height: 72rpx;
font-size: 26rpx;
color: #444;
}
.attrsText {
line-height: 1.8;
padding: 0 15rpx;
font-size: 24rpx;
align-self: flex-start;
border-radius: 4rpx;
color: #888;
background-color: #f7f7f8;
}
.price {
line-height: 1;
font-size: 26rpx;
color: #444;
margin-bottom: 2rpx;
color: #cf4444;
&::before {
content: '¥';
font-size: 80%;
}
}
//
.count {
position: absolute;
bottom: 20rpx;
right: 5rpx;
display: flex;
justify-content: space-between;
align-items: center;
width: 220rpx;
height: 48rpx;
.text {
height: 100%;
padding: 0 20rpx;
font-size: 32rpx;
color: #444;
}
.input {
height: 100%;
text-align: center;
border-radius: 4rpx;
font-size: 24rpx;
color: #444;
background-color: #f6f6f6;
}
}
}
.cart-swipe {
display: block;
margin: 20rpx 0;
}
.cart-swipe-right {
display: flex;
height: 100%;
.button {
display: flex;
justify-content: center;
align-items: center;
width: 50px;
padding: 6px;
line-height: 1.5;
color: #fff;
font-size: 26rpx;
border-radius: 0;
}
.delete-button {
background-color: #cf4444;
}
}
}
//
.cart-blank,
.login-blank {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
height: 60vh;
.image {
width: 400rpx;
height: 281rpx;
}
.text {
color: #444;
font-size: 26rpx;
margin: 20rpx 0;
}
.button {
width: 240rpx !important;
height: 60rpx;
line-height: 60rpx;
margin-top: 20rpx;
font-size: 26rpx;
border-radius: 60rpx;
color: #fff;
background-color: #3775F6;
}
}
//
.toolbar {
position: fixed;
left: 0;
right: 0;
bottom: calc(var(--window-bottom));
z-index: 1;
height: 100rpx;
padding: 0 20rpx;
display: flex;
align-items: center;
border-top: 1rpx solid #ededed;
border-bottom: 1rpx solid #ededed;
background-color: #fff;
box-sizing: content-box;
.all {
margin-left: 25rpx;
font-size: 14px;
color: #444;
display: flex;
align-items: center;
}
.all::before {
font-family: 'erabbit' !important;
content: '\e6cd';
font-size: 40rpx;
margin-right: 8rpx;
}
.checked::before {
content: '\e6cc';
color: #3775F6;
}
.text {
margin-right: 8rpx;
margin-left: 32rpx;
color: #444;
font-size: 14px;
}
.amount {
font-size: 20px;
color: #cf4444;
.decimal {
font-size: 12px;
}
&::before {
content: '¥';
font-size: 12px;
}
}
.button-grounp {
margin-left: auto;
display: flex;
justify-content: space-between;
text-align: center;
line-height: 72rpx;
font-size: 13px;
color: #fff;
.button {
width: 240rpx;
margin: 0 10rpx;
border-radius: 72rpx;
}
.payment-button {
background-color: #3775F6;
&.disabled {
opacity: 0.6;
}
}
}
}
//
.toolbar-height {
height: 100rpx;
}
</style>

@ -1,121 +0,0 @@
<script setup lang="ts">
import { ref } from 'vue'
const handleSubmit = async () => {}
</script>
<template>
<view class="viewport">
<view class="section-auto">
<view class="left">
<view class="title">自动接单</view>
<view class="desc">开启后将根据配置情况自动接单</view>
</view>
<view class="switch">
<switch checked color="#3775F6" style="transform: scale(0.7)" />
</view>
</view>
<view class="section-time">
<view class="start-time item">
<view class="left">
<view class="title">开始接单时间</view>
<view class="val">2024-01-16 13:25:22</view>
</view>
<view class="edit">修改</view>
</view>
<view class="end-time item">
<view class="left">
<view class="title">结束接单时间</view>
<view class="val">2024-01-16 13:25:22</view>
</view>
<view class="edit">修改</view>
</view>
<view class="auto-num item">
<view class="left">
<view class="title">自动接单范围</view>
<view class="val">4km</view>
</view>
<view class="edit">修改</view>
</view>
</view>
<view class="action" @click="handleSubmit"> </view>
</view>
</template>
<style lang="scss">
page {
height: 100%;
background-color: #fafafd;
}
.viewport {
padding: 10rpx;
.section-auto {
display: flex;
justify-content: space-between;
padding: 30rpx 0rpx;
margin: 20rpx 0;
border-radius: 16rpx;
background: #ffffff;
box-shadow: 0px 0px 8px 0px rgba(164, 182, 203, 0.33);
.left {
margin-left: 30rpx;
.title {
color: #3d3d3d;
font-size: 34rpx;
margin-bottom: 20rpx;
}
.desc {
color: #999a9f;
font-size: 32rpx;
}
}
}
.section-time {
padding: 30rpx 30rpx;
margin: 20rpx 0;
background: #ffffff;
border-radius: 16rpx;
box-shadow: 0px 0px 8px 0px rgba(164, 182, 203, 0.33);
.item {
display: flex;
justify-content: space-between;
align-items: center;
margin: 20rpx 0;
padding-bottom: 10rpx;
border-bottom: 2rpx solid #f2f2f2;
.left {
.title {
font-size: 34rpx;
color: #3d3d3d;
margin-bottom: 20rpx;
}
.val {
color: #999a9f;
font-size: 32rpx;
}
}
.edit {
color: #3775f6;
font-size: 40rpx;
text-decoration: underline;
}
&:last-child {
border: none;
}
}
}
.action {
width: 344rpx;
margin: 100rpx auto 0;
border-radius: 100rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 30rpx 30rpx;
color: #fff;
font-size: 36rpx;
background: linear-gradient(152deg, #51b6ff 16%, #3775f6 86%);
}
}
</style>

@ -1,8 +1,8 @@
<!--
* @Author: 王文杰
* @Date: 2024-01-25 10:55:51
* @LastEditors: 王文杰
* @LastEditTime: 2024-03-16 10:09:50
* @LastEditors: jevononlie 728254585@qq.com
* @LastEditTime: 2024-05-29 12:52:50
* @FilePath: /app-nx-recycle/src/payment/success/success.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
@ -19,7 +19,6 @@ const gotoHome = () => {
<view class="status">
<image class="img" src="/static/images/success_result.png" mode="scaleToFill" />
<view class="text">结算成功</view>
<!-- <view class="desc">当前剩余3个订单未处理请尽快处理</view> -->
</view>
<view class="action" @click="gotoHome"> </view>
</view>
@ -30,11 +29,13 @@ const gotoHome = () => {
page {
height: 100%;
}
.viewport {
height: 100%;
display: flex;
position: relative;
flex-direction: column;
// background-color: #3775F6;
.cont {
height: 100vh;
@ -55,16 +56,19 @@ page {
width: 120rpx;
height: 120rpx;
}
.text {
color: #3d3d3d;
margin: 20rpx 0;
font-size: 44rpx;
}
.desc {
color: #999a9f;
font-size: 30rpx;
}
}
.action {
background: linear-gradient(149deg, #51b6ff 19%, #3775f6 82%);
width: 400rpx;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Loading…
Cancel
Save