私域通静态

This commit is contained in:
老叶
2021-11-17 15:01:30 +08:00
parent 8b972a119a
commit 517d487122
18 changed files with 739 additions and 5 deletions
+4 -1
View File
@@ -38,7 +38,10 @@
"pages/order/detail/index2",
"pages/order/edit/index2",
"pages/order/editOwner/index",
"pages/order/filterList/index2"
"pages/order/filterList/index2",
"pages/siyutong/index",
"pages/siyutong/activityDetail/index",
"pages/siyutong/activityRanking/index"
],
"echarts": [
{
File diff suppressed because one or more lines are too long
+221
View File
@@ -0,0 +1,221 @@
import _ from '../../commons/js/commons'
import Canvas from '../../commons/js/utils/canvas'
let isGetImgInfo = false
const app = getApp()
Component({
//组件的属性列表
properties: {
isShow: {
type: Boolean,
value: false
},
customImg: {
type: String,
value: ''
},
codeImg: {
type: String,
value: ''
},
},
//组件的初始数据
data: {
imgs: [],
tempPosterPath: '',
showOptBtn:false,//操作按钮显示
},
attached: function () {
isGetImgInfo = false
},
//数据监听
observers: {
'isShow': function (e) {
if (e) {
this.setData({
showOptBtn:false,
})
this.createPoster()
}
},
'customImg': function (e) {
if (e) {
this.getImageInfo(this.data.customImg, 0)
}
},
'codeImg': function (e) {
if (e) {
this.getImageInfo(this.data.codeImg, 1)
}
},
},
//组件的方法列表
methods: {
// 转化网络图片,获取路径
getImageInfo(src, index) {
let that = this
isGetImgInfo = false
setTimeout(function () {
wx.getImageInfo({
src: src,
success: (res) => {
let arr = that.data.imgs
arr[index] = res
that.setData({
imgs: arr
})
isGetImgInfo = true
},
fail: (err) => {
console.log('error img is: ' + src)
}
})
}, 200)
},
//自定义海报
customizePoster(CTX){
if(this.data.customImg){
let that = this
let width = 600
let height = (parseFloat(this.data.imgs[0].height)/parseFloat(this.data.imgs[0].width))*600
this.setData({
canvasInfo:{
width: width+'px',
height: height+'px'
}
})
// CTX.setFillStyle('#ffffff')
// CTX.fillRect(0, 0,width+20, picheight+optheight+ftheight+20)
//底图
if (that.data.imgs[0]) {
CTX.drawImage(that.data.imgs[0].path, 0, 0, that.data.imgs[0].width, that.data.imgs[0].height, 0, 0, width, height)
}
//二维码
if (that.data.imgs[1]) {
Canvas.circleImage(CTX,that.data.imgs[1].path,417, height-180,70)
}
setTimeout(function(){
CTX.save()
CTX.draw(true, function () {
wx.hideLoading()
that.saveCanvas()
})
},200)
}
},
//生成海报
createPoster() {
let that = this
wx.showLoading({
title: '正在生成',
})
if(isGetImgInfo){
this.setData({
tempPosterPath: ''
})
let ctx = wx.createCanvasContext('postercanvas', that)
that.customizePoster(ctx)
}
},
//临时存储canvas
saveCanvas() {
let that = this
wx.canvasToTempFilePath({
canvasId: 'postercanvas',
quality: 1,
success: (res) => {
// this.tempFilePath = res.tempFilePath
that.setData({
'tempPosterPath': res.tempFilePath
})
setTimeout(function () {
that.setData({
showOptBtn:true,
})
},200)
},
fail: (res) => {
app.printErrorClient('poseterfail',['错误信息:临时存储canvas失败',JSON.stringify(res)])
}
}, this)
},
//保存到相册
saveToAblum() {
let that = this
wx.saveImageToPhotosAlbum({
filePath: this.data.tempPosterPath,
success: (res) => {
_.utils.$toast('保存成功')
},
fail: (err) => {
app.printErrorClient('poseterfail',['错误信息:图片保存失败',JSON.stringify(err)])
if (err.errMsg == 'saveImageToPhotosAlbum:fail cancel') {
_.utils.$toast('您已取消保存')
} else if (err.errMsg == 'saveImageToPhotosAlbum:fail auth deny') {
_.utils.$modal('提示', '保存图片失败,您可以点击确定设置获取相册权限后再尝试保存!', '去授权').then(res => {
if (res) {
wx.openSetting({}) // 打开小程序设置页面,可以设置权限
}
})
}
}
})
},
//隐藏海报弹框
hidePoster() {
this.setData({
isShow: false
})
wx.hideLoading()
},
//预览图片
preview() {
wx.previewImage({
current: this.data.tempPosterPath, // 当前显示图片的http链接
urls: [this.data.tempPosterPath] // 需要预览的图片http链接列表
})
},
//推送链接
pushLink(e) {
if(e.currentTarget.dataset.url){
_.$router.openUrlScheme(e.currentTarget.dataset.url)
}
},
//复制内容
copyWord(e){
if(e.currentTarget.dataset.tx){
wx.setClipboardData({
data: e.currentTarget.dataset.tx,
success (res) {
_.utils.$toast('复制成功')
}
})
}else{
_.utils.$toast('目前无文案')
}
},
}
})
+4
View File
@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}
+15
View File
@@ -0,0 +1,15 @@
<!-- components/poster/index.wxml -->
<view class="poster fixed {{isShow?'show':'hide'}}">
<view class="poster-bg absolute top-0 bottom-0 left-0 right-0" bindtap="hidePoster"></view>
<view class="poster-main poster-main-img absolute box-center-middle">
<canvas canvas-id='postercanvas' class='canvas absolute box-center-middle' style="width:{{canvasInfo.width}};height:{{canvasInfo.height}}"></canvas>
<view wx:if="{{showOptBtn}}" class="overflowhidden">
<scroll-view scroll-y="true" style="max-height:1000rpx;">
<image class="block wp100 ulib-r10" wx:if="{{tempPosterPath}}" src="{{tempPosterPath}}" mode="widthFix" catchtap="preview" />
</scroll-view>
</view>
<view class="mt40 fn-flex" wx:if="{{showOptBtn}}">
<button class="fn-flex-item btn-ffa73d-ff7a28 font-32 color-fff ulib-r750 text-center ml20 mr20" catchtap="saveToAblum">保存分享</button>
</view>
</view>
</view>
+26
View File
@@ -0,0 +1,26 @@
@import "../../commons/css/common.wxss";
.poster{
top: 0;
left: 100%;
width: 100%;
height: 100%;
z-index: 9999;
}
.show{
left: 0;
}
.poster-bg{
z-index: 9998;
background-color: rgba(0,0,0,.6);
}
.poster-main{
z-index: 9999;
}
.poster-main-img{
width:580rpx;
}
.poster-main-img canvas{
left: 1000%;
}
.btn-ffa73d-ff7a28{background-image:linear-gradient(#ffa73d,#ff7a28);border:none;}
.btn-ffa73d-ff7a28::after{border:none;}
+74
View File
@@ -0,0 +1,74 @@
import _ from '../../../commons/js/commons'
let flagForScroll = false
Page({
data: {
imgUrl:_.config.imgUrl,
navBar: {
title: '活动详情',
bgColor: '#fff',
isShowBg: false,
txtColor: '#fff'
},
imgs: [],
},
onLoad: function (options) {
flagForScroll = false
},
//生成海报
showPoster(e){
let that = this
wx.showLoading({
title: '正在生成中...',
})
that.setData({
'poster.customPoster':'https://qs.haodian.cn/wechat_app/lichebao/siyutong/detail.jpg',
'poster.codeImg':'https://qs.haodian.cn/wechat_app/lichebao/index/jrKF-code2.jpg',
})
setTimeout(function(){
that.setData({
'poster.isShow': true
})
wx.hideLoading()
},3000)
},
onPageScroll(obj) {
if (obj.scrollTop > _.config.elementScrollTop && !flagForScroll) {
flagForScroll = true
this.setData({
'navBar.isShowBg': true,
'navBar.txtColor': '#333',
flagForBarColor: '000'
})
wx.setNavigationBarColor({
frontColor: '#000000',
backgroundColor: '#000000',
animation: {
duration: 400,
timingFunc: 'easeIn'
}
})
} else if (obj.scrollTop < _.config.elementScrollTop && flagForScroll) {
flagForScroll = false
this.setData({
'navBar.isShowBg': false,
'navBar.txtColor': '#fff',
flagForBarColor: 'fff'
})
wx.setNavigationBarColor({
frontColor: '#ffffff',
backgroundColor: '#ffffff',
animation: {
duration: 400,
timingFunc: 'easeIn'
}
})
}
},
//页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh: function () {
},
})
+11
View File
@@ -0,0 +1,11 @@
{
"enablePullDownRefresh": true,
"navigationStyle": "custom",
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#333",
"backgroundColor": "#ffffff",
"backgroundColorTop": "#333",
"usingComponents": {
"activityPoster": "/components/activityPoster/index"
}
}
+64
View File
@@ -0,0 +1,64 @@
<lcb-navBar titleText="{{navBar.title}}" txtColor="{{navBar.txtColor}}" bgColor="{{navBar.bgColor}}" isShowBg="{{navBar.isShowBg}}"></lcb-navBar>
<view class='container'>
<view><image class="wp100" lazy-load="{{true}}" mode="widthFix" src="{{imgUrl}}siyutong/detail.jpg"></image></view>
<view class="inner30 pt0">
<view class="inner30 bds-5-679af5 bg-1c349c box-shadow-000-50 ulib-r20">
<view class="mt10 text-center"><image style="width:400rpx;height:40rpx;" lazy-load="{{true}}" mode="aspectFill" src="{{imgUrl}}siyutong/ac-tt-2.png"></image></view>
<view class="inner20 pt15 font-28 color-fff line-height-16">年末购车大潮,为满足公司需要,现开展蓄客活动。各位狸车同仁,请积极邀请朋友参加活动所有客户都会进入你们自己的客户池。</view>
</view>
<view class="mt30 inner30 bds-5-679af5 bg-1c349c box-shadow-000-50 ulib-r20">
<view class="relative pr150" bindtap="pushLink" data-url="">
<view class="text-nowrap font-32 color-fff">当前门店排名</view>
<view class="absolute right-0 box-middle">
<text class="inline-block bg-ffa73d-ff7a28 pl10 pr10 text-middle font-20 color-fff ulib-r750">2</text>
<i class="iconfont icon-gengduo text-middle font-32 color-fff"></i>
</view>
</view>
</view>
<view class="mt30 ulib-rt20 inner20 tt-ac text-center fn-flex">
<view class="fn-flex-item">
<view class="font-40 color-f9394d">50.32w</view>
<view class="font-28">报名</view>
</view>
<view class="fn-flex-item">
<view class="font-40 color-f9394d">50.32w</view>
<view class="font-28">报名</view>
</view>
<view class="fn-flex-item">
<view class="font-40 color-f9394d">50.32w</view>
<view class="font-28">报名</view>
</view>
</view>
<view class="inner30 bg-1c349c bds-5-679af5 box-shadow-000-50 ulib-rb20">
<view class="mt10 text-center"><image style="width:400rpx;height:40rpx;" lazy-load="{{true}}" mode="aspectFill" src="{{imgUrl}}siyutong/ac-tt-3.png"></image></view>
<view>
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-28 color-fff">东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!</view>
<view class="absolute right-0 box-middle mr30 font-28 color-adb3d6">
2秒前
</view>
</view>
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-28 color-fff">东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!</view>
<view class="absolute right-0 box-middle mr30 font-28 color-adb3d6">
2秒前
</view>
</view>
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-28 color-fff">东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!</view>
<view class="absolute right-0 box-middle mr30 font-28 color-adb3d6">
2秒前
</view>
</view>
</view>
</view>
<view class="pt40 pb40 pl100 pr100 text-center">
<view class="ac-btn pt20 pb20 font-32 color-fff ulib-r750" bindtap="showPoster">马上邀请</view>
</view>
</view>
</view>
<activityPoster isShow="{{poster.isShow}}" customImg="{{poster.customPoster}}" codeImg="{{poster.codeImg}}"></activityPoster>
+35
View File
@@ -0,0 +1,35 @@
page{
background-color:#000e66;
}
page{
background-color:#000e66;
}
.tt-ac{
background-color:#76a1e5;
box-shadow: 0 0 30rpx rgba(255,255,255,.5) inset;
}
.bds-5-679af5{
border:#679af5 5rpx solid;
}
.bg-1c349c{
background-color:#1c349c;
}
.bg-3349a6{
background-color:#3349a6;
}
.bg-ffa73d-ff7a28{
background-image:linear-gradient(#ffa73d,#ff7a28);
}
.bg-997871-ff7a28{
background-image:linear-gradient(#997871,#996267);
}
.box-shadow-000-50{
box-shadow: 0 0 30rpx rgba(0,0,0,.5) inset;
}
.color-adb3d6{
color:#adb3d6;
}
.ac-btn{
background-image:linear-gradient(#ffa73d,#ff7a28);
border-bottom:#db610d 6rpx solid;
}
+15
View File
@@ -0,0 +1,15 @@
Page({
data: {
isShowRule:false,
},
onLoad: function (options) {
},
//显示隐藏积分规则
optShowRule() {
this.setData({
isShowRule:!this.data.isShowRule,
})
},
})
+11
View File
@@ -0,0 +1,11 @@
{
"navigationBarTitleText": "活动排名",
"enablePullDownRefresh": true,
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#000e66",
"backgroundColor": "#ffffff",
"backgroundColorTop": "#000e66",
"usingComponents": {
}
}
+38
View File
@@ -0,0 +1,38 @@
<view class="container inner30 img-top-cover">
<view class="mt30 ulib-rt20 inner30 pl50 pr50 tt-ac relative color-000e65">
<view class="text-nowrap font-36"><text class="iconfont icon-cup mr5"></text>我的直营店</view>
<view class="absolute right-0 box-middle mr50 font-36">120分</view>
</view>
<view class="inner30 pt10 bg-1c349c bds-5-679af5 box-shadow-000-50 ulib-rb20">
<view>
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-28 color-fff"><text class="iconfont icon-cup mr10"></text>厦门直营店</view>
<view class="absolute right-0 box-middle mr30 font-28 color-fff">120分</view>
</view>
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-28 color-fff"><text class="pl10 mr10">2</text>厦门直营店</view>
<view class="absolute right-0 box-middle mr30 font-28 color-fff">120分</view>
</view>
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-28 color-fff"><text class="pl10 mr10">3</text>厦门直营店</view>
<view class="absolute right-0 box-middle mr30 font-28 color-fff">120分</view>
</view>
</view>
</view>
<view class="pt30 pb30 text-center font-28 color-fff" bindtap="optShowRule">积分规则></view>
</view>
<!--积分规则-->
<lcb-msg isShow="{{isShowRule}}">
<view slot="content">
<view class="pt50 text-center font-36">积分规则</view>
<view class="pt10 pl40 pr40 pb50 line-height-16 text-center font-28 color-666">
<view class="mt10">邀请一个人进入活动页面 浏览1分</view>
<view class="mt10">邀请一个人进入活动页面报名10分</view>
</view>
<view class="bts-1-eb text-center font-32 color-666">
<view class="pt25 pb25 color-000e65" bindtap="optShowRule">知道了</view>
</view>
</view>
</lcb-msg>
+28
View File
@@ -0,0 +1,28 @@
page{
background-color:#000e66;
}
.tt-ac{
background-color:#76a1e5;
box-shadow: 0 0 30rpx rgba(255,255,255,.5) inset;
}
.bds-5-679af5{
border:#679af5 5rpx solid;
}
.bg-1c349c{
background-color:#1c349c;
}
.bg-3349a6{
background-color:#3349a6;
}
.bg-ffa73d-ff7a28{
background-image:linear-gradient(#ffa73d,#ff7a28);
}
.bg-997871-ff7a28{
background-image:linear-gradient(#997871,#996267);
}
.box-shadow-000-50{
box-shadow: 0 0 30rpx rgba(0,0,0,.5) inset;
}
.color-000e65{
color:#000e65;
}
+89
View File
@@ -0,0 +1,89 @@
import _ from '../../commons/js/commons'
const app = getApp()
Page({
//页面的初始数据
data: {
imgUrl:_.config.imgUrl,
swiperOptions: {
indicatorDots: false,
vertical: false,
autoplay: false,
interval: 4000,
duration: 1000,
items: 1,
circular: false,
current: 0
},
swiperCurrent: 0,
},
//生命周期函数--监听页面加载
onLoad: function (options) {
for (let key in options) {
this.setData({
[key]: options[key]
})
}
this.getMaterialBiz()
},
//cms详细信息
getMaterialBiz() {
let res = {"code":200,"data":{"user":{"uid":"258","nickname":"老叶","headimg":"https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/Q0j4TwGTfTKe4jENRCNiaqeuxLBdzUCk2BSc3rPC4qABoZicHrrjEjg2ffYA0qeOr93mNcdcxqL2Hibib0Ou35PpZA\/132"},"card":{"id":"3","title":"星选卡","remark":"特权福利享不停","icon":"http:\/\/qs.haodian.cn\/wechat_app\/xingxuanka\/mine\/icon_card-200824.png","cover":"https:\/\/qimg.haodian.cn\/hdi\/2020\/08\/7cc1dbdfc8c028d7\/eed56196042b324d.png","card_id":3},"tip":"会员装修一站式,1对1的消费顾问服务","account":[{"title":"余额","value":"¥0"},{"title":"红包","value":"¥0"},{"title":"额度","value":"最高30万元"}],"icons":[{"id":0,"title":"免费设计","icon":"https:\/\/qs.haodian.cn\/wechat_app\/xingxuanka\/card\/design.png?v=20082615","type":"topic","url":"\/pages\/specialtopic\/mianfeisheji\/index"},{"id":0,"title":"专属顾问","icon":"https:\/\/qs.haodian.cn\/wechat_app\/xingxuanka\/card\/service.png?v=20082615","type":"alert","url":""},{"id":"8","title":"红包权益","icon":"https:\/\/qimg.haodian.cn\/hdi\/2020\/08\/ed48eaab121b8a97\/b48176ea164897ce.png?width=92","type":"right","url":""},{"id":"9","title":"免费量尺","icon":"https:\/\/qimg.haodian.cn\/hdi\/2020\/08\/5d7742c70015717b\/9c0054f73f6a86cf.png?width=92","type":"right","url":""},{"id":"10","title":"媒体监督","icon":"https:\/\/qimg.haodian.cn\/hdi\/2020\/08\/aa63ecd669541f24\/80459c732704caf5.png?width=92","type":"right","url":""},{"id":"11","title":"质保服务","icon":"https:\/\/qimg.haodian.cn\/hdi\/2020\/08\/582e30122b596474\/3e4a8f613c8e38f0.png?width=92","type":"right","url":""},{"id":"12","title":"无忧退款","icon":"https:\/\/qimg.haodian.cn\/hdi\/2020\/08\/55b679a040e8922c\/0a4f057fedf475f9.png?width=92","type":"right","url":""}],"body":{"title":"建材礼金","remark":"不定时福利放送,随购随用","gift":{"id":"7","price":0,"title":"内含超5000元建材抵用券","have":1}}},"msg":""}
this.setData({
icons: this.getIconByGroup(res.data.icons),
})
},
//数据分组
getIconByGroup(icons) {
let arr = []
if (icons.length > 3) {
for (var i = 0; i < icons.length; i += 3) {
arr.push(icons.slice(i, i + 3));
}
} else {
arr.push(icons)
}
return arr
},
//切换icon轮播
swiperChange: function (e) {
this.setData({
swiperCurrent: e.detail.current // current 改变时会触发 change 事件
})
},
//推送链接
pushLink(e) {
if(e.currentTarget.dataset.url){
_.$router.openUrlScheme(e.currentTarget.dataset.url)
}
},
//页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh: function () {
this.setData({
swiperOptions: {
indicatorDots: false,
vertical: false,
autoplay: false,
interval: 4000,
duration: 1000,
items: 1,
circular: false,
current: 0
},
swiperCurrent: 0,
icons: [],
})
this.getMaterialBiz()
},
})
+11
View File
@@ -0,0 +1,11 @@
{
"navigationBarTitleText": "私域通",
"enablePullDownRefresh": true,
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#000e66",
"backgroundColor": "#ffffff",
"backgroundColorTop": "#000e66",
"usingComponents": {
}
}
+48
View File
@@ -0,0 +1,48 @@
<view class="container img-top-cover" style="background-image:url({{imgUrl}}siyutong/theme.jpg);">
<view class="relative" style="height:580rpx;"></view>
<view class="pl30 pr30 pb30">
<view class="ulib-rt20 inner20 tt-ac text-center fn-flex">
<view class="fn-flex-item">
<view class="font-40 color-f9394d">50.32w</view>
<view class="font-28">报名</view>
</view>
<view class="fn-flex-item">
<view class="font-40 color-f9394d">50.32w</view>
<view class="font-28">报名</view>
</view>
<view class="fn-flex-item">
<view class="font-40 color-f9394d">50.32w</view>
<view class="font-28">报名</view>
</view>
</view>
<view class="inner30 bg-1c349c bds-5-679af5 box-shadow-000-50 ulib-rb20">
<view class="mt10 text-center"><image style="width:400rpx;height:40rpx;" lazy-load="{{true}}" mode="aspectFill" src="{{imgUrl}}siyutong/ac-tt-1.png"></image></view>
<view>
<swiper style="height:370rpx;" indicator-dots="{{swiperOptions.indicatorDots}}"
autoplay="{{swiperOptions.autoplay}}" current="{{swiperOptions.current}}"
interval="{{swiperOptions.interval}}" duration="{{swiperOptions.duration}}"
display-multiple-items="{{swiperOptions.items}}" circular="{{swiperOptions.circular}}"
bindchange="swiperChange">
<block wx:for="{{icons}}" wx:key="index">
<swiper-item>
<block wx:for="{{item}}" wx:for-item="it" wx:key="index">
<view class="mt20 inner30 relative bg-3349a6 pr150 ulib-r10" bindtap="pushLink" data-url="">
<view class="text-nowrap font-32 color-fff">东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!东风EX1特约直播!</view>
<view class="absolute right-0 box-middle mr20">
<text class="inline-block bg-ffa73d-ff7a28 pl10 pr10 text-middle font-20 color-fff ulib-r750">进行中</text>
<i class="iconfont icon-gengduo text-middle font-32 color-fff"></i>
</view>
</view>
</block>
</swiper-item>
</block>
</swiper>
<view class="dots mt20" wx:if="{{icons.length>1}}">
<block wx:for="{{icons}}" wx:key="unique">
<view class="dot{{index == swiperCurrent ? ' active' : ''}}"></view>
</block>
</view>
</view>
</view>
</view>
</view>
+40
View File
@@ -0,0 +1,40 @@
page{
background-color:#000e66;
}
.tt-ac{
background-color:#76a1e5;
box-shadow: 0 0 30rpx rgba(255,255,255,.5) inset;
}
.bds-5-679af5{
border:#679af5 5rpx solid;
}
.bg-1c349c{
background-color:#1c349c;
}
.bg-3349a6{
background-color:#3349a6;
}
.bg-ffa73d-ff7a28{
background-image:linear-gradient(#ffa73d,#ff7a28);
}
.bg-997871-ff7a28{
background-image:linear-gradient(#997871,#996267);
}
.box-shadow-000-50{
box-shadow: 0 0 30rpx rgba(0,0,0,.5) inset;
}
.dots {
display: flex;
justify-content: center;
}
.dots .dot {
margin: 0 4rpx;
width: 12rpx;
height: 12rpx;
background: #8e9ace;
border-radius: 100%;
transition: all .6s;
}
.dots .dot.active {
background: #fff;
}