吉林工行提交一次

This commit is contained in:
xiaogang 2024-07-12 18:48:22 +08:00
parent c857ab81e3
commit 85c234bfcb
40 changed files with 2051 additions and 91 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.main-title-color[data-v-cc0dc560]{color:#d14328}

View File

@ -1 +0,0 @@
var t=Object.defineProperty,e=Object.defineProperties,a=Object.getOwnPropertyDescriptors,n=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,l=(e,a,n)=>a in e?t(e,a,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[a]=n,i=(t,e)=>{for(var a in e||(e={}))o.call(e,a)&&l(t,a,e[a]);if(n)for(var a of n(e))s.call(e,a)&&l(t,a,e[a]);return t},r=(t,n)=>e(t,a(n)),c=(t,e,a)=>new Promise(((n,o)=>{var s=t=>{try{i(a.next(t))}catch(e){o(e)}},l=t=>{try{i(a.throw(t))}catch(e){o(e)}},i=t=>t.done?n(t.value):Promise.resolve(t.value).then(s,l);i((a=a.apply(t,e)).next())}));import{r as u,s as d,d as p,g as v,a as y,b as f,u as m,n as _,c as g,o as O,e as b,f as h,h as w,i as j,w as I,j as x,k,l as P,m as $,p as T,q as D,_ as L}from"./index-DLP_m7Cj.js";const C=t=>new Promise(((e,a)=>{u(r(i({},t),{dataType:"json",header:{"content-type":"application/json"},responseType:"json",success(t){var n,o,s;(null==(n=t.data)?void 0:n.code)>=200&&(null==(o=t.data)?void 0:o.code)<300?e(t.data):401===(null==(s=t.data)?void 0:s.code)?(window.parent.postMessage({data:{type:"logout"}},"*"),a(t)):e(t.data)},fail(t){d({icon:"none",title:"网络错误,换个网络试试"}),a(t)}}))}));C.get=(t,e)=>C({url:t,query:e,method:"GET"}),C.post=(t,e,a,n=!1)=>C({url:t,query:a,data:e,method:"POST",hideErrorToast:n});const E=t=>C.get("/v1/content",t),S=L(p(r(i({},{name:"Home"}),{__name:"index",setup(t){const{safeAreaInsets:e}=v(),a=y({}),n=f(""),o=f(""),s=m();let l="activity",i=null;const r={Interface:"api_code",lottery:"lottery_code",activity:"activity_code"},u=y({url:"",title:""});function p(){return c(this,null,(function*(){const t={};t[r[l]]=n.value||"",s.reset();L(yield E(t))}))}function L(t){if(200===t.code){const{login_content_template:e,login_content_templates:l,content_templates:i,token:r}=t.data;n.value=t.data.activity_code,Object.assign(a,t.data),1===e.validate_login?Object.assign(u,{url:C(l.source+`?activity_code=${n.value}`),title:l.moduledesc}):2===e.validate_login&&Object.assign(u,{url:C(i.source+`?activity_code=${n.value}&token=${r}`),title:i.moduledesc}),g({title:u.title}),s.setUserInfo({srcList:u,contentData:a,activityCode:n.value,token:r,lottery:o.value})}else d({title:t.message,icon:"none"})}function C(t){const e=(new Date).getTime();return t+(t.includes("?")?"&timestamp=":"?timestamp=")+e}window.parent.addEventListener("message",(function(t){let e={url:"",title:""};switch(t.data.data.type){case"login":case"couponBack":e={url:a.content_templates.source+`?activity_code=${n.value}`,title:a.content_templates.moduledesc};break;case"coupon":e={url:a.user_content_templates.source+`?activity_code=${n.value}`,title:a.user_content_templates.moduledesc};break;case"product":const o=`product_id=${t.data.data.product_id}&id=${t.data.data.id}&activity_code=${n.value}`,s=encodeURIComponent(o);e={url:a.user_content_templates.source+`#/pages/coupon/product?url=${s}`,title:a.user_content_templates.moduledesc};break;case"logout":return p()}_((()=>{Object.assign(u,{url:C(e.url),title:e.title}),g({title:u.title}),s.setUserInfo({srcList:u,contentData:a,activityCode:n.value,token:a.token,lottery:o.value})}))}));const S=()=>{i=setInterval((()=>c(this,null,(function*(){const t={};t[r[l]]=o.value||"";const e=yield E(t);JSON.stringify(e.data)!==JSON.stringify(s.userInfo.contentData)&&(d({title:"活动发生变更",icon:"none"}),L(e))}))),6e4)};return O((()=>{n.value=(()=>{const t=window.location.href;if(-1!==t.indexOf("#/")){let e="";const a=-1!==t.indexOf("#/")?t.split("#/")[1]:t.split("/")[t.split("/").length-1];return e=-1===a.indexOf("/")?a||"":a.split("/")[0],-1===e.indexOf("-")?l="activity":(l=e.split("-")[0],e=e.split("-")[1]),e}if(-1!==t.indexOf("?")){let e="";return e=t.split("=")[1],l=e.split("-")[0],e.split("-")[1]}{const e=t.split("/"),a=e[e.length-1];let n="";return-1===a.indexOf("-")?(n=a,l="activity"):(l=a.split("-")[0],n=a.split("-")[1]),n}})(),o.value=n.value,!s.userInfo.srcList.url||s.userInfo.lottery!==o.value&&s.userInfo.activityCode!==n.value?p():(n.value=s.userInfo.activityCode,Object.assign(u,s.userInfo.srcList,{url:C(s.userInfo.srcList.url)}),Object.assign(a,s.userInfo.contentData),g({title:u.title})),S()})),b((()=>{clearInterval(i),i=null})),(t,a)=>{const n=T,o=D,s=h("layout-default-uni");return w(),j(s,null,{default:I((()=>{var t;return[x(o,{class:"bg-white overflow-hidden pt-2 px-4",style:$({marginTop:(null==(t=k(e))?void 0:t.top)+"px"})},{default:I((()=>[k(u).url?(w(),j(n,{key:0,src:k(u).url},null,8,["src"])):P("",!0)])),_:1},8,["style"])]})),_:1})}}})),[["__scopeId","data-v-cc0dc560"]]);export{S as default};

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
<!doctype html>
<html build-date="2024-07-10 11:36:57">
<html build-date="2024-07-12 18:36:23">
<head>
<link rel="stylesheet" href="./assets/uni.ad4bcb33.css">
<link rel="stylesheet" href="./assets/uni.b8118566.css">
<meta charset="UTF-8" />
<!-- <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> -->
@ -19,8 +19,8 @@
<title>场景营销</title>
<!--preload-links-->
<!--app-context-->
<script type="module" crossorigin src="./assets/index-DLP_m7Cj.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-DfE4H0b6.css">
<script type="module" crossorigin src="./assets/index-B8Jl9LC_.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-Uzx5Hyrd.css">
</head>
<body>

View File

@ -41,16 +41,60 @@ export default defineUniPages({
],
},
pages: [
// {
// path: 'pages/index/index',
// type: 'home',
// style: {
// navigationStyle: 'custom',
// },
// },
{
path: 'pages/index/index',
path: 'pages/jlgh/login',
type: 'home',
style: {
navigationStyle: 'custom',
},
},
{
path: 'pages/jlgh/index',
type: 'page',
style: {
navigationStyle: 'custom',
},
},
{
path: 'pages/jlgh/coupon',
type: 'page',
style: {
navigationStyle: 'custom',
},
},
{
path: 'pages/jlgh/redeem',
type: 'page',
style: {
navigationStyle: 'custom',
},
},
],
})
// 吉林工行活动页
// {
// path: 'pages/jlgh/login',
// type: 'home',
// style: {
// navigationStyle: 'custom',
// },
// },
// {
// path: 'pages/jlgh/index',
// type: 'page',
// style: {
// navigationStyle: 'custom',
// },
// }
// 工行-卡券页
// {
// path: 'pages/coupon/index',

View File

@ -16,6 +16,11 @@ onHide(() => {
</script>
<style lang="scss">
body {
font-family:
PingFang SC,
Source Han Sans;
}
/* stylelint-disable selector-type-no-unknown */
button::after {
border: none;

View File

@ -55,6 +55,9 @@ const httpInterceptor = {
const { token } = userStore.userInfo as unknown as IUserInfo
if (token) {
options.header.Authorization = `Bearer ${token}`
} else {
const testToken = `bff4bdbc2f91207fd0333f418ca828c1ac5`
options.header.Authorization = `Bearer ${testToken}`
}
},
}

View File

@ -39,11 +39,33 @@
},
"pages": [
{
"path": "pages/index/index",
"path": "pages/jlgh/login",
"type": "home",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/jlgh/coupon",
"type": "page",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/jlgh/index",
"type": "page",
"layout": "default",
"style": {
"navigationStyle": "custom"
}
},
{
"path": "pages/jlgh/redeem",
"type": "page",
"style": {
"navigationStyle": "custom"
}
}
],
"subPackages": []

View File

@ -241,7 +241,8 @@ const intervalData = () => {
}
onLoad(() => {
activityCode.value = getUrlPathName()
// activityCode.value = getUrlPathName()
activityCode.value = 'TT123copycopycopy'
lottery.value = activityCode.value
if (
!useStore.userInfo.srcList.url ||

53
src/pages/jlgh/api.ts Normal file
View File

@ -0,0 +1,53 @@
import { http } from '@/utils/http'
export interface IFooItem {
id: string
name: string
}
export const getSms = (params: any) => {
return http.get('/v1/service/sms', params)
}
export const getLogin = (params: any) => {
return http.post('/v1/user/login', params)
}
export const getCode = (params: any) => {
return http.post('/v1/auth/user/equities/code', params)
}
export const getCouponList = (params: any) => {
return http.get('/v1/auth/user/coupon/list', params)
}
export const getProducts = (params: any) => {
return http.get('/v1/activity/products', params)
}
export const lottery = (params: any) => {
return http.post('/v1/lottery', params)
}
export const exchange = (params: any) => {
return http.post('/v1/auth/user/coupon/exchange', params)
}
export const getProductDetail = (params: any) => {
return http.get('/v1/activity/product/detail', params)
}
export const getOrderDetail = (params: any) => {
return http.get('/v1/auth/user/order/detail', params)
}
export default {
getSms,
getLogin,
getCode,
getCouponList,
getProducts,
lottery,
exchange,
getProductDetail,
getOrderDetail,
}

275
src/pages/jlgh/coupon.vue Normal file
View File

@ -0,0 +1,275 @@
<template>
<scroll-view scroll-y class="page-wrapper">
<view v-if="list.length" class="page-container">
<view v-for="(item, index) in list" :key="index" class="mt30 pos bgwhite ptb30 plr20">
<view
class="abs f18 f-center"
style="
top: 0;
right: 0;
width: 82rpx;
height: 38rpx;
line-height: 38rpx;
color: #c0513d;
background: #fceceb;
border-radius: 0rpx 20rpx;
"
>
新获得
</view>
<view>
<view class="flex_between flex_items mt30 bbe9s pb20" style="width: calc(100% - 40rpx)">
<view class="flex_start flex_items">
<view style="width: 120rpx; height: 120rpx; border-radius: 12rpx">
<image
:src="item.show_pic"
style="width: 120rpx; height: 120rpx; border-radius: 12rpx"
mode=""
></image>
<!-- <image
v-if="item.prize_type == 2"
:src="item.prize_data.main_image"
style="width: 120rpx; height: 120rpx; border-radius: 12rpx"
mode=""
></image> -->
</view>
<view class="ml30 flex_column" style="width: 350rpx">
<view class="f30 bold three">{{ item.show_name }}</view>
<text class="f30 mt30" style="color: #888">{{ item.expiration_time }}</text>
</view>
</view>
<view class="flex_start flex_items mr20" style="color: #eb5e42">
<view class="f24"></view>
<text class="f48 bolder one">{{ item.amount }}</text>
</view>
</view>
<view class="mt40 flex_between flex_items">
<text class="f28" style="color: #4d4d4d">
{{ item.activity_title }}
</text>
<view class="flex_start flex_items">
<view
v-if="item.status == 1"
@click="dui(item)"
class="f24 f-center mr20"
style="
width: 124rpx;
height: 48rpx;
line-height: 48rpx;
color: #a0a0a0;
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 23rpx;
"
>
兑换
</view>
<!-- <view
v-else
class="f24 f-center mr20"
style="
width: 124rpx;
height: 48rpx;
line-height: 48rpx;
color: #a0a0a0;
background: #fff;
border: 1rpx solid #e9e9e9;
border-radius: 23rpx;
"
>
兑换中
</view> -->
<view
v-else
class="f24 f-center mr20"
style="
width: 124rpx;
height: 48rpx;
line-height: 48rpx;
color: #a0a0a0;
background: #fff;
border: 1 px solid #e9e9e9;
border-radius: 23rpx;
"
>
已兑换
</view>
<!-- <view
@click="gomypre(item.prize_data.id)"
class="f24 f-center"
style="
width: 124rpx;
height: 48rpx;
line-height: 48rpx;
color: #fff;
background: linear-gradient(90deg, #ea5c41 0%, #ec7852 100%);
border-radius: 23rpx;
"
>
查看
</view> -->
</view>
</view>
</view>
</view>
</view>
<view
v-else
class="flex_center flex_items f24"
style="width: 100%; height: 600rpx; color: #888"
>
<text>--暂无数据--</text>
</view>
</scroll-view>
</template>
<script lang="ts" setup>
import api from './api'
const istrue = ref<boolean>(false)
const isShow = ref<boolean>(false)
const list = reactive<any>([])
const query = reactive<any>({
activity_code: 'zgp',
})
const dui = (item) => {
item.activity_code = query.activity_code
uni.navigateTo({
url: '/pages/jlgh/redeem?item=' + JSON.stringify(item),
})
}
const gomypre = (idx) => {
if (idx.status === 1) {
const url =
'product_id=' +
idx.product_id +
'&id=' +
idx.id +
'&activity_code=' +
query.activity_code +
'&mobile=' +
idx.mobile +
'&account_type=' +
idx.account_type +
'&product_form=' +
idx.product_form
const newUrl = encodeURIComponent(url)
uni.navigateTo({
url: '/pages/tt-coupon/product?url=' + newUrl,
})
} else {
if (idx.product_form === 3) {
uni.showModal({
content: `卡密:${idx.order_info}`,
showCancel: false,
})
} else if (idx.product_form === 1) {
idx.order_info && window.open(idx.order_info)
}
}
}
function getData() {
const params = {
page: 1,
page_size: 10,
activity_code: query.activity_code,
}
api.getCouponList(params).then((res: any) => {
if (res.code === 200) {
uni.stopPullDownRefresh()
uni.hideLoading()
if (res.data.data.length === 0) {
uni.showToast({
title: '暂无数据',
icon: 'none',
})
istrue.value = true
return false
}
istrue.value = true
for (let i = 0; i < res.data.data.length; i++) {
// res.data.data[i].prize_data = JSON.parse(res.data.data.data[i].prize_data)
list.push(res.data.data[i])
}
} else {
istrue.value = true
uni.hideLoading()
uni.showToast({
icon: 'none',
title: res.message,
})
}
})
}
const getUrlParm = () => {
const url = window.location.href
const theRequest = {}
if (url.indexOf('?') !== -1) {
const index = url.indexOf('?')
let str = url.slice(index + 1)
str = str.indexOf('#') !== -1 ? str.split('#')[0] : str
const strs = str.split('&')
for (let i = 0; i < strs.length; i++) {
theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]
}
}
return theRequest
}
onNavigationBarButtonTap((options) => {
if (options.index === 0) {
window.parent.postMessage(
{
data: {
type: 'couponBack',
},
},
'*',
)
return false
}
})
onLoad(() => {
Object.assign(query, getUrlParm())
getData()
})
</script>
<style>
@import './style.css';
.page-wrapper {
box-sizing: border-box;
width: 100vw;
height: 100vh;
overflow-y: auto;
background: #f2f4f3;
}
.page-container {
box-sizing: border-box;
display: inline-block;
width: 100%;
padding: 0 28rpx;
}
.three {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.one {
display: -webkit-box;
width: 150rpx;
overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
</style>

598
src/pages/jlgh/index.vue Normal file
View File

@ -0,0 +1,598 @@
<route lang="json5" type="page">
{
layout: 'default',
style: {
navigationStyle: 'custom',
},
}
</route>
<template>
<view class="index" style="border: 1px solid transparent">
<!-- 中将 -->
<view class="mask flex_items flex_column flex_center" v-if="ismask2">
<view class="mk2 plr50 flex_column flex_items" style="">
<view class="flex-col-center flex_items" style="width: 100%; padding-top: 50rpx">
<text v-if="isz == 1" class="f36 bold" style="margin-top: 100rpx; color: #003a6e">
恭喜您获得
</text>
<text v-if="isz == 0" class="f36 bold" style="margin-top: 100rpx; color: #003a6e"></text>
</view>
<text class="f40 mt40" style="color: #003a6e">{{ jiang }}</text>
<text v-if="isz === 1" class="f24 mt10" style="color: #003a6e">请到我的奖品中查看</text>
<view
v-if="isz == 1"
@click="mypre"
class="mt50 f-center f28"
style="
width: 336rpx;
height: 72rpx;
line-height: 72rpx;
color: #fff;
background: #db8267;
border-radius: 68rpx;
"
>
去查看
</view>
</view>
<image
src="@/static/images/jlgh/guan1.png"
@click="closemsk"
style="width: 52rpx; height: 52rpx; margin-top: 150rpx"
mode=""
></image>
</view>
<!-- mask -->
<view class="mask flex_items flex_center" v-if="ismask" @click="closemsk">
<view class="mk plr50" style="">
<view class="flex_between flex_items mt40 mlr30">
<view></view>
<text class="f30 bold" style="color: #003a6e">活动规则111</text>
<image
src="../../static/images/jlgh/guan.png"
@click="closemsk"
style="width: 36rpx; height: 36rpx"
mode=""
></image>
</view>
<rich-text v-if="contentMsg" :nodes="contentMsg"></rich-text>
<view v-else class="f24 mt30 mlr30" style="color: #2b6da8">
<view>1.活动时间2023年11月1日至2023年12月 31</view>
<view class="mt20">
2.活动内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容
</view>
<view class="mt20">
3.活动细则此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容此为文字内容
</view>
</view>
</view>
</view>
<view class="pos flex-center flex_items" style="margin-top: 52rpx">
<image src="../../static/images/jlgh/title.png" mode="" class="banner"></image>
<image src="../../static/images/jlgh/big-title.png" mode="" class="big-banner"></image>
</view>
<view class="flex_items flex_center">
<view class="t2 flex_items flex_center">
<text class="f22 tips">一汽代发工资客户专属活动</text>
</view>
</view>
<view class="flex_between">
<view></view>
<view class="flex_column flex_items mt50">
<view
@click="openmask"
class="tagr flex_items flex_center"
style="z-index: 8; color: #f67b24"
>
<text class="f24">活动规则</text>
<wd-icon
name="arrow-right"
size="16px"
style="margin-top: 2rpx; margin-left: 6rpx"
></wd-icon>
</view>
<view
@click="mypre"
class="tagr flex_items flex_center mt20"
style="z-index: 8; color: #f67b24"
>
<text class="f24">我的奖品</text>
<wd-icon
name="arrow-right"
size="16px"
style="margin-top: 2rpx; margin-left: 6rpx"
></wd-icon>
</view>
</view>
</view>
<view class="pos">
<almost-lottery
:lotteryBg="lotteryBg"
:colors="['#fff', '#FFDFD4']"
:strFontColors="['#FF4100', '#FF4100']"
:strMarginOutside="30"
:imgMarginStr="50"
:imgWidth="62"
:imgHeight="38"
:imgCircled="false"
:lottery-size="lotteryConfig.lotterySize"
:ring-count="6"
:duration="2"
:self-rotaty="false"
:img-circled="true"
:canvasCached="true"
:prize-list="prizeList"
:prize-index="prizeIndex"
@reset-index="prizeIndex = -1"
@draw-before="handleDrawBefore"
@draw-start="handleDrawStart"
@draw-end="handleDrawEnd"
@finish="handleDrawFinish"
v-if="prizeList.length"
/>
<view class="flex_items flex_center pos" style="">
<view
@click="submit"
style="
top: 100rpx;
left: 50%;
z-index: 2;
width: 176rpx;
height: 80rpx;
transform: translate(-50%);
"
class="abs"
></view>
<image
class="abs"
:src="dizuo"
style="top: -720rpx; left: 5 0%; width: 80%"
mode="widthFix"
></image>
</view>
</view>
<!-- 次数 -->
<view class="flex_items flex_center" style="margin-top: 290rpx">
<view
class="f28 f-center"
style="
width: 300rpx;
height: 72rpx;
line-height: 72rpx;
color: #fff;
background: linear-gradient(135deg, #e9533b 0%, #f8a797 100%);
border-radius: 16rpx;
"
>
剩余抽奖次数: {{ freeNum }}
</view>
</view>
</view>
</template>
<script>
import AlmostLottery from '@/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue'
// import { clearCacheFile, clearStore } from '@/uni_modules/almost-lottery/utils/almost-utils.js'
import lotteryBg from '../../static/images/jlgh/panpan.png'
import dizuo from '../../static/images/jlgh/dizuo.png'
import Api from './api'
import { useUserStore } from '@/store'
export default {
name: 'Home',
components: {
AlmostLottery,
},
data() {
return {
//
lotteryConfig: {
lotterySize: 600, // rpx
actionSize: 180, // rpx
},
lotteryBg, // 稿
prizeList: [], //
prizeIndex: -1, //
prizeing: false, //
//
lottery_code: '',
freeNum: 0, //
loading: false,
rules: [],
dizuo,
jiang: '',
ismask2: false,
ismask: false,
isz: 1,
activity_code: '',
contentMsg: '',
isStatus: false,
id: '',
}
},
onLoad(options) {
// eslint-disable-next-line camelcase
const { activity_code = 'TT123copycopy', token } = this.getUrlParams()
const useStore = useUserStore()
if (token) {
useStore.setUserInfo({ token })
}
// eslint-disable-next-line camelcase
this.activity_code = activity_code
// const token = 'eb1272c9c7e5f5032e75aa76222f63ae91'
// const useStore = useUserStore()
// useStore.setUserInfo({ token })
this.prizeList = []
this.getConfig()
},
created() {},
mounted() {},
onUnload() {
uni.hideLoading()
},
methods: {
getUrlParams() {
const url = window.location.href
const theRequest = {}
if (url.indexOf('?') !== -1) {
const index = url.indexOf('?')
let str = url.slice(index + 1)
str = str.indexOf('#') !== -1 ? str.split('#')[0] : str
const strs = str.split('&')
for (let i = 0; i < strs.length; i++) {
theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]
}
}
return theRequest
},
//
getConfig() {
// uni.showLoading({
// title: '...',
// })
const params = {
activity_code: this.activity_code,
}
Api.getCode(params).then((res) => {
uni.hideLoading()
if (res.code === 200) {
// eslint-disable-next-line camelcase
const { activity_info, status, lottery_code, lottery_count, use_lottery_count } = res.data
// eslint-disable-next-line camelcase
this.freeNum = lottery_count - use_lottery_count
this.freeNum = this.freeNum > 0 ? this.freeNum : 0
// eslint-disable-next-line camelcase
this.status = activity_info?.status || 0
// eslint-disable-next-line camelcase
this.lottery_code = lottery_code
// eslint-disable-next-line camelcase
this.contentMsg = activity_info.activity_description
if (res.data.status === 3) {
this.isStatus = true
uni.showToast({
title: '权益已失效',
icon: 'none',
})
}
this.getPrizeList()
} else {
uni.showToast({
title: res.message,
icon: 'error',
})
}
})
},
//
getPrizeList() {
Api.getProducts({
activity_code: this.activity_code || 'zgp',
}).then((res) => {
if (res.code === 200) {
const { products } = res.data
products.length > 0 &&
products.forEach((item) => {
this.prizeList.push({
prizeId: item.product_id,
prizeName: item.show_name,
name: item.show_name,
})
})
this.prizeList.push({
prizeId: 0,
prizeName: '谢谢参与',
name: '未中奖',
})
} else {
uni.showToast({
title: res.message,
icon: 'none',
})
}
})
},
//
handleDrawBefore(callback) {
//
if (this.freeNum > 0) {
this.handleDrawStart()
} else {
uni.showToast({
title: '抽奖次数已用完',
icon: 'error',
})
}
},
//
handleDrawStart() {
console.log('触发抽奖按钮')
if (this.prizeing) {
uni.showToast({
title: '抽奖还未结束',
icon: 'none',
})
return false
}
this.prizeing = true
this.tryLotteryDraw()
},
//
tryLotteryDraw() {
const params = {
lottery_code: this.lottery_code,
}
if (this.status === 1 || this.status === 5) {
this.prizeing = false
uni.showToast({
title: '活动未开始',
icon: 'error',
})
return
}
if (this.status === 3 || this.status === 4) {
this.prizeing = false
uni.showToast({
title: '活动已结束',
icon: 'error',
})
return
}
if (this.prizeList.length === 0 || this.prizeList.length === 1) {
this.prizeing = false
uni.showToast({
title: '无抽奖商品',
icon: 'error',
})
return
}
if (this.status !== 2) {
this.prizeing = false
uni.showToast({
title: '活动异常',
icon: 'error',
})
return
}
Api.lottery(params)
.then((res) => {
this.freeNum = res.data.lottery_count
if (res.code === 200) {
// eslint-disable-next-line camelcase
const { coupon_id, product_id, product_index } = res.data
// eslint-disable-next-line camelcase
const index = this.prizeList.findIndex((item) => item.prizeId === product_id)
this.prizeIndex = index
} else if (res.message === '未中奖') {
this.prizeIndex = this.prizeList.findIndex((ele) => ele.prizeId === 0)
} else {
this.prizeing = false
uni.showToast({
title: res.message,
icon: 'none',
})
}
})
.catch(() => {
// this.prizeIndex = this.prizeList.findIndex((ele) => ele.prizeId === 0)
})
},
//
handleDrawEnd() {
console.log('旋转结束,执行拿到结果后到逻辑')
//
const prizeName = this.prizeList[this.prizeIndex].name
console.log('2222', prizeName)
let tipContent = ''
if (prizeName === '谢谢参与' || prizeName === '未中奖') {
tipContent = '很遗憾,没有中奖,请再接再厉!'
this.isz = 0
} else {
this.isz = 1
tipContent = `恭喜您,获得 ${prizeName} `
}
this.jiang = tipContent
this.prizeing = false
this.ismask2 = true
},
//
handleDrawFinish(res) {
console.log('抽奖转盘绘制完成', res)
if (res.ok) {
//
if (console.timeEnd) {
console.timeEnd('绘制转盘用时')
}
}
let stoTimer = setTimeout(() => {
stoTimer = null
uni.hideLoading()
uni.showToast({
title: res.msg,
mask: true,
icon: 'none',
})
}, 50)
},
submit() {
if (this.freeNum > 0) {
this.handleDrawStart()
} else {
uni.showToast({
title: '抽奖次数已用完',
icon: 'error',
})
}
},
mypre() {
// window.parent.postMessage(
// {
// data: {
// message: 'success',
// type: 'coupon',
// },
// },
// '*',
// )
console.log(111)
uni.navigateTo({
url: '/pages/jlgh/coupon',
})
},
closemsk() {
this.ismask = false
this.ismask2 = false
},
openmask() {
this.ismask = true
},
},
}
</script>
<style lang="scss" scoped>
@import './style.css';
.index {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
overflow: auto;
background: url('@/static/images/jlgh/bg-index.png') no-repeat left top #d8231c;
background-size: 100% 100%;
.navRight {
display: flex;
align-items: center;
width: 144rpx;
height: 46rpx;
padding-left: 20rpx;
background: rgba(0, 0, 0, 0.1);
border-radius: 40rpx 0rpx 0rpx 40rpx;
/* stylelint-disable-next-line selector-type-no-unknown */
uni-text {
font-size: 24rpx;
color: #fff;
}
/* stylelint-disable-next-line selector-type-no-unknown */
uni-image {
width: 10rpx;
height: 17rpx;
margin-left: 4rpx;
}
}
.t2 {
width: 540rpx;
height: 62rpx;
background-image: url('../../static/images/jlgh/k1.png');
background-size: 100% 100%;
}
.tagr {
width: 159rpx;
height: 44rpx;
background: linear-gradient(180deg, #fff9de 0%, #ffd96e 100%);
border-radius: 22rpx 0rpx 0rpx 22rpx;
}
.tips {
font-size: 28rpx;
font-weight: 700;
color: #fffbcc;
}
.banner {
display: block;
width: 252rpx;
height: 74rpx;
margin: 20rpx auto;
}
.big-banner {
display: block;
width: 534rpx;
height: 130rpx;
margin: 16rpx auto 20rpx;
}
.title {
margin-bottom: 20rpx;
font-size: 48rpx;
font-weight: bold;
color: #fff;
text-align: center;
}
.mk {
width: 550rpx;
height: 900rpx;
background-image: url('../../static/images/jlgh/mk.png');
background-size: 100% 100%;
}
.mk2 {
width: 494rpx;
height: 684rpx;
background-image: url('../../static/images/jlgh/zj.png');
background-size: 100% 100%;
}
.mask {
position: fixed;
top: 0;
left: 0;
z-index: 10;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.6);
}
.marquee {
box-sizing: border-box;
display: flex;
align-items: center;
width: 100%;
overflow: hidden;
color: #3a3a3a;
}
.marquee_title {
align-items: center;
height: 21px;
padding: 0 20px;
font-size: 14px;
border-right: 1px solid #d8d8d8;
}
.marquee_box {
position: relative;
display: block;
width: 100%;
height: 500rpx;
margin: 0 auto;
overflow: hidden;
}
}
</style>

268
src/pages/jlgh/login.vue Normal file
View File

@ -0,0 +1,268 @@
<route lang="json5" type="page">
{
style: {
navigationStyle: 'custom',
navigationBarTitleText: '登录页',
},
}
</route>
<template>
<view
class="login"
:style="{
marginTop: safeAreaInsets?.top + 'px',
height: `calc(100vh - ${safeAreaInsets?.top + 'px' || 0})`,
}"
>
<view class="group">
<image src="@/static/images/jlgh/icon-shou.png" mode="scaleToFill" class="icon-shou" />
<view class="login-title">欢迎来到登录页</view>
<view class="login-small-title">请验证后登录</view>
<view class="login-container">
<view class="flex flex-items-center box-border form-item">
<image
src="@/static/images/jlgh/icon-phone.png"
style="width: 24rpx; height: 38rpx; margin-right: 26rpx"
/>
<wd-input
autosize
size="32rpx"
class="login-input"
placeholder="请输入手机号"
v-model="phone"
/>
</view>
<view class="flex flex-items-center box-border form-item">
<image
src="@/static/images/jlgh/icon-pwd.png"
style="width: 26rpx; height: 30rpx; margin-right: 26rpx"
/>
<wd-input
autosize
class="login-input"
suffix-icon="wd-icon-camera"
placeholder="请输入验证码"
size="32rpx"
v-model="code"
>
<template #suffix>
<view class="login-valid" @click="getValid">{{ codemsg }}</view>
</template>
</wd-input>
</view>
</view>
<view
class="flex flex-items-center flex-justify-center login-btn"
type="error"
@click="login"
>
立即登录
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import { getSms, getLogin } from '@/service/login/index'
import { debounce } from '@/utils/index'
import { useUserStore } from '@/store'
const { safeAreaInsets } = uni.getSystemInfoSync()
const code = ref<number>(null)
const phone = ref<number>(null)
const codemsg = ref<string>('发送验证码')
const codesecond = ref<number>(60)
const useStore = useUserStore()
const tabAction = ref<string>('validLogin')
const query = reactive<any>({})
const getUrlParm = () => {
const url = window.location.href
const theRequest = {}
if (url.indexOf('?') !== -1) {
const index = url.indexOf('?')
const str = url.slice(index + 1)
const strs = str.split('&')
for (let i = 0; i < strs.length; i++) {
theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1]
}
}
return theRequest
}
onLoad(() => {
Object.assign(query, getUrlParm())
})
const login = async () => {
if (!phone.value) {
uni.showToast({
title: '手机号不能为空',
icon: 'none',
})
return false
}
if (!code.value) {
uni.showToast({
title: '验证码不能为空',
icon: 'none',
})
return false
}
const params = {
phone: phone.value,
code: code.value,
activity_code: query.activity_code || 'TT123copycopy',
}
const res: any = await getLogin(params)
if (res.code === 200) {
const token = res.data.token
useStore.setUserInfo({ token })
// #ifdef H5
// window.parent.postMessage(
// {
// data: {
// message: 'success',
// type: 'login',
// },
// },
// '*',
// )
uni.navigateTo({
url: '/pages/jlgh/index',
})
// #endif
} else {
uni.showToast({
title: res.message,
icon: 'none',
})
}
}
const getPhoneVaild = async () => {
const params = { phone: phone.value }
const res: any = await getSms(params)
if (res.code === 200) {
uni.showToast({
title: '发送成功',
icon: 'success',
duration: 800,
})
setTimeout(function () {
if (codemsg.value) {
codesecond.value = 60
codemsg.value = codesecond.value + 's'
const intTimer = setInterval(() => {
codesecond.value -= 1
codemsg.value = codesecond.value + 's'
if (codesecond.value === 0) {
clearInterval(intTimer)
codemsg.value = '重新发送'
}
}, 1000)
}
}, 800)
} else {
uni.showToast({
title: res.message,
icon: 'none',
})
}
}
const getValid = debounce(async () => {
if (!phone.value) {
uni.showToast({
title: '手机号不能为空',
icon: 'none',
})
return false
}
getPhoneVaild()
}, 300)
</script>
<style lang="scss">
.wd-input::after {
height: 0 !important;
background: transparent !important;
}
.icon-shou {
position: fixed;
top: 114rpx;
right: 0;
z-index: 1;
width: 372rpx;
height: 436rpx;
}
.login-container {
position: relative;
z-index: 2;
box-sizing: border-box;
width: 688rpx;
height: 406rpx;
padding-top: 20rpx;
background: #ffffff;
border-radius: 54rpx;
}
.login {
position: relative;
z-index: 2;
width: 100vw;
background-image: url('@/static/images/jlgh/bg-login.png');
background-size: 100% 100%;
}
.login-title {
position: relative;
z-index: 2;
margin-bottom: 24rpx;
font-size: 56rpx;
font-weight: 500;
color: #292929;
}
.login-small-title {
margin-bottom: 140rpx;
font-size: 32rpx;
font-weight: 400;
color: #dc9393;
}
.group {
display: flex;
flex-direction: column;
padding: 228rpx 31rpx 0;
}
.form-item {
width: 596rpx;
height: 98rpx;
padding: 30rpx 50rpx;
margin: 56rpx auto 0;
background: #fcf0f0;
border-radius: 49rpx 49rpx 49rpx 49rpx;
}
.login-input {
width: 584rpx;
background-color: transparent !important;
border: none !important;
}
.login-btn {
width: 676rpx;
height: 96rpx;
margin-top: 58rpx;
font-size: 32rpx;
font-weight: 500;
color: #ffffff;
background: url('@/static/images/jlgh/bg-login-btn.png') no-repeat;
background-position: center;
border: 5rpx solid #ffccb0;
border-radius: 48rpx 48rpx 48rpx 48rpx;
box-shadow: in set 0rpx 2rpx 4rpx 0rpx rgba(255, 255, 255, 0.3);
}
.login-valid {
display: inline-block;
font-size: 24rpx;
font-weight: 350;
color: #fc6464;
}
</style>

178
src/pages/jlgh/redeem.vue Normal file
View File

@ -0,0 +1,178 @@
<route lang="json5" type="page">
{
style: {
navigationBarTitleText: '兑换页',
},
}
</route>
<template>
<view class="redeem pos">
<view
v-if="ismask"
class="mask flex_center flex_items"
style="
position: fixed;
z-index: 1;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.6);
"
>
<view
class="flex_column flex_items bgwhite"
style="width: calc(100% - 200rpx); padding: 50rpx; border-radius: 16rpx"
>
<image class="" style="width: 120rpx; height: 120rpx" mode=""></image>
<text class="f40 mt50" style="color: #333">领取成功</text>
<text class="f28 mt30" style="color: #808080">恭喜奖品已经成功兑换请到平台查看</text>
<view class="flex_items flex_center mt50">
<view
@click="gomy"
class="f32 f-center"
style="
width: 280rpx;
height: 80rpx;
line-height: 80rpx;
color: #fff;
background: linear-gradient(270deg, #ff9843 0%, #f43139 100%);
border-radius: 54rpx;
"
>
确认
</view>
</view>
</view>
</view>
<view class="flex_items flex_center" style="width: 100%">
<view
class="bgwhite pb30 plr20 pt20 mt35"
style="width: calc(100% - 100rpx); border-radius: 20rpx"
>
<view class="flex_between flex_items pb20 bbe9s">
<view class="flex_start flex_items">
<image
:src="info.show_pic"
style="width: 104rpx; height: 104rpx; border-radius: 12rpx"
mode=""
></image>
<view class="flex_column f30 ml30" style="color: #333">
<text class="bold">{{ info.show_name }}</text>
<view class="f24 mt15" style="color: #666">
{{ info.expiration_time }}
</view>
</view>
</view>
<view class="flex_start flex_items mr20" style="color: #eb5e42">
<view class="f24"></view>
<text class="f48 bolder one">{{ info.amount }}</text>
</view>
</view>
<view class="pt20 f22" style="color: #666">
{{ info.amount }}元积分兑换券积分已经充值到用户
</view>
</view>
</view>
<view v-if="info.product_form !== 3" class="flex_items flex_center" style="width: 100%">
<view
class="bgwhite pb30 plr20 pt20 mt35 flex_column"
style="width: calc(100% - 100rpx); border-radius: 20rpx"
>
<text class="f30 mt30 bold" style="color: #333">充值账号</text>
<wd-input
class="mt30"
fontSize="14"
:placeholder="
info.account_type === 1
? '请输入手机号'
: info.account_type === 2
? '请输入QQ'
: '请输入充值账号'
"
v-model="info.mobile"
></wd-input>
<text class="f26 mt40" style="color: #4d4d4d">温馨提示</text>
<view class="mt20 f24" style="color: #4d4d4d">
<view>1.此商品兑换后不支持七天无理由退换货请谨慎兑换</view>
<view class="mt20">2.刷信誉兼职等理由均为诈骗术请勿相信任何诱导行为</view>
</view>
</view>
</view>
<view class="flex_items flex_center abs" style="bottom: 60rpx; left: 0; width: 100%">
<view
@click="dui"
class="f-center f32"
style="
width: 638rpx;
height: 108rpx;
line-height: 108rpx;
color: #fff;
background: linear-gradient(270deg, #ff9843 0%, #f43139 100%);
border-radius: 54rpx;
"
>
立即兑换
</view>
</view>
<Ywatermark :info="'蓝色兄弟'"></Ywatermark>
</view>
</template>
<script lang="ts" setup>
import api from './api'
const ismask = ref<boolean>(false)
const info = reactive<any>({})
const phone = ref<string>('')
onLoad((options) => {
console.log(options)
Object.assign(info, JSON.parse(options.item))
})
function gomy() {
ismask.value = false
uni.navigateTo({
url: `/pages/jlgh/index?activity_code=${info.activity_code}`,
})
}
function dui() {
uni.showLoading({
title: '兑换中...',
})
if (info.product_form !== 3 && !info.mobile) {
return uni.showToast({
title: '请输入充值账号',
icon: 'none',
})
}
const params = { id: info.id, account: info.mobile, account_type: info.account_type }
api.exchange(params).then((res: any) => {
if (res.code === 200) {
ismask.value = true
uni.hideLoading()
// uni.navigateTo({
// url: '/pages/tt-coupon/index?activity_code=',
// })
} else {
uni.hideLoading()
uni.showToast({
title: res.message,
icon: 'none',
})
}
})
}
</script>
<style lang="scss">
@use './style.css';
page {
background: #f5f5f5 !important;
}
.redeem {
height: calc(100vh - 50px);
}
</style>

546
src/pages/jlgh/style.css Normal file
View File

@ -0,0 +1,546 @@
/*每个页面公共css */
page {
background: #fff !important;
}
.pos {
position: relative;
}
.abs {
position: absolute;
}
.flex-center {
display: flex;
flex-direction: column;
align-items: center;
}
.flex-row-jus-center {
display: flex;
flex-direction: column;
justify-content: space-between;
}
.flex-row-center {
display: flex;
align-items: center;
}
.flex-col-center {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.ellipsis-two {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
white-space: normal !important;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.ellipsis-one {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
white-space: normal !important;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.bold {
font-weight: bold;
}
.bolder {
font-weight: bolder;
}
/* ----------------------------- */
.flex_start {
display: -webkit-flex;
display: flex;
justify-content: flex-start;
}
.flex_end {
display: -webkit-flex;
display: flex;
justify-content: flex-end;
}
.flex_center {
display: -webkit-flex;
display: flex;
justify-content: center;
}
.flex_around {
display: -webkit-flex;
display: flex;
justify-content: space-around;
}
.flex_between {
display: -webkit-flex;
display: flex;
justify-content: space-between;
}
.flex_warp {
display: -webkit-flex;
display: flex;
flex-wrap: wrap;
width: 100%;
overflow: hidden;
}
.flex_items {
align-items: center;
}
.flex_column {
display: -webkit-flex;
display: flex;
flex-direction: column;
}
.mlr10 {
margin-right: 10rpx;
margin-left: 10rpx;
}
.mlr20 {
margin-right: 20rpx;
margin-left: 20rpx;
}
.mlr30 {
margin-right: 30rpx;
margin-left: 30rpx;
}
.mtb10 {
margin-top: 10rpx;
margin-bottom: 10rpx;
}
.mtb20 {
margin-top: 20rpx;
margin-bottom: 20rpx;
}
.mtb30 {
margin-top: 30rpx;
margin-bottom: 30rpx;
}
.mt5 {
margin-top: 5rpx;
}
.mt10 {
margin-top: 10rpx;
}
.mt15 {
margin-top: 15rpx;
}
.mt20 {
margin-top: 20rpx;
}
.mt25 {
margin-top: 25rpx;
}
.mt30 {
margin-top: 30rpx;
}
.mt35 {
margin-top: 35rpx;
}
.mt40 {
margin-top: 40rpx;
}
.mt50 {
margin-top: 50rpx;
}
.mt60 {
margin-top: 60rpx;
}
.mt80 {
margin-top: 80rpx;
}
.mt100 {
margin-top: 100rpx;
}
.mt120 {
margin-top: 120rpx;
}
.ml5 {
margin-left: 5rpx;
}
.ml10 {
margin-left: 10rpx;
}
.ml15 {
margin-left: 15rpx;
}
.ml20 {
margin-left: 20rpx;
}
.ml25 {
margin-left: 20rpx;
}
.ml30 {
margin-left: 30rpx;
}
.ml35 {
margin-left: 35rpx;
}
.mb5 {
margin-bottom: 5rpx;
}
.mb10 {
margin-bottom: 10rpx;
}
.mb15 {
margin-bottom: 15rpx;
}
.mb20 {
margin-bottom: 20rpx;
}
.mb25 {
margin-bottom: 25rpx;
}
.mb30 {
margin-bottom: 30rpx;
}
.mb40 {
margin-bottom: 40rpx;
}
.mb100 {
margin-bottom: 100rpx;
}
.mr5 {
margin-right: 5rpx;
}
.mr10 {
margin-right: 10rpx;
}
.mr15 {
margin-right: 15rpx;
}
.mr20 {
margin-right: 20rpx;
}
.mr25 {
margin-right: 25rpx;
}
.mr30 {
margin-right: 30rpx;
}
.mr40 {
margin-right: 40rpx;
}
.mr50 {
margin-right: 50rpx;
}
/* 内边距 */
.p20 {
padding: 20rpx;
}
.p30 {
padding: 30rpx;
}
.ptb5 {
padding-top: 5rpx;
padding-bottom: 5rpx;
}
.ptb15 {
padding-top: 15rpx;
padding-bottom: 15rpx;
}
.ptb10 {
padding-top: 10rpx;
padding-bottom: 10rpx;
}
.ptb20 {
padding-top: 20rpx;
padding-bottom: 20rpx;
}
.ptb25 {
padding-top: 25rpx;
padding-bottom: 25rpx;
}
.ptb30 {
padding-top: 30rpx;
padding-bottom: 30rpx;
}
.ptb40 {
padding-top: 40rpx;
padding-bottom: 40rpx;
}
.ptb50 {
padding-top: 50rpx;
padding-bottom: 50rpx;
}
.plr15 {
padding-right: 15rpx;
padding-left: 15rpx;
}
.plr10 {
padding-right: 10rpx;
padding-left: 10rpx;
}
.plr20 {
padding-right: 20rpx;
padding-left: 20rpx;
}
.plr30 {
padding-right: 30rpx;
padding-left: 30rpx;
}
.plr50 {
padding-right: 50rpx;
padding-left: 50rpx;
}
.pt5 {
padding-top: 5rpx;
}
.pt10 {
padding-top: 10rpx;
}
.pt15 {
padding-top: 15rpx;
}
.pt20 {
padding-top: 20rpx;
}
.pt30 {
padding-top: 30rpx;
}
.pt35 {
padding-top: 35rpx;
}
.pt50 {
padding-top: 50rpx;
}
.pb10 {
padding-bottom: 10rpx;
}
.pb20 {
padding-bottom: 20rpx;
}
.pb30 {
padding-bottom: 30rpx;
}
.pb35 {
padding-bottom: 35rpx;
}
.pb40 {
padding-bottom: 40rpx;
}
.pb80 {
padding-bottom: 80rpx;
}
.pl10 {
padding-left: 10rpx;
}
.pl15 {
padding-left: 15rpx;
}
.pl20 {
padding-left: 20rpx;
}
.pl30 {
padding-left: 30rpx;
}
.pl60 {
padding-left: 60rpx;
}
.pl50 {
padding-left: 50rpx;
}
.pr20 {
padding-right: 20rpx;
}
.pr30 {
padding-right: 30rpx;
}
.p10 {
padding: 10rpx;
}
.p15 {
padding: 15rpx;
}
/* 底部边框 */
.bbe9s {
border-bottom: 1rpx solid #e9e9e9;
}
.bgwhite {
background: white;
}
/* 字体大小 */
.f80 {
font-size: 80rpx;
}
.f50 {
font-size: 50rpx;
}
.f58 {
font-size: 58rpx;
}
.f40 {
font-size: 40rpx;
}
.f44 {
font-size: 44rpx;
}
.f48 {
font-size: 48rpx;
}
.f38 {
font-size: 38rpx;
}
.f36 {
font-size: 36rpx;
}
.f34 {
font-size: 34rpx;
}
.f32 {
font-size: 32rpx;
}
.f30 {
font-size: 30rpx;
}
.f28 {
font-size: 28rpx;
}
.f26 {
font-size: 26rpx;
}
.f24 {
font-size: 24rpx;
}
.f22 {
font-size: 22rpx;
}
.f20 {
font-size: 20rpx;
}
.f18 {
font-size: 18rpx;
}
.f16 {
font-size: 16rpx;
}
.f-center {
text-align: center;
}
.divbox {
box-shadow: 0 0 9px #e2e2e2;
}
.bte9s {
border-top: 1px solid #e9e9e9;
}

View File

@ -17,7 +17,7 @@
<view class="group">
<view class="login-title">欢迎来到登录页</view>
<wd-tabs v-model="tabAction">
<wd-tab key="validLogin" title="验证码登录">
<wd-tab key="validLogin" title="验证码登录11">
<wd-input
autosize
size="32px"
@ -190,8 +190,8 @@ const getValid = debounce(async () => {
}
.login-title {
margin-bottom: 84rpx;
font-weight: 500;
font-size: 44rpx;
font-weight: 500;
color: #311d1d;
}
.group {
@ -200,26 +200,26 @@ const getValid = debounce(async () => {
padding: 228rpx 36rpx 0;
}
.login-input {
margin-top: 10px;
width: 604rpx;
// height: 110rpx;
padding: 16rpx 36rpx;
margin-top: 10px;
// line-height: 110rpx;
background: #ffffff;
border-radius: 20rpx 20rpx 20rpx 20rpx;
}
.login-btn {
margin-top: 50rpx;
width: 676rpx;
height: 110rpx;
text-align: center;
margin-top: 50rpx;
font-size: 32rpx;
font-weight: 500;
line-height: 110rpx;
color: #ffffff;
text-align: center;
cursor: pointer;
background: #ff4a3e;
border-radius: 20rpx 20rpx 20rpx 20rpx;
cursor: pointer;
font-weight: 500;
font-size: 32rpx;
color: #ffffff;
}
.login-valid {
display: inline-block;

View File

@ -49,7 +49,7 @@
<view class="mk plr50" style="">
<view class="flex_between flex_items mt40 mlr30">
<view></view>
<text class="f30 bold" style="color: #003a6e">活动规则</text>
<text class="f30 bold" style="color: #003a6e">活动规则111</text>
<image
src="../../static/images/turntable/guan.png"
@click="closemsk"

View File

@ -12,14 +12,14 @@
<view
class="abs f18 f-center"
style="
color: #c0513d;
top: 0;
right: 0;
width: 82rpx;
height: 38rpx;
line-height: 38rpx;
color: #c0513d;
background: #fceceb;
border-radius: 0rpx 20rpx;
right: 0;
top: 0;
"
>
新获得
@ -60,11 +60,11 @@
class="f24 f-center mr20"
style="
width: 124rpx;
line-height: 48rpx;
border: 1px solid #e9e9e9;
color: #a0a0a0;
height: 48rpx;
line-height: 48rpx;
color: #a0a0a0;
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 23rpx;
"
>
@ -75,11 +75,11 @@
class="f24 f-center mr20"
style="
width: 124rpx;
line-height: 48rpx;
border: 1px solid #e9e9e9;
color: #a0a0a0;
height: 48rpx;
line-height: 48rpx;
color: #a0a0a0;
background: #fff;
border: 1px solid #e9e9e9;
border-radius: 23rpx;
"
>
@ -94,9 +94,9 @@
]"
style="
width: 124rpx;
height: 48rpx;
line-height: 48rpx;
color: #fff;
height: 48rpx;
background: linear-gradient(90deg, #ea5c41 0%, #ec7852 100%);
border-radius: 23rpx;
"
@ -111,7 +111,7 @@
<view
v-else
class="flex_center flex_items f24"
style="color: #888; height: 600rpx; width: 100%"
style="width: 100%; height: 600rpx; color: #888"
>
<text>--暂无数据--</text>
</view>
@ -245,19 +245,19 @@ page {
background: #848486 !important;
}
.three {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.one {
display: -webkit-box;
width: 150rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
width: 150rpx;
}
</style>

View File

@ -12,10 +12,10 @@
v-show="show"
@click="show = false"
style="
width: 100%;
height: 100vh;
position: fixed;
z-index: 1;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.6);
"
></view>
@ -31,8 +31,8 @@
v-if="index == current"
class="mt10"
style="
height: 6rpx;
width: 30rpx;
height: 6rpx;
background: linear-gradient(157deg, #ffbca0 0%, #ff8a5d 100%);
"
></view>
@ -109,14 +109,14 @@
</template>
</view>
</view>
<view style="height: 130rpx; width: 100%"></view>
<view style="width: 100%; height: 130rpx"></view>
</view>
</view>
<view v-if="current == 1">
<view class="bgwhite p30">
<view class="flex_start flex_items p30 bbe9s">
<text class="f28" style="color: #333333">商品</text>
<view class="f26 ml35" style="color: #666666; width: 520rpx">{{ info.show_name }}</view>
<view class="f26 ml35" style="width: 520rpx; color: #666666">{{ info.show_name }}</view>
</view>
<view class="flex_start flex_items p30 bbe9s">
<text class="f28" style="color: #333333">公司</text>
@ -139,7 +139,7 @@
<!-- t5 -->
<view
class="bgwhite p30 flex_center flex_items"
style="position: fixed; width: 100%; left: 0; bottom: 0"
style="position: fixed; bottom: 0; left: 0; width: 100%"
>
<view class="flex_center flex_items">
<!-- <image :src="imgUrl + 'dd.png'" style="width: 40rpx; height: 40rpx" mode=""></image>
@ -196,7 +196,7 @@
<text class="f26" style="color: #b2b2b2">{{ info.product_amount }}</text>
<view
class="abs"
style="width: 100%; height: 2rpx; background: #b8b8b8; top: 22rpx"
style="top: 22rpx; width: 100%; height: 2rpx; background: #b8b8b8"
></view>
</view>
</view>
@ -230,9 +230,9 @@
style="
width: 638rpx;
height: 108rpx;
color: #fff;
background: linear-gradient(90deg, #ff898e 0%, #f43139 100%);
border-radius: 54rpx;
color: #fff;
"
>
<text class="f32 bold">确认兑换</text>
@ -383,27 +383,26 @@ page {
}
.dk {
z-index: 2;
width: 100%;
position: fixed;
bottom: 0;
left: 0;
z-index: 2;
width: 100%;
position: fixed;
border-top-left-radius: 12rpx;
border-top-right-radius: 12rpx;
}
.nochosem {
font-size: 22rpx;
color: #666666;
background: #f2f2f7;
border-radius: 20rpx 20rpx 20rpx 20rpx;
color: #666666;
font-size: 22rpx;
}
.chosem {
background: #f5393a;
color: #fff;
border-radius: 20rpx 20rpx 20rpx 20rpx;
font-size: 22rpx;
color: #fff;
background: #f5393a;
border-radius: 20rpx 20rpx 20rpx 20rpx;
}
</style>

View File

@ -11,16 +11,16 @@
v-if="ismask"
class="mask flex_center flex_items"
style="
width: 100%;
height: 100vh;
position: fixed;
z-index: 1;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.6);
"
>
<view
class="flex_column flex_items bgwhite"
style="padding: 50rpx; border-radius: 16rpx; width: calc(100% - 200rpx)"
style="width: calc(100% - 200rpx); padding: 50rpx; border-radius: 16rpx"
>
<image
class=""
@ -38,9 +38,9 @@
width: 280rpx;
height: 80rpx;
line-height: 80rpx;
color: #fff;
background: linear-gradient(270deg, #ff9843 0%, #f43139 100%);
border-radius: 54rpx;
color: #fff;
"
>
确认
@ -102,7 +102,7 @@
</view>
</view>
</view>
<view class="flex_items flex_center abs" style="width: 100%; bottom: 60rpx; left: 0">
<view class="flex_items flex_center abs" style="bottom: 60rpx; left: 0; width: 100%">
<view
@click="dui"
class="f-center f32"
@ -110,9 +110,9 @@
width: 638rpx;
height: 108rpx;
line-height: 108rpx;
color: #fff;
background: linear-gradient(270deg, #ff9843 0%, #f43139 100%);
border-radius: 54rpx;
color: #fff;
"
>
立即兑换

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1013 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

View File

@ -4,7 +4,10 @@
// Generated by vite-plugin-uni-pages
interface NavigateToOptions {
url: "/pages/index/index";
url: "/pages/jlgh/login" |
"/pages/jlgh/coupon" |
"/pages/jlgh/index" |
"/pages/jlgh/redeem";
}
interface RedirectToOptions extends NavigateToOptions {}

View File

@ -42,7 +42,7 @@
transitionDuration: `${transitionDuration}s`,
}"
></image>
<image
<!-- <image
class="almost-lottery__action-bg"
mode="widthFix"
:src="actionBg"
@ -55,7 +55,7 @@
transitionDuration: `${transitionDuration}s`,
}"
@click="handleActionStart"
></image>
></image> -->
</template>
</view>