Compare commits
No commits in common. "bd-online" and "master" have entirely different histories.
|
|
@ -1,12 +0,0 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
39
.eslintrc.js
39
.eslintrc.js
|
|
@ -1,39 +0,0 @@
|
|||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
extends: ['eslint:recommended', '@vue/eslint-config-prettier'],
|
||||
parserOptions: {
|
||||
ecmaVersion: 2021,
|
||||
sourceType: 'module',
|
||||
},
|
||||
globals: {
|
||||
uni: 'readonly',
|
||||
wx: 'readonly',
|
||||
plus: 'readonly',
|
||||
getCurrentPages: 'readonly',
|
||||
getApp: 'readonly',
|
||||
},
|
||||
rules: {
|
||||
// Vue规则
|
||||
'vue/multi-word-component-names': 'off',
|
||||
'vue/no-unused-vars': 'error',
|
||||
'vue/valid-v-for': 'error',
|
||||
'vue/require-v-for-key': 'error',
|
||||
'vue/no-deprecated-filter': 'error',
|
||||
|
||||
// JavaScript规则
|
||||
'no-unused-vars': 'warn',
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
|
||||
// 代码风格
|
||||
semi: ['error', 'never'],
|
||||
quotes: ['error', 'single'],
|
||||
'comma-dangle': ['error', 'only-multiline'],
|
||||
indent: ['error', 2],
|
||||
'eol-last': ['error', 'always'],
|
||||
},
|
||||
}
|
||||
|
|
@ -1,39 +0,0 @@
|
|||
# Dependencies
|
||||
node_modules/
|
||||
|
||||
# Build output
|
||||
dist/
|
||||
build/
|
||||
out/
|
||||
unpackage/ # uni-app output
|
||||
|
||||
# Lock files
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
|
||||
# Git
|
||||
.git/
|
||||
|
||||
# OS generated
|
||||
.DS_Store
|
||||
|
||||
# uni-app specific
|
||||
uni_modules/
|
||||
.hbuilderx/
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
|
||||
# Docs
|
||||
docs/
|
||||
|
||||
# IDE settings
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
|
||||
# Configuration files that shouldn't be formatted
|
||||
manifest.json
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
{
|
||||
"editor.formatOnSave": true,
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.organizeImports": "explicit"
|
||||
},
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"[vue]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"eslint.validate": ["javascript", "vue"],
|
||||
"prettier.requireConfig": true,
|
||||
"editor.tabSize": 2,
|
||||
"editor.insertSpaces": true,
|
||||
"files.eol": "\n",
|
||||
"files.insertFinalNewline": true,
|
||||
"files.trimTrailingWhitespace": true
|
||||
}
|
||||
45
App.vue
45
App.vue
|
|
@ -1,26 +1,31 @@
|
|||
<script>
|
||||
import { setToken } from '@/config/auth.js'
|
||||
export default {
|
||||
onLaunch: function (options) {
|
||||
// 分享注册
|
||||
|
||||
if (options.query?.token) {
|
||||
setToken(options.query?.token)
|
||||
}
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-21 15:11:22
|
||||
-->
|
||||
<script>
|
||||
export default {
|
||||
onLaunch: function () {
|
||||
let url = window.location.href.split('/#/')[1].split('?')[0]
|
||||
|
||||
// 分享注册
|
||||
const whiteList = [
|
||||
'pages/shareRegist/index',
|
||||
'pages/shareRegist/success',
|
||||
'pages/login/index',
|
||||
'pages/pay/success',
|
||||
// 'pages/wechatPay/bfPay/',
|
||||
// 'pages/wechatPay/hfPay/',
|
||||
'pages/wechatPay/bfPay/',
|
||||
'pages/wechatPay/hfPay/',
|
||||
'pages/shareArea/hiList',
|
||||
'pages/shareArea/hiOrder',
|
||||
'pages/pay/hiPay',
|
||||
'pages/pay/hiPay'
|
||||
]
|
||||
if (whiteList.indexOf(options.path) !== -1) return
|
||||
this.$store.dispatch('GetInfo')
|
||||
this.$store.dispatch('getCarLength')
|
||||
if (whiteList.indexOf(url) !== -1) {
|
||||
} else {
|
||||
this.$store.dispatch('GetInfo')
|
||||
this.$store.dispatch('getCarLength')
|
||||
}
|
||||
uni.hideTabBar({})
|
||||
},
|
||||
onShow: function () {
|
||||
|
|
@ -31,13 +36,13 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
body {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
body{
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
/*每个页面公共css */
|
||||
@import '@/uni_modules/uview-ui/index.scss';
|
||||
|
||||
::v-deep .uni-picker-container {
|
||||
z-index: 100000 !important;
|
||||
::v-deep .uni-picker-container{
|
||||
z-index: 100000!important;
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2022-11-21 15:11:22
|
||||
-->
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,153 +0,0 @@
|
|||
<template>
|
||||
<view class="quick-recharge-panel">
|
||||
<view class="panel-title">请选择充值金额</view>
|
||||
<view class="amount-grid">
|
||||
<view
|
||||
v-for="(amount, index) in amounts"
|
||||
:key="index"
|
||||
class="amount-item"
|
||||
:class="{ selected: selectedIndex === index }"
|
||||
@click="selectAmount(amount, index)"
|
||||
>
|
||||
<view class="amount-value">
|
||||
<text class="amount-number">{{ formatAmount(amount) }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'QuickRechargePanel',
|
||||
props: {
|
||||
// 预设金额数组
|
||||
amounts: {
|
||||
type: Array,
|
||||
default: () => [100, 200, 500, 1000, 2000, 5000],
|
||||
},
|
||||
// 货币符号
|
||||
currencySymbol: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
// 默认选中的索引
|
||||
defaultSelected: {
|
||||
type: Number,
|
||||
default: -1,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
selectedIndex: this.defaultSelected,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
selectAmount(amount, index) {
|
||||
this.selectedIndex = index
|
||||
this.$emit('amount-selected', {
|
||||
amount,
|
||||
index,
|
||||
})
|
||||
},
|
||||
// 清空选中状态
|
||||
clear() {
|
||||
this.selectedIndex = -1
|
||||
},
|
||||
// 格式化金额显示千分位
|
||||
formatAmount(amount) {
|
||||
return amount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.quick-recharge-panel {
|
||||
margin-top: 20rpx;
|
||||
padding: 20rpx;
|
||||
background: #fff;
|
||||
border-radius: 20rpx;
|
||||
box-shadow: 0px 2px 20rpx 0px rgba(204, 204, 204, 0.3);
|
||||
}
|
||||
|
||||
.panel-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
margin-bottom: 30rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.amount-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.amount-item {
|
||||
position: relative;
|
||||
padding: 24rpx 10rpx;
|
||||
background: #f8f9fa;
|
||||
border-radius: 16rpx;
|
||||
text-align: center;
|
||||
transition: all 0.3s ease;
|
||||
cursor: pointer;
|
||||
border: 2rpx solid transparent;
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-2rpx);
|
||||
box-shadow: 0px 4px 20rpx 0px rgba(0, 91, 172, 0.15);
|
||||
}
|
||||
|
||||
&.selected {
|
||||
background: linear-gradient(135deg, #005bac 0%, #0070d4 100%);
|
||||
color: #fff;
|
||||
border-color: #005bac;
|
||||
box-shadow: 0px 4px 20rpx 0px rgba(0, 91, 172, 0.3);
|
||||
|
||||
.amount-value {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
&:active {
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.amount-value {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.currency-symbol {
|
||||
font-size: 24rpx;
|
||||
margin-right: 4rpx;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.amount-number {
|
||||
font-size: 52rpx;
|
||||
font-weight: 700;
|
||||
letter-spacing: 2rpx;
|
||||
}
|
||||
|
||||
// 响应式设计
|
||||
@media (max-width: 375px) {
|
||||
.amount-grid {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
|
||||
.amount-item {
|
||||
padding: 25rpx 15rpx;
|
||||
}
|
||||
|
||||
.amount-number {
|
||||
font-size: 40rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,997 +0,0 @@
|
|||
<template>
|
||||
<view>
|
||||
<!-- 直推人数排行榜弹窗 -->
|
||||
<u-popup
|
||||
class="ranking-popup"
|
||||
mode="center"
|
||||
:show="showPeopleRanking"
|
||||
:closeOnClickOverlay="false"
|
||||
border-radius="20"
|
||||
>
|
||||
<view style="width: 90vw; height: 85vh" class="popup-container">
|
||||
<!-- 弹窗头部 -->
|
||||
<view class="popup-header">
|
||||
<view class="header-title">直推人数排行榜</view>
|
||||
</view>
|
||||
|
||||
<!-- 前三名特殊展示区域 -->
|
||||
<view class="top-three-section">
|
||||
<view class="podium-container">
|
||||
<!-- 第二名 -->
|
||||
<view class="podium-item second-place" v-if="peopleTopThree[1]">
|
||||
<view class="player-area">
|
||||
<view class="rank-number">
|
||||
<img src="@/static/images/rank-2.svg" alt="" />
|
||||
</view>
|
||||
<!-- <view class="member-code">{{
|
||||
peopleTopThree[1].memberCode
|
||||
}}</view> -->
|
||||
<view
|
||||
class="member-name"
|
||||
:class="{ highlight: peopleTopThree[1].isLoginMember == 1 }"
|
||||
>
|
||||
{{ peopleTopThree[1].memberName | formatMemberName }}
|
||||
</view>
|
||||
|
||||
<view class="score">{{ peopleTopThree[1].count }}人</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 第一名 -->
|
||||
<view class="podium-item first-place" v-if="peopleTopThree[0]">
|
||||
<view class="player-area">
|
||||
<view class="rank-number">
|
||||
<img src="@/static/images/rank-1.svg" alt="" />
|
||||
</view>
|
||||
|
||||
<!-- <view class="member-code">
|
||||
{{ peopleTopThree[0].memberCode }}
|
||||
</view> -->
|
||||
<view
|
||||
class="member-name"
|
||||
:class="{ highlight: peopleTopThree[0].isLoginMember == 1 }"
|
||||
>
|
||||
{{ peopleTopThree[0].memberName | formatMemberName }}
|
||||
</view>
|
||||
<view class="score">{{ peopleTopThree[0].count }}人</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 第三名 -->
|
||||
<view class="podium-item third-place" v-if="peopleTopThree[2]">
|
||||
<view class="player-area">
|
||||
<view class="rank-number">
|
||||
<img src="@/static/images/rank-3.svg" alt="" />
|
||||
</view>
|
||||
<!-- <view class="member-code">{{
|
||||
peopleTopThree[2].memberCode
|
||||
}}</view> -->
|
||||
<view
|
||||
class="member-name"
|
||||
:class="{ highlight: peopleTopThree[2].isLoginMember == 1 }"
|
||||
>
|
||||
{{ peopleTopThree[2].memberName | formatMemberName }}
|
||||
</view>
|
||||
|
||||
<view class="score">{{ peopleTopThree[2].count }}人</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 4-30名滚动列表 -->
|
||||
<view class="ranking-list">
|
||||
<scroll-view
|
||||
class="scroll-container"
|
||||
scroll-y="true"
|
||||
:show-scrollbar="false"
|
||||
>
|
||||
<view
|
||||
class="list-item"
|
||||
v-for="(item, index) in peopleRemainingList"
|
||||
:key="index"
|
||||
>
|
||||
<view class="item-rank">{{ index + 4 }}</view>
|
||||
<view class="item-info">
|
||||
<!-- <view class="item-code">{{ item.memberCode }}</view> -->
|
||||
<view
|
||||
class="item-name"
|
||||
:class="{ highlight: item.isLoginMember == 1 }"
|
||||
>
|
||||
{{ item.memberName | formatMemberName }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-score">
|
||||
<span>{{ item.count }}</span>
|
||||
<span>人</span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list-footer" v-if="peopleRemainingList.length === 0">
|
||||
<text class="empty-text">暂无更多数据</text>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
|
||||
<!-- 底部关闭按钮 -->
|
||||
<view class="popup-footer">
|
||||
<view class="close-text-btn" @click="closePeopleRanking">
|
||||
关 闭
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
|
||||
<!-- 直推金额排行榜弹窗 -->
|
||||
<u-popup
|
||||
class="ranking-popup"
|
||||
width="85%"
|
||||
height="85%"
|
||||
mode="center"
|
||||
:show="showAmountRanking"
|
||||
:closeOnClickOverlay="false"
|
||||
border-radius="20"
|
||||
>
|
||||
<view style="width: 90vw; height: 85vh" class="popup-container">
|
||||
<!-- 弹窗头部 -->
|
||||
<view class="popup-header">
|
||||
<view class="header-title">直推金额排行榜</view>
|
||||
</view>
|
||||
|
||||
<!-- 前三名特殊展示区域 -->
|
||||
<view class="top-three-section">
|
||||
<view class="podium-container">
|
||||
<!-- 第二名 -->
|
||||
<view class="podium-item second-place" v-if="amountTopThree[1]">
|
||||
<view class="player-area">
|
||||
<view class="rank-number">
|
||||
<img src="@/static/images/rank-2.svg" alt="" />
|
||||
</view>
|
||||
<view
|
||||
class="member-name"
|
||||
:class="{ highlight: amountTopThree[1].isLoginMember == 1 }"
|
||||
>
|
||||
{{ amountTopThree[1].memberName | formatMemberName }}
|
||||
</view>
|
||||
<!-- <view class="member-code">{{
|
||||
amountTopThree[1].memberCode
|
||||
}}</view> -->
|
||||
<view class="score">{{
|
||||
formatAmount(amountTopThree[1].amount)
|
||||
}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 第一名 -->
|
||||
<view class="podium-item first-place" v-if="amountTopThree[0]">
|
||||
<view class="player-area">
|
||||
<view class="rank-number">
|
||||
<img src="@/static/images/rank-1.svg" alt="" />
|
||||
</view>
|
||||
<view
|
||||
class="member-name"
|
||||
:class="{ highlight: amountTopThree[0].isLoginMember == 1 }"
|
||||
>
|
||||
{{ amountTopThree[0].memberName | formatMemberName }}
|
||||
</view>
|
||||
<!-- <view class="member-code">{{
|
||||
amountTopThree[0].memberCode
|
||||
}}</view> -->
|
||||
<view class="score">{{
|
||||
formatAmount(amountTopThree[0].amount)
|
||||
}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 第三名 -->
|
||||
<view class="podium-item third-place" v-if="amountTopThree[2]">
|
||||
<view class="player-area">
|
||||
<view class="rank-number">
|
||||
<img src="@/static/images/rank-3.svg" alt="" />
|
||||
</view>
|
||||
<view
|
||||
class="member-name"
|
||||
:class="{ highlight: amountTopThree[2].isLoginMember == 1 }"
|
||||
>
|
||||
{{ amountTopThree[2].memberName | formatMemberName }}
|
||||
</view>
|
||||
<!-- <view class="member-code">{{
|
||||
amountTopThree[2].memberCode
|
||||
}}</view> -->
|
||||
<view class="score">{{
|
||||
formatAmount(amountTopThree[2].amount)
|
||||
}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 4-30名滚动列表 -->
|
||||
<view class="ranking-list">
|
||||
<!-- <view class="list-header">
|
||||
<text class="list-title">完整排行榜</text>
|
||||
</view> -->
|
||||
<scroll-view
|
||||
class="scroll-container"
|
||||
scroll-y="true"
|
||||
:show-scrollbar="false"
|
||||
>
|
||||
<view
|
||||
class="list-item"
|
||||
v-for="(item, index) in amountRemainingList"
|
||||
:key="index"
|
||||
>
|
||||
<view class="item-rank">{{ index + 4 }}</view>
|
||||
<view class="item-info">
|
||||
<!-- <view class="item-code">{{ item.memberCode }}</view> -->
|
||||
<view
|
||||
class="item-name"
|
||||
:class="{ highlight: item.isLoginMember == 1 }"
|
||||
>
|
||||
{{ item.memberName | formatMemberName }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-score">
|
||||
<span>{{ item.amount }}</span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list-footer" v-if="amountRemainingList.length === 0">
|
||||
<text class="empty-text">暂无更多数据</text>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
|
||||
<!-- 底部关闭按钮 -->
|
||||
<view class="popup-footer">
|
||||
<view class="close-text-btn" @click="closeAmountRanking">
|
||||
关 闭
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
|
||||
<!-- 加载状态 -->
|
||||
<u-loading-page
|
||||
:loading="loading"
|
||||
loading-text="加载中..."
|
||||
></u-loading-page>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/index.js'
|
||||
|
||||
export default {
|
||||
name: 'RankingPopup',
|
||||
data() {
|
||||
return {
|
||||
// 控制弹窗显示
|
||||
showPeopleRanking: false,
|
||||
showAmountRanking: false,
|
||||
loading: false,
|
||||
|
||||
// 人数排行数据
|
||||
peopleRankingList: [],
|
||||
peopleTopThree: [],
|
||||
peopleRemainingList: [],
|
||||
|
||||
// 金额排行数据
|
||||
amountRankingList: [],
|
||||
amountTopThree: [],
|
||||
amountRemainingList: [],
|
||||
|
||||
// 用户信息
|
||||
userInfo: uni.getStorageSync('User') || {},
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
formatMemberName(val) {
|
||||
return val?.slice(0, 8) || ''
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
// 显示排行榜弹窗(先显示人数排行)
|
||||
async showRankingPopups() {
|
||||
this.loading = true
|
||||
try {
|
||||
// 并行加载两个排行榜数据
|
||||
await Promise.all([this.loadPeopleRanking(), this.loadAmountRanking()])
|
||||
// 先显示人数排行榜
|
||||
if (this.peopleTopThree.length > 0) {
|
||||
this.showPeopleRanking = true
|
||||
} else if (this.amountTopThree.length > 0) {
|
||||
this.showAmountRanking = true
|
||||
} else {
|
||||
this.$emit('onRankingComplete')
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载排行榜数据失败:', error)
|
||||
uni.showToast({
|
||||
title: '加载失败',
|
||||
icon: 'error',
|
||||
})
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
|
||||
// 获取当前年月参数
|
||||
getCurrentYearMonth() {
|
||||
const now = new Date()
|
||||
const year = now.getFullYear()
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0') // 月份补0
|
||||
return { year, month }
|
||||
},
|
||||
|
||||
// 加载人数排行榜数据
|
||||
async loadPeopleRanking() {
|
||||
try {
|
||||
const { year, month } = this.getCurrentYearMonth()
|
||||
const params = {
|
||||
year,
|
||||
month,
|
||||
faker: true,
|
||||
}
|
||||
const res = await api.getTopPeople(params)
|
||||
console.log(res.data)
|
||||
if (res.code === 200 && res.data) {
|
||||
// 数据字段映射
|
||||
const mappedData = res.data.map(item => ({
|
||||
...item,
|
||||
memberName: item.memberName,
|
||||
memberCode: item.memberCode,
|
||||
count: item.numberOfPeople, // 人数字段映射
|
||||
isLoginMember: item.memberId === this.userInfo.memberId ? 1 : 0, // 判断是否为当前用户
|
||||
}))
|
||||
this.peopleRankingList = mappedData.slice(0, 30) // 取前30名
|
||||
this.peopleTopThree = this.peopleRankingList.slice(0, 3)
|
||||
this.peopleRemainingList = this.peopleRankingList.slice(3)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载人数排行榜失败:', error)
|
||||
throw error
|
||||
}
|
||||
},
|
||||
|
||||
// 加载金额排行榜数据
|
||||
async loadAmountRanking() {
|
||||
try {
|
||||
const { year, month } = this.getCurrentYearMonth()
|
||||
const params = {
|
||||
year,
|
||||
month,
|
||||
faker: true,
|
||||
}
|
||||
const res = await api.getTopAmount(params)
|
||||
if (res.code === 200 && res.data) {
|
||||
// 数据字段映射
|
||||
const mappedData = res.data.map(item => ({
|
||||
...item,
|
||||
memberName: item.memberName,
|
||||
memberCode: item.memberCode,
|
||||
amount: item.numberOfAmount, // 金额字段映射
|
||||
isLoginMember: item.memberId === this.userInfo.memberId ? 1 : 0, // 判断是否为当前用户
|
||||
}))
|
||||
this.amountRankingList = mappedData.slice(0, 30) // 取前30名
|
||||
this.amountTopThree = this.amountRankingList.slice(0, 3)
|
||||
this.amountRemainingList = this.amountRankingList.slice(3)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载金额排行榜失败:', error)
|
||||
throw error
|
||||
}
|
||||
},
|
||||
|
||||
// 关闭人数排行榜,显示金额排行榜
|
||||
closePeopleRanking() {
|
||||
this.showPeopleRanking = false
|
||||
if (this.amountTopThree.length > 0) {
|
||||
setTimeout(() => {
|
||||
this.showAmountRanking = true
|
||||
}, 300)
|
||||
} else {
|
||||
this.$emit('onRankingComplete')
|
||||
}
|
||||
},
|
||||
|
||||
// 关闭金额排行榜
|
||||
closeAmountRanking() {
|
||||
this.showAmountRanking = false
|
||||
// 触发完成事件
|
||||
this.$emit('onRankingComplete')
|
||||
},
|
||||
|
||||
// 格式化金额显示
|
||||
formatAmount(amount) {
|
||||
return amount
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .u-popup__content {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.popup-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
#003d7a 0%,
|
||||
#005bac 30%,
|
||||
#0077cc 70%,
|
||||
#4a90e2 100%
|
||||
);
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
// 添加微妙的光效
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: radial-gradient(
|
||||
ellipse at 30% 20%,
|
||||
rgba(255, 255, 255, 0.1) 0%,
|
||||
transparent 50%
|
||||
);
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes sparkle {
|
||||
0% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
100% {
|
||||
transform: translateY(-100rpx);
|
||||
}
|
||||
}
|
||||
|
||||
.popup-header {
|
||||
padding: 30rpx 40rpx 20rpx;
|
||||
flex-shrink: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
.header-title {
|
||||
font-size: 38rpx;
|
||||
font-weight: bold;
|
||||
color: #ffffff;
|
||||
text-shadow:
|
||||
0 2rpx 8rpx rgba(0, 0, 0, 0.6),
|
||||
0 0 15rpx rgba(74, 144, 226, 0.8),
|
||||
0 0 25rpx rgba(255, 255, 255, 0.4);
|
||||
text-align: center;
|
||||
position: relative;
|
||||
animation: title-bling 2s ease-in-out infinite alternate;
|
||||
}
|
||||
}
|
||||
|
||||
.top-three-section {
|
||||
padding: 20rpx 20rpx 40rpx;
|
||||
flex-shrink: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.podium-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-end;
|
||||
position: relative;
|
||||
margin: 0 10rpx;
|
||||
height: 290rpx;
|
||||
|
||||
// 添加领奖台基座
|
||||
// &::after {
|
||||
// content: '';
|
||||
// position: absolute;
|
||||
// bottom: 0;
|
||||
// left: 50%;
|
||||
// transform: translateX(-50%);
|
||||
// width: 85%;
|
||||
// height: 30rpx;
|
||||
// background: linear-gradient(135deg, #424242 0%, #616161 50%, #424242 100%);
|
||||
// border-radius: 15rpx 15rpx 0 0;
|
||||
// box-shadow: 0 -6rpx 20rpx rgba(0, 0, 0, 0.3);
|
||||
// }
|
||||
}
|
||||
|
||||
.podium-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
margin: 0 8rpx;
|
||||
|
||||
.player-area {
|
||||
border-radius: 20rpx;
|
||||
min-width: 140rpx;
|
||||
text-align: center;
|
||||
transition: all 0.3s ease;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
// 创建领奖台台阶
|
||||
// &::after {
|
||||
// content: '';
|
||||
// position: absolute;
|
||||
// bottom: 0;
|
||||
// left: 50%;
|
||||
// transform: translateX(-50%);
|
||||
// border-radius: 12rpx 12rpx 0 0;
|
||||
// box-shadow:
|
||||
// 0 -6rpx 15rpx rgba(0, 0, 0, 0.25),
|
||||
// inset 0 3rpx 6rpx rgba(255, 255, 255, 0.15);
|
||||
// }
|
||||
|
||||
.rank-number {
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 26rpx;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
margin-bottom: 15rpx;
|
||||
position: relative;
|
||||
|
||||
img {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3));
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
}
|
||||
|
||||
.member-name {
|
||||
font-size: 24rpx;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
margin-bottom: 8rpx;
|
||||
font-weight: bold;
|
||||
max-width: 110rpx;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
padding: 6rpx 10rpx;
|
||||
border-radius: 15rpx;
|
||||
}
|
||||
|
||||
.member-code {
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
margin-top: 8rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 600;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
padding: 4rpx 8rpx;
|
||||
border-radius: 12rpx;
|
||||
|
||||
backdrop-filter: blur(5rpx);
|
||||
}
|
||||
|
||||
.score {
|
||||
font-size: 22rpx;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
min-width: 60rpx;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
// 第二名台阶
|
||||
.second-place {
|
||||
.player-area {
|
||||
transform: translateY(10rpx);
|
||||
}
|
||||
&::after {
|
||||
width: 130rpx;
|
||||
height: 100rpx;
|
||||
background: linear-gradient(135deg, #c0c0c0 0%, #e8e8e8 50%, #c0c0c0 100%);
|
||||
}
|
||||
|
||||
// .member-name {
|
||||
// font-size: 26rpx;
|
||||
// }
|
||||
|
||||
// .member-code {
|
||||
// font-size: 26rpx;
|
||||
// }
|
||||
|
||||
// .score {
|
||||
// font-size: 26rpx;
|
||||
// }
|
||||
|
||||
.rank-number img {
|
||||
height: 70rpx;
|
||||
width: 70rpx;
|
||||
animation: silver-glow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
}
|
||||
|
||||
// 第一名台阶 - 最高
|
||||
.first-place {
|
||||
.player-area {
|
||||
transform: translateY(-40rpx);
|
||||
}
|
||||
|
||||
&::after {
|
||||
width: 150rpx;
|
||||
height: 140rpx;
|
||||
background: linear-gradient(135deg, #ffd700 0%, #ffed4e 50%, #ffd700 100%);
|
||||
box-shadow:
|
||||
0 -8rpx 20rpx rgba(0, 0, 0, 0.3),
|
||||
inset 0 3rpx 6rpx rgba(255, 255, 255, 0.3),
|
||||
0 0 25rpx rgba(255, 215, 0, 0.4);
|
||||
}
|
||||
|
||||
.rank-number img {
|
||||
height: 80rpx;
|
||||
width: 80rpx;
|
||||
animation: champion-glow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
.member-name {
|
||||
font-size: 28rpx;
|
||||
color: #ffd700;
|
||||
animation: champion-text-glow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
|
||||
.member-code {
|
||||
font-size: 28rpx;
|
||||
color: #ffd700;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.score {
|
||||
color: #ffd700;
|
||||
font-size: 28rpx;
|
||||
font-weight: 900;
|
||||
}
|
||||
}
|
||||
|
||||
// 第三名台阶
|
||||
.third-place {
|
||||
.player-area {
|
||||
transform: translateY(10rpx);
|
||||
}
|
||||
|
||||
.rank-number img {
|
||||
height: 65rpx;
|
||||
width: 65rpx;
|
||||
animation: bronze-glow 2s ease-in-out infinite alternate;
|
||||
}
|
||||
// .member-name {
|
||||
// font-size: 22rpx;
|
||||
// }
|
||||
|
||||
// .member-code {
|
||||
// font-size: 22rpx;
|
||||
// }
|
||||
|
||||
// .score {
|
||||
// font-size: 22rpx;
|
||||
// }
|
||||
}
|
||||
|
||||
@keyframes title-bling {
|
||||
0% {
|
||||
text-shadow:
|
||||
0 2rpx 8rpx rgba(0, 0, 0, 0.6),
|
||||
0 0 15rpx rgba(74, 144, 226, 0.8),
|
||||
0 0 25rpx rgba(255, 255, 255, 0.4);
|
||||
}
|
||||
100% {
|
||||
text-shadow:
|
||||
0 2rpx 8rpx rgba(0, 0, 0, 0.6),
|
||||
0 0 25rpx rgba(74, 144, 226, 1),
|
||||
0 0 35rpx rgba(255, 255, 255, 0.7),
|
||||
0 0 45rpx rgba(0, 119, 204, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes golden-pulse {
|
||||
0% {
|
||||
background: radial-gradient(
|
||||
ellipse at center,
|
||||
rgba(255, 215, 0, 0.2) 0%,
|
||||
transparent 70%
|
||||
);
|
||||
}
|
||||
100% {
|
||||
background: radial-gradient(
|
||||
ellipse at center,
|
||||
rgba(255, 215, 0, 0.4) 0%,
|
||||
transparent 70%
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes champion-glow {
|
||||
0% {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3))
|
||||
drop-shadow(0 0 10rpx rgba(255, 215, 0, 0.3));
|
||||
transform: scale(1);
|
||||
}
|
||||
100% {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3))
|
||||
drop-shadow(0 0 20rpx rgba(255, 215, 0, 0.6));
|
||||
transform: scale(1.05);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes champion-text-glow {
|
||||
0% {
|
||||
text-shadow: 0 2rpx 8rpx rgba(255, 215, 0, 0.8);
|
||||
}
|
||||
100% {
|
||||
text-shadow:
|
||||
0 2rpx 8rpx rgba(255, 215, 0, 0.8),
|
||||
0 0 15rpx rgba(255, 215, 0, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes silver-glow {
|
||||
0% {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3))
|
||||
drop-shadow(0 0 8rpx rgba(192, 192, 192, 0.3));
|
||||
}
|
||||
100% {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3))
|
||||
drop-shadow(0 0 15rpx rgba(192, 192, 192, 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bronze-glow {
|
||||
0% {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3))
|
||||
drop-shadow(0 0 8rpx rgba(205, 127, 50, 0.3));
|
||||
}
|
||||
100% {
|
||||
filter: drop-shadow(0 4rpx 8rpx rgba(0, 0, 0, 0.3))
|
||||
drop-shadow(0 0 15rpx rgba(205, 127, 50, 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
.ranking-list {
|
||||
flex: 1;
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
rgba(255, 255, 255, 0.98) 0%,
|
||||
rgba(248, 250, 252, 0.95) 100%
|
||||
);
|
||||
margin: 20rpx 20rpx 0 20rpx;
|
||||
border-radius: 25rpx 25rpx 0 0;
|
||||
overflow: hidden;
|
||||
backdrop-filter: blur(15rpx);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
box-shadow:
|
||||
0 -8rpx 25rpx rgba(0, 0, 0, 0.1),
|
||||
inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.list-header {
|
||||
padding: 30rpx 40rpx 20rpx;
|
||||
border-bottom: 2rpx solid rgba(139, 69, 19, 0.1);
|
||||
flex-shrink: 0;
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
rgba(255, 255, 255, 0.9) 0%,
|
||||
rgba(248, 250, 252, 0.8) 100%
|
||||
);
|
||||
|
||||
.list-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #2d3748;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -8rpx;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 60rpx;
|
||||
height: 3rpx;
|
||||
background: linear-gradient(90deg, transparent, #9c27b0, transparent);
|
||||
border-radius: 2rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.scroll-container {
|
||||
flex: 1;
|
||||
height: 0; /* 关键:在flex布局中,scroll-view需要明确高度 */
|
||||
}
|
||||
|
||||
.list-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 24rpx 30rpx;
|
||||
border-bottom: 1rpx solid rgba(226, 232, 240, 0.8);
|
||||
position: relative;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
rgba(159, 122, 234, 0.05) 0%,
|
||||
rgba(139, 92, 246, 0.03) 100%
|
||||
);
|
||||
transform: translateX(5rpx);
|
||||
}
|
||||
|
||||
.item-rank {
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #64748b;
|
||||
text-align: center;
|
||||
margin-right: 20rpx;
|
||||
background: linear-gradient(135deg, #f1f5f9 0%, #e2e8f0 100%);
|
||||
border-radius: 50%;
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.item-info {
|
||||
flex: 2;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.item-name {
|
||||
font-size: 28rpx;
|
||||
color: #1e293b;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
font-weight: 600;
|
||||
|
||||
&.highlight {
|
||||
color: #7c3aed;
|
||||
font-weight: bold;
|
||||
background: linear-gradient(135deg, #7c3aed, #a855f7);
|
||||
background-clip: text;
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: -8rpx;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 4rpx;
|
||||
height: 20rpx;
|
||||
background: linear-gradient(135deg, #7c3aed, #a855f7);
|
||||
border-radius: 2rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-code {
|
||||
font-size: 22rpx;
|
||||
color: #64748b;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.item-score {
|
||||
flex: 1;
|
||||
font-size: 24rpx;
|
||||
color: #374151;
|
||||
font-weight: bold;
|
||||
min-width: 100rpx;
|
||||
text-align: center;
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
}
|
||||
|
||||
.list-footer {
|
||||
padding: 40rpx;
|
||||
text-align: center;
|
||||
|
||||
.empty-text {
|
||||
font-size: 26rpx;
|
||||
color: #64748b;
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
.popup-footer {
|
||||
padding: 20rpx;
|
||||
flex-shrink: 0;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
|
||||
.close-text-btn {
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
rgba(255, 255, 255, 0.95) 0%,
|
||||
rgba(248, 250, 252, 0.9) 100%
|
||||
);
|
||||
color: #005bac;
|
||||
text-align: center;
|
||||
padding: 20rpx 50rpx;
|
||||
border-radius: 50rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
box-shadow:
|
||||
0 8rpx 25rpx rgba(0, 0, 0, 0.15),
|
||||
inset 0 1rpx 0 rgba(255, 255, 255, 0.8),
|
||||
0 0 0 1rpx rgba(0, 91, 172, 0.3);
|
||||
transition: all 0.3s ease;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
&::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
transparent,
|
||||
rgba(255, 255, 255, 0.4),
|
||||
transparent
|
||||
);
|
||||
transition: left 0.5s ease;
|
||||
}
|
||||
|
||||
&:active {
|
||||
transform: scale(0.98);
|
||||
background: linear-gradient(
|
||||
135deg,
|
||||
rgba(248, 250, 252, 0.9) 0%,
|
||||
rgba(241, 245, 249, 0.85) 100%
|
||||
);
|
||||
box-shadow:
|
||||
0 4rpx 15rpx rgba(0, 0, 0, 0.1),
|
||||
inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
&::before {
|
||||
left: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover::before {
|
||||
left: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,127 +0,0 @@
|
|||
<template>
|
||||
<view class="example-page">
|
||||
<view class="header">
|
||||
<text class="title">排行榜弹窗组件示例</text>
|
||||
</view>
|
||||
|
||||
<view class="content">
|
||||
<view class="button-group">
|
||||
<u-button
|
||||
type="primary"
|
||||
size="large"
|
||||
@click="showRanking"
|
||||
:loading="loading"
|
||||
>
|
||||
显示排行榜
|
||||
</u-button>
|
||||
</view>
|
||||
|
||||
<view class="info-section">
|
||||
<text class="info-title">使用说明:</text>
|
||||
<text class="info-text"
|
||||
>1. 点击按钮将依次显示直推人数和直推金额排行榜</text
|
||||
>
|
||||
<text class="info-text">2. 前三名会特殊展示在顶部</text>
|
||||
<text class="info-text">3. 4-30名可在下方滚动查看</text>
|
||||
<text class="info-text">4. 关闭人数排行后自动显示金额排行</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 排行榜弹窗组件 -->
|
||||
<RankingPopup ref="rankingPopup" @onRankingComplete="onRankingComplete" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import RankingPopup from './RankingPopup.vue'
|
||||
|
||||
export default {
|
||||
name: 'RankingPopupExample',
|
||||
components: {
|
||||
RankingPopup,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 显示排行榜
|
||||
async showRanking() {
|
||||
this.loading = true
|
||||
try {
|
||||
await this.$refs.rankingPopup.showRankingPopups()
|
||||
} catch (error) {
|
||||
console.error('显示排行榜失败:', error)
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
|
||||
// 排行榜展示完成回调
|
||||
onRankingComplete() {
|
||||
console.log('排行榜展示完成')
|
||||
uni.showToast({
|
||||
title: '排行榜展示完成',
|
||||
icon: 'success',
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.example-page {
|
||||
min-height: 100vh;
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
padding: 40rpx;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: center;
|
||||
margin-bottom: 60rpx;
|
||||
|
||||
.title {
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
max-width: 600rpx;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.button-group {
|
||||
text-align: center;
|
||||
margin-bottom: 60rpx;
|
||||
}
|
||||
|
||||
.info-section {
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
padding: 40rpx;
|
||||
border-radius: 20rpx;
|
||||
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
.info-title {
|
||||
display: block;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.info-text {
|
||||
display: block;
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 12rpx;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-30 20:18:30
|
||||
-->
|
||||
|
||||
<template>
|
||||
<view>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-30 20:18:30
|
||||
-->
|
||||
|
||||
<template>
|
||||
<view>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-25 20:05:35
|
||||
-->
|
||||
<template>
|
||||
<u-popup :show="agreeMent"
|
||||
:closeable="true"
|
||||
|
|
@ -1035,8 +1040,8 @@
|
|||
<u-button type="success"
|
||||
class="uBtn"
|
||||
shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )"
|
||||
@tap="agreeMent=false">{{'确定'}}</u-button>
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )"
|
||||
@tap="agreeMent=false">{{$t('w_0035')}}</u-button>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@
|
|||
.small-btn {
|
||||
width: 312rpx;
|
||||
height: 72rpx;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
border-radius: 34rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: 400;
|
||||
|
|
@ -332,13 +332,13 @@
|
|||
.small-text-btn {
|
||||
width: 312rpx;
|
||||
height: 72rpx;
|
||||
border: 1px solid #005BAC;
|
||||
border: 1px solid #FB3024;
|
||||
border-radius: 34rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 28rpx;
|
||||
color: #005BAC;
|
||||
color: #FB3024;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,310 +0,0 @@
|
|||
<template>
|
||||
<view class="area-product-list" :class="sizeClass">
|
||||
<view class="area-header">
|
||||
<view class="header-bg"></view>
|
||||
<text class="area-title">{{ title }}</text>
|
||||
<u-button
|
||||
v-if="list.length > 0"
|
||||
type="primary"
|
||||
size="mini"
|
||||
shape="circle"
|
||||
:custom-style="{
|
||||
background: '#ffffff',
|
||||
border: 'none',
|
||||
position: 'relative',
|
||||
zIndex: 1,
|
||||
height: '46rpx',
|
||||
lineHeight: '46rpx',
|
||||
width: 'fit-content',
|
||||
padding: '0 12rpx',
|
||||
margin: '0',
|
||||
}"
|
||||
@click="goToMore"
|
||||
>
|
||||
<view class="more-btn-content">
|
||||
<text class="more-text">更多</text>
|
||||
<u-icon name="arrow-right" color="#005bac" size="14"></u-icon>
|
||||
</view>
|
||||
</u-button>
|
||||
</view>
|
||||
<view class="product-container">
|
||||
<view
|
||||
class="product-item"
|
||||
v-for="item in list"
|
||||
:key="item.pkWares"
|
||||
@click="handleProductClick(item)"
|
||||
>
|
||||
<image
|
||||
:src="item.cover || item.cover1"
|
||||
class="product-image"
|
||||
mode="aspectFill"
|
||||
/>
|
||||
<view class="product-info">
|
||||
<view class="product-name">{{ item.waresName }}</view>
|
||||
<view class="product-price-row">
|
||||
<view class="product-price">
|
||||
{{ formatCurrency(item.waresPrice) }}
|
||||
</view>
|
||||
<u-button
|
||||
v-if="false"
|
||||
type="primary"
|
||||
size="mini"
|
||||
shape="circle"
|
||||
:custom-style="{
|
||||
background: '#005bac',
|
||||
margin: '0px',
|
||||
width: '48rpx',
|
||||
height: '48rpx',
|
||||
minWidth: '48rpx',
|
||||
}"
|
||||
@click.native.stop="handleAddToCart(item)"
|
||||
>
|
||||
<u-icon name="plus" color="#ffffff" size="12"></u-icon>
|
||||
</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { numberToCurrencyNo, isLocal, isLocaled } from '@/util/numberToCurrency'
|
||||
import { addShopping } from '@/config/goods'
|
||||
import { formatCurrency } from '@/util/index.js'
|
||||
export default {
|
||||
props: {
|
||||
title: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
list: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
specialAreaId: {
|
||||
type: [Number, String],
|
||||
default: '',
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: 'normal', // 'normal' or 'small'
|
||||
validator: value => ['normal', 'small'].includes(value),
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
sizeClass() {
|
||||
return this.size === 'small' ? 'area-product-list--small' : ''
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
isLocaled,
|
||||
formatCurrency,
|
||||
formatPrice(price) {
|
||||
// 使用numberToCurrencyNo和isLocal函数来格式化价格
|
||||
return isLocal(numberToCurrencyNo(price))
|
||||
},
|
||||
goToMore() {
|
||||
// 跳转到专区详情页面
|
||||
uni.navigateTo({
|
||||
url: `/pages/specialArea/index?id=${this.specialAreaId}`,
|
||||
})
|
||||
},
|
||||
handleProductClick(item) {
|
||||
// 商品点击事件,可根据需求实现跳转或其他逻辑
|
||||
this.$emit('product-click', item)
|
||||
},
|
||||
handleAddToCart(item) {
|
||||
const params = {
|
||||
pkCountry: this.pkCountry,
|
||||
specialArea: item.specialArea,
|
||||
number: 1,
|
||||
waresCode: item.waresCode,
|
||||
productGroup: item.productGroup,
|
||||
}
|
||||
|
||||
addShopping(params).then(res => {
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: '购物车添加成功',
|
||||
icon: 'success',
|
||||
mask: true,
|
||||
})
|
||||
this.$store.dispatch('getCarLength')
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.area-product-list {
|
||||
background-color: #ffffff;
|
||||
padding: 20rpx;
|
||||
padding-top: 0;
|
||||
border-radius: 16rpx;
|
||||
margin-bottom: 24rpx;
|
||||
position: relative;
|
||||
transition: all 0.3s ease; // Add transition for smoother size changes
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); // 添加阴影效果
|
||||
|
||||
&--small {
|
||||
padding: 16rpx;
|
||||
padding-top: 0;
|
||||
margin-bottom: 20rpx;
|
||||
border-radius: 12rpx;
|
||||
|
||||
.area-header {
|
||||
margin-bottom: 20rpx;
|
||||
padding: 16rpx 0;
|
||||
height: 40rpx;
|
||||
}
|
||||
|
||||
.header-bg {
|
||||
left: -16rpx;
|
||||
right: -16rpx;
|
||||
border-top-left-radius: 6px;
|
||||
border-top-right-radius: 6px;
|
||||
}
|
||||
|
||||
.area-title {
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.more-btn-content {
|
||||
// Adjust button style directly as u-button size='mini' might not be flexible enough
|
||||
:deep(.u-button) {
|
||||
height: 40rpx !important;
|
||||
line-height: 40rpx !important;
|
||||
padding: 0 10rpx !important;
|
||||
}
|
||||
.more-text {
|
||||
font-size: 20rpx;
|
||||
margin-right: 2rpx;
|
||||
}
|
||||
:deep(.u-icon) {
|
||||
font-size: 12px !important; // u-icon size might need !important
|
||||
}
|
||||
}
|
||||
|
||||
.product-container {
|
||||
margin: 0 -8rpx;
|
||||
}
|
||||
|
||||
.product-item {
|
||||
padding: 0 8rpx;
|
||||
}
|
||||
|
||||
.product-image {
|
||||
width: 180rpx;
|
||||
height: 180rpx;
|
||||
border-radius: 6rpx;
|
||||
}
|
||||
|
||||
.product-info {
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
|
||||
.product-name {
|
||||
font-size: 24rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.product-price-row .product-price {
|
||||
font-size: 20rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.area-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 24rpx;
|
||||
position: relative;
|
||||
padding: 20rpx 0;
|
||||
height: 46rpx;
|
||||
}
|
||||
|
||||
.header-bg {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -20rpx;
|
||||
right: -20rpx;
|
||||
height: 100%;
|
||||
background: linear-gradient(to bottom, #add8e6, #ffffff);
|
||||
z-index: 0;
|
||||
border-top-left-radius: 8px;
|
||||
border-top-right-radius: 8px;
|
||||
}
|
||||
|
||||
.area-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #333333;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.more-btn-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
flex-grow: 0;
|
||||
}
|
||||
|
||||
.more-text {
|
||||
font-size: 24rpx;
|
||||
color: #005bac;
|
||||
margin-right: 4rpx;
|
||||
}
|
||||
|
||||
.product-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0 -10rpx;
|
||||
}
|
||||
|
||||
.product-item {
|
||||
width: 33.33%;
|
||||
padding: 0 10rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.product-image {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
border-radius: 8rpx;
|
||||
background-color: #f5f5f5;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.product-info {
|
||||
margin-top: 12rpx;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.product-name {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-bottom: 8rpx;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.product-price-row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
.product-price {
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #f82c1a;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -55,7 +55,7 @@ export default {
|
|||
.navBar {
|
||||
position: fixed;
|
||||
margin: 14rpx 24rpx;
|
||||
z-index: 500;
|
||||
z-index: 1000000000;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,418 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry != 1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{ $t("w_0138") }}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate != ''" class="uni-input">{{
|
||||
query.startDate
|
||||
}}</view>
|
||||
<view v-else class="uni-input">{{ $t("CK_KS_4") }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{ $t("w_0139") }}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate != ''" class="uni-input">{{
|
||||
query.endDate
|
||||
}}</view>
|
||||
<view v-else class="uni-input">{{ $t("CK_KS_5") }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
<image
|
||||
class="search-icon-s"
|
||||
src="../../static/images/search.png"
|
||||
></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ $t("N_I_130") }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.settleDate }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ $t("N_I_148") }}(¥) </view>
|
||||
<view class="data-right style1" @click="getDetails(item, 20)">
|
||||
{{ item.makerDirectIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ $t("N_I_149") }}(¥) </view>
|
||||
<view class="data-right style1" @click="getDetails(item, 21)">
|
||||
{{ item.makerShareIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ $t("N_I_137") }}(¥) </view>
|
||||
<view class="data-right">
|
||||
{{ item.serviceSpend | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ $t("N_I_138") }}(¥) </view>
|
||||
<view class="data-right">
|
||||
{{ item.makerRealSubtotal | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule == true" @click="urlTap">
|
||||
{{ $t("CK_KS_25") }}
|
||||
</view>
|
||||
</view>
|
||||
<view style="clear: both"></view>
|
||||
<view style="height: 20rpx; background-color: #fff"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<u-popup
|
||||
:show="show"
|
||||
mode="center"
|
||||
closeOnClickOverlay
|
||||
closeable
|
||||
round="10"
|
||||
@close="close"
|
||||
>
|
||||
<view class="kuang">
|
||||
<view
|
||||
v-for="item in tableDetails"
|
||||
v-show="tableDetails.length > 0"
|
||||
class="kuang_i"
|
||||
>
|
||||
<view class="kuang_ii">
|
||||
<view>来源会员编号</view>
|
||||
<view>{{ item.sourceMemberCode }}</view>
|
||||
</view>
|
||||
<view class="kuang_ii">
|
||||
<view>来源会员名称</view>
|
||||
<view>{{ item.sourceMemberName }}</view>
|
||||
</view>
|
||||
<view class="kuang_ii">
|
||||
<view>奖金金额</view>
|
||||
<view>{{ item.realIncome | toThousandthAndKeepDecimal}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-show="tableDetails.length == 0" class="kong"> 暂无数据 </view>
|
||||
</view>
|
||||
</u-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from "@/config/login.js";
|
||||
import { setToken } from "@/config/auth.js";
|
||||
import store from "@/store";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
tableDetails: [],
|
||||
show: false,
|
||||
getBonusTypeList: [],
|
||||
index: null,
|
||||
dataList: [],
|
||||
userInfo: [],
|
||||
query: {
|
||||
startDate: "",
|
||||
endDate: "",
|
||||
sourceMemberCode: "",
|
||||
sourceMemberName: "",
|
||||
pkBonusItems: "",
|
||||
},
|
||||
page: {
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
},
|
||||
};
|
||||
},
|
||||
props: ["num", "checkRule"],
|
||||
onLoad() {},
|
||||
created() {
|
||||
// this.getType()
|
||||
this.userInfo = uni.getStorageSync("User");
|
||||
this.getDataList();
|
||||
},
|
||||
methods: {
|
||||
getDetails(row, bonusValue) {
|
||||
api
|
||||
.markBonus({
|
||||
startDate: row.settleDate,
|
||||
bonusValue: bonusValue,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(
|
||||
"%c [ res ]-151",
|
||||
"font-size:13px; background:#fb0ce4; color:#ff50ff;",
|
||||
res
|
||||
);
|
||||
this.tableDetails = res.rows;
|
||||
this.show = true;
|
||||
});
|
||||
},
|
||||
close() {
|
||||
this.show = false;
|
||||
},
|
||||
urlTap() {
|
||||
uni.navigateTo({ url: "/pages/bonusSource/index" });
|
||||
},
|
||||
getInfo() {
|
||||
api
|
||||
.getInfo()
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
this.userInfo = res.data;
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
},
|
||||
submit() {
|
||||
this.getDataList();
|
||||
},
|
||||
getType() {
|
||||
api
|
||||
.getBonusType()
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
this.getBonusTypeList = res.rows;
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.index = e.detail.value;
|
||||
},
|
||||
bindDateChange(e) {
|
||||
this.query.startDate = e.detail.value;
|
||||
},
|
||||
bindDateChange1(e) {
|
||||
this.query.endDate = e.detail.value;
|
||||
},
|
||||
getDataList(num) {
|
||||
api
|
||||
.queryBonusMaker(
|
||||
this.query,
|
||||
`?pageNum=${num || 1}&pageSize=${this.page.pageSize}`
|
||||
)
|
||||
.then((res) => {
|
||||
if (res) {
|
||||
this.dataList.push(...res.rows);
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
},
|
||||
submit() {},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
.border_s {
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
.button {
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #fb3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type {
|
||||
color: #fb3024 !important;
|
||||
}
|
||||
.flex_s {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
.data-left {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-right {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-view {
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin: 0;
|
||||
}
|
||||
.search-list {
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
.search-content {
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.text_s {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-icon-s {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
.search-icons {
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #fb3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
.time1 {
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
.time-text {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-bottom {
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.texts {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
.select-text {
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
.selIcon {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
.text-s {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.place {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.border-colors {
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
page {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.search-icon {
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
}
|
||||
.search-bg {
|
||||
}
|
||||
.top {
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
.search-tops {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.search-bg {
|
||||
width: 432rpx;
|
||||
height: 35rpx;
|
||||
background: #f5f6f8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.style1 {
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
color: #d61820;
|
||||
}
|
||||
.kuang {
|
||||
height: 800rpx;
|
||||
background: #eee;
|
||||
padding: 60rpx 20rpx;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.kuang_i {
|
||||
padding: 20rpx 20rpx;
|
||||
border-radius: 8px;
|
||||
background: #fff;
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.kuang_ii {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
::v-deep .u-popup__content {
|
||||
width: 80%;
|
||||
}
|
||||
.kong {
|
||||
text-align: center;
|
||||
line-height: 250px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,20 +1,25 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry!=1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{'查询时间'}}</view>
|
||||
<view class="time-text">{{$t('w_0138')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate!=''" class="uni-input">{{query.startDate}}</view>
|
||||
<view v-else class="uni-input">{{'开始日期'}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_4')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{'至'}}</view>
|
||||
<view class="text_s">{{$t('w_0139')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate!=''" class="uni-input">{{query.endDate}}</view>
|
||||
<view v-else class="uni-input">{{'结束日期'}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_5')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
|
|
@ -28,7 +33,7 @@
|
|||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'奖金日期'}}
|
||||
{{$t('N_I_130')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.settleDate}}
|
||||
|
|
@ -36,7 +41,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'复购券直推收益'}}(¥)
|
||||
{{$t('N_I_147')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurCoupon | numberToCurrency}}
|
||||
|
|
@ -44,7 +49,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'复购券均分收益'}}(¥)
|
||||
{{$t('w_0192')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurCouponShare | numberToCurrency}}
|
||||
|
|
@ -52,7 +57,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'平台服务费'}}(¥)
|
||||
{{$t('N_I_137')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceSpend | numberToCurrency}}
|
||||
|
|
@ -60,17 +65,17 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'实发小计'}}(¥)
|
||||
{{$t('N_I_138')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurCouponSubtotal | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="border_s">
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{'查看详情'}}
|
||||
{{$t('CK_KS_25')}}
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
|
|
@ -175,13 +180,13 @@ export default {
|
|||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type{
|
||||
color: #005BAC !important;
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
.flex_s{
|
||||
width: 100%;
|
||||
|
|
@ -223,7 +228,7 @@ export default {
|
|||
.search-icons{
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -1,20 +1,25 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三å<EFBFBD>
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry!=1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{'查询时间'}}</view>
|
||||
<view class="time-text">{{$t('w_0138')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate!=''" class="uni-input">{{query.startDate}}</view>
|
||||
<view v-else class="uni-input">{{'开始日期'}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_4')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{'至'}}</view>
|
||||
<view class="text_s">{{$t('w_0139')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate!=''" class="uni-input">{{query.endDate}}</view>
|
||||
<view v-else class="uni-input">{{'结束日期'}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_5')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
|
|
@ -28,7 +33,7 @@
|
|||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'奖金日期'}}
|
||||
{{$t('N_I_130')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.settleDate}}
|
||||
|
|
@ -36,7 +41,7 @@
|
|||
</view>
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1">
|
||||
<view class="data-left">
|
||||
{{'复购直推收益'}}({{ isLocaled() }})
|
||||
{{$t('w_0154')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurPushIncome |toThousandthAndKeepDecimal}}
|
||||
|
|
@ -44,7 +49,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'复购级差收益'}}({{ isLocaled() }})
|
||||
{{$t('w_0155')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurRangeIncome | toThousandthAndKeepDecimal}}
|
||||
|
|
@ -52,7 +57,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'复购拓展收益'}}({{ isLocaled() }})
|
||||
{{$t('N_I_141')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurExpandIncome | toThousandthAndKeepDecimal}}
|
||||
|
|
@ -60,7 +65,7 @@
|
|||
</view>
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1">
|
||||
<view class="data-left">
|
||||
{{'重复消费'}}({{ isLocaled() }})
|
||||
{{$t('N_I_136')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.backPoints | toThousandthAndKeepDecimal}}
|
||||
|
|
@ -68,7 +73,7 @@
|
|||
</view>
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1">
|
||||
<view class="data-left" >
|
||||
{{'平台服务费'}}({{ isLocaled() }})
|
||||
{{$t('N_I_137')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceSpend | toThousandthAndKeepDecimal}}
|
||||
|
|
@ -76,17 +81,17 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'实发小计'}}({{ isLocaled() }})
|
||||
{{$t('N_I_138')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurRealSubtotal | toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="border_s">
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{'查看详情'}}
|
||||
{{$t('CK_KS_25')}}
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
|
|
@ -194,13 +199,13 @@ export default {
|
|||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type{
|
||||
color: #005BAC !important;
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
.flex_s{
|
||||
width: 100%;
|
||||
|
|
@ -242,7 +247,7 @@ export default {
|
|||
.search-icons{
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,326 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry!=1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{$t('w_0138')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate!=''" class="uni-input">{{query.startDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_4')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{$t('w_0139')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate!=''" class="uni-input">{{query.endDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_5')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
<image class="search-icon-s" src="../../static/images/search.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_130')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.settleDate}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_143')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.directIncome | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_137')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceIncome | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_138')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.realIncomeTotal| numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{$t('CK_KS_25')}}
|
||||
</view>
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/login.js'
|
||||
import { setToken } from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
getBonusTypeList:[],
|
||||
index:null,
|
||||
dataList:[],
|
||||
userInfo:[],
|
||||
query:{
|
||||
startDate:'',
|
||||
endDate:'',
|
||||
sourceMemberCode:'',
|
||||
sourceMemberName:'',
|
||||
pkBonusItems: ''
|
||||
},
|
||||
page:{
|
||||
pageNum:1,
|
||||
pageSize:50
|
||||
}
|
||||
}
|
||||
},
|
||||
props:["num","checkRule"],
|
||||
onLoad() {
|
||||
|
||||
},
|
||||
created() {
|
||||
// this.getType()
|
||||
this.userInfo = uni.getStorageSync('User')
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
urlTap() {
|
||||
uni.navigateTo({ url: '/pages/bonusSource/index' })
|
||||
},
|
||||
getInfo(){
|
||||
api.getInfo().then(res => {
|
||||
if (res) {
|
||||
this.userInfo = res.data
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
this.getDataList()
|
||||
},
|
||||
getType(){
|
||||
api.getBonusType().then(res => {
|
||||
if (res) {
|
||||
this.getBonusTypeList = res.rows
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.index = e.detail.value
|
||||
},
|
||||
bindDateChange(e) {
|
||||
this.query.startDate = e.detail.value
|
||||
},
|
||||
bindDateChange1(e) {
|
||||
this.query.endDate = e.detail.value
|
||||
},
|
||||
getDataList(num) {
|
||||
api.queryBonusHaiFun(this.query,`?pageNum=${num||1}&pageSize=${this.page.pageSize}`).then(res => {
|
||||
if (res) {
|
||||
this.dataList.push(...res.rows)
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.border_s{
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
.button{
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type{
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
.flex_s{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
.data-left{
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-right{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-view{
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin:0 ;
|
||||
}
|
||||
.search-list{
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
.search-content{
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.text_s{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-icon-s{
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
.search-icons{
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
.time1{
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
.time-text{
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-bottom{
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.texts{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
.select-text{
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
.selIcon{
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
.text-s{
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.place{
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.border-colors{
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left:30rpx;
|
||||
}
|
||||
page{
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.search-icon{
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
image{
|
||||
|
||||
}
|
||||
}
|
||||
.search-bg{
|
||||
|
||||
}
|
||||
.top{
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
.search-tops{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.search-bg{
|
||||
width: 432rpx;
|
||||
height:35rpx;
|
||||
background: #F5F6F8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,326 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry!=1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{$t('w_0138')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate!=''" class="uni-input">{{query.startDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_4')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{$t('w_0139')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate!=''" class="uni-input">{{query.endDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_5')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
<image class="search-icon-s" src="../../static/images/search.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_130')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.settleDate}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_142')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.hiFunIncome | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_137')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceSpend | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_138')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.hiFunRealSubtotal | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{$t('CK_KS_25')}}
|
||||
</view>
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/login.js'
|
||||
import { setToken } from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
getBonusTypeList:[],
|
||||
index:null,
|
||||
dataList:[],
|
||||
userInfo:[],
|
||||
query:{
|
||||
startDate:'',
|
||||
endDate:'',
|
||||
sourceMemberCode:'',
|
||||
sourceMemberName:'',
|
||||
pkBonusItems: ''
|
||||
},
|
||||
page:{
|
||||
pageNum:1,
|
||||
pageSize:50
|
||||
}
|
||||
}
|
||||
},
|
||||
props:["num","checkRule"],
|
||||
onLoad() {
|
||||
|
||||
},
|
||||
created() {
|
||||
// this.getType()
|
||||
this.userInfo = uni.getStorageSync('User')
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
urlTap() {
|
||||
uni.navigateTo({ url: '/pages/bonusSource/index' })
|
||||
},
|
||||
getInfo(){
|
||||
api.getInfo().then(res => {
|
||||
if (res) {
|
||||
this.userInfo = res.data
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
this.getDataList()
|
||||
},
|
||||
getType(){
|
||||
api.getBonusType().then(res => {
|
||||
if (res) {
|
||||
this.getBonusTypeList = res.rows
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.index = e.detail.value
|
||||
},
|
||||
bindDateChange(e) {
|
||||
this.query.startDate = e.detail.value
|
||||
},
|
||||
bindDateChange1(e) {
|
||||
this.query.endDate = e.detail.value
|
||||
},
|
||||
getDataList(num) {
|
||||
api.queryBonusHiFun(this.query,`?pageNum=${num||1}&pageSize=${this.page.pageSize}`).then(res => {
|
||||
if (res) {
|
||||
this.dataList.push(...res.rows)
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.border_s{
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
.button{
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type{
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
.flex_s{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
.data-left{
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-right{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-view{
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin:0 ;
|
||||
}
|
||||
.search-list{
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
.search-content{
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.text_s{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-icon-s{
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
.search-icons{
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
.time1{
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
.time-text{
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-bottom{
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.texts{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
.select-text{
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
.selIcon{
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
.text-s{
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.place{
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.border-colors{
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left:30rpx;
|
||||
}
|
||||
page{
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.search-icon{
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
image{
|
||||
|
||||
}
|
||||
}
|
||||
.search-bg{
|
||||
|
||||
}
|
||||
.top{
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
.search-tops{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.search-bg{
|
||||
width: 432rpx;
|
||||
height:35rpx;
|
||||
background: #F5F6F8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,334 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry!=1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{$t('w_0138')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate!=''" class="uni-input">{{query.startDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_4')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{$t('w_0139')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate!=''" class="uni-input">{{query.endDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_5')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
<image class="search-icon-s" src="../../static/images/search.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_130')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.settleDate}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_144')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.cloudDirectIncome | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_145')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.cloudRepurIncome | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_137')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceSpend | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_138')}}(¥)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.cloudRealSubtotal | numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{$t('CK_KS_25')}}
|
||||
</view>
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/login.js'
|
||||
import { setToken } from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
getBonusTypeList:[],
|
||||
index:null,
|
||||
dataList:[],
|
||||
userInfo:[],
|
||||
query:{
|
||||
startDate:'',
|
||||
endDate:'',
|
||||
sourceMemberCode:'',
|
||||
sourceMemberName:'',
|
||||
pkBonusItems: ''
|
||||
},
|
||||
page:{
|
||||
pageNum:1,
|
||||
pageSize:50
|
||||
}
|
||||
}
|
||||
},
|
||||
props:["num","checkRule"],
|
||||
onLoad() {
|
||||
|
||||
},
|
||||
created() {
|
||||
// this.getType()
|
||||
this.userInfo = uni.getStorageSync('User')
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
urlTap() {
|
||||
uni.navigateTo({ url: '/pages/bonusSource/index' })
|
||||
},
|
||||
getInfo(){
|
||||
api.getInfo().then(res => {
|
||||
if (res) {
|
||||
this.userInfo = res.data
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
this.getDataList()
|
||||
},
|
||||
getType(){
|
||||
api.getBonusType().then(res => {
|
||||
if (res) {
|
||||
this.getBonusTypeList = res.rows
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.index = e.detail.value
|
||||
},
|
||||
bindDateChange(e) {
|
||||
this.query.startDate = e.detail.value
|
||||
},
|
||||
bindDateChange1(e) {
|
||||
this.query.endDate = e.detail.value
|
||||
},
|
||||
getDataList(num) {
|
||||
api.queryBonusCloud(this.query,`?pageNum=${num||1}&pageSize=${this.page.pageSize}`).then(res => {
|
||||
if (res) {
|
||||
this.dataList.push(...res.rows)
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.border_s{
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
.button{
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type{
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
.flex_s{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
.data-left{
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-right{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-view{
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin:0 ;
|
||||
}
|
||||
.search-list{
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
.search-content{
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.text_s{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-icon-s{
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
.search-icons{
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
.time1{
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
.time-text{
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.search-bottom{
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.texts{
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
.select-text{
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
.selIcon{
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
.text-s{
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.place{
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.border-colors{
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left:30rpx;
|
||||
}
|
||||
page{
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.search-icon{
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
image{
|
||||
|
||||
}
|
||||
}
|
||||
.search-bg{
|
||||
|
||||
}
|
||||
.top{
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
.search-tops{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.search-bg{
|
||||
width: 432rpx;
|
||||
height:35rpx;
|
||||
background: #F5F6F8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,421 +1,415 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三<EFBFBD>
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry != 1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{ '查询时间' }}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate != ''" class="uni-input">{{
|
||||
query.startDate
|
||||
}}</view>
|
||||
<view v-else class="uni-input">{{ '开始日期' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{ '至' }}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate != ''" class="uni-input">{{
|
||||
query.endDate
|
||||
}}</view>
|
||||
<view v-else class="uni-input">{{ '结束日期' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
<image
|
||||
class="search-icon-s"
|
||||
src="../../static/images/search.png"
|
||||
></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view style="height: 20rpx"></view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '奖金日期' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.settleDate }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ '直推收益' }} </view>
|
||||
<view class="data-right">
|
||||
{{ item.directIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ '拓展收益' }} </view>
|
||||
<view class="data-right">
|
||||
{{ item.expandIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ '辅导收益' }} </view>
|
||||
<view class="data-right">
|
||||
{{ item.coachIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="flex_s">
|
||||
<view class="main">
|
||||
<view v-if="userInfo.pkCountry!=1" class="top">
|
||||
<view class="search-bottom">
|
||||
<view class="time-text">{{$t('w_0138')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.startDate" mode="date" @change="bindDateChange">
|
||||
<view v-if="query.startDate!=''" class="uni-input">{{query.startDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_4')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="text_s">{{$t('w_0139')}}</view>
|
||||
<view class="time1">
|
||||
<picker :value="query.endDate" mode="date" @change="bindDateChange1">
|
||||
<view v-if="query.endDate!=''" class="uni-input">{{query.endDate}}</view>
|
||||
<view v-else class="uni-input">{{$t('CK_KS_5')}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="search-icons" @click="submit">
|
||||
<image class="search-icon-s" src="../../static/images/search.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view style="height: 20rpx;"></view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_130')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.settleDate }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_131')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.directIncome| toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_132')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.expandIncome| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'分红收益'}}
|
||||
{{$t('N_I_133')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.coachIncome | toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_134')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.shareIncome| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="flex_s" v-if="userInfo.pkCountry == 1">
|
||||
<view class="data-left"> {{ '服务补贴' }} </view>
|
||||
<view class="data-right">
|
||||
{{ item.serviceIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">见点收益</view>
|
||||
<view class="data-right">
|
||||
{{ item.globalPoints | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">区域收益</view>
|
||||
<view class="data-right">
|
||||
{{ item.storeIncome | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="flex_s">
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1">
|
||||
<view class="data-left">
|
||||
级差收益
|
||||
{{$t('N_I_135')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceIncome| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s" v-if="item.repurRangeIncome && (item.repurRangeIncome*1 > 0)">
|
||||
<view class="data-left">
|
||||
极差收益({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.repurRangeIncome| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1&&item.globalPoints>0">
|
||||
<view class="data-left">
|
||||
{{$t('直推级差')}}
|
||||
{{$t('直推极差')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.globalPoints| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="flex_s" v-if="userInfo.pkCountry == 1">
|
||||
<view class="data-left"> {{ '重复消费' }} </view>
|
||||
<view class="data-right">
|
||||
{{ item.backPoints | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s" v-if="userInfo.pkCountry == 1">
|
||||
<view class="data-left">
|
||||
{{ '平台服务费' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.serviceSpend | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left"> {{ '实发小计' }} </view>
|
||||
<view class="data-right">
|
||||
{{ item.purRealSubtotal | toThousandthAndKeepDecimal }}
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{'查看详情'}}
|
||||
</view>
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_136')}}({{ isLocaled() }})
|
||||
</view>
|
||||
</view> -->
|
||||
<view style="clear: both"></view>
|
||||
<view style="height: 20rpx; background-color: #fff"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.backPoints| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s" v-if="userInfo.pkCountry==1">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_137')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.serviceSpend| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('N_I_138')}}({{ isLocaled() }})
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.purRealSubtotal| toThousandthAndKeepDecimal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="border_s">
|
||||
<view class="button" v-if="checkRule==true" @click="urlTap">
|
||||
{{$t('CK_KS_25')}}
|
||||
</view>
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/login.js'
|
||||
import { setToken } from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
import { isLocaled } from '@/util/numberToCurrency'
|
||||
import * as api from '@/config/login.js'
|
||||
import {
|
||||
setToken
|
||||
} from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
import {
|
||||
isLocaled
|
||||
} from '@/util/numberToCurrency'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
getBonusTypeList: [],
|
||||
index: null,
|
||||
dataList: [],
|
||||
userInfo: [],
|
||||
query: {
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
sourceMemberCode: '',
|
||||
sourceMemberName: '',
|
||||
pkBonusItems: '',
|
||||
},
|
||||
page: {
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
},
|
||||
}
|
||||
},
|
||||
props: ['num', 'checkRule'],
|
||||
onLoad() {},
|
||||
created() {
|
||||
// this.getType()
|
||||
this.userInfo = uni.getStorageSync('User')
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
isLocaled,
|
||||
urlTap() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/bonusSource/index',
|
||||
})
|
||||
},
|
||||
getInfo() {
|
||||
api
|
||||
.getInfo()
|
||||
.then(res => {
|
||||
if (res) {
|
||||
this.userInfo = res.data
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
this.getDataList()
|
||||
},
|
||||
getType() {
|
||||
api
|
||||
.getBonusType()
|
||||
.then(res => {
|
||||
if (res) {
|
||||
this.getBonusTypeList = res.rows
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.index = e.detail.value
|
||||
},
|
||||
bindDateChange(e) {
|
||||
this.query.startDate = e.detail.value
|
||||
},
|
||||
bindDateChange1(e) {
|
||||
this.query.endDate = e.detail.value
|
||||
},
|
||||
getDataList(num) {
|
||||
api
|
||||
.queryBonusFirst(
|
||||
this.query,
|
||||
`?pageNum=${num || 1}&pageSize=${this.page.pageSize}`
|
||||
)
|
||||
.then(res => {
|
||||
if (res) {
|
||||
this.dataList.push(...res.rows)
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {},
|
||||
},
|
||||
}
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
getBonusTypeList: [],
|
||||
index: null,
|
||||
dataList: [],
|
||||
userInfo: [],
|
||||
query: {
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
sourceMemberCode: '',
|
||||
sourceMemberName: '',
|
||||
pkBonusItems: ''
|
||||
},
|
||||
page: {
|
||||
pageNum: 1,
|
||||
pageSize: 50
|
||||
}
|
||||
}
|
||||
},
|
||||
props: ["num", "checkRule"],
|
||||
onLoad() {
|
||||
|
||||
},
|
||||
created() {
|
||||
// this.getType()
|
||||
this.userInfo = uni.getStorageSync('User')
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
isLocaled,
|
||||
urlTap() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/bonusSource/index'
|
||||
})
|
||||
},
|
||||
getInfo() {
|
||||
api.getInfo().then(res => {
|
||||
if (res) {
|
||||
this.userInfo = res.data
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
this.getDataList()
|
||||
},
|
||||
getType() {
|
||||
api.getBonusType().then(res => {
|
||||
if (res) {
|
||||
this.getBonusTypeList = res.rows
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.index = e.detail.value
|
||||
},
|
||||
bindDateChange(e) {
|
||||
this.query.startDate = e.detail.value
|
||||
},
|
||||
bindDateChange1(e) {
|
||||
this.query.endDate = e.detail.value
|
||||
},
|
||||
getDataList(num) {
|
||||
api.queryBonusFirst(this.query, `?pageNum=${num||1}&pageSize=${this.page.pageSize}`).then(res => {
|
||||
if (res) {
|
||||
this.dataList.push(...res.rows)
|
||||
}
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
submit() {
|
||||
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.border_s {
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
.border_s {
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
|
||||
.button {
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #005bac;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.button {
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
|
||||
.type {
|
||||
color: #005bac !important;
|
||||
}
|
||||
.type {
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
|
||||
.flex_s {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
.flex_s {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.data-left {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-left {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.data-right {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-right {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.search-view {
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 16rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin: 0;
|
||||
}
|
||||
.search-view {
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.search-list {
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
.search-list {
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.search-content {
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.search-content {
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
|
||||
.text_s {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.text_s {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.search-icon-s {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
.search-icon-s {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
|
||||
.search-icons {
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #005bac;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
.search-icons {
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
|
||||
.time1 {
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
.time1 {
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
|
||||
.time-text {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.time-text {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.search-bottom {
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.search-bottom {
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.texts {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
.texts {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.select-text {
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
.select-text {
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.selIcon {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
.selIcon {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
|
||||
.text-s {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.text-s {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
.place {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.place {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.border-colors {
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
.border-colors {
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
|
||||
page {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
page {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
.search-icon {
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
|
||||
image {
|
||||
}
|
||||
}
|
||||
image {}
|
||||
}
|
||||
|
||||
.search-bg {
|
||||
}
|
||||
.search-bg {}
|
||||
|
||||
.top {
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
.top {
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
|
||||
.search-tops {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.search-tops {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.search-bg {
|
||||
width: 432rpx;
|
||||
height: 35rpx;
|
||||
background: #f5f6f8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
.search-bg {
|
||||
width: 432rpx;
|
||||
height: 35rpx;
|
||||
background: #F5F6F8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,33 +1,54 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-01 09:38:17
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
<view class="quan"
|
||||
@click.stop="goCart">
|
||||
<img :src="smallCarLength>0?cart:cartEmpty"
|
||||
<img :src="smallCarLength>0?img1:img2"
|
||||
alt="">
|
||||
<view class="qiu"
|
||||
v-show="smallCarLength > 0">{{ smallCarLength }}</view>
|
||||
|
||||
</view>
|
||||
<u-popup
|
||||
:show="downShow"
|
||||
mode="bottom"
|
||||
closeOnClickOverlay
|
||||
closeable
|
||||
round="10"
|
||||
@close="close"
|
||||
>
|
||||
<view class="title">{{ '购物车' }}</view>
|
||||
<cartBtmList ref="cartBtmList" @orderCallBack="orderCallBack"></cartBtmList>
|
||||
<u-popup :show="downShow"
|
||||
mode="bottom"
|
||||
closeOnClickOverlay
|
||||
closeable
|
||||
round="10"
|
||||
@close="close">
|
||||
<view class="title">{{ $t('N_I_194') }}</view>
|
||||
<cartBtmList ref='cartBtmList'></cartBtmList>
|
||||
</u-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters, mapActions } from 'vuex'
|
||||
import { mapGetters } from 'vuex'
|
||||
import cartBtmList from '@/components/cartBtmList.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
cartBtmList,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
downShow: false,
|
||||
img1: require('@/static/images/cartBall1.png'),
|
||||
img2: require('@/static/images/cartBall.png'),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['smallCarLength']),
|
||||
},
|
||||
watch: {
|
||||
carLength(n, o) {
|
||||
this.smallCarLength = n
|
||||
},
|
||||
},
|
||||
props: {
|
||||
carLength: {
|
||||
type: Number | String,
|
||||
|
|
@ -38,30 +59,22 @@ export default {
|
|||
default: 1,
|
||||
},
|
||||
},
|
||||
components: {
|
||||
cartBtmList,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
downShow: false,
|
||||
cart: require('@/static/images/cart-not-empty.png'),
|
||||
cartEmpty: require('@/static/images/cart-empty.png'),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['smallCarLength']),
|
||||
},
|
||||
created() {
|
||||
this.getCar()
|
||||
mounted() {
|
||||
this.$store.dispatch('getCarLength', this.specialArea)
|
||||
// .then((res) => {
|
||||
// this.smallCarLength = res.data.smallCount
|
||||
// })
|
||||
},
|
||||
methods: {
|
||||
close() {
|
||||
this.downShow = false
|
||||
this.getCar()
|
||||
},
|
||||
|
||||
getCar() {
|
||||
this.$store.dispatch('getCarLength', this.specialArea)
|
||||
// .then((res) => {
|
||||
// this.smallCarLength = res.data.smallCount
|
||||
// })
|
||||
},
|
||||
goCart() {
|
||||
this.downShow = true
|
||||
|
|
@ -70,9 +83,6 @@ export default {
|
|||
})
|
||||
// uni.switchTab({ url: '/pages/shoppingCar/index' })
|
||||
},
|
||||
orderCallBack() {
|
||||
this.close()
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
@ -87,8 +97,8 @@ export default {
|
|||
}
|
||||
.quan {
|
||||
position: absolute;
|
||||
right: 84rpx;
|
||||
bottom: 30%;
|
||||
right: 24rpx;
|
||||
bottom: 33%;
|
||||
background: #fff;
|
||||
border-radius: 50%;
|
||||
box-shadow: 0px 2px 20px 0px rgba(204, 204, 204, 1);
|
||||
|
|
@ -120,4 +130,4 @@ export default {
|
|||
::v-deep .u-popup__content {
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-21 15:11:22
|
||||
-->
|
||||
|
|
@ -12,6 +12,13 @@
|
|||
v-for="(item, index) in shopCarList"
|
||||
:key="item.specialArea"
|
||||
>
|
||||
<!-- <view class="kuang_t">
|
||||
{{ item.specialAreaVal }}
|
||||
</view> -->
|
||||
<!-- <u-checkbox-group v-model="item.isSelect"
|
||||
shape="circle"
|
||||
placement="column"
|
||||
@change="checkboxChange($event,item)"> -->
|
||||
<view
|
||||
v-for="(ctem, cndex) in item.shoppingCartList"
|
||||
:key="cndex"
|
||||
|
|
@ -31,7 +38,7 @@
|
|||
{{ ctem.waresPrice | numberToCurrency | isLocal }}
|
||||
</view>
|
||||
<view class="tit3"
|
||||
>业绩: {{ ctem.achieve | numberToCurrency | isLocal }}</view
|
||||
>PV: {{ ctem.achieve | numberToCurrency | isLocal }}</view
|
||||
>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -48,7 +55,7 @@
|
|||
}}{{
|
||||
(stem.waresItemsParamsList.length > 0 &&
|
||||
stem.waresItemsParamsList[0].specsName) ||
|
||||
''
|
||||
""
|
||||
}}</view
|
||||
>
|
||||
<!-- <view class="tit4"></view> -->
|
||||
|
|
@ -56,7 +63,7 @@
|
|||
>x{{
|
||||
(stem.waresItemsParamsList.length > 0 &&
|
||||
stem.waresItemsParamsList[0].quantity) ||
|
||||
''
|
||||
""
|
||||
}}</view
|
||||
>
|
||||
</view>
|
||||
|
|
@ -79,7 +86,7 @@
|
|||
<!-- </u-checkbox-group> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="kong_t" v-show="cartEmpty">
|
||||
<view class="kong_t" v-show="shopCarList.length == 0">
|
||||
<img class="kong" src="@/static/images/kong.png" alt=""
|
||||
/></view>
|
||||
<view class="zhan"></view>
|
||||
|
|
@ -93,7 +100,7 @@
|
|||
<view class="r1">{{
|
||||
totalPrice | numberToCurrency | isLocal
|
||||
}}</view>
|
||||
<view class="l1">业绩:{{ totalAchive | numberToCurrency }}</view>
|
||||
<view class="l1">PV:{{ totalAchive | numberToCurrency }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -103,11 +110,11 @@
|
|||
class="uBtn"
|
||||
shape="circle"
|
||||
:loading="isLoading"
|
||||
:loadingText="'购买中'"
|
||||
:loadingText="$t('w_0313')"
|
||||
@tap="goBuy"
|
||||
:disabled="submitDisabled"
|
||||
color="#005BAC"
|
||||
>{{ '去结算' }}
|
||||
:disabled="shopCarList.length == 0"
|
||||
color="#FB3024"
|
||||
>{{ $t("w_0312") }}
|
||||
</u-button>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -129,7 +136,7 @@
|
|||
<view class="popList_i" v-for="item in tableData" :key="item.pkId">
|
||||
<u-checkbox :name="item.pkId"> </u-checkbox>
|
||||
<view class="popList_ii">
|
||||
<img :src="item.cover || item.cover1" alt="" />
|
||||
<img :src="item.cover1" alt="" />
|
||||
<view>
|
||||
<view>{{ item.waresName }}</view>
|
||||
<view>{{ item.waresCode }}</view>
|
||||
|
|
@ -151,12 +158,10 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/goods'
|
||||
import { canOrder } from '@/config/order'
|
||||
import * as api from "@/config/goods";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
newShareMember: false,
|
||||
isSelectAll: [],
|
||||
shopCarList: [],
|
||||
isLoading: false,
|
||||
|
|
@ -172,34 +177,20 @@ export default {
|
|||
dialogVisible2: false,
|
||||
selTable: [],
|
||||
allTable: [],
|
||||
total: '0.00',
|
||||
total: "0.00",
|
||||
// show:false,
|
||||
// title:'提示',
|
||||
// title:this.$t('w_0034'),
|
||||
// content:'确认删除该商品?'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
submitDisabled() {
|
||||
if (this.goodsCheck[0]?.orderItemsParams) {
|
||||
return this.goodsCheck[0]?.orderItemsParams?.length === 0
|
||||
}
|
||||
return true
|
||||
},
|
||||
cartEmpty() {
|
||||
return (
|
||||
this.shopCarList.length === 0 ||
|
||||
this.shopCarList[0]?.shoppingCartList?.length === 0
|
||||
)
|
||||
},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
selTable: {
|
||||
handler(n, o) {
|
||||
let total = 0
|
||||
n.forEach(item => {
|
||||
total += Number(item.waresPrice) * item.quantity
|
||||
})
|
||||
this.total = total
|
||||
let total = 0;
|
||||
n.forEach((item) => {
|
||||
total += Number(item.waresPrice) * item.quantity;
|
||||
});
|
||||
this.total = total;
|
||||
},
|
||||
deep: true,
|
||||
},
|
||||
|
|
@ -214,8 +205,6 @@ export default {
|
|||
// this.getCarList()
|
||||
},
|
||||
onShow() {
|
||||
this.newShareMember = uni.getStorageSync('User')?.loginType !== 0
|
||||
console.log('this.nerShareMember', this.newShareMember)
|
||||
// this.getCarList()
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -224,181 +213,198 @@ export default {
|
|||
let a = {
|
||||
specialArea: this.goodsCheck[0].specialArea,
|
||||
orderItemsParams: [],
|
||||
}
|
||||
a.orderItemsParams = this.selTable.map(item => {
|
||||
};
|
||||
a.orderItemsParams = this.selTable.map((item) => {
|
||||
return {
|
||||
waresCode: item.waresCode,
|
||||
quantity: item.quantity,
|
||||
waresItemsParamList: item.productGroup,
|
||||
energySilo: 1,
|
||||
}
|
||||
})
|
||||
a.orderItemsParams.forEach(item => {
|
||||
item.waresItemsParamList = item.waresItemsParamList.map(ctem => {
|
||||
};
|
||||
});
|
||||
a.orderItemsParams.forEach((item) => {
|
||||
item.waresItemsParamList = item.waresItemsParamList.map((ctem) => {
|
||||
return {
|
||||
pkWaresSpecsSku: ctem.pkSkuId,
|
||||
quantity: ctem.quantity,
|
||||
}
|
||||
})
|
||||
})
|
||||
api.energyShopSilo(a).then(res => {
|
||||
};
|
||||
});
|
||||
});
|
||||
api.energyShopSilo(a).then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.dialogVisible2 = false
|
||||
let shoppArr = this.goodsCheck[0].orderItemsParams.map(item => {
|
||||
return item.shoppingId
|
||||
})
|
||||
this.dialogVisible2 = false;
|
||||
let shoppArr = this.goodsCheck[0].orderItemsParams.map((item) => {
|
||||
return item.shoppingId;
|
||||
});
|
||||
if (this.goodsCheck[0].specialArea == 1) {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/regiest/index?specialArea=' +
|
||||
"/pages/regiest/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr) +
|
||||
'&selTable=' +
|
||||
"&selTable=" +
|
||||
JSON.stringify(this.selTable),
|
||||
})
|
||||
});
|
||||
} else if (this.goodsCheck[0].specialArea == 2) {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/other/index?specialArea=' +
|
||||
"/pages/other/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr) +
|
||||
'&selTable=' +
|
||||
"&selTable=" +
|
||||
JSON.stringify(this.selTable),
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: '请选择赠品',
|
||||
icon: 'none',
|
||||
})
|
||||
title: "请选择赠品",
|
||||
icon: "none",
|
||||
});
|
||||
}
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
let arr = []
|
||||
this.tableData.forEach(item => {
|
||||
val.forEach(ctem => {
|
||||
let arr = [];
|
||||
this.tableData.forEach((item) => {
|
||||
val.forEach((ctem) => {
|
||||
if (item.pkId == ctem) {
|
||||
arr.push(item)
|
||||
arr.push(item);
|
||||
}
|
||||
})
|
||||
})
|
||||
this.selTable = arr
|
||||
});
|
||||
});
|
||||
this.selTable = arr;
|
||||
},
|
||||
selectAll(e) {
|
||||
let i = 0
|
||||
let i = 0;
|
||||
// isSelected
|
||||
if (e.length > 0) {
|
||||
this.shopCarList.forEach(item => {
|
||||
item.isSelected = true
|
||||
item.shoppingCartList.forEach(ctem => {
|
||||
ctem.isSelected = true
|
||||
item.isSelect.push(ctem.shoppingId)
|
||||
})
|
||||
})
|
||||
this.shopCarList.forEach(item => {
|
||||
this.shopCarList.forEach((item) => {
|
||||
item.isSelected = true;
|
||||
item.shoppingCartList.forEach((ctem) => {
|
||||
ctem.isSelected = true;
|
||||
item.isSelect.push(ctem.shoppingId);
|
||||
});
|
||||
});
|
||||
this.shopCarList.forEach((item) => {
|
||||
if (item.isSelected) {
|
||||
i++
|
||||
i++;
|
||||
}
|
||||
})
|
||||
this.isTo = i
|
||||
});
|
||||
this.isTo = i;
|
||||
// this.checkArea()
|
||||
} else {
|
||||
this.shopCarList.forEach(item => {
|
||||
item.isSelected = false
|
||||
item.shoppingCartList.forEach(ctem => {
|
||||
ctem.isSelected = false
|
||||
item.isSelect = []
|
||||
})
|
||||
})
|
||||
this.shopCarList.forEach(item => {
|
||||
this.shopCarList.forEach((item) => {
|
||||
item.isSelected = false;
|
||||
item.shoppingCartList.forEach((ctem) => {
|
||||
ctem.isSelected = false;
|
||||
item.isSelect = [];
|
||||
});
|
||||
});
|
||||
this.shopCarList.forEach((item) => {
|
||||
if (item.isSelected) {
|
||||
i++
|
||||
i++;
|
||||
}
|
||||
})
|
||||
this.isTo = i
|
||||
});
|
||||
this.isTo = i;
|
||||
// this.checkArea()
|
||||
}
|
||||
},
|
||||
delAll() {
|
||||
let arr = []
|
||||
this.shopCarList.forEach(item => {
|
||||
item.isSelect.forEach(ctem => {
|
||||
let arr = [];
|
||||
this.shopCarList.forEach((item) => {
|
||||
item.isSelect.forEach((ctem) => {
|
||||
arr.push({
|
||||
shoppingId: ctem,
|
||||
})
|
||||
})
|
||||
})
|
||||
api.batchDelShopping({ deleteList: arr }).then(res => {
|
||||
this.getCarList()
|
||||
});
|
||||
});
|
||||
});
|
||||
api.batchDelShopping({ deleteList: arr }).then((res) => {
|
||||
this.getCarList();
|
||||
// this.getShoppingCount()
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'none',
|
||||
title: this.$t("w_0089"),
|
||||
icon: "none",
|
||||
duration: 1500,
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
},
|
||||
canOrder(shoppingArr) {
|
||||
return new Promise((resolve, reject) => {
|
||||
canOrder({
|
||||
shoppingIds: shoppingArr,
|
||||
specialArea: this.specialArea,
|
||||
}).then(res => {
|
||||
if (res.code == 200 && res.data?.flag === 0) {
|
||||
resolve(true)
|
||||
} else {
|
||||
reject(res.data?.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
async goBuy() {
|
||||
let shoppArr = this.goodsCheck[0].orderItemsParams.map(item => {
|
||||
return item.shoppingId
|
||||
})
|
||||
try {
|
||||
await this.canOrder(shoppArr)
|
||||
} catch (msg) {
|
||||
uni.showToast({
|
||||
title: msg,
|
||||
icon: 'none',
|
||||
})
|
||||
return
|
||||
}
|
||||
uni.setStorageSync('allGoods', JSON.stringify(shoppArr))
|
||||
goBuy() {
|
||||
let shoppArr = this.goodsCheck[0].orderItemsParams.map((item) => {
|
||||
return item.shoppingId;
|
||||
});
|
||||
uni.setStorageSync("allGoods", JSON.stringify(shoppArr));
|
||||
if (
|
||||
this.goodsCheck[0].specialArea == 1 ||
|
||||
this.goodsCheck[0].specialArea == 24
|
||||
) {
|
||||
let deleteList = []
|
||||
shoppArr.forEach(item => {
|
||||
// let deleteList = []
|
||||
// shoppArr.forEach((item) => {
|
||||
// deleteList.push({
|
||||
// shoppingId: item,
|
||||
// })
|
||||
// })
|
||||
// api
|
||||
// .validShop({
|
||||
// specialArea: this.goodsCheck[0].specialArea,
|
||||
// deleteList: deleteList,
|
||||
// })
|
||||
// .then((res) => {
|
||||
// if (res.code == 200) {
|
||||
// uni.navigateTo({
|
||||
// url:
|
||||
// '/pages/regiest/index?specialArea=' +
|
||||
// this.goodsCheck[0].specialArea +
|
||||
// '&shoppArr=' +
|
||||
// JSON.stringify(shoppArr),
|
||||
// })
|
||||
// } else {
|
||||
// uni.showToast({
|
||||
// title: res.msg,
|
||||
// icon: 'none',
|
||||
// mask: true,
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
let deleteList = [];
|
||||
shoppArr.forEach((item) => {
|
||||
deleteList.push({
|
||||
shoppingId: item,
|
||||
});
|
||||
});
|
||||
api
|
||||
.validShop({
|
||||
specialArea: this.goodsCheck[0].specialArea,
|
||||
deleteList: deleteList,
|
||||
})
|
||||
})
|
||||
// sangelxiu1
|
||||
this.newShareMember = uni.getStorageSync('User')?.loginType !== 0
|
||||
if(this.newShareMember){
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/regiest/shareRegister?specialArea=' +
|
||||
41 +
|
||||
'&shoppArr=' +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/regiest/index?specialArea=' +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
}
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
api
|
||||
.energyShop({
|
||||
specialArea: this.goodsCheck[0].specialArea,
|
||||
deleteList: deleteList,
|
||||
})
|
||||
.then((response) => {
|
||||
if (response.data && response.data.length > 0) {
|
||||
this.tableData = response.data;
|
||||
this.tableData.forEach((item) => {
|
||||
this.$set(item, "quantity", 1);
|
||||
});
|
||||
this.dialogVisible2 = true;
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
"/pages/regiest/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr),
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} else if (this.goodsCheck[0].specialArea == 21) {
|
||||
if (
|
||||
this.userInfo.registerShare == 0 ||
|
||||
|
|
@ -406,92 +412,144 @@ export default {
|
|||
) {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/shareArea/haiShare?allData=' +
|
||||
"/pages/shareArea/haiShare?allData=" +
|
||||
JSON.stringify(this.goodsCheck[0].orderItemsParams),
|
||||
})
|
||||
});
|
||||
} else {
|
||||
uni.setStorageSync(
|
||||
'haiConfirm',
|
||||
"haiConfirm",
|
||||
JSON.stringify(this.goodsCheck[0].orderItemsParams)
|
||||
)
|
||||
);
|
||||
uni.navigateTo({
|
||||
url: '/pages/other/haiConfirm?shoppArr=' + JSON.stringify(shoppArr),
|
||||
})
|
||||
url: "/pages/other/haiConfirm?shoppArr=" + JSON.stringify(shoppArr),
|
||||
});
|
||||
}
|
||||
} else if (this.goodsCheck[0].specialArea == 7) {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/hiFans/index?specialArea=' +
|
||||
"/pages/hiFans/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
});
|
||||
} else {
|
||||
if (this.goodsCheck[0].specialArea == 2) {
|
||||
let deleteList = []
|
||||
shoppArr.forEach(item => {
|
||||
// let deleteList = []
|
||||
// shoppArr.forEach((item) => {
|
||||
// deleteList.push({
|
||||
// shoppingId: item,
|
||||
// })
|
||||
// })
|
||||
// api
|
||||
// .validShop({
|
||||
// specialArea: this.goodsCheck[0].specialArea,
|
||||
// deleteList: deleteList,
|
||||
// })
|
||||
// .then((res) => {
|
||||
// if (res.code == 200) {
|
||||
// uni.navigateTo({
|
||||
// url:
|
||||
// '/pages/other/index?specialArea=' +
|
||||
// this.goodsCheck[0].specialArea +
|
||||
// '&shoppArr=' +
|
||||
// JSON.stringify(shoppArr),
|
||||
// })
|
||||
// } else {
|
||||
// uni.showToast({
|
||||
// title: res.msg,
|
||||
// icon: 'none',
|
||||
// mask: true,
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
let deleteList = [];
|
||||
shoppArr.forEach((item) => {
|
||||
deleteList.push({
|
||||
shoppingId: item,
|
||||
});
|
||||
});
|
||||
api
|
||||
.validShop({
|
||||
specialArea: this.goodsCheck[0].specialArea,
|
||||
deleteList: deleteList,
|
||||
})
|
||||
})
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/other/index?specialArea=' +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
api
|
||||
.energyShop({
|
||||
specialArea: this.goodsCheck[0].specialArea,
|
||||
deleteList: deleteList,
|
||||
})
|
||||
.then((response) => {
|
||||
if (response.data && response.data.length > 0) {
|
||||
this.tableData = response.data;
|
||||
this.tableData.forEach((item) => {
|
||||
this.$set(item, "quantity", 1);
|
||||
});
|
||||
this.dialogVisible2 = true;
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
"/pages/other/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr),
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} else if (this.goodsCheck[0].specialArea == 30) {
|
||||
if (this.goodsCheck[0].orderItemsParams.length > 1) {
|
||||
uni.showToast({
|
||||
title: '续约专区每次只能购买一件商品',
|
||||
icon: 'none',
|
||||
})
|
||||
return false
|
||||
title: "续约专区每次只能购买一件商品",
|
||||
icon: "none",
|
||||
});
|
||||
return false;
|
||||
} else {
|
||||
let num = this.goodsCheck[0].orderItemsParams.some(
|
||||
item => item.quantity > 1
|
||||
)
|
||||
(item) => item.quantity > 1
|
||||
);
|
||||
if (num) {
|
||||
uni.showToast({
|
||||
title: '续约专区每次只能购买一件商品',
|
||||
icon: 'none',
|
||||
})
|
||||
return false
|
||||
title: "续约专区每次只能购买一件商品",
|
||||
icon: "none",
|
||||
});
|
||||
return false;
|
||||
} else {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/other/index?specialArea=' +
|
||||
"/pages/other/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
} else if (this.goodsCheck[0].specialArea == 31) {
|
||||
} else if(this.goodsCheck[0].specialArea == 31){
|
||||
if (this.totalPrice < 1000) {
|
||||
uni.showToast({
|
||||
title: '购买商品总价格不能低于1000元',
|
||||
icon: 'none',
|
||||
title: "购买商品总价格不能低于1000元",
|
||||
icon: "none",
|
||||
duration: 1500,
|
||||
})
|
||||
} else {
|
||||
});
|
||||
}else{
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/other/index?specialArea=' +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
url:
|
||||
"/pages/other/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr),
|
||||
});
|
||||
}
|
||||
} else {
|
||||
}else {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/other/index?specialArea=' +
|
||||
"/pages/other/index?specialArea=" +
|
||||
this.goodsCheck[0].specialArea +
|
||||
'&shoppArr=' +
|
||||
"&shoppArr=" +
|
||||
JSON.stringify(shoppArr),
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -503,61 +561,97 @@ export default {
|
|||
number: e.value,
|
||||
specialArea: item.specialArea,
|
||||
})
|
||||
.then(res => {
|
||||
.then((res) => {
|
||||
if (res.code == 200) {
|
||||
this.dealData()
|
||||
this.dealData();
|
||||
} else {
|
||||
this.getCarList()
|
||||
this.getCarList();
|
||||
}
|
||||
|
||||
// this.getShoppingCount()
|
||||
})
|
||||
});
|
||||
},
|
||||
// checkArea() {
|
||||
// let arr = []
|
||||
// this.shopCarList.forEach((item) => {
|
||||
// item.shoppingCartList.forEach((ctem) => {
|
||||
// if (item.isSelect.indexOf(ctem.shoppingId) > -1) {
|
||||
// arr.push({
|
||||
// specialArea: item.specialArea,
|
||||
// orderItemsParams: [
|
||||
// {
|
||||
// waresCode: ctem.waresCode,
|
||||
// shoppingId: ctem.shoppingId,
|
||||
// waresName: ctem.waresName,
|
||||
// achieve: ctem.achieve,
|
||||
// waresPrice: ctem.waresPrice,
|
||||
// cover1: ctem.cover1,
|
||||
// quantity: ctem.number,
|
||||
// waresItemsParamList: ctem.waresItemsParamList,
|
||||
// waresSkuList: ctem.waresSkuList || [],
|
||||
// source: ctem.source || '',
|
||||
// },
|
||||
// ],
|
||||
// })
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
// const arrayHashmap = arr.reduce((obj, item) => {
|
||||
// obj[item.specialArea]
|
||||
// ? obj[item.specialArea].orderItemsParams.push(
|
||||
// ...item.orderItemsParams
|
||||
// )
|
||||
// : (obj[item.specialArea] = item)
|
||||
// return obj
|
||||
// }, {})
|
||||
// this.goodsCheck = Object.values(arrayHashmap)
|
||||
// this.checkPrice()
|
||||
// },
|
||||
// 计算价格
|
||||
checkPrice() {
|
||||
let totalPrice = 0
|
||||
let totalAchive = 0
|
||||
let num = 0
|
||||
this.goodsCheck.forEach(item => {
|
||||
item.orderItemsParams.forEach(ctem => {
|
||||
totalPrice += parseFloat(ctem.waresPrice * ctem.quantity)
|
||||
totalAchive += parseFloat(ctem.achieve * ctem.quantity)
|
||||
num += ctem.quantity
|
||||
})
|
||||
})
|
||||
let totalPrice = 0;
|
||||
let totalAchive = 0;
|
||||
let num = 0;
|
||||
this.goodsCheck.forEach((item) => {
|
||||
item.orderItemsParams.forEach((ctem) => {
|
||||
totalPrice += parseFloat(ctem.waresPrice * ctem.quantity);
|
||||
totalAchive += parseFloat(ctem.achieve * ctem.quantity);
|
||||
num += ctem.quantity;
|
||||
});
|
||||
});
|
||||
// if (this.goodsCheck.length != 1) {
|
||||
this.totalPrice = totalPrice.toFixed(2)
|
||||
this.totalAchive = totalAchive.toFixed(2)
|
||||
this.num = num
|
||||
this.totalPrice = totalPrice.toFixed(2);
|
||||
this.totalAchive = totalAchive.toFixed(2);
|
||||
this.num = num;
|
||||
// }
|
||||
},
|
||||
checkboxChange(e, item) {
|
||||
if (e.length > 0) {
|
||||
this.$set(item, 'isSelected', true)
|
||||
this.$set(item, 'isSelect', e)
|
||||
this.$set(item, "isSelected", true);
|
||||
this.$set(item, "isSelect", e);
|
||||
// this.checkArea()
|
||||
} else {
|
||||
this.$set(item, 'isSelected', false)
|
||||
this.$set(item, 'isSelect', e)
|
||||
this.$set(item, "isSelected", false);
|
||||
this.$set(item, "isSelect", e);
|
||||
// this.checkArea()
|
||||
}
|
||||
let i = 0
|
||||
this.shopCarList.forEach(item => {
|
||||
let i = 0;
|
||||
this.shopCarList.forEach((item) => {
|
||||
if (item.isSelected) {
|
||||
i++
|
||||
i++;
|
||||
}
|
||||
})
|
||||
this.isTo = i
|
||||
let blin = true
|
||||
this.shopCarList.forEach(item => {
|
||||
});
|
||||
this.isTo = i;
|
||||
let blin = true;
|
||||
this.shopCarList.forEach((item) => {
|
||||
if (item.isSelect.length != item.shoppingCartList.length) {
|
||||
blin = false
|
||||
blin = false;
|
||||
}
|
||||
})
|
||||
});
|
||||
if (blin) {
|
||||
this.isSelectAll = [1]
|
||||
this.isSelectAll = [1];
|
||||
} else {
|
||||
this.isSelectAll = []
|
||||
this.isSelectAll = [];
|
||||
}
|
||||
},
|
||||
// 单删
|
||||
|
|
@ -566,29 +660,29 @@ export default {
|
|||
{
|
||||
shoppingId: ctem.shoppingId,
|
||||
},
|
||||
]
|
||||
api.batchDelShopping({ deleteList: deleteList }).then(res => {
|
||||
this.getCarList()
|
||||
];
|
||||
api.batchDelShopping({ deleteList: deleteList }).then((res) => {
|
||||
this.getCarList();
|
||||
// this.getShoppingCount()
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'none',
|
||||
title: this.$t("w_0089"),
|
||||
icon: "none",
|
||||
duration: 1500,
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
},
|
||||
getCarList(specialArea) {
|
||||
if (specialArea) {
|
||||
this.specialArea = specialArea
|
||||
this.userInfo = uni.getStorageSync('User')
|
||||
this.specialArea = specialArea;
|
||||
this.userInfo = uni.getStorageSync("User");
|
||||
if (this.specialArea == 1) {
|
||||
if (uni.getStorageSync('pkCountry')) {
|
||||
this.pkCountry = uni.getStorageSync('pkCountry')
|
||||
if (uni.getStorageSync("pkCountry")) {
|
||||
this.pkCountry = uni.getStorageSync("pkCountry");
|
||||
} else {
|
||||
this.pkCountry = this.userInfo.pkSettleCountry
|
||||
this.pkCountry = this.userInfo.pkSettleCountry;
|
||||
}
|
||||
} else {
|
||||
this.pkCountry = this.userInfo.pkSettleCountry
|
||||
this.pkCountry = this.userInfo.pkSettleCountry;
|
||||
}
|
||||
}
|
||||
api
|
||||
|
|
@ -596,35 +690,35 @@ export default {
|
|||
specialArea: this.specialArea,
|
||||
pkCountry: this.pkCountry,
|
||||
})
|
||||
.then(res => {
|
||||
res.data.forEach(item => {
|
||||
item.isSelected = false
|
||||
item.isSelect = []
|
||||
item.shoppingCartList.forEach(ctem => {
|
||||
ctem.isSelected = false
|
||||
ctem.waresItemsParamList = []
|
||||
.then((res) => {
|
||||
res.data.forEach((item) => {
|
||||
item.isSelected = false;
|
||||
item.isSelect = [];
|
||||
item.shoppingCartList.forEach((ctem) => {
|
||||
ctem.isSelected = false;
|
||||
ctem.waresItemsParamList = [];
|
||||
if (item.specialArea != 21) {
|
||||
ctem.productParams.forEach(stem => {
|
||||
ctem.productParams.forEach((stem) => {
|
||||
if (stem.waresItemsParamsList.length > 0) {
|
||||
stem.waresItemsParamsList[0].pkWaresSpecsSku =
|
||||
stem.waresItemsParamsList[0].pkSkuId
|
||||
stem.waresItemsParamsList[0].productName = stem.productName
|
||||
ctem.waresItemsParamList.push(stem.waresItemsParamsList[0])
|
||||
stem.waresItemsParamsList[0].pkSkuId;
|
||||
stem.waresItemsParamsList[0].productName = stem.productName;
|
||||
ctem.waresItemsParamList.push(stem.waresItemsParamsList[0]);
|
||||
}
|
||||
})
|
||||
});
|
||||
} else {
|
||||
}
|
||||
})
|
||||
})
|
||||
this.shopCarList = res.data
|
||||
this.goPay()
|
||||
this.dealData()
|
||||
})
|
||||
});
|
||||
});
|
||||
this.shopCarList = res.data;
|
||||
this.goPay();
|
||||
this.dealData();
|
||||
});
|
||||
},
|
||||
goPay() {
|
||||
let arr = []
|
||||
this.shopCarList.forEach(item => {
|
||||
item.shoppingCartList.forEach(ctem => {
|
||||
let arr = [];
|
||||
this.shopCarList.forEach((item) => {
|
||||
item.shoppingCartList.forEach((ctem) => {
|
||||
arr.push({
|
||||
specialArea: item.specialArea,
|
||||
orderItemsParams: [
|
||||
|
|
@ -641,18 +735,19 @@ export default {
|
|||
waresSkuList: ctem.waresSkuList || [],
|
||||
},
|
||||
],
|
||||
})
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
const arrayHashmap = arr.reduce((obj, item) => {
|
||||
obj[item.specialArea]
|
||||
? obj[item.specialArea].orderItemsParams.push(
|
||||
...item.orderItemsParams
|
||||
)
|
||||
: (obj[item.specialArea] = item)
|
||||
return obj
|
||||
}, {})
|
||||
this.goodsCheck = Object.values(arrayHashmap)
|
||||
: (obj[item.specialArea] = item);
|
||||
return obj;
|
||||
}, {});
|
||||
this.goodsCheck = Object.values(arrayHashmap);
|
||||
|
||||
},
|
||||
// 处理数据
|
||||
dealData() {
|
||||
|
|
@ -661,8 +756,8 @@ export default {
|
|||
specialArea: this.shopCarList[0].specialArea,
|
||||
orderItemsParams: [],
|
||||
},
|
||||
]
|
||||
this.shopCarList[0].shoppingCartList.forEach(ctem => {
|
||||
];
|
||||
this.shopCarList[0].shoppingCartList.forEach((ctem) => {
|
||||
arr[0].orderItemsParams.push({
|
||||
waresCode: ctem.waresCode,
|
||||
waresName: ctem.waresName,
|
||||
|
|
@ -674,13 +769,13 @@ export default {
|
|||
quantity: ctem.number,
|
||||
waresItemsParamList: ctem.waresItemsParamList,
|
||||
waresSkuList: ctem.waresSkuList || [],
|
||||
})
|
||||
})
|
||||
this.goodsCheck = arr
|
||||
this.checkPrice()
|
||||
});
|
||||
});
|
||||
this.goodsCheck = arr;
|
||||
this.checkPrice();
|
||||
},
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
@ -783,7 +878,7 @@ export default {
|
|||
font-size: 36rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #f82c1a;
|
||||
color: #fb3024;
|
||||
}
|
||||
|
||||
.tit3 {
|
||||
|
|
@ -834,7 +929,7 @@ export default {
|
|||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
line-height: 28rpx;
|
||||
background: #005bac;
|
||||
background: #fb3024;
|
||||
box-shadow: 0rpx 3rpx 7rpx 0rpx rgba(0, 0, 0, 0.25);
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
|
|
@ -866,9 +961,7 @@ export default {
|
|||
|
||||
.h1 {
|
||||
font-size: 10px;
|
||||
font-family:
|
||||
PingFang SC-Medium,
|
||||
PingFang SC;
|
||||
font-family: PingFang SC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
margin-right: 20rpx;
|
||||
|
|
@ -878,7 +971,7 @@ export default {
|
|||
font-size: 36rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #f82c1a;
|
||||
color: #fb3024;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
|
||||
|
|
@ -899,7 +992,7 @@ export default {
|
|||
}
|
||||
|
||||
.deldel {
|
||||
color: #005bac;
|
||||
color: #fb3024;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,159 +1,121 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-21 15:11:22
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
<u-tabbar
|
||||
v-if="systemSkin === 0"
|
||||
:value="current ? current : 0"
|
||||
@change="tabbarChange"
|
||||
:fixed="true"
|
||||
:placeholder="false"
|
||||
:border="false"
|
||||
:safeAreaInsetBottom="true"
|
||||
inactiveColor="#666666"
|
||||
activeColor="#333333"
|
||||
>
|
||||
<u-tabbar-item :text="'首页'">
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/one1.png"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/one2.png"
|
||||
></image>
|
||||
<u-tabbar :value="current?current:0"
|
||||
v-if="user.skin==0"
|
||||
@change="tabbarChange"
|
||||
:fixed="true"
|
||||
:placeholder="false"
|
||||
:border="false"
|
||||
:safeAreaInsetBottom="true"
|
||||
inactiveColor="#666666"
|
||||
activeColor="#333333">
|
||||
<u-tabbar-item :text="$t('ENU_MENU_10')">
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/one1.png"></image>
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/one2.png"></image>
|
||||
</u-tabbar-item>
|
||||
<u-tabbar-item :text="'会员专区'">
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/five1.jpg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/five2.jpg"
|
||||
></image>
|
||||
<u-tabbar-item :text="$t('ENU_APPROVE_B_522')">
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/two1.png"></image>
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/two2.png"></image>
|
||||
</u-tabbar-item>
|
||||
<u-tabbar-item :text="'个人推广'">
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/share-act.svg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/share.svg"
|
||||
></image>
|
||||
<u-tabbar-item :text="$t('ENU_MENU_30')">
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/five1.jpg"></image>
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/five2.jpg"></image>
|
||||
</u-tabbar-item>
|
||||
|
||||
<u-tabbar-item :text="'购物车'" :badge="shopCarLength">
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/three1.png"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/three2.png"
|
||||
></image>
|
||||
<u-tabbar-item :text="$t('N_I_194')"
|
||||
:badge="shopCarLength">
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/three1.png"></image>
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/three2.png"></image>
|
||||
</u-tabbar-item>
|
||||
|
||||
<u-tabbar-item :text="'我的'">
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/fore1.png"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/fore2.png"
|
||||
></image>
|
||||
|
||||
<u-tabbar-item :text="$t('w_0350')">
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="active-icon"
|
||||
src="@/static/images/fore1.png"></image>
|
||||
<image class="u-page__item__slot-icon"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/fore2.png"></image>
|
||||
</u-tabbar-item>
|
||||
</u-tabbar>
|
||||
<u-tabbar
|
||||
:value="current ? current : 0"
|
||||
class="greenEd"
|
||||
v-if="systemSkin === 2"
|
||||
@change="tabbarChange"
|
||||
:fixed="true"
|
||||
:placeholder="false"
|
||||
:border="false"
|
||||
:safeAreaInsetBottom="true"
|
||||
inactiveColor="#666666"
|
||||
activeColor="#333333"
|
||||
>
|
||||
<u-tabbar-item :text="'首页'">
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/one11.jpg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/one11.jpg"
|
||||
></image>
|
||||
<u-tabbar :value="current?current:0"
|
||||
class="greenEd"
|
||||
v-if="user.skin==2"
|
||||
@change="tabbarChange"
|
||||
:fixed="true"
|
||||
:placeholder="false"
|
||||
:border="false"
|
||||
:safeAreaInsetBottom="true"
|
||||
inactiveColor="#666666"
|
||||
activeColor="#333333">
|
||||
<u-tabbar-item :text="$t('ENU_MENU_10')">
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/one11.jpg"></image>
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/one11.jpg"></image>
|
||||
</u-tabbar-item>
|
||||
<u-tabbar-item :text="'会员专区'">
|
||||
<image
|
||||
class="u-page__item__slot-icon2"
|
||||
slot="active-icon"
|
||||
src="@/static/images/five11.jpg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon2"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/five11.jpg"
|
||||
></image>
|
||||
<u-tabbar-item :text="$t('ENU_APPROVE_B_522')">
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/two11.jpg"></image>
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/two11.jpg"></image>
|
||||
</u-tabbar-item>
|
||||
<u-tabbar-item :text="'个人推广'">
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/share-act.svg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/share.svg"
|
||||
></image>
|
||||
<u-tabbar-item :text="$t('ENU_MENU_30')">
|
||||
<image class="u-page__item__slot-icon2"
|
||||
slot="active-icon"
|
||||
src="@/static/images/five11.jpg"></image>
|
||||
<image class="u-page__item__slot-icon2"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/five11.jpg"></image>
|
||||
</u-tabbar-item>
|
||||
|
||||
<u-tabbar-item :text="'购物车'" :badge="shopCarLength">
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/three11.jpg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/three11.jpg"
|
||||
></image>
|
||||
<u-tabbar-item :text="$t('N_I_194')"
|
||||
:badge="shopCarLength">
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/three11.jpg"></image>
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/three11.jpg"></image>
|
||||
</u-tabbar-item>
|
||||
|
||||
<u-tabbar-item :text="'我的'">
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/fore11.jpg"
|
||||
></image>
|
||||
<image
|
||||
class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/fore11.jpg"
|
||||
></image>
|
||||
|
||||
<u-tabbar-item :text="$t('w_0350')">
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="active-icon"
|
||||
src="@/static/images/fore11.jpg"></image>
|
||||
<image class="u-page__item__slot-icon1"
|
||||
slot="inactive-icon"
|
||||
src="@/static/images/fore11.jpg"></image>
|
||||
</u-tabbar-item>
|
||||
</u-tabbar>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import { mapGetters } from "vuex";
|
||||
export default {
|
||||
props: {
|
||||
current: Number,
|
||||
|
|
@ -162,35 +124,31 @@ export default {
|
|||
return {
|
||||
list: [
|
||||
{
|
||||
text: '首页',
|
||||
text: this.$t('ENU_MENU_10'),
|
||||
path: 'pages/index/index',
|
||||
},
|
||||
{
|
||||
text: '会员专区',
|
||||
text: this.$t('ENU_APPROVE_B_522'),
|
||||
path: 'pages/email/index',
|
||||
},
|
||||
{
|
||||
text: this.$t('ENU_MENU_30'),
|
||||
path: 'pages/specialArea/index',
|
||||
},
|
||||
{
|
||||
text: '个人推广',
|
||||
path: 'pages/mine/share/index',
|
||||
},
|
||||
|
||||
{
|
||||
text: '购物车',
|
||||
text: this.$t('N_I_194'),
|
||||
path: 'pages/shoppingCar/index',
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
text: '我的',
|
||||
text: this.$t('w_0350'),
|
||||
path: 'pages/mine/index',
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['shopCarLength', 'user']),
|
||||
systemSkin() {
|
||||
return this.user?.skin || 0
|
||||
},
|
||||
...mapGetters(['shopCarLength','user']),
|
||||
},
|
||||
methods: {
|
||||
tabbarChange(e) {
|
||||
|
|
@ -207,59 +165,25 @@ export default {
|
|||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.u-page__item__slot-icon1 {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
// margin-bottom: 20px
|
||||
}
|
||||
|
||||
.u-page__item__slot-icon2 {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
// margin-bottom: 20px
|
||||
}
|
||||
|
||||
.greenEd {
|
||||
::v-deep .u-tabbar__content {
|
||||
background: linear-gradient(to bottom, #fff, #b6fdda);
|
||||
.greenEd{
|
||||
::v-deep .u-tabbar__content{
|
||||
background: linear-gradient(to bottom, #fff, #b6fdda);
|
||||
}
|
||||
|
||||
::v-deep .u-tabbar__content__item-wrapper {
|
||||
height: 80px;
|
||||
::v-deep .u-tabbar__content__item-wrapper{
|
||||
height: 80px
|
||||
}
|
||||
|
||||
::v-deep .u-tabbar-item {
|
||||
::v-deep .u-tabbar-item{
|
||||
// margin-bottom: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
/* iPhone安全区域适配 */
|
||||
|
||||
/* 绿色主题的安全区域适配 */
|
||||
.greenEd {
|
||||
::v-deep .u-tabbar__content {
|
||||
background: linear-gradient(to bottom, #fff, #b6fdda);
|
||||
|
||||
/* 绿色主题的安全区域背景 */
|
||||
&::after {
|
||||
background: #b6fdda;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 针对不同屏幕尺寸的优化 */
|
||||
@media screen and (max-height: 667px) {
|
||||
/* iPhone SE等小屏设备 */
|
||||
::v-deep .u-tabbar__content__item-wrapper {
|
||||
height: 70px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-height: 812px) {
|
||||
/* iPhone X及以上机型 */
|
||||
::v-deep .u-tabbar__content__item-wrapper {
|
||||
height: 80px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -94,7 +94,9 @@
|
|||
userInfo: uni.getStorageSync('User'),
|
||||
};
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.getDirectrank();
|
||||
},
|
||||
methods: {
|
||||
closeTap() {
|
||||
//关闭
|
||||
|
|
@ -102,7 +104,23 @@
|
|||
this.$forceUpdate(); // 强制更新视图
|
||||
this.$emit("callznMethodTrigger");
|
||||
},
|
||||
|
||||
getDirectrank() {
|
||||
const currentDate = new Date();
|
||||
this.themonth = currentDate.getMonth() + 1;
|
||||
api.getMemberDirectpush().then((res) => {
|
||||
if (res.code == 200) {
|
||||
if (res.data &&res.data.length > 0) {
|
||||
this.popupList = res.data;
|
||||
let arr = res.data;
|
||||
let newArr = arr.filter((item, index) => index >= 3); // 过滤掉索引小于3的元素
|
||||
this.popupList2 = newArr;
|
||||
this.noticeFlag = true;
|
||||
} else {
|
||||
this.$emit("callznMethodTrigger");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
@ -220,9 +238,9 @@
|
|||
}
|
||||
.poupmain {
|
||||
// background: yellow;
|
||||
|
||||
|
||||
margin-top: 220rpx;
|
||||
|
||||
|
||||
padding: 0 20rpx;
|
||||
font-size: 26rpx;
|
||||
.main_title {
|
||||
|
|
@ -286,6 +304,6 @@
|
|||
clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
<div class="width-auto">
|
||||
<view class="titleF">
|
||||
<view class="title">
|
||||
{{'活跃会员对比'}}
|
||||
{{$t('N_I_105')}}
|
||||
</view>
|
||||
<picker :range="dateTypeList" :value="index" range-key="label" @change="bindPickerChange">
|
||||
<view class="mClass">
|
||||
|
|
@ -137,13 +137,13 @@ export default {
|
|||
let option = {
|
||||
title: {
|
||||
text: "",
|
||||
subtext: '人数',
|
||||
subtext: this.$t('N_I_106'),
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
top: "bottom",
|
||||
bottom: '5%',
|
||||
data: ['左区', '右区'],
|
||||
data: [this.$t('S_C_18'), this.$t('S_C_19')],
|
||||
},
|
||||
xAxis: {
|
||||
data: arr1,
|
||||
|
|
@ -170,7 +170,7 @@ export default {
|
|||
},
|
||||
series: [
|
||||
{
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
type: "bar",
|
||||
data: arr2,
|
||||
itemStyle: {
|
||||
|
|
@ -182,7 +182,7 @@ export default {
|
|||
barWidth: "18px",
|
||||
},
|
||||
{
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
type: "bar",
|
||||
data: arr3,
|
||||
itemStyle: {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view class="search-content">
|
||||
|
|
@ -6,7 +11,7 @@
|
|||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'会员编号'}}
|
||||
{{$t('MN_T_1')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.memberCode}}
|
||||
|
|
@ -14,7 +19,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'会员姓名'}}
|
||||
{{$t('CK_KS_14')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.memberName}}
|
||||
|
|
@ -22,7 +27,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'注册等级'}}
|
||||
{{$t('PER_DA_5')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.pkRegisterGradeStr}}
|
||||
|
|
@ -30,7 +35,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'注册日期'}}
|
||||
{{$t('w_0141')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.creationTime}}
|
||||
|
|
@ -38,7 +43,7 @@
|
|||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{'累计业绩'}}
|
||||
{{$t('N_I_103')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.consumeMoney | numberToCurrency}}
|
||||
|
|
@ -140,13 +145,13 @@ export default {
|
|||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.type{
|
||||
color: #005BAC !important;
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
.flex_s{
|
||||
width: 100%;
|
||||
|
|
@ -188,7 +193,7 @@ export default {
|
|||
.search-icons{
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #005BAC;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-21 15:20:16
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{'业绩分布'}}
|
||||
{{$t('w_1041')}}
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
<div
|
||||
|
|
@ -28,13 +33,13 @@ export default {
|
|||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
itemStyle: { color: '#EE5858' },
|
||||
},
|
||||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
itemStyle: { color: '#FBB046' },
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -1,8 +1,19 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-21 14:59:53
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-15 14:38:28
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{'新增业绩'}}
|
||||
{{$t('S_C_71')}}
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
<div
|
||||
|
|
@ -58,14 +69,14 @@ export default {
|
|||
let option = {
|
||||
title: {
|
||||
text: '',
|
||||
subtext: '业绩(万)',
|
||||
subtext: this.$t('w_0339'),
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
},
|
||||
legend: {
|
||||
top: 'bottom',
|
||||
data: ['左区', '右区'],
|
||||
data: [this.$t('S_C_18'), this.$t('S_C_19')],
|
||||
itemWidth: 20, // 长方形宽度
|
||||
itemHeight: 10, // 长方形高度
|
||||
},
|
||||
|
|
@ -94,7 +105,7 @@ export default {
|
|||
},
|
||||
series: [
|
||||
{
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
type: 'line',
|
||||
data: arr2,
|
||||
symbol: 'none',
|
||||
|
|
@ -110,7 +121,7 @@ export default {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
type: 'line',
|
||||
data: arr3,
|
||||
symbol: 'none',
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="width-auto">
|
||||
<div class="title">{{'等级业绩'}}</div>
|
||||
<div class="title">{{$t('N_I_123')}}</div>
|
||||
<div class="left-s">
|
||||
<div id="mounthData3" :style="myChartStyle">
|
||||
|
||||
|
|
|
|||
|
|
@ -1,293 +1,295 @@
|
|||
<template>
|
||||
<view class="main">
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '会员编号' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.memberCode }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '会员姓名' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.memberName }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '消费金额' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.orderAmount | numberToCurrency }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '消费业绩' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.orderAchieve | numberToCurrency }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '注册等级' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.pkRegisterGradeVal }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{ '创建时间' }}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{ item.creationTime }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="main">
|
||||
<view class="search-content">
|
||||
<view class="search-list">
|
||||
<view v-for="item in dataList" class="search-view">
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('MN_T_1')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.memberCode}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('CK_KS_14')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.memberName}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('MN_F_T_1090')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.orderAmount| numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('w_0306')}}(PV)
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.orderAchieve| numberToCurrency}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('PER_DA_5')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.pkRegisterGradeVal}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex_s">
|
||||
<view class="data-left">
|
||||
{{$t('MY_ORD_15')}}
|
||||
</view>
|
||||
<view class="data-right">
|
||||
{{item.creationTime}}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view style="clear: both"></view>
|
||||
<view style="height: 20rpx; background-color: #fff"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="clear: both;"></view>
|
||||
<view style="height: 20rpx;background-color: #fff;"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/distribute.js'
|
||||
import { setToken } from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataList: [],
|
||||
page: {
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
},
|
||||
}
|
||||
},
|
||||
props: {
|
||||
placeDept: {
|
||||
type: String,
|
||||
default: '0',
|
||||
},
|
||||
},
|
||||
onLoad() {},
|
||||
created() {
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
getDataList(num) {
|
||||
this.page.placeDept = this.placeDept
|
||||
this.page.pageNum = num || 1
|
||||
api
|
||||
.getAchieveDetails(this.page)
|
||||
.then(res => {
|
||||
this.dataList = res.rows
|
||||
})
|
||||
.catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
import * as api from '@/config/distribute.js'
|
||||
import {
|
||||
setToken
|
||||
} from '@/config/auth.js'
|
||||
import store from '@/store'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataList: [],
|
||||
page: {
|
||||
pageNum: 1,
|
||||
pageSize: 50
|
||||
}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
placeDept: {
|
||||
type: String,
|
||||
default: "0",
|
||||
},
|
||||
},
|
||||
onLoad() {
|
||||
|
||||
},
|
||||
created() {
|
||||
this.getDataList()
|
||||
},
|
||||
methods: {
|
||||
|
||||
getDataList(num) {
|
||||
this.page.placeDept = this.placeDept
|
||||
this.page.pageNum = num || 1
|
||||
api.getAchieveDetails(this.page).then(res => {
|
||||
|
||||
this.dataList = res.rows
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
},
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.border_s {
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
.border_s {
|
||||
border-bottom: 1rpx solid #eee;
|
||||
height: 10rpx;
|
||||
}
|
||||
|
||||
.button {
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #005bac;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.button {
|
||||
padding: 0 30rpx;
|
||||
/* width: 150rpx; */
|
||||
height: 52rpx;
|
||||
line-height: 52rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
background: #FB3024;
|
||||
margin: 30rpx 0 0 0;
|
||||
float: right;
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
|
||||
.type {
|
||||
color: #005bac !important;
|
||||
}
|
||||
.type {
|
||||
color: #FB3024 !important;
|
||||
}
|
||||
|
||||
.flex_s {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
.flex_s {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.data-left {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-left {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.data-right {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.data-right {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.search-view {
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin: 0;
|
||||
}
|
||||
.search-view {
|
||||
/* display: flex; */
|
||||
/* justify-content: space-between; */
|
||||
padding: 30rpx 20rpx 0 20rpx;
|
||||
border-bottom: 20rpx solid #eee;
|
||||
/* border-bottom: 1px solid #eee; */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.search-list {
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
.search-list {
|
||||
margin-bottom: 25rpx;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.search-content {
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.search-content {
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
|
||||
.text_s {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.text_s {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.search-icon-s {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
.search-icon-s {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
}
|
||||
|
||||
.search-icons {
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #005bac;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
.search-icons {
|
||||
width: 47rpx;
|
||||
height: 47rpx;
|
||||
background: #FB3024;
|
||||
border-radius: 50%;
|
||||
margin-left: 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 30rpx 20rpx 0 0;
|
||||
}
|
||||
|
||||
.time1 {
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
.time1 {
|
||||
width: 158rpx;
|
||||
height: 75rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
margin: 0 50rpx 30rpx 50rpx;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
font-size: 24rpx;
|
||||
/* margin-bottom: 30rpx; */
|
||||
}
|
||||
|
||||
.time-text {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
.time-text {
|
||||
color: #999;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.search-bottom {
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
.search-bottom {
|
||||
height: 100rpx;
|
||||
line-height: 100rpx;
|
||||
display: flex;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.texts {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
.texts {
|
||||
color: #333;
|
||||
font-size: 26rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* width:200rpx; */
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.select-text {
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
.select-text {
|
||||
display: flex;
|
||||
margin-right: 20rpx;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.selIcon {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
.selIcon {
|
||||
width: 20rpx;
|
||||
height: 20rpx;
|
||||
margin-top: 10rpx;
|
||||
margin-left: 5rpx;
|
||||
}
|
||||
|
||||
.text-s {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.text-s {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
.place {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
.place {
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.border-colors {
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
.border-colors {
|
||||
border: none;
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
|
||||
page {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
page {
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
.search-icon {
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
.search-icon {
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
position: absolute;
|
||||
left: 30rpx;
|
||||
top: 12rpx;
|
||||
|
||||
image {
|
||||
}
|
||||
}
|
||||
image {}
|
||||
}
|
||||
|
||||
.search-bg {
|
||||
}
|
||||
.search-bg {}
|
||||
|
||||
.top {
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
.top {
|
||||
/* height: 200rpx; */
|
||||
background-color: #fff;
|
||||
padding: 20rpx 0 20rpx 0;
|
||||
}
|
||||
|
||||
.search-tops {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.search-tops {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
height: 65rpx;
|
||||
line-height: 65rpx;
|
||||
padding-bottom: 40rpx;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.search-bg {
|
||||
width: 432rpx;
|
||||
height: 35rpx;
|
||||
background: #f5f6f8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
.search-bg {
|
||||
width: 432rpx;
|
||||
height: 35rpx;
|
||||
background: #F5F6F8;
|
||||
border-radius: 33rpx;
|
||||
display: flex;
|
||||
position: relative;
|
||||
padding: 20rpx 50rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,20 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-24 17:44:22
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-15 14:38:28
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="titleF">
|
||||
<view class="title">
|
||||
{{'月度新增业绩对比'}}
|
||||
{{$t('w_0145')}}
|
||||
</view>
|
||||
<picker :range="selMounthList" :value="index" range-key="label" @change="bindPickerChange">
|
||||
<view class="mClass">
|
||||
|
|
@ -141,13 +152,13 @@ export default {
|
|||
let option = {
|
||||
title: {
|
||||
text: '',
|
||||
subtext: '业绩(万)',
|
||||
subtext: this.$t('w_0339'),
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
top: 'bottom',
|
||||
bottom: '5%',
|
||||
data: ['左区', '右区'],
|
||||
data: [this.$t('S_C_18'), this.$t('S_C_19')],
|
||||
},
|
||||
xAxis: {
|
||||
data: arr1,
|
||||
|
|
@ -164,7 +175,7 @@ export default {
|
|||
},
|
||||
},
|
||||
series: [{
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
type: 'bar',
|
||||
data: arr2,
|
||||
itemStyle: {
|
||||
|
|
@ -175,7 +186,7 @@ export default {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
type: 'bar',
|
||||
data: arr3,
|
||||
itemStyle: {
|
||||
|
|
|
|||
|
|
@ -1,307 +1,300 @@
|
|||
<template>
|
||||
<view class="width-auto">
|
||||
<view class="flexs">
|
||||
<view class="select-flexs">
|
||||
<picker
|
||||
:range="selYearList"
|
||||
:value="index"
|
||||
range-key="label"
|
||||
@change="changeYear"
|
||||
>
|
||||
<view
|
||||
style="
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
"
|
||||
>
|
||||
<view style="margin-right: 40rpx">{{ whatYear }}年</view>
|
||||
<u-icon name="arrow-down" color="#999"></u-icon>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="select-flexs">
|
||||
<picker
|
||||
:range="selMounthList"
|
||||
:value="index"
|
||||
range-key="label"
|
||||
@change="bindPickerChange"
|
||||
>
|
||||
<view
|
||||
style="
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
"
|
||||
>
|
||||
<view style="margin-right: 40rpx">{{ whatMounth }}月</view>
|
||||
<u-icon name="arrow-down" color="#999"></u-icon>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<!-- <view class="select-flexs" style="margin-left: 20rpx;" @click="showType=true">
|
||||
<view class="width-auto">
|
||||
<view class="flexs">
|
||||
<view class="select-flexs">
|
||||
<picker :range="selYearList" :value="index" range-key="label" @change="changeYear">
|
||||
<view style="display: flex; align-items: center;justify-content: space-between;">
|
||||
<view style="margin-right:40rpx;">{{whatYear}}年</view>
|
||||
<u-icon name="arrow-down" color="#999"></u-icon>
|
||||
</view>
|
||||
|
||||
</picker>
|
||||
|
||||
</view>
|
||||
<view class="select-flexs">
|
||||
<picker :range="selMounthList" :value="index" range-key="label" @change="bindPickerChange">
|
||||
<view style="display: flex; align-items: center;justify-content: space-between;">
|
||||
<view style="margin-right:40rpx;">{{whatMounth}}月</view>
|
||||
<u-icon name="arrow-down" color="#999"></u-icon>
|
||||
</view>
|
||||
|
||||
</picker>
|
||||
|
||||
</view>
|
||||
<view class="select-flexs" style="margin-left: 20rpx;" @click="showType=true">
|
||||
<view style="display: flex; align-items: center;justify-content: space-between;">
|
||||
<view style="margin-right:40rpx;">{{yjName}}</view>
|
||||
<u-icon name="arrow-down" color="#999"></u-icon>
|
||||
</view>
|
||||
<!-- <picker :range="yjTypeList" :value="index2" range-key="label" @confirm="bindType"></picker> -->
|
||||
<u-picker @cancel='showType=false' :show="showType" ref="uPicker" :columns="yjTypeList"
|
||||
@confirm="bindType" keyName='label'></u-picker>
|
||||
</view> -->
|
||||
<!-- <view class="title">
|
||||
</view>
|
||||
<!-- <view class="title">
|
||||
导出明细
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="listrefor bg2">
|
||||
<view class="flex_item">
|
||||
<view class="text1">左区业绩</view>
|
||||
<view class="text2">{{ achieveData.leftAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item" style="cursor: pointer" @click="goDetail(1)">
|
||||
<view class="text1">左区血缘业绩</view>
|
||||
<view class="text2">{{ achieveData.leftDirectAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item">
|
||||
<view class="text1">左区人数</view>
|
||||
<view class="text2">{{ achieveData.leftCoun || 0 }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="listrefor bg2">
|
||||
|
||||
<view class="listrefor bg3">
|
||||
<view>
|
||||
<view class="text1">血缘业绩</view>
|
||||
<view class="text2">{{ achieveData.directAchieve || 0 }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="listrefor bg2">
|
||||
<view class="flex_item">
|
||||
<view class="text1">右区业绩</view>
|
||||
<view class="text2">{{ achieveData.rightAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item">
|
||||
<view class="text1">{{$t('w_0135')}}</view>
|
||||
<view class="text2">{{ achieveData.leftAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item" style="cursor: pointer;" @click="goDetail(1)">
|
||||
<view class="text1">{{$t('S_C_18')}}{{$t('w_0136')}}</view>
|
||||
<view class="text2">{{ achieveData.leftDirectAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item">
|
||||
<view class="text1">{{$t('N_I_88')}}</view>
|
||||
<view class="text2">{{ achieveData.leftCoun || 0 }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="listrefor bg3">
|
||||
<view>
|
||||
<view class="text1">{{$t('w_0136')}}</view>
|
||||
<view class="text2">{{ achieveData.directAchieve || 0 }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="listrefor bg2">
|
||||
|
||||
<view class="flex_item">
|
||||
<view class="text1">{{$t('w_0137')}}</view>
|
||||
<view class="text2">{{ achieveData.rightAchieve || 0 }}</view>
|
||||
</view>
|
||||
|
||||
<view class="flex_item" style="cursor: pointer;" @click="goDetail(2)">
|
||||
<view class="text1">{{$t('S_C_19')}}{{$t('w_0136')}}</view>
|
||||
<view class="text2">{{ achieveData.rightDirectAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item">
|
||||
<view class="text1">{{$t('N_I_92')}}</view>
|
||||
<view class="text2">{{ achieveData.rightCount || 0 }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
|
||||
<view class="flex_item" style="cursor: pointer" @click="goDetail(2)">
|
||||
<view class="text1">右区血缘业绩</view>
|
||||
<view class="text2">{{ achieveData.rightDirectAchieve || 0 }}</view>
|
||||
</view>
|
||||
<view class="flex_item">
|
||||
<view class="text1">右区人数</view>
|
||||
<view class="text2">{{ achieveData.rightCount || 0 }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getPlaceNewAddAchieve, getYjList } from '@/config/distribute.js'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
index: 0,
|
||||
show: false,
|
||||
achieveData: {},
|
||||
import {
|
||||
getPlaceNewAddAchieve,
|
||||
getYjList
|
||||
} from "@/config/distribute.js";
|
||||
export default {
|
||||
|
||||
data() {
|
||||
return {
|
||||
index: 0,
|
||||
show: false,
|
||||
achieveData: {},
|
||||
|
||||
whatMounth: '',
|
||||
yjType: 1,
|
||||
yjName: '全部',
|
||||
showType: false,
|
||||
selMounthList: [],
|
||||
yjTypeList: [],
|
||||
yearShow: false,
|
||||
whatYear: '',
|
||||
selYearList: [
|
||||
{
|
||||
value: 0,
|
||||
label: new Date().getFullYear() - 1,
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
label: new Date().getFullYear(),
|
||||
},
|
||||
],
|
||||
mounthList: [
|
||||
{
|
||||
value: 1,
|
||||
label: 1 + '月',
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: 2 + '月',
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: 3 + '月',
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
label: 4 + '月',
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
label: 5 + '月',
|
||||
},
|
||||
{
|
||||
value: 6,
|
||||
label: 6 + '月',
|
||||
},
|
||||
{
|
||||
value: 7,
|
||||
label: 7 + '月',
|
||||
},
|
||||
{
|
||||
value: 8,
|
||||
label: 8 + '月',
|
||||
},
|
||||
{
|
||||
value: 9,
|
||||
label: 9 + '月',
|
||||
},
|
||||
{
|
||||
value: 10,
|
||||
label: 10 + '月',
|
||||
},
|
||||
{
|
||||
value: 11,
|
||||
label: 11 + '月',
|
||||
},
|
||||
{
|
||||
value: 12,
|
||||
label: 12 + '月',
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getMounth()
|
||||
this.getYjList()
|
||||
setTimeout(() => {
|
||||
this.getPlaceNewAddAchieve()
|
||||
}, 50)
|
||||
},
|
||||
methods: {
|
||||
goDetail(index) {
|
||||
uni.navigateTo({
|
||||
url: '/pages/performanceEchart/index?ifDetail=' + index,
|
||||
})
|
||||
},
|
||||
getYjList() {
|
||||
getYjList().then(res => {
|
||||
this.yjTypeList = [res.data]
|
||||
})
|
||||
},
|
||||
changeYear(e) {
|
||||
this.whatYear = this.selYearList[e.detail.value].label
|
||||
this.getPlaceNewAddAchieve()
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.whatMounth = e.detail.value + 1
|
||||
this.getPlaceNewAddAchieve()
|
||||
},
|
||||
bindType(e) {
|
||||
this.yjType = e.value[0].value
|
||||
this.yjName = e.value[0].label
|
||||
this.showType = false
|
||||
this.getPlaceNewAddAchieve()
|
||||
},
|
||||
// 获取当前年/月
|
||||
getMounth() {
|
||||
this.whatMounth = new Date().getMonth() + 1
|
||||
let selMounth = []
|
||||
this.mounthList.forEach(item => {
|
||||
// if (item.value <= this.whatMounth) {
|
||||
// selMounth.push(item)
|
||||
// }
|
||||
selMounth.push(item)
|
||||
})
|
||||
this.selMounthList = selMounth
|
||||
this.whatYear = new Date().getFullYear()
|
||||
},
|
||||
getPlaceNewAddAchieve() {
|
||||
getPlaceNewAddAchieve({
|
||||
monthType: this.whatMounth,
|
||||
achievementType: this.yjType,
|
||||
year: this.whatYear,
|
||||
}).then(res => {
|
||||
this.achieveData = res.data
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
whatMounth: '',
|
||||
yjType: 1,
|
||||
yjName: "全部",
|
||||
showType: false,
|
||||
selMounthList: [],
|
||||
yjTypeList: [],
|
||||
yearShow:false,
|
||||
whatYear:"",
|
||||
selYearList:[{
|
||||
value: 0,
|
||||
label: new Date().getFullYear()-1,
|
||||
},{
|
||||
value: 1,
|
||||
label: new Date().getFullYear(),
|
||||
}],
|
||||
mounthList: [{
|
||||
value: 1,
|
||||
label: 1 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
label: 2 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: 3 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
label: 4 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
label: 5 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 6,
|
||||
label: 6 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 7,
|
||||
label: 7 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 8,
|
||||
label: 8 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 9,
|
||||
label: 9 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 10,
|
||||
label: 10 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 11,
|
||||
label: 11 + this.$t("ENU_SETTLE_P_3"),
|
||||
},
|
||||
{
|
||||
value: 12,
|
||||
label: 12 + this.$t("ENU_SETTLE_P_3")
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
||||
this.getMounth()
|
||||
this.getYjList()
|
||||
setTimeout(() => {
|
||||
this.getPlaceNewAddAchieve()
|
||||
}, 50)
|
||||
},
|
||||
methods: {
|
||||
|
||||
goDetail(index) {
|
||||
uni.navigateTo({
|
||||
url:'/pages/performanceEchart/index?ifDetail='+index
|
||||
})
|
||||
},
|
||||
getYjList() {
|
||||
getYjList().then(res => {
|
||||
this.yjTypeList = [res.data]
|
||||
})
|
||||
},
|
||||
changeYear(e){
|
||||
this.whatYear = this.selYearList[e.detail.value].label
|
||||
this.getPlaceNewAddAchieve()
|
||||
},
|
||||
bindPickerChange(e) {
|
||||
this.whatMounth = e.detail.value + 1
|
||||
this.getPlaceNewAddAchieve()
|
||||
},
|
||||
bindType(e) {
|
||||
this.yjType = e.value[0].value
|
||||
this.yjName = e.value[0].label
|
||||
this.showType = false
|
||||
this.getPlaceNewAddAchieve()
|
||||
},
|
||||
// 获取当前年/月
|
||||
getMounth() {
|
||||
this.whatMounth = new Date().getMonth() + 1
|
||||
let selMounth = []
|
||||
this.mounthList.forEach((item) => {
|
||||
// if (item.value <= this.whatMounth) {
|
||||
// selMounth.push(item)
|
||||
// }
|
||||
selMounth.push(item)
|
||||
})
|
||||
this.selMounthList = selMounth
|
||||
this.whatYear = new Date().getFullYear()
|
||||
|
||||
},
|
||||
getPlaceNewAddAchieve() {
|
||||
getPlaceNewAddAchieve({
|
||||
monthType: this.whatMounth,
|
||||
achievementType: this.yjType,
|
||||
year:this.whatYear
|
||||
}).then((res) => {
|
||||
this.achieveData = res.data;
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .uni-picker {
|
||||
width: 100%;
|
||||
}
|
||||
::v-deep .uni-picker {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.select-flexs {
|
||||
border: 1rpx solid #eeeeee;
|
||||
border-radius: 15rpx;
|
||||
// width: 232rpx;
|
||||
padding: 20rpx 19rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.select-flexs {
|
||||
|
||||
.flexs {
|
||||
display: flex;
|
||||
// justify-content: space-between;
|
||||
border-radius: 30rpx 30rpx 0 0;
|
||||
background-color: #fff;
|
||||
}
|
||||
border: 1rpx solid #EEEEEE;
|
||||
border-radius: 15rpx;
|
||||
// width: 232rpx;
|
||||
padding: 20rpx 19rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding: 10rpx 0;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
.flexs {
|
||||
display: flex;
|
||||
// justify-content: space-between;
|
||||
border-radius: 30rpx 30rpx 0 0;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.width-auto {
|
||||
background-color: #fff;
|
||||
padding: 0 22rpx;
|
||||
width: 690rpx;
|
||||
margin: 0 auto;
|
||||
padding-bottom: 20rpx;
|
||||
}
|
||||
.title {
|
||||
padding: 10rpx 0;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
|
||||
.listrefor {
|
||||
color: #ffffff;
|
||||
border-radius: 10rpx;
|
||||
padding: 32rpx 21rpx;
|
||||
margin-top: 25rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.width-auto {
|
||||
background-color: #fff;
|
||||
padding: 0 22rpx;
|
||||
width: 690rpx;
|
||||
margin: 0 auto;
|
||||
padding-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.flex_item:nth-child(1) {
|
||||
width: 40%;
|
||||
}
|
||||
.listrefor {
|
||||
color: #FFFFFF;
|
||||
border-radius: 10rpx;
|
||||
padding: 32rpx 21rpx;
|
||||
margin-top: 25rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.flex_item:nth-child(2) {
|
||||
width: 35%;
|
||||
}
|
||||
.flex_item:nth-child(1) {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
.flex_item:nth-child(3) {
|
||||
width: 25%;
|
||||
}
|
||||
.flex_item:nth-child(2) {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
.text1 {
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.flex_item:nth-child(3) {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.text2 {
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
margin-top: 30rpx;
|
||||
}
|
||||
}
|
||||
.text1 {
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.bg1 {
|
||||
background: linear-gradient(180deg, #fc7c7c 0%, #f65757 100%);
|
||||
}
|
||||
.text2 {
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
margin-top: 30rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.bg2 {
|
||||
background: linear-gradient(180deg, #ff9354 0%, #ff7f36 100%);
|
||||
}
|
||||
.bg1 {
|
||||
background: linear-gradient(180deg, #FC7C7C 0%, #F65757 100%);
|
||||
}
|
||||
|
||||
.bg3 {
|
||||
background: linear-gradient(180deg, #677af9 0%, #697bf2 100%);
|
||||
}
|
||||
</style>
|
||||
.bg2 {
|
||||
background: linear-gradient(180deg, #FF9354 0%, #FF7F36 100%);
|
||||
}
|
||||
|
||||
.bg3 {
|
||||
background: linear-gradient(180deg, #677AF9 0%, #697BF2 100%);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<view class="width-auto" style="position: relative">
|
||||
<view class="title">
|
||||
{{'安置图'}}
|
||||
{{$t('ENU_MENU_512')}}
|
||||
</view>
|
||||
<!-- <view class="right-lines">
|
||||
<scroll-view class="left_scrol_style" scroll-x="false" scroll-y="true">
|
||||
|
|
@ -22,19 +22,19 @@
|
|||
<view class="mouseOvers" v-if="check1">
|
||||
<view class="name-s" style="display: flex;align-items: center;">
|
||||
<view>
|
||||
{{'会员编号'}}:{{userInfo.memberCode}}
|
||||
{{$t('MN_T_1')}}:{{userInfo.memberCode}}
|
||||
</view>
|
||||
<u-button size="mini" style="padding: 0;width: 0;"
|
||||
@click="copy(userInfo.memberCode)">{{ '复制'}}</u-button>
|
||||
@click="copy(userInfo.memberCode)">{{ $t("MY_CK_27")}}</u-button>
|
||||
</view>
|
||||
<view class="name-s">{{'会员姓名'}}:{{userInfo.memberName}}
|
||||
<view class="name-s">{{$t('CK_KS_14')}}:{{userInfo.memberName}}
|
||||
<view></view>
|
||||
</view>
|
||||
<view class="name-s">{{'创建日期'}}:{{userInfo.payTime.substring(0,10)}}
|
||||
<view class="name-s">{{$t('PER_DA_9')}}:{{userInfo.payTime.substring(0,10)}}
|
||||
<view></view>
|
||||
</view>
|
||||
<view class="name-s" style="margin-bottom: 10px">
|
||||
{{'消费业绩'}}:{{userInfo.consumeAchieve | numFilter}}
|
||||
{{$t('w_0306')}}:{{userInfo.consumeAchieve | numFilter}}
|
||||
<view></view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -52,22 +52,22 @@
|
|||
<view class="mouseOvers" v-if="check2">
|
||||
<view class="name-s" style="display: flex;align-items: center;">
|
||||
<view>
|
||||
{{'会员编号'}}:{{userInfo1.memberCode}}
|
||||
{{$t('MN_T_1')}}:{{userInfo1.memberCode}}
|
||||
</view>
|
||||
<u-button size="mini" style="padding: 0;width: 0;"
|
||||
@click="copy(userInfo1.memberCode)">{{ '复制'}}</u-button>
|
||||
@click="copy(userInfo1.memberCode)">{{ $t("MY_CK_27")}}</u-button>
|
||||
</view>
|
||||
<view class="name-s">{{'会员姓名'}}:{{userInfo1.memberName}}</view>
|
||||
<view class="name-s">{{'创建日期'}}:{{userInfo1.payTime.substring(0,10)}}</view>
|
||||
<view class="name-s">{{$t('CK_KS_14')}}:{{userInfo1.memberName}}</view>
|
||||
<view class="name-s">{{$t('PER_DA_9')}}:{{userInfo1.payTime.substring(0,10)}}</view>
|
||||
<view class="name-s" style="margin-bottom: 10px">
|
||||
{{'消费业绩'}}:{{userInfo1.consumeAchieve | numFilter}}</view>
|
||||
{{$t('w_0306')}}:{{userInfo1.consumeAchieve | numFilter}}</view>
|
||||
</view>
|
||||
<view class="border-color">
|
||||
<image class="theimg" src="../../static/images/avatar.png" mode=""></image>
|
||||
<!-- <img :src="this.myChart.leftMember.lastImageUrl ||''"> -->
|
||||
</view>
|
||||
<view class="code">{{this.myChart.leftMember.lastMemberCode}}</view>
|
||||
<view class="code">{{'最末安置'}}</view>
|
||||
<view class="code">{{$t('N_I_101')}}</view>
|
||||
<view class="code" style="font-size: 28rpx">左区</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -76,23 +76,23 @@
|
|||
<view class="mouseOvers" v-if="check3" style="margin-left: -260rpx">
|
||||
<view class="name-s" style="display: flex;align-items: center;">
|
||||
<view>
|
||||
{{'会员编号'}}:{{userInfo2.memberCode}}
|
||||
{{$t('MN_T_1')}}:{{userInfo2.memberCode}}
|
||||
</view>
|
||||
<u-button size="mini" style="padding: 0;width: 0;"
|
||||
@click="copy(userInfo2.memberCode)">{{ '复制'}}</u-button>
|
||||
@click="copy(userInfo2.memberCode)">{{ $t("MY_CK_27")}}</u-button>
|
||||
</view>
|
||||
<view class="name-s">{{'会员姓名'}}:{{userInfo2.memberName}}</view>
|
||||
<view class="name-s">{{'创建日期'}}:{{userInfo2.payTime.substring(0,10)}}</view>
|
||||
<view class="name-s">{{$t('CK_KS_14')}}:{{userInfo2.memberName}}</view>
|
||||
<view class="name-s">{{$t('PER_DA_9')}}:{{userInfo2.payTime.substring(0,10)}}</view>
|
||||
<view class="name-s" style="margin-bottom: 10px">
|
||||
{{'消费业绩'}}:{{userInfo2.consumeAchieve | numFilter}}</view>
|
||||
{{$t('w_0306')}}:{{userInfo2.consumeAchieve | numFilter}}</view>
|
||||
</view>
|
||||
<view class="border-color" v-if="this.myChart.rightMember">
|
||||
<image class="theimg" src="../../static/images/avatar.png" mode=""></image>
|
||||
<!-- <img :src="this.myChart.rightMember.lastImageUrl"> -->
|
||||
</view>
|
||||
<view class="code">{{this.myChart.rightMember.lastMemberCode}}</view>
|
||||
<view class="code">{{'最末安置'}}</view>
|
||||
<view class="code" style="font-size: 28rpx">{{'右区'}}</view>
|
||||
<view class="code">{{$t('N_I_101')}}</view>
|
||||
<view class="code" style="font-size: 28rpx">{{$t('S_C_19')}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{'奖衔业绩分布'}}
|
||||
{{$t('APP_ADD_20')}}
|
||||
<!-- 奖衔业绩分布 -->
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
|
|
@ -28,13 +28,13 @@ export default {
|
|||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
itemStyle: { color: "#EE5858" },
|
||||
},
|
||||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
itemStyle: { color: "#FBB046" },
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,176 @@
|
|||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{$t('N_I_115')}}
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
<div id="main22" style="width: 690rpx;height: 600rpx;" :style="myChartStyle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as echarts from "echarts";
|
||||
import { realPerformancePic } from "@/config/distribute.js";
|
||||
export default {
|
||||
name: "recommendTime",
|
||||
data(){
|
||||
return{
|
||||
texts:'',
|
||||
pieData: [
|
||||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: this.$t('S_C_18'),
|
||||
itemStyle: {color:'#EE5858'},
|
||||
},
|
||||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: this.$t('S_C_19'),
|
||||
itemStyle: {color:'#FBB046'},
|
||||
},
|
||||
|
||||
],
|
||||
myChartStyle: {
|
||||
float: "center",
|
||||
width: "690rpx",
|
||||
height: "750rpx",
|
||||
paddingTop: "0",
|
||||
// margin: "20px",
|
||||
}, //图表样式
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getData()
|
||||
},
|
||||
methods:{
|
||||
getData() {
|
||||
realPerformancePic().then((res)=>{
|
||||
this.pieData[1].value = res.data.rightAchievement
|
||||
this.pieData[0].value = res.data.leftAchievement
|
||||
this.pieData[1].age = res.data.rightNumber
|
||||
this.pieData[0].age = res.data.leftNumber
|
||||
setTimeout(()=>{
|
||||
this.ageChart(res.data);
|
||||
},50)
|
||||
})
|
||||
},
|
||||
ageChart(datas) {
|
||||
let that =this
|
||||
var myChart = echarts.init(document.getElementById('main22'));
|
||||
var option = {
|
||||
legend: {
|
||||
// 图例
|
||||
// right: "0%",
|
||||
left: '33%',
|
||||
bottom: '0',
|
||||
color: '#999',
|
||||
// orient: "vertical",
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: "pie",
|
||||
label: {
|
||||
show: true,
|
||||
lineHeight:16,// 行高
|
||||
|
||||
normal: {
|
||||
borderWidth:2,
|
||||
formatter: function (data) {
|
||||
return (
|
||||
data.data.name +
|
||||
":" +
|
||||
data.data.age +
|
||||
that.$t('w_0337') +
|
||||
"\n" +
|
||||
"\n" +
|
||||
that.$t('ENU_TOTAL_V_1') + ':' +
|
||||
data.data.value +
|
||||
that.$t('S_C_58')
|
||||
);
|
||||
},
|
||||
color: "#fff",
|
||||
position:'inside' //默认自适应,水平布局为'top',垂直布局为'right',可选为 'inside'|'left'|'right'|'top'|'bottom'
|
||||
}
|
||||
},
|
||||
radius: "70%", //饼图半径
|
||||
data: that.pieData
|
||||
},
|
||||
]
|
||||
}
|
||||
myChart.setOption(option);
|
||||
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.width-auto{
|
||||
width: 100%;
|
||||
position: relative;
|
||||
height:950rpx;
|
||||
background-color: #fff;
|
||||
width: 690rpx;
|
||||
|
||||
border-radius: 20rpx;
|
||||
margin: 20rpx auto;
|
||||
}
|
||||
.title{
|
||||
padding: 20rpx 30rpx ;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-bottom: 10rpx solid #f3f3f3;
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
::v-deep .el-select .el-input .el-select__caret{
|
||||
color: #333;
|
||||
}
|
||||
.lines{
|
||||
width: 2px;
|
||||
height: 470px;
|
||||
opacity: 1;
|
||||
background: #979797;
|
||||
position: absolute;
|
||||
bottom: 50px;
|
||||
left: 50%;
|
||||
margin-left: -110px;
|
||||
}
|
||||
.right-lines{
|
||||
position: absolute;
|
||||
right: 80px;
|
||||
top: 140px;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
}
|
||||
.item-s{
|
||||
padding-bottom: 10px;
|
||||
display: flex;
|
||||
line-height: 24px;
|
||||
}
|
||||
.bg-color{
|
||||
width: 40px;
|
||||
height: 22px;
|
||||
border-radius: 2px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
.flex-s{
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// align-items: center;
|
||||
// width: 700px;
|
||||
}
|
||||
.styles{
|
||||
position: absolute;
|
||||
right: -30px;
|
||||
z-index: 111;
|
||||
top: 60px;
|
||||
/*background: rgba(0,0,0,0.05);*/
|
||||
/*border-radius: 4px 4px 4px 4px;*/
|
||||
}
|
||||
::v-deep .el-select .el-input__inner{
|
||||
border: none;
|
||||
background: rgba(0,0,0,0.05);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,9 +1,14 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-15 14:38:28
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="flexs">
|
||||
<view class="title">
|
||||
{{'真实业绩'}}
|
||||
{{$t('N_I_102')}}
|
||||
</view>
|
||||
<view class="select-flexs">
|
||||
<picker :range="selMounthList"
|
||||
|
|
@ -147,13 +152,13 @@ export default {
|
|||
let option = {
|
||||
title: {
|
||||
text: '',
|
||||
subtext: '业绩(万)',
|
||||
subtext: this.$t('w_0339'),
|
||||
left:0,
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
top: 'bottom',
|
||||
data: ['左区', '右区'],
|
||||
data: [this.$t('S_C_18'), this.$t('S_C_19')],
|
||||
bottom:0,
|
||||
},
|
||||
xAxis: {
|
||||
|
|
@ -183,7 +188,7 @@ export default {
|
|||
},
|
||||
series: [
|
||||
{
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
type: 'bar',
|
||||
data: arr2,
|
||||
itemStyle: {
|
||||
|
|
@ -194,7 +199,7 @@ export default {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
type: 'bar',
|
||||
data: arr3,
|
||||
itemStyle: {
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<div class="width-auto">
|
||||
<div class="title">
|
||||
<div>{{'推荐业绩分布'}}</div>
|
||||
<div style="color: #999;font-size: 14px;margin: 0px 0 0 14px">{{'本人及伞下前十'}}</div>
|
||||
<div>{{$t('N_I_121')}}</div>
|
||||
<div style="color: #999;font-size: 14px;margin: 0px 0 0 14px">{{$t('N_I_122')}}</div>
|
||||
</div>
|
||||
<div class="color-s">
|
||||
<div id="mounthData4" :style="myChartStyle">
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<template>
|
||||
<div class="width-auto" style="position: relative">
|
||||
<div class="title" style="display: flex;">
|
||||
<div>{{'推荐平均用时'}}</div>
|
||||
<div style="color:rgb(102, 102, 102);font-size: 14rpx;margin-left: 30rpx;">{{ '会员本次推荐与下次推荐平均间隔的时长' }}</div>
|
||||
<div>{{$t('ENU_MENU_515')}}</div>
|
||||
<div style="color:rgb(102, 102, 102);font-size: 14rpx;margin-left: 30rpx;">{{ $t('N_I_116') }}</div>
|
||||
</div>
|
||||
<div class="right-lines">
|
||||
<div class="item-s" v-for="item in list">
|
||||
|
|
@ -24,10 +24,10 @@ export default {
|
|||
return{
|
||||
myChart:{},
|
||||
list:[
|
||||
{"name":'自己',"color":"#01C291"},
|
||||
{"name":'团队',"color":"#FE4C4B"},
|
||||
{"name":'明星',"color":"#FE9A02"},
|
||||
{"name":'公司',"color":"#2982FF"},
|
||||
{"name":this.$t('N_I_117'),"color":"#01C291"},
|
||||
{"name":this.$t('N_I_118'),"color":"#FE4C4B"},
|
||||
{"name":this.$t('N_I_119'),"color":"#FE9A02"},
|
||||
{"name":this.$t('N_I_120'),"color":"#2982FF"},
|
||||
],
|
||||
myChartStyle: {
|
||||
float: "center",
|
||||
|
|
@ -58,17 +58,17 @@ export default {
|
|||
list1.push({'value':data.thisTime})
|
||||
let _data = this.initCharts(list1);
|
||||
let _maxTime = _data[0].value;
|
||||
let _unit = '秒';
|
||||
let _unit = this.$t('S_L_9');
|
||||
let _unitInfo = 60;
|
||||
if(_maxTime > 60){
|
||||
_unit = '分';
|
||||
_unit = this.$t('S_L_8');
|
||||
}
|
||||
if(_maxTime > 60 * 60){
|
||||
_unit = '时';
|
||||
_unit = this.$t('S_L_7');
|
||||
_unitInfo = 60*60;
|
||||
}
|
||||
if(_maxTime > 60 * 60 * 24){
|
||||
_unit = '天';
|
||||
_unit = this.$t('S_L_6');
|
||||
_unitInfo = 60*60*24;
|
||||
}
|
||||
list1.forEach(function(item){
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-21 15:20:07
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{'推荐小区分布'}}
|
||||
{{$t('N_I_111')}}
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
<div
|
||||
|
|
@ -26,13 +31,13 @@ import * as api from '@/config/activity.js'
|
|||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '大区',
|
||||
name: this.$t('w_0152'),
|
||||
itemStyle: { color: "#2982ff" },
|
||||
},
|
||||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '小区',
|
||||
name: this.$t('w_0153'),
|
||||
itemStyle: { color: "#01c291" },
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -1,7 +1,25 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-21 15:00:04
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-15 16:28:35
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-15 14:38:28
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{'复购新增业绩'}}
|
||||
{{$t('N_I_109')}}
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
<div
|
||||
|
|
@ -52,14 +70,14 @@ export default {
|
|||
let option = {
|
||||
title: {
|
||||
text: '',
|
||||
subtext: '业绩(万)',
|
||||
subtext: this.$t('w_0339'),
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
},
|
||||
legend: {
|
||||
top: 'bottom',
|
||||
data: ['左区', '右区'],
|
||||
data: [this.$t('S_C_18'), this.$t('S_C_19')],
|
||||
itemWidth: 20, // 长方形宽度
|
||||
itemHeight: 10, // 长方形高度
|
||||
},
|
||||
|
|
@ -88,7 +106,7 @@ export default {
|
|||
},
|
||||
series: [
|
||||
{
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
type: 'line',
|
||||
data: arr2,
|
||||
symbol: 'none',
|
||||
|
|
@ -104,7 +122,7 @@ export default {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
type: 'line',
|
||||
data: arr3,
|
||||
symbol: 'none',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,13 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-21 15:20:22
|
||||
-->
|
||||
<template>
|
||||
<div class="width-auto">
|
||||
<view class="title">
|
||||
{{'复购业绩分布'}}
|
||||
{{$t('N_I_114')}}
|
||||
</view>
|
||||
<div class="flex-s">
|
||||
<div
|
||||
|
|
@ -26,13 +32,13 @@ export default {
|
|||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '左区',
|
||||
name: this.$t('S_C_18'),
|
||||
itemStyle: { color: '#01c291' },
|
||||
},
|
||||
{
|
||||
value: 0,
|
||||
age: 0,
|
||||
name: '右区',
|
||||
name: this.$t('S_C_19'),
|
||||
itemStyle: { color: '#2982ff' },
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<view class="pop-service d-c d-c-c" :style="{ left: `${x}px`, top: `${y}px` }" @click="gotoService"
|
||||
@touchstart="handleTouchStart" @touchmove="handleTouchMove" @touchend="handleTouchEnd">
|
||||
<image class="pop-service-image" src="/static/images/service.gif" mode=""></image>
|
||||
<view class="pop-service-text tc">{{ '在线客服' }}</view>
|
||||
<view class="pop-service-text tc">{{ $t('w_0023') }}</view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-25 10:26:06
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-08-08 10:42:29
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
<u-popup
|
||||
|
|
@ -36,10 +47,10 @@
|
|||
mode="center"
|
||||
>
|
||||
<view class="goodsDiag">
|
||||
<view class="dis_t">{{ '种植' }}</view>
|
||||
<view class="dis_t">{{ $t("w_0283") }}</view>
|
||||
<view class="dis_a">
|
||||
<view class="disFlex">
|
||||
<view class="dis_l">{{ '数量' }}:</view>
|
||||
<view class="dis_l">{{ $t("MY_TH_2") }}:</view>
|
||||
<u-number-box
|
||||
v-model="treeObj.quantity"
|
||||
@change="treePrice"
|
||||
|
|
@ -47,11 +58,11 @@
|
|||
></u-number-box>
|
||||
</view>
|
||||
<view class="disFlex">
|
||||
<view class="dis_l">{{ '公益金' }}:</view>
|
||||
<view class="dis_l">{{ $t("w_0287") }}:</view>
|
||||
<view class="dis_r">¥{{ treeObj.amount | numberToCurrency }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btns" @click="payGoods">{{ '确定' }}</view>
|
||||
<view class="btns" @click="payGoods">{{ $t("w_0035") }}</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
</view>
|
||||
|
|
@ -299,7 +310,7 @@ export default {
|
|||
}
|
||||
.btns {
|
||||
margin: 0 auto;
|
||||
background: #005BAC;
|
||||
background: #c8161d;
|
||||
color: #fff;
|
||||
width: 300rpx;
|
||||
height: 60rpx;
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
<img src="@../../static/images/lovesmart.png" alt="" />
|
||||
</view>
|
||||
<view class='starttitle'>
|
||||
<view class="thestarttext">{{'开始'}}</view>
|
||||
<p>{{'可抽奖次数'}}:{{ number_of_draws }}</p>
|
||||
<view class="thestarttext">{{$t('w_0193')}}</view>
|
||||
<p>{{$t('w_0194')}}:{{ number_of_draws }}</p>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
<div class="prize" style="position: relative;z-index: 11;display: block;align-items: none;">
|
||||
<div class="width-flex-s">
|
||||
<div class="top_texts" style="margin-top:110rpx;background-image: none;">{{'恭喜你获得'}}</div>
|
||||
<div class="top_texts" style="margin-top:110rpx;background-image: none;">{{$t('w_0195')}}</div>
|
||||
<div class="top_texts overflow1">
|
||||
{{ productData.giftName || "" }}
|
||||
</div>
|
||||
|
|
@ -52,16 +52,16 @@
|
|||
class="row-me row-center swiperItem">
|
||||
<div class="item-s" v-for="(item, index) in productData.acGiftConfigList"
|
||||
:key="index">
|
||||
<div class="product">{{'产品'}}:{{item.productName}} x{{item.quantity}}</div>
|
||||
<div class="price">{{'价值'}}:{{ item.retailPrice | numFilter }}{{'元'}}</div>
|
||||
<div class="product">{{$t('ENU_N_B_T_3')}}:{{item.productName}} x{{item.quantity}}</div>
|
||||
<div class="price">{{$t('w_0196')}}:{{ item.retailPrice | numFilter }}{{$t('w_0197')}}</div>
|
||||
</div>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
<div v-else>
|
||||
<div class="item-s" style="align-items: center"
|
||||
v-for="(item, index) in productData.acGiftConfigList" :key="index">
|
||||
<div class="product">{{'产品'}}:{{item.productName}} x{{item.quantity}}</div>
|
||||
<div class="price">{{'价值'}}:{{ item.retailPrice | numFilter }}{{'元'}}</div>
|
||||
<div class="product">{{$t('ENU_N_B_T_3')}}:{{item.productName}} x{{item.quantity}}</div>
|
||||
<div class="price">{{$t('w_0196')}}:{{ item.retailPrice | numFilter }}{{$t('w_0197')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -78,16 +78,16 @@
|
|||
<!-- 充值抽奖次数 -->
|
||||
<u-popup mode="center" :show="rechargeShow" class="pay_password" closeable @close="rechargeShow=false">
|
||||
<view class="pay_item">
|
||||
<view class="pay_pt1">{{'充值抽奖次数'}}</view>
|
||||
<view class="pay_pt1">{{$t('w_0198')}}</view>
|
||||
<view style="font-size: 26rpx;margin: 20rpx 0;">
|
||||
<view>{{'抽奖次数'}}:{{totalSurplusNum}}</view>
|
||||
<view>{{'可抽奖次数'}}:0</view>
|
||||
<view>{{$t('w_0199')}}:{{totalSurplusNum}}</view>
|
||||
<view>{{$t('w_0194')}}:0</view>
|
||||
</view>
|
||||
<u-input type="number" :placeholder="'请输入充值次数'" v-model="keyValue" clearable>
|
||||
<u-input type="number" :placeholder="$t('w_0200')" v-model="keyValue" clearable>
|
||||
</u-input>
|
||||
|
||||
<view class="czbtnbox">
|
||||
<u-button class="btn" shape="circle" color="#D61820" @click="closeBtn">{{'充值'}}</u-button>
|
||||
<u-button class="btn" shape="circle" color="#D61820" @click="closeBtn">{{$t('MY_WAL_4')}}</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
|
|
@ -246,8 +246,8 @@
|
|||
} else {
|
||||
|
||||
uni.showToast({
|
||||
title: '提示',
|
||||
content: '请输入正确的充值次数',
|
||||
title: this.$t('w_0034'),
|
||||
content: this.$t('w_0201'),
|
||||
// success: (res) => {
|
||||
|
||||
// },
|
||||
|
|
@ -300,8 +300,8 @@
|
|||
// type: "warning",
|
||||
// });
|
||||
uni.showToast({
|
||||
title: '提示',
|
||||
content: '正在抽奖中,请勿重复点击',
|
||||
title: this.$t('w_0034'),
|
||||
content: this.$t('w_0202'),
|
||||
// success: (res) => {
|
||||
|
||||
// },
|
||||
|
|
@ -407,7 +407,7 @@
|
|||
|
||||
.price {
|
||||
margin-right: 15rpx;
|
||||
color: #005BAC;
|
||||
color: #c8161d;
|
||||
font-size: 12rpx;
|
||||
//width: 120px;
|
||||
overflow: hidden;
|
||||
|
|
@ -422,7 +422,7 @@
|
|||
// display: flex;
|
||||
text-align: center;
|
||||
font-size: 40rpx;
|
||||
color: #005BAC;
|
||||
color: #C8161D;
|
||||
// margin-top: -130rpx;
|
||||
// margin-left: -50rpx;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,961 +0,0 @@
|
|||
<template>
|
||||
<view class="goods-list-content">
|
||||
<view class="index_btm">
|
||||
<view class="index_r_2">
|
||||
<!-- <u-scroll-list :indicator="false" class="tabList">
|
||||
<view class="tab">
|
||||
<view
|
||||
v-for="(item, index) in twoList"
|
||||
:key="index"
|
||||
@click="((twoId = item.pkId), getAllGoods1(item.pkId))"
|
||||
:class="[twoId == item.pkId ? 'actTab' : 'tab_i']"
|
||||
>
|
||||
<view>{{ item.classifyName }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</u-scroll-list> -->
|
||||
<view class="search">
|
||||
<u--input
|
||||
placeholder="请输入商品名称"
|
||||
placeholderStyle="font-size:14px;"
|
||||
prefixIcon="search"
|
||||
shape="circle"
|
||||
v-model="waresName"
|
||||
border="none"
|
||||
@confirm="getAllGoods1()"
|
||||
prefixIconStyle="font-size: 22px;color: #909399"
|
||||
></u--input>
|
||||
</view>
|
||||
<view class="goodList">
|
||||
<view
|
||||
v-for="item in goodList"
|
||||
:key="item.waresCode"
|
||||
class="goodList_i"
|
||||
@tap="goDetails(item)"
|
||||
>
|
||||
<view style="display: flex; flex: 1">
|
||||
<view
|
||||
class="fly"
|
||||
v-show="
|
||||
item.preSaleStatus == 3 ||
|
||||
item.isSale == 1 ||
|
||||
(item.specialArea === 14 && !Number(item.inventory))
|
||||
"
|
||||
></view>
|
||||
<view class="image-container">
|
||||
<img :src="item.cover || item.cover1" class="cover" alt="" />
|
||||
<!-- 三角形角标 -->
|
||||
<view class="triangle-badge" v-if="item.warnMessage">
|
||||
<view
|
||||
class="triangle-badge-text"
|
||||
:class="{
|
||||
'text-2': item.warnMessage.length === 2,
|
||||
'text-3': item.warnMessage.length === 3,
|
||||
'text-4': item.warnMessage.length === 4,
|
||||
}"
|
||||
>
|
||||
{{ item.warnMessage }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="goodList_ir">
|
||||
<view>
|
||||
<view>
|
||||
<span
|
||||
class="qzbq"
|
||||
v-if="item.prefixLabelTarget != undefined"
|
||||
>{{ item.prefixLabelTarget.label }}</span
|
||||
>
|
||||
<span style="font-weight: 500">{{ item.waresName }}</span>
|
||||
</view>
|
||||
</view>
|
||||
<view>
|
||||
<view
|
||||
class="inventory-progress-container"
|
||||
v-if="
|
||||
item.useRatio &&
|
||||
item.inventory !== undefined &&
|
||||
item.specialArea == 14
|
||||
"
|
||||
>
|
||||
<view class="inventory-progress-bar">
|
||||
<view
|
||||
class="inventory-progress-fill"
|
||||
:style="{
|
||||
width: getInventoryPercentage(item.inventory) + '%',
|
||||
}"
|
||||
:class="getProgressClass(item.inventory)"
|
||||
>
|
||||
<!-- 添加流动光效 -->
|
||||
<view
|
||||
class="progress-shine"
|
||||
v-if="getInventoryPercentage(item.inventory) <= 30"
|
||||
></view>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
class="inventory-percentage"
|
||||
:class="getPercentageClass(item.inventory)"
|
||||
>
|
||||
剩余{{ getInventoryPercentage(item.inventory) }}%
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="goodList_ib">
|
||||
<view>
|
||||
<view
|
||||
class="pv"
|
||||
v-if="
|
||||
specialArea != 18 &&
|
||||
specialArea != 13 &&
|
||||
specialArea != 31 &&
|
||||
specialArea != 10
|
||||
"
|
||||
>
|
||||
业绩:{{ item.waresAchieve | numberToCurrency }}
|
||||
</view>
|
||||
<view class="pv" v-if="specialArea == 10">
|
||||
积分可抵扣:{{ item.deductMoney | numberToCurrency }}
|
||||
</view>
|
||||
<view
|
||||
class="pv"
|
||||
v-if="specialArea == 31 && userInfo.isMakerSpace == 0"
|
||||
>
|
||||
业绩:{{ item.waresAchieve | numberToCurrency }}
|
||||
</view>
|
||||
<view class="pv" v-if="specialArea == 13">
|
||||
BV:{{ item.assAchieve | numberToCurrency }}
|
||||
</view>
|
||||
<view
|
||||
v-if="specialArea == 31 && userInfo.isMakerSpace == 1"
|
||||
>
|
||||
{{ item.vipPrice | numberToCurrency }}
|
||||
</view>
|
||||
<view
|
||||
v-if="
|
||||
(specialArea == 31 && userInfo.isMakerSpace == 0) ||
|
||||
specialArea != 31
|
||||
"
|
||||
>
|
||||
{{ item.waresPrice | numberToCurrency }}
|
||||
</view>
|
||||
</view>
|
||||
<template v-if="item.specialArea !== 14">
|
||||
<img
|
||||
@click.stop="addCar(item)"
|
||||
v-show="
|
||||
item.preSaleStatus != 3 &&
|
||||
item.isSale != 1 &&
|
||||
specialArea != 31
|
||||
"
|
||||
src="@/static/images/cart.png"
|
||||
alt=""
|
||||
/>
|
||||
</template>
|
||||
<template v-else>
|
||||
<img
|
||||
@click.stop="addCar(item)"
|
||||
v-show="
|
||||
item.preSaleStatus != 3 &&
|
||||
item.isSale != 1 &&
|
||||
Number(item.inventory)
|
||||
"
|
||||
src="@/static/images/cart.png"
|
||||
alt=""
|
||||
/>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<selSpaceGoods ref="selSpaceGoods" @getCar="getCatLength"></selSpaceGoods>
|
||||
<cartBall
|
||||
ref="cart"
|
||||
:carLength="shopCarLength"
|
||||
:specialArea="specialArea"
|
||||
></cartBall>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import cartBall from '@/components/cartBall.vue'
|
||||
import { mapGetters, mapActions } from 'vuex'
|
||||
import * as api from '@/config/goods'
|
||||
import selSpaceGoods from '@/components/selSpaceGoods.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
cartBall,
|
||||
selSpaceGoods,
|
||||
},
|
||||
props: {
|
||||
specialAreaProp: {
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
computed: {},
|
||||
filters: {
|
||||
seles(value) {
|
||||
if (value > 999) {
|
||||
return 999 + '+'
|
||||
} else {
|
||||
return value
|
||||
}
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
newShareMember: false,
|
||||
specialArea: 41,
|
||||
oneList: [],
|
||||
oneId: '',
|
||||
twoList: [],
|
||||
twoId: '',
|
||||
goodList: [],
|
||||
titLabel: '',
|
||||
diff: 0,
|
||||
shopCarLength: false,
|
||||
userInfo: {},
|
||||
pkCountry: 1,
|
||||
pkCountryLabel: '',
|
||||
pkCountryImg: '',
|
||||
countryList: [],
|
||||
isCountry: false,
|
||||
waresName: '',
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.newShareMember = uni.getStorageSync('User')?.loginType !== 0
|
||||
console.log(this.newShareMember, '...this.newShareMember')
|
||||
this.setSpecial({
|
||||
value: this.specialArea,
|
||||
})
|
||||
this.$nextTick(() => {
|
||||
this.$refs.cart.getCar()
|
||||
})
|
||||
},
|
||||
onHide() {
|
||||
this.$refs.cart.close()
|
||||
this.setSmallCarLength(0)
|
||||
},
|
||||
beforeDestroy() {
|
||||
console.log('beforeDestroy........?')
|
||||
this.setSmallCarLength(0)
|
||||
},
|
||||
methods: {
|
||||
...mapActions(['setSmallCarLength', 'setShopCarLength']),
|
||||
changeCountry() {
|
||||
this.isCountry = true
|
||||
},
|
||||
sureCountry(e) {
|
||||
const { value } = e
|
||||
this.pkCountry = value[0].id
|
||||
this.pkCountryLabel = value[0].label
|
||||
this.pkCountryImg = value[0].img
|
||||
this.isCountry = false
|
||||
uni.setStorageSync('pkCountry', this.pkCountry + '')
|
||||
// 获取分类一级
|
||||
this.getClassIfy()
|
||||
this.$refs.cart.getCar()
|
||||
},
|
||||
|
||||
goShare() {
|
||||
uni.navigateTo({
|
||||
url: '/pages/specialArea/share?specialArea=7',
|
||||
})
|
||||
},
|
||||
setSpecial(item) {
|
||||
this.specialArea = item.value
|
||||
this.getClassIfy()
|
||||
},
|
||||
addCar(item) {
|
||||
let carList = {
|
||||
pkCountry: this.pkCountry,
|
||||
specialArea: item.specialArea,
|
||||
number: 1,
|
||||
waresCode: item.waresCode,
|
||||
productGroup: item.productGroup,
|
||||
}
|
||||
if (
|
||||
item.isMakerGift == 2 &&
|
||||
(item.specialArea == 1 || item.specialArea == 3)
|
||||
) {
|
||||
this.$refs.selSpaceGoods.getData(carList)
|
||||
} else {
|
||||
api.addShopping(carList).then(res => {
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: '购物车添加成功',
|
||||
icon: 'success',
|
||||
mask: true,
|
||||
duration: 500,
|
||||
})
|
||||
setTimeout(() => {
|
||||
this.$store
|
||||
.dispatch('getCarLength', this.specialArea)
|
||||
.then(res => {
|
||||
this.shopCarLength = res.data.smallCount
|
||||
})
|
||||
}, 200)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
getCatLength() {
|
||||
this.$store.dispatch('getCarLength', this.specialArea).then(res => {
|
||||
this.shopCarLength = res.data.smallCount
|
||||
})
|
||||
},
|
||||
getClassIfy() {
|
||||
api
|
||||
.classifyList({
|
||||
pkCountry: this.pkCountry,
|
||||
specialArea: this.specialArea,
|
||||
hierarchy: 0,
|
||||
})
|
||||
.then(res => {
|
||||
// res.data.unshift({
|
||||
// classifyName: '全部',
|
||||
// pkId: '',
|
||||
// })
|
||||
this.oneList = res.data
|
||||
this.oneId = this.oneList[0] ? this.oneList[0].pkId : ''
|
||||
this.getClassIfyTwo(this.oneList[0].pkId)
|
||||
this.getAllGoods(this.oneList[0].pkId)
|
||||
})
|
||||
},
|
||||
// 获取分类二级
|
||||
getClassIfyTwo(pkId) {
|
||||
api
|
||||
.classifyList({
|
||||
specialArea: this.specialArea,
|
||||
pkParent: pkId,
|
||||
hierarchy: 1,
|
||||
pkCountry: this.pkCountry,
|
||||
})
|
||||
.then(res => {
|
||||
res.data.unshift({
|
||||
classifyName: '全部',
|
||||
pkId: pkId,
|
||||
})
|
||||
this.twoList = res.data
|
||||
this.twoList = this.twoList.filter(item => 'classifyName' in item)
|
||||
this.twoId = pkId
|
||||
})
|
||||
},
|
||||
getAllGoods(id) {
|
||||
api
|
||||
.getAllGoods({
|
||||
pkCountry: this.pkCountry,
|
||||
specialArea: Number(this.specialArea),
|
||||
pkAreaClassify: id ? id : '',
|
||||
})
|
||||
.then(res => {
|
||||
this.goodList = res.data
|
||||
console.log(this.goodList, '...this.goodList0000123')
|
||||
this.goodList.forEach(item => {
|
||||
if (item.waresName.length > 11) {
|
||||
item.waresName = item.waresName.substring(0, 11) + '...'
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
getAllGoods1(id) {
|
||||
api
|
||||
.getAllGoods({
|
||||
pkCountry: this.pkCountry,
|
||||
specialArea: this.specialArea,
|
||||
waresName: this.waresName,
|
||||
pkAreaClassify: id ? id : this.oneId,
|
||||
})
|
||||
.then(res => {
|
||||
this.goodList = res.data
|
||||
this.goodList.forEach(item => {
|
||||
if (item.waresName.length > 11) {
|
||||
item.waresName = item.waresName.substring(0, 11) + '...'
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
goDetails(item) {
|
||||
if (item.specialArea === 14 && !Number(item.inventory)) {
|
||||
return
|
||||
}
|
||||
if (item.preSaleStatus != 3 && item.isSale != 1) {
|
||||
uni.navigateTo({
|
||||
url:
|
||||
'/pages/specialArea/details?waresCode=' +
|
||||
item.waresCode +
|
||||
'&specialArea=' +
|
||||
item.specialArea,
|
||||
})
|
||||
}
|
||||
},
|
||||
// 处理库存百分比,移除百分号并转换为数字
|
||||
getInventoryPercentage(inventory) {
|
||||
if (typeof inventory === 'string') {
|
||||
// 移除百分号并转换为数字
|
||||
const numStr = inventory.replace('%', '').trim()
|
||||
const num = parseFloat(numStr)
|
||||
return isNaN(num) ? 0 : Math.min(100, Math.max(0, num))
|
||||
} else if (typeof inventory === 'number') {
|
||||
// 如果是数字,确保在0-100范围内
|
||||
return Math.min(100, Math.max(0, inventory))
|
||||
}
|
||||
return 0
|
||||
},
|
||||
// 根据库存百分比返回对应的进度条样式类
|
||||
getProgressClass(inventory) {
|
||||
const percentage = this.getInventoryPercentage(inventory)
|
||||
if (percentage >= 80) {
|
||||
return 'progress-high'
|
||||
} else if (percentage >= 60) {
|
||||
return 'progress-medium-high'
|
||||
} else if (percentage >= 40) {
|
||||
return 'progress-medium'
|
||||
} else if (percentage >= 20) {
|
||||
return 'progress-low'
|
||||
} else {
|
||||
return 'progress-critical'
|
||||
}
|
||||
},
|
||||
// 根据库存百分比返回百分比数字的样式类
|
||||
getPercentageClass(inventory) {
|
||||
const percentage = this.getInventoryPercentage(inventory)
|
||||
if (percentage <= 20) {
|
||||
return 'percentage-critical'
|
||||
} else if (percentage <= 30) {
|
||||
return 'percentage-urgent'
|
||||
} else {
|
||||
return 'percentage-normal'
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.index_header {
|
||||
background: #fff;
|
||||
font-size: 18px;
|
||||
font-family:
|
||||
PingFang SC-Semibold,
|
||||
PingFang SC;
|
||||
font-weight: 600;
|
||||
color: #333333;
|
||||
text-align: center;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.goods-list-content {
|
||||
// background: #f9f9f9;
|
||||
height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.index_btm {
|
||||
flex: 1; // display: flex;
|
||||
|
||||
.index_l {
|
||||
width: 198rpx;
|
||||
padding: 10rpx 0;
|
||||
font-size: 11px;
|
||||
font-family:
|
||||
PingFang SC-Regular,
|
||||
PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #000000;
|
||||
overflow-y: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
height: 86vh;
|
||||
background: #f2f2f2;
|
||||
}
|
||||
|
||||
.index_r {
|
||||
// flex: 1;
|
||||
background: #fff;
|
||||
margin-left: 198rpx; // padding: 20rpx;
|
||||
// display: flex;
|
||||
}
|
||||
|
||||
.index_r_2 {
|
||||
// flex: 1;
|
||||
background: #fff;
|
||||
padding-top: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.classIfy {
|
||||
padding: 20rpx 20rpx;
|
||||
margin: 20rpx 0;
|
||||
font-size: 26rpx;
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 400;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.actOne {
|
||||
// border-left: 6rpx solid #005BAC;
|
||||
color: #fff;
|
||||
background: #005bac;
|
||||
}
|
||||
|
||||
.tab {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 24rpx;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.tab_i {
|
||||
// width: 120rpx;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #999999;
|
||||
margin-right: 28rpx;
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background-color: #f6f6f6;
|
||||
color: #666;
|
||||
border-radius: 200rpx;
|
||||
padding: 0 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
line-height: 1;
|
||||
height: 58rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.actTab {
|
||||
// width: 120rpx;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
font-family:
|
||||
PingFang SC-Semibold,
|
||||
PingFang SC;
|
||||
font-weight: 600;
|
||||
// color: #005BAC;
|
||||
background-color: #005bac;
|
||||
color: #fff;
|
||||
margin-right: 28rpx;
|
||||
white-space: nowrap;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
border-radius: 200rpx;
|
||||
padding: 0 20rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
line-height: 1;
|
||||
height: 58rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.heng {
|
||||
width: 24px;
|
||||
height: 2px;
|
||||
background: #005bac;
|
||||
border-radius: 1px 1px 1px 1px;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
|
||||
.heng1 {
|
||||
width: 24px;
|
||||
height: 2px;
|
||||
background: f9f9f9;
|
||||
border-radius: 1px 1px 1px 1px;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
|
||||
.heng2 {
|
||||
width: 24px;
|
||||
height: 2px;
|
||||
background: f9f9f9;
|
||||
border-radius: 1px 1px 1px 1px;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
|
||||
::v-deep .u-scroll-list {
|
||||
padding-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.zhan {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.goodList {
|
||||
padding: 0 20rpx;
|
||||
|
||||
.goodList_i {
|
||||
// display: flex;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 20rpx 0 10rpx;
|
||||
position: relative;
|
||||
|
||||
.goodList_ir {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
font-size: 30rpx;
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
margin-left: 24rpx;
|
||||
.goodList_ib {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 32rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #f82c1a;
|
||||
|
||||
img {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fly {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
top: 0;
|
||||
background: #eee;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
.cover {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
background: #ffffff;
|
||||
border: 1px solid #eeeeee;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.pv {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.shareImg {
|
||||
position: fixed;
|
||||
margin: 14rpx 24rpx;
|
||||
z-index: 9999;
|
||||
right: 20rpx;
|
||||
top: 5rpx;
|
||||
}
|
||||
|
||||
.shareImg1 {
|
||||
position: fixed;
|
||||
margin: 14rpx 24rpx;
|
||||
z-index: 1;
|
||||
right: 10rpx;
|
||||
top: 10rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
width: 40rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.qzbq {
|
||||
background: #d61820;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
font-size: 10px;
|
||||
// font-family: PingFang SC-Semibold, PingFang SC;
|
||||
// font-weight: 600;
|
||||
color: #ffffff;
|
||||
padding: 0px 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.search {
|
||||
margin: 10rpx 20rpx;
|
||||
padding: 10rpx;
|
||||
background: #eeeeee;
|
||||
border-radius: 20px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.image-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.triangle-badge {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-top: 100rpx solid #005bac;
|
||||
border-right: 100rpx solid transparent;
|
||||
border-radius: 10rpx 0 0 0;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.triangle-badge-text {
|
||||
position: absolute;
|
||||
color: #ffffff;
|
||||
font-weight: 600;
|
||||
line-height: 1;
|
||||
transform: rotate(-45deg);
|
||||
transform-origin: center;
|
||||
white-space: nowrap;
|
||||
text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
/* 2个字样式 */
|
||||
.triangle-badge-text.text-2 {
|
||||
top: -76rpx;
|
||||
left: 10rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
/* 3个字样式 */
|
||||
.triangle-badge-text.text-3 {
|
||||
top: -70rpx;
|
||||
left: -2rpx;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
/* 4个字样式 */
|
||||
.triangle-badge-text.text-4 {
|
||||
top: -72rpx;
|
||||
left: -4rpx;
|
||||
font-size: 20rpx;
|
||||
}
|
||||
|
||||
/* 库存进度条样式 - 升级版 */
|
||||
.inventory-progress-container {
|
||||
// margin-bottom: 10rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
.inventory-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-right: 10rpx;
|
||||
// margin-bottom: 12rpx;
|
||||
|
||||
.inventory-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 24rpx;
|
||||
|
||||
.fire-icon,
|
||||
.warning-icon {
|
||||
font-size: 28rpx;
|
||||
margin-right: 8rpx;
|
||||
animation: iconBounce 1.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.inventory-status {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
.inventory-percentage {
|
||||
font-size: 24rpx;
|
||||
font-weight: 700;
|
||||
font-family:
|
||||
DIN Alternate,
|
||||
Arial,
|
||||
sans-serif;
|
||||
|
||||
&.percentage-critical {
|
||||
color: #ff3742;
|
||||
animation: percentageBlink 1s ease-in-out infinite;
|
||||
text-shadow: 0 0 10rpx rgba(255, 55, 66, 0.3);
|
||||
}
|
||||
|
||||
&.percentage-urgent {
|
||||
color: #ff5252;
|
||||
animation: percentageGlow 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
&.percentage-normal {
|
||||
color: #005bac;
|
||||
}
|
||||
}
|
||||
|
||||
.inventory-progress-bar {
|
||||
width: 0;
|
||||
flex: 1;
|
||||
height: 18rpx;
|
||||
margin-right: 10rpx;
|
||||
background: rgba(0, 0, 0, 0.08);
|
||||
border-radius: 12rpx;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
box-shadow: inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
.inventory-progress-fill {
|
||||
height: 100%;
|
||||
border-radius: 8rpx;
|
||||
transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
/* 进度条渐变色彩 */
|
||||
&.progress-critical {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
#ff1744 0%,
|
||||
#d50000 50%,
|
||||
#ff1744 100%
|
||||
);
|
||||
box-shadow: 0 0 20rpx rgba(255, 23, 68, 0.4);
|
||||
animation: criticalPulse 1.5s ease-in-out infinite;
|
||||
}
|
||||
|
||||
&.progress-low {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
#ff5722 0%,
|
||||
#e64a19 50%,
|
||||
#ff5722 100%
|
||||
);
|
||||
box-shadow: 0 0 15rpx rgba(255, 87, 34, 0.3);
|
||||
}
|
||||
|
||||
&.progress-medium {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
#ff9800 0%,
|
||||
#f57c00 50%,
|
||||
#ff9800 100%
|
||||
);
|
||||
box-shadow: 0 0 10rpx rgba(255, 152, 0, 0.2);
|
||||
}
|
||||
|
||||
&.progress-medium-high {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
#2196f3 0%,
|
||||
#1976d2 50%,
|
||||
#2196f3 100%
|
||||
);
|
||||
box-shadow: 0 0 8rpx rgba(33, 150, 243, 0.2);
|
||||
}
|
||||
|
||||
&.progress-high {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
#4caf50 0%,
|
||||
#388e3c 25%,
|
||||
#005bac 75%,
|
||||
#003d82 100%
|
||||
);
|
||||
box-shadow: 0 0 8rpx rgba(0, 91, 172, 0.2);
|
||||
}
|
||||
|
||||
/* 流动光效 */
|
||||
.progress-shine {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -100%;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
transparent 0%,
|
||||
rgba(255, 255, 255, 0.8) 50%,
|
||||
transparent 100%
|
||||
);
|
||||
animation: shineFlow 2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
/* 高光效果 */
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 60%;
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
rgba(255, 255, 255, 0.4) 0%,
|
||||
rgba(255, 255, 255, 0.1) 50%,
|
||||
transparent 100%
|
||||
);
|
||||
border-radius: 8rpx 8rpx 0 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 动画定义 */
|
||||
@keyframes iconBounce {
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes percentageBlink {
|
||||
0%,
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
50% {
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes percentageGlow {
|
||||
0%,
|
||||
100% {
|
||||
text-shadow: 0 0 5rpx rgba(255, 82, 82, 0.3);
|
||||
}
|
||||
50% {
|
||||
text-shadow: 0 0 15rpx rgba(255, 82, 82, 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes criticalPulse {
|
||||
0%,
|
||||
100% {
|
||||
box-shadow: 0 0 20rpx rgba(255, 23, 68, 0.4);
|
||||
}
|
||||
50% {
|
||||
box-shadow: 0 0 30rpx rgba(255, 23, 68, 0.7);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shineFlow {
|
||||
0% {
|
||||
left: -100%;
|
||||
}
|
||||
100% {
|
||||
left: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,18 +1,29 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-12 17:17:03
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2023-03-24 10:42:40
|
||||
-->
|
||||
<template>
|
||||
<u-popup :show="sucShow" closeable :round="10" mode="center" @close="sucShow= false">
|
||||
<view class="pop_a">
|
||||
<view class="tit">
|
||||
<u-icon name="checkmark-circle-fill" color="#029B00"></u-icon>
|
||||
<view>{{'注册成功'}}</view>
|
||||
<view>{{$t('w_0158')}}</view>
|
||||
</view>
|
||||
<!-- <view class="digBody">
|
||||
<view class="red">{{'恭喜您注册成功'}}
|
||||
<view class="red">{{$t('w_0159')}}
|
||||
<view class="copy"
|
||||
@click="onCopy">{{'复制'}}</view>
|
||||
@click="onCopy">{{$t('MY_CK_27')}}</view>
|
||||
</view>
|
||||
<view>{{'会员姓名'}}: {{ allData.memberName }}</view>
|
||||
<view>{{'会员编号'}}: {{ allData.memberCode }}</view>
|
||||
<view>{{$t('CK_KS_14')}}: {{ allData.memberName }}</view>
|
||||
<view>{{$t('MN_T_1')}}: {{ allData.memberCode }}</view>
|
||||
<view>会员电话: {{ allData.phone }}</view>
|
||||
<view>登录密码: {{ allData.loginPassword }}</view>
|
||||
<view>支付密码: {{ allData.payPassword }}</view>
|
||||
|
|
@ -22,32 +33,32 @@
|
|||
<span slot="footer"
|
||||
class="dialog-footer">
|
||||
<view class="btn"
|
||||
@click="handleClose">{{'确定'}}</view>
|
||||
@click="handleClose">{{$t('w_0035')}}</view>
|
||||
<view class="hui"
|
||||
@click="handleClose">取消</view>
|
||||
</span> -->
|
||||
<!-- <view class="tit1">{{'恭喜您注册成功'}}</view> -->
|
||||
<view class="getCode" @tap="onCopy">{{'复制'}}</view>
|
||||
<!-- <view class="tit1">{{$t('w_0159')}}</view> -->
|
||||
<view class="getCode" @tap="onCopy">{{$t('MY_CK_27')}}</view>
|
||||
<view class="form">
|
||||
<u--form labelPosition="left" labelWidth="80px" :model="allData" ref="uForm">
|
||||
<u-form-item :label="'会员姓名'+':'" borderBottom>
|
||||
<u-form-item :label="$t('CK_KS_14')+':'" borderBottom>
|
||||
<u--input v-model="allData.memberName" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'会员编号'+':'" borderBottom>
|
||||
<u-form-item :label="$t('MN_T_1')+':'" borderBottom>
|
||||
<u--input v-model="allData.memberCode" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'会员电话'+':'" borderBottom>
|
||||
<u-form-item :label="$t('w_0160')+':'" borderBottom>
|
||||
<u--input v-model="allData.phone" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'登录密码'+':'" borderBottom>
|
||||
<u-form-item :label="$t('w_0041')+':'" borderBottom>
|
||||
<u--input v-model="allData.loginPassword" border="none">
|
||||
</u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'支付密码'+':'" borderBottom>
|
||||
<u-form-item :label="$t('N_I_217')+':'" borderBottom>
|
||||
<u--input v-model="allData.payPassword" border="none">
|
||||
</u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'登录网址'+':'" borderBottom>
|
||||
<u-form-item :label="$t('w_0161')+':'" borderBottom>
|
||||
<u--input v-model="allData.urlAddress" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<!-- <u-form-item :label="'公众号搜索'+':'"
|
||||
|
|
@ -68,8 +79,8 @@
|
|||
</u--form>
|
||||
<view class="disflx">
|
||||
<u-button type="success" class="uBtn" shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )"
|
||||
@tap="handleClose">{{'确定'}}</u-button>
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )"
|
||||
@tap="handleClose">{{$t('w_0035')}}</u-button>
|
||||
</view>
|
||||
</view>
|
||||
<img class="yh" v-show="bia" src="@/static/images/yh.gif" alt="">
|
||||
|
|
@ -104,22 +115,22 @@
|
|||
payPw() {},
|
||||
onCopy() {
|
||||
let text =
|
||||
'会员姓名' + ':' +
|
||||
this.$t('CK_KS_14') + ':' +
|
||||
this.allData.memberName +
|
||||
'\n' +
|
||||
'会员编号' + ':' +
|
||||
this.$t('MN_T_1') + ':' +
|
||||
this.allData.memberCode +
|
||||
'\n' +
|
||||
'会员电话' + ':' +
|
||||
this.$t('w_0160') + ':' +
|
||||
this.allData.phone +
|
||||
'\n' +
|
||||
'登录密码' + ':' +
|
||||
this.$t('w_0041') + ':' +
|
||||
this.allData.loginPassword +
|
||||
'\n' +
|
||||
'支付密码' + ':' +
|
||||
this.$t('N_I_217') + ':' +
|
||||
this.allData.payPassword +
|
||||
'\n' +
|
||||
'登录网址' + ':' +
|
||||
this.$t('w_0161') + ':' +
|
||||
this.allData.urlAddress
|
||||
// +
|
||||
// '\n' +
|
||||
|
|
@ -135,7 +146,7 @@
|
|||
// this.allData.android
|
||||
this.$copyText(text).then((res) => {
|
||||
uni.showToast({
|
||||
title: '复制成功',
|
||||
title: this.$t('MY_CK_29'),
|
||||
icon: 'none',
|
||||
})
|
||||
})
|
||||
|
|
@ -202,7 +213,7 @@
|
|||
font-size: 30rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #005BAC;
|
||||
color: #fb3024;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,371 +1,354 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="seach">
|
||||
<view class="seach_i">
|
||||
<u--input
|
||||
prefixIcon="search"
|
||||
v-model="queryParams.memberInfo"
|
||||
prefixIconStyle="font-size: 22px;color: #909399;height:32px"
|
||||
border="none"
|
||||
:placeholder="'请输入会员编号或姓名查询'"
|
||||
suffixIconStyle="color: #909399"
|
||||
></u--input>
|
||||
</view>
|
||||
<view class="neibox" @click="listShow = true">
|
||||
<view>{{ thegrade ? thegrade : '注册等级' }}</view>
|
||||
<u-icon name="arrow-down-fill" color="#000000" size="14"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 日期区间 -->
|
||||
<view class="timeSlide">
|
||||
<view class="timeA">{{ '日期区间' }}</view>
|
||||
<view class="timeB" @click="openDate(0)">
|
||||
{{
|
||||
queryParams.startCreationTime
|
||||
? queryParams.startCreationTime
|
||||
: '开始时间'
|
||||
}}
|
||||
</view>
|
||||
<view class="timeA">{{ '至' }}</view>
|
||||
<view class="timeB" @click="openDate(1)">
|
||||
{{
|
||||
queryParams.endCreationTime ? queryParams.endCreationTime : '结束时间'
|
||||
}}
|
||||
</view>
|
||||
<view class="seatch_r" @click="clickTap()">
|
||||
<u-icon name="search" size="22" color="#fff"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<view class="content">
|
||||
<view class="seach">
|
||||
<view class="seach_i">
|
||||
<u--input prefixIcon="search" v-model="queryParams.memberInfo"
|
||||
prefixIconStyle="font-size: 22px;color: #909399;height:32px" border="none"
|
||||
:placeholder="$t('w_0351')" suffixIconStyle="color: #909399"></u--input>
|
||||
</view>
|
||||
<view class="neibox" @click="listShow=true">
|
||||
<view>{{thegrade?thegrade:$t('PER_DA_5')}}</view>
|
||||
<u-icon name="arrow-down-fill" color="#000000" size="14"></u-icon>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<!-- 日期区间 -->
|
||||
<view class="timeSlide">
|
||||
<view class="timeA">{{$t('w_0352')}}</view>
|
||||
<view class="timeB" @click="openDate(0)">
|
||||
{{ queryParams.startCreationTime?queryParams.startCreationTime:$t('CK_KS_3') }}
|
||||
</view>
|
||||
<view class="timeA">{{$t('w_0139')}}</view>
|
||||
<view class="timeB" @click="openDate(1)">
|
||||
{{ queryParams.endCreationTime?queryParams.endCreationTime:$t('CK_KS_9') }}
|
||||
</view>
|
||||
<view class="seatch_r" @click="clickTap()">
|
||||
<u-icon name="search" size="22" color="#fff"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 轮次 -->
|
||||
<!-- <view class="thecontent" v-for='(item,index) in roundObj' :key="index" >
|
||||
<view class="thecontent" v-for='(item,index) in roundObj' >
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{'轮数'}}</view>
|
||||
<view class='line1'>{{$t('w_0260')}}</view>
|
||||
<view class='line2' v-if="item.round!='暂无'">{{item.round}}轮</view>
|
||||
<view class='line2' v-else>{{item.round}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{'次数'}}</view>
|
||||
<view class='line1'>{{$t('N_I_156')}}</view>
|
||||
<view class='line2' v-if="item.second!='暂无'">{{item.second}}次</view>
|
||||
<view class='line2' v-else>{{item.second}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{'业绩'}}</view>
|
||||
<view class='line1'>{{$t('MN_F_T_453') +'(PV)'}}</view>
|
||||
<view class='line2' v-if="item.calAchieve!='暂无'">{{item.calAchieve|toThousandthAndKeepDecimal}}</view>
|
||||
<view class='line2' v-else>{{item.calAchieve}}</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="thecontent" v-for="(item, index) in dataList" :key="index">
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '会员编号' }}</view>
|
||||
<view class="line2">{{ item.memberCode }}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '会员姓名' }}</view>
|
||||
<view class="line2">{{ item.memberName }}</view>
|
||||
</view>
|
||||
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '注册金额' }}({{ isLocaled() }})</view>
|
||||
<view class="line2">{{
|
||||
item.orderAmount | toThousandthAndKeepDecimal
|
||||
}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '注册业绩' }}</view>
|
||||
<view class="line2">{{
|
||||
item.orderAchieve | toThousandthAndKeepDecimal
|
||||
}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '注册等级' }}</view>
|
||||
<view class="line2">{{ item.pkRegisterGradeStr }}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '订单类型' }}</view>
|
||||
<view class="line2">{{ item.orderTypeStr }}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '轮数' }}</view>
|
||||
<view class="line2">{{ item.round }}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1">{{ '次数' }}</view>
|
||||
<view class="line2">{{ item.second }}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class="line1"> {{ '注册时间' }}</view>
|
||||
<view class="line2">{{ item.creationTime }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<u-datetime-picker
|
||||
:closeOnClickOverlay="true"
|
||||
@close="dataShow = false"
|
||||
@cancel="dataShow = false"
|
||||
@confirm="getDate"
|
||||
:show="dataShow"
|
||||
v-model="value1"
|
||||
mode="date"
|
||||
></u-datetime-picker>
|
||||
<u-picker
|
||||
@cancel="listShow = false"
|
||||
:show="listShow"
|
||||
ref="uPicker"
|
||||
:columns="gradeList"
|
||||
@confirm="confirm"
|
||||
keyName="gradeName"
|
||||
></u-picker>
|
||||
</view>
|
||||
<view class="thecontent" v-for='(item,index) in dataList' :key="index">
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('MN_T_1')}}</view>
|
||||
<view class='line2'>{{item.memberCode}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('CK_KS_14')}}</view>
|
||||
<view class='line2'>{{item.memberName}}</view>
|
||||
</view>
|
||||
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('N_I_169')}}({{ isLocaled() }})</view>
|
||||
<view class='line2'>{{item.orderAmount |toThousandthAndKeepDecimal}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('PER_DA_10')}}(PV)</view>
|
||||
<view class='line2'>{{item.orderAchieve|toThousandthAndKeepDecimal}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('PER_DA_5')}}</view>
|
||||
<view class='line2'>{{item.pkRegisterGradeStr}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('MY_ORD_2')}}</view>
|
||||
<view class='line2'>{{item.orderTypeStr}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('w_0260')}}</view>
|
||||
<view class='line2'>{{item.round}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('N_I_156')}}</view>
|
||||
<view class='line2'>{{item.second}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>
|
||||
{{$t('S_L_5')}}</view>
|
||||
<view class='line2'>{{item.creationTime}}</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<u-datetime-picker :closeOnClickOverlay="true" @close="dataShow = false" @cancel="dataShow = false"
|
||||
@confirm="getDate" :show="dataShow" v-model="value1" mode="date"></u-datetime-picker>
|
||||
<u-picker @cancel='listShow=false' :show="listShow" ref="uPicker" :columns="gradeList" @confirm="confirm"
|
||||
keyName='gradeName'></u-picker>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as mar from '@/config/market.js'
|
||||
import { nextRound } from '@/config/bonus.js'
|
||||
import { isLocaled } from '@/util/numberToCurrency'
|
||||
import { formatMsToDate } from '@/util/index'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
minDate: Number(new Date()),
|
||||
navIndex: 0,
|
||||
navList: [
|
||||
{ name: '直推列表', path: '0', menuKey: '' },
|
||||
{ name: '三单循环', path: '0', menuKey: '' },
|
||||
{ name: '免费注册', path: '0', menuKey: '' },
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
memberInfo: '',
|
||||
startCreationTime: '',
|
||||
endCreationTime: '',
|
||||
pkRegisterGrade: '',
|
||||
},
|
||||
dataShow: false,
|
||||
timeIndex: 0,
|
||||
listShow: false,
|
||||
thegrade: '',
|
||||
value1: '',
|
||||
gradeList: [],
|
||||
dataList: [],
|
||||
roundObj: [],
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
// this.getOthers()
|
||||
},
|
||||
created() {
|
||||
this.getDataList()
|
||||
this.value1 = Number(new Date())
|
||||
this.getOthers()
|
||||
// this.getTime()
|
||||
},
|
||||
methods: {
|
||||
isLocaled,
|
||||
getTime() {
|
||||
nextRound().then(res => {
|
||||
if (res.rows.length == 0) {
|
||||
res.rows = [
|
||||
import * as mar from "@/config/market.js"
|
||||
import {
|
||||
nextRound
|
||||
} from "@/config/bonus.js"
|
||||
import { isLocaled } from '@/util/numberToCurrency'
|
||||
import {
|
||||
formatMsToDate
|
||||
} from '@/util/index'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
minDate:Number(new Date()),
|
||||
navIndex:0,
|
||||
navList: [
|
||||
{ name: this.$t('ENU_MENU_581'),path:"0",menuKey:'' },
|
||||
{ name: this.$t('ENU_MENU_582'),path:"0",menuKey:''},
|
||||
{ name: this.$t('ENU_MENU_583') ,path:"0",menuKey:'' },
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
memberInfo: "",
|
||||
startCreationTime: "",
|
||||
endCreationTime: "",
|
||||
pkRegisterGrade: ""
|
||||
},
|
||||
dataShow: false,
|
||||
timeIndex: 0,
|
||||
listShow: false,
|
||||
thegrade: "",
|
||||
value1: '',
|
||||
gradeList: [],
|
||||
dataList: [],
|
||||
roundObj:[]
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
// this.getOthers()
|
||||
|
||||
},
|
||||
created() {
|
||||
this.getDataList()
|
||||
this.value1 = Number(new Date())
|
||||
this.getOthers()
|
||||
this.getTime()
|
||||
},
|
||||
methods: {
|
||||
isLocaled,
|
||||
getTime(){
|
||||
nextRound().then((res) => {
|
||||
if(res.rows.length == 0){
|
||||
res.rows=[
|
||||
{
|
||||
round: '暂无',
|
||||
second: '暂无',
|
||||
calAchieve: '暂无',
|
||||
},
|
||||
round:'暂无',
|
||||
second:'暂无',
|
||||
calAchieve:'暂无',
|
||||
}
|
||||
]
|
||||
}
|
||||
this.roundObj = res.rows
|
||||
})
|
||||
},
|
||||
getOthers() {
|
||||
mar.getGradeList().then(res => {
|
||||
this.gradeList = [res.data]
|
||||
})
|
||||
},
|
||||
clickTap() {
|
||||
this.dataList = []
|
||||
this.getDataList()
|
||||
},
|
||||
clickHref(index) {
|
||||
this.navIndex = index
|
||||
},
|
||||
getMenuLists() {
|
||||
mar.menuList().then(res => {
|
||||
console.error(res)
|
||||
res.data.forEach(item => {
|
||||
if (item.menuKey == 'directList') {
|
||||
this.navList[0].menuKey = 'directList'
|
||||
}
|
||||
if (item.menuKey == 'attractDetailList') {
|
||||
this.navList[1].menuKey = 'attractDetailList'
|
||||
}
|
||||
if (item.menuKey == 'haiList') {
|
||||
this.navList[2].menuKey = 'haiList'
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
getOthers() {
|
||||
mar.getGradeList().then(res => {
|
||||
this.gradeList = [res.data]
|
||||
})
|
||||
},
|
||||
getDataList(num) {
|
||||
this.queryParams.pageNum = num || 1
|
||||
mar.tripleCycleList(this.queryParams).then(res => {
|
||||
this.dataList = [...this.dataList, ...res.rows]
|
||||
})
|
||||
},
|
||||
openDate(index) {
|
||||
this.timeIndex = index
|
||||
this.dataShow = true
|
||||
},
|
||||
confirm(e) {
|
||||
this.queryParams.pkRegisterGrade = e.value[0].pkId
|
||||
this.thegrade = e.value[0].gradeName
|
||||
this.listShow = false
|
||||
this.dataList = []
|
||||
this.getDataList()
|
||||
},
|
||||
getDate(e) {
|
||||
if (this.timeIndex == 1) {
|
||||
this.queryParams.endCreationTime = formatMsToDate(e.value)
|
||||
} else {
|
||||
this.queryParams.startCreationTime = formatMsToDate(e.value)
|
||||
}
|
||||
this.dataShow = false
|
||||
},
|
||||
},
|
||||
}
|
||||
getOthers() {
|
||||
mar.getGradeList().then((res) => {
|
||||
this.gradeList = [res.data];
|
||||
});
|
||||
},
|
||||
clickTap(){
|
||||
this.dataList =[]
|
||||
this.getDataList()
|
||||
},
|
||||
clickHref(index){
|
||||
this.navIndex = index
|
||||
},
|
||||
getMenuLists(){
|
||||
mar.menuList().then((res) => {
|
||||
console.error(res)
|
||||
res.data.forEach((item)=>{
|
||||
if(item.menuKey == 'directList'){
|
||||
this.navList[0].menuKey = 'directList'
|
||||
}
|
||||
if(item.menuKey == 'attractDetailList'){
|
||||
this.navList[1].menuKey = 'attractDetailList'
|
||||
}
|
||||
if(item.menuKey == 'haiList'){
|
||||
this.navList[2].menuKey = 'haiList'
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
getOthers() {
|
||||
mar.getGradeList().then((res) => {
|
||||
this.gradeList = [res.data];
|
||||
});
|
||||
},
|
||||
getDataList(num) {
|
||||
this.queryParams.pageNum = num || 1
|
||||
mar.tripleCycleList(this.queryParams).then(res => {
|
||||
this.dataList = [...this.dataList,...res.rows]
|
||||
|
||||
})
|
||||
},
|
||||
openDate(index) {
|
||||
this.timeIndex = index
|
||||
this.dataShow = true
|
||||
},
|
||||
confirm(e) {
|
||||
this.queryParams.pkRegisterGrade = e.value[0].pkId
|
||||
this.thegrade = e.value[0].gradeName
|
||||
this.listShow = false
|
||||
this.dataList = []
|
||||
this.getDataList()
|
||||
},
|
||||
getDate(e) {
|
||||
if (this.timeIndex == 1) {
|
||||
this.queryParams.endCreationTime = formatMsToDate(e.value)
|
||||
} else {
|
||||
this.queryParams.startCreationTime = formatMsToDate(e.value)
|
||||
}
|
||||
this.dataShow = false
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/*左侧分类视图*/
|
||||
.left_scrol_style {
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
.styles {
|
||||
border: none !important;
|
||||
color: #fff !important;
|
||||
background: #d61820;
|
||||
}
|
||||
.top-lists {
|
||||
width: fit-content;
|
||||
display: flex;
|
||||
padding: 30rpx 30rpx 0 0;
|
||||
background-color: #fff;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
.nav-view {
|
||||
width: 200rpx;
|
||||
cursor: pointer;
|
||||
padding: 0 26rpx;
|
||||
height: 44rpx;
|
||||
border-radius: 10rpx;
|
||||
border: 1rpx solid #999999;
|
||||
font-size: 14rpx;
|
||||
text-align: center;
|
||||
line-height: 44rpx;
|
||||
margin-left: 20rpx;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
background: #f2f2f2;
|
||||
/*左侧分类视图*/
|
||||
.left_scrol_style{
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
.styles {
|
||||
border: none !important;
|
||||
color: #fff !important;
|
||||
background: #d61820;
|
||||
}
|
||||
.top-lists{
|
||||
width: fit-content;
|
||||
display: flex;
|
||||
padding: 30rpx 30rpx 0 0;
|
||||
background-color: #fff;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
.nav-view{
|
||||
width: 200rpx;
|
||||
cursor: pointer;
|
||||
padding: 0 26rpx;
|
||||
height: 44rpx;
|
||||
border-radius: 10rpx;
|
||||
border: 1rpx solid #999999;
|
||||
font-size: 14rpx;
|
||||
text-align: center;
|
||||
line-height: 44rpx;
|
||||
margin-left: 20rpx;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
background: #F2F2F2;
|
||||
|
||||
.seach {
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
padding: 20rpx 23rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
border-bottom: 2rpx solid #eee;
|
||||
.seach {
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
padding: 20rpx 23rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
border-bottom: 2rpx solid #eee;
|
||||
|
||||
.seach_i {
|
||||
padding: 0 20rpx;
|
||||
border-radius: 34rpx;
|
||||
background: #fff;
|
||||
flex: 1;
|
||||
background: #f5f6f8;
|
||||
// margin-right: 40rpx;
|
||||
}
|
||||
.seach_i {
|
||||
padding: 0 20rpx;
|
||||
border-radius: 34rpx;
|
||||
background: #fff;
|
||||
flex: 1;
|
||||
background: #f5f6f8;
|
||||
// margin-right: 40rpx;
|
||||
}
|
||||
|
||||
.neibox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 26rpx;
|
||||
font-family: PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
}
|
||||
.neibox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 26rpx;
|
||||
font-family: PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.timeSlide {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 38rpx 26rpx;
|
||||
justify-content: space-between;
|
||||
background-color: #ffffff;
|
||||
|
||||
.timeA {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333;
|
||||
margin-right: 46rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.timeB {
|
||||
font-size: 24rpx;
|
||||
font-family: Arial;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
}
|
||||
.timeSlide {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 38rpx 26rpx;
|
||||
justify-content: space-between;
|
||||
background-color: #FFFFFF;
|
||||
|
||||
.seatch_r {
|
||||
background: #005bac;
|
||||
border-radius: 50%;
|
||||
padding: 8rpx;
|
||||
margin-left: 24rpx;
|
||||
}
|
||||
}
|
||||
.timeA {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333;
|
||||
margin-right: 46rpx;
|
||||
}
|
||||
|
||||
.thecontent {
|
||||
background-color: #ffffff;
|
||||
margin-top: 25rpx;
|
||||
margin-bottom: 21rpx;
|
||||
padding: 10rpx 23rpx 30rpx 23rpx;
|
||||
.timeB {
|
||||
font-size: 24rpx;
|
||||
font-family: Arial;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.line_box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 25rpx;
|
||||
.seatch_r {
|
||||
background: #fb3024;
|
||||
border-radius: 50%;
|
||||
padding: 8rpx;
|
||||
margin-left: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.line1 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
}
|
||||
.thecontent {
|
||||
background-color: #FFFFFF;
|
||||
margin-top: 25rpx;
|
||||
margin-bottom: 21rpx;
|
||||
padding: 10rpx 23rpx 30rpx 23rpx;
|
||||
|
||||
.line2 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
.line_box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 25rpx;
|
||||
|
||||
.line3 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: rgba(251, 48, 36, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
.line1 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.line2 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.line3 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: rgba(251, 48, 36, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -4,23 +4,23 @@
|
|||
<view class="seach_i">
|
||||
<u--input prefixIcon="search" v-model="queryParams.memberInfo"
|
||||
prefixIconStyle="font-size: 22px;color: #909399;height:32px" border="none"
|
||||
:placeholder="'请输入会员编号或姓名查询'" suffixIconStyle="color: #909399"></u--input>
|
||||
:placeholder="$t('w_0351')" suffixIconStyle="color: #909399"></u--input>
|
||||
</view>
|
||||
<!-- <view class="neibox" @click="listShow=true">
|
||||
<view>{{thegrade?thegrade:'注册等级'}}</view>
|
||||
<view>{{thegrade?thegrade:$t('PER_DA_5')}}</view>
|
||||
<u-icon name="arrow-down-fill" color="#000000" size="14"></u-icon>
|
||||
</view> -->
|
||||
|
||||
</view>
|
||||
<!-- 日期区间 -->
|
||||
<view class="timeSlide">
|
||||
<view class="timeA">{{'日期区间'}}</view>
|
||||
<view class="timeA">{{$t('w_0352')}}</view>
|
||||
<view class="timeB" @click="openDate(0)">
|
||||
{{ queryParams.startCreateTime?queryParams.startCreateTime:'开始时间' }}
|
||||
{{ queryParams.startCreateTime?queryParams.startCreateTime:$t('CK_KS_3') }}
|
||||
</view>
|
||||
<view class="timeA">{{'至'}}</view>
|
||||
<view class="timeA">{{$t('w_0139')}}</view>
|
||||
<view class="timeB" @click="openDate(1)">
|
||||
{{ queryParams.endCreateTime?queryParams.endCreateTime:'结束时间' }}
|
||||
{{ queryParams.endCreateTime?queryParams.endCreateTime:$t('CK_KS_9') }}
|
||||
</view>
|
||||
<view class="seatch_r" @click="clickTap()">
|
||||
<u-icon name="search" size="22" color="#fff"></u-icon>
|
||||
|
|
@ -28,21 +28,21 @@
|
|||
</view>
|
||||
<view class="thecontent" v-for='(item,index) in dataList' :key="index">
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{'会员编号'}}</view>
|
||||
<view class='line1'>{{$t('MN_T_1')}}</view>
|
||||
<view class='line2'>{{item.memberCode}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{'会员姓名'}}</view>
|
||||
<view class='line1'>{{$t('CK_KS_14')}}</view>
|
||||
<view class='line2'>{{item.memberName}}</view>
|
||||
</view>
|
||||
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{'结算等级'}}</view>
|
||||
<view class='line1'>{{$t('CK_KS_15')}}</view>
|
||||
<view class='line2'>{{item.pkSettleGradeStr}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>
|
||||
{{'注册时间'}}</view>
|
||||
{{$t('S_L_5')}}</view>
|
||||
<view class='line2'>{{item.creationTime}}</view>
|
||||
</view>
|
||||
|
||||
|
|
@ -64,9 +64,9 @@
|
|||
return {
|
||||
navIndex:0,
|
||||
navList: [
|
||||
{ name: '直推列表',path:"0",menuKey:'' },
|
||||
{ name: '三单循环',path:"0",menuKey:''},
|
||||
{ name: '免费注册' ,path:"0",menuKey:'' },
|
||||
{ name: this.$t('ENU_MENU_581'),path:"0",menuKey:'' },
|
||||
{ name: this.$t('ENU_MENU_582'),path:"0",menuKey:''},
|
||||
{ name: this.$t('ENU_MENU_583') ,path:"0",menuKey:'' },
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
|
|
@ -240,7 +240,7 @@
|
|||
}
|
||||
|
||||
.seatch_r {
|
||||
background: #005BAC;
|
||||
background: #fb3024;
|
||||
border-radius: 50%;
|
||||
padding: 8rpx;
|
||||
margin-left: 24rpx;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,286 @@
|
|||
<template>
|
||||
<view class="content">
|
||||
<view class="seach">
|
||||
<view class="seach_i">
|
||||
<u--input prefixIcon="search" v-model="queryParams.memberInfo"
|
||||
prefixIconStyle="font-size: 22px;color: #909399;height:32px" border="none"
|
||||
:placeholder="$t('w_0351')" suffixIconStyle="color: #909399"></u--input>
|
||||
</view>
|
||||
<!-- <view class="neibox" @click="listShow=true">
|
||||
<view>{{thegrade?thegrade:$t('PER_DA_5')}}</view>
|
||||
<u-icon name="arrow-down-fill" color="#000000" size="14"></u-icon>
|
||||
</view> -->
|
||||
|
||||
</view>
|
||||
<!-- 日期区间 -->
|
||||
<view class="timeSlide">
|
||||
<view class="timeA">{{$t('w_0352')}}</view>
|
||||
<view class="timeB" @click="openDate(0)">
|
||||
{{ queryParams.startCreationTime?queryParams.startCreationTime:$t('CK_KS_3') }}
|
||||
</view>
|
||||
<view class="timeA">{{$t('w_0139')}}</view>
|
||||
<view class="timeB" @click="openDate(1)">
|
||||
{{ queryParams.endCreationTime?queryParams.endCreationTime:$t('CK_KS_9') }}
|
||||
</view>
|
||||
<view class="seatch_r" @click="clickTap()">
|
||||
<u-icon name="search" size="22" color="#fff"></u-icon>
|
||||
</view>
|
||||
</view>
|
||||
<view class="thecontent" v-for='(item,index) in dataList' :key="index">
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('MN_T_1')}}</view>
|
||||
<view class='line2'>{{item.memberCode}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('CK_KS_14')}}</view>
|
||||
<view class='line2'>{{item.memberName}}</view>
|
||||
</view>
|
||||
|
||||
<view class="line_box">
|
||||
<view class='line1'>{{$t('w_0052')}}</view>
|
||||
<view class='line2'>{{item.phone}}</view>
|
||||
</view>
|
||||
<view class="line_box">
|
||||
<view class='line1'>
|
||||
{{$t('S_L_5')}}</view>
|
||||
<view class='line2'>{{item.creationTime}}</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<u-datetime-picker :closeOnClickOverlay="true" @close="dataShow = false" @cancel="dataShow = false"
|
||||
@confirm="getDate" :show="dataShow" v-model="value1" mode="date"></u-datetime-picker>
|
||||
<u-picker @cancel='listShow=false' :show="listShow" ref="uPicker" :columns="gradeList" @confirm="confirm"
|
||||
keyName='gradeName'></u-picker>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as mar from "@/config/market.js"
|
||||
import {
|
||||
formatMsToDate
|
||||
} from '@/util/index'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
navIndex:0,
|
||||
navList: [
|
||||
{ name: this.$t('ENU_MENU_581'),path:"0",menuKey:'' },
|
||||
{ name: this.$t('ENU_MENU_582'),path:"0",menuKey:''},
|
||||
{ name: this.$t('ENU_MENU_583') ,path:"0",menuKey:'' },
|
||||
],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 50,
|
||||
memberInfo: "",
|
||||
startCreationTime: "",
|
||||
endCreationTime: "",
|
||||
pkRegisterGrade: ""
|
||||
},
|
||||
dataShow: false,
|
||||
timeIndex: 0,
|
||||
listShow: false,
|
||||
thegrade: "",
|
||||
value1: '',
|
||||
gradeList: [],
|
||||
dataList: []
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getDataList()
|
||||
this.value1 = Number(new Date())
|
||||
},
|
||||
onLoad() {
|
||||
// this.getOthers()
|
||||
|
||||
},
|
||||
methods: {
|
||||
clickTap(){
|
||||
this.dataList =[]
|
||||
this.getDataList()
|
||||
},
|
||||
clickHref(index){
|
||||
this.navIndex = index
|
||||
},
|
||||
getMenuLists(){
|
||||
mar.menuList().then((res) => {
|
||||
console.error(res)
|
||||
res.data.forEach((item)=>{
|
||||
if(item.menuKey == 'directList'){
|
||||
this.navList[0].menuKey = 'directList'
|
||||
}
|
||||
if(item.menuKey == 'attractDetailList'){
|
||||
this.navList[1].menuKey = 'attractDetailList'
|
||||
}
|
||||
if(item.menuKey == 'haiList'){
|
||||
this.navList[2].menuKey = 'haiList'
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
getOthers() {
|
||||
mar.getGradeList().then((res) => {
|
||||
this.gradeList = [res.data];
|
||||
});
|
||||
},
|
||||
getDataList(num) {
|
||||
this.queryParams.pageNum = num || 1
|
||||
mar.seaFlourList(this.queryParams).then(res => {
|
||||
this.dataList = [...this.dataList,...res.rows]
|
||||
|
||||
})
|
||||
},
|
||||
openDate(index) {
|
||||
this.timeIndex = index
|
||||
this.dataShow = true
|
||||
},
|
||||
confirm(e) {
|
||||
this.queryParams.pkRegisterGrade = e.value[0].pkId
|
||||
this.thegrade = e.value[0].gradeName
|
||||
this.listShow = false
|
||||
},
|
||||
getDate(e) {
|
||||
if (this.timeIndex == 1) {
|
||||
this.queryParams.endCreationTime = formatMsToDate(e.value)
|
||||
} else {
|
||||
this.queryParams.startCreationTime = formatMsToDate(e.value)
|
||||
}
|
||||
this.dataShow = false
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/*左侧分类视图*/
|
||||
.left_scrol_style{
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
.styles {
|
||||
border: none !important;
|
||||
color: #fff !important;
|
||||
background: #d61820;
|
||||
}
|
||||
.top-lists{
|
||||
width: fit-content;
|
||||
display: flex;
|
||||
padding: 30rpx 30rpx 0 0;
|
||||
background-color: #fff;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
.nav-view{
|
||||
width: 200rpx;
|
||||
cursor: pointer;
|
||||
padding: 0 26rpx;
|
||||
height: 44rpx;
|
||||
border-radius: 10rpx;
|
||||
border: 1rpx solid #999999;
|
||||
font-size: 14rpx;
|
||||
text-align: center;
|
||||
line-height: 44rpx;
|
||||
margin-left: 20rpx;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
background: #F2F2F2;
|
||||
|
||||
.seach {
|
||||
background: #fff;
|
||||
overflow: hidden;
|
||||
padding: 20rpx 23rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
border-bottom: 2rpx solid #eee;
|
||||
|
||||
.seach_i {
|
||||
padding: 0 20rpx;
|
||||
border-radius: 34rpx;
|
||||
background: #fff;
|
||||
flex: 1;
|
||||
background: #f5f6f8;
|
||||
// margin-right: 40rpx;
|
||||
}
|
||||
|
||||
.neibox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 26rpx;
|
||||
font-family: PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.timeSlide {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 38rpx 26rpx;
|
||||
justify-content: space-between;
|
||||
background-color: #FFFFFF;
|
||||
|
||||
.timeA {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333;
|
||||
margin-right: 46rpx;
|
||||
}
|
||||
|
||||
.timeB {
|
||||
font-size: 24rpx;
|
||||
font-family: Arial;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.seatch_r {
|
||||
background: #fb3024;
|
||||
border-radius: 50%;
|
||||
padding: 8rpx;
|
||||
margin-left: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.thecontent {
|
||||
background-color: #FFFFFF;
|
||||
margin-top: 25rpx;
|
||||
margin-bottom: 21rpx;
|
||||
padding: 10rpx 23rpx 30rpx 23rpx;
|
||||
|
||||
.line_box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 25rpx;
|
||||
|
||||
.line1 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.line2 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.line3 {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: rgba(251, 48, 36, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2024-06-25 11:28:56
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-25 20:05:35
|
||||
-->
|
||||
<template>
|
||||
<u-popup
|
||||
:show="agreeMent"
|
||||
|
|
@ -5053,9 +5064,9 @@
|
|||
type="success"
|
||||
class="uBtn"
|
||||
shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )"
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )"
|
||||
@tap="agreeMent = false"
|
||||
>{{ '确定' }}</u-button
|
||||
>{{ $t("w_0035") }}</u-button
|
||||
>
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-15 10:41:52
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2023-04-27 15:54:20
|
||||
-->
|
||||
<template>
|
||||
<u-popup :show="centerDialogVisible"
|
||||
:round="10"
|
||||
|
|
@ -21,13 +32,13 @@
|
|||
disabled
|
||||
class="uBtn"
|
||||
shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )">{{'我已阅读以上协议'}}({{ readTime }})s</u-button>
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )">{{$t('w_0210')}}({{ readTime }})s</u-button>
|
||||
<u-button type="success"
|
||||
v-else
|
||||
class="uBtn"
|
||||
shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )"
|
||||
@tap="toAgree">{{'我已阅读以上协议'}}</u-button>
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )"
|
||||
@tap="toAgree">{{$t('w_0210')}}</u-button>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
|
@ -71,7 +82,7 @@ export default {
|
|||
waresCodeList: arr,
|
||||
})
|
||||
.then((res) => {
|
||||
this.agreementList = res.data || []
|
||||
this.agreementList = res.data
|
||||
this.readTime = res.data.alertTime
|
||||
if (this.readTime > 0) {
|
||||
this.centerDialogVisible = true
|
||||
|
|
|
|||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-08-16 19:05:40
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-08-08 10:42:29
|
||||
-->
|
||||
<template>
|
||||
<u-popup :show="newVip"
|
||||
class="notice"
|
||||
|
|
@ -87,7 +98,7 @@
|
|||
</swiper>
|
||||
|
||||
<div class="btns"
|
||||
@click="changeGift">{{ '立即领取' }}</div>
|
||||
@click="changeGift">{{ $t('w_0211') }}</div>
|
||||
</view>
|
||||
</div>
|
||||
</u-popup>
|
||||
|
|
|
|||
|
|
@ -5,27 +5,26 @@
|
|||
* @Date: 2022-08-08 10:42:29
|
||||
-->
|
||||
<template>
|
||||
<u-popup
|
||||
:show="noticeFlag"
|
||||
class="notice"
|
||||
width="70%"
|
||||
@close="closeTap"
|
||||
mode="center"
|
||||
>
|
||||
<u-popup :show="noticeFlag" class="notice" width="70%" @close="closeTap"
|
||||
mode="center">
|
||||
<div class="title">
|
||||
{{ content.title }}
|
||||
</div>
|
||||
<div class="close-icons" @click="closeTap">
|
||||
<u-icon name="close"></u-icon>
|
||||
</div>
|
||||
<div class="close-icons" @click="closeTap">
|
||||
<u-icon name="close"></u-icon>
|
||||
</div>
|
||||
<div class="img-auto" v-html="content.content"></div>
|
||||
<!-- <div class="surebtn1">-->
|
||||
<!-- <div class="btn hh" @click="closeTap">取消</div>-->
|
||||
<!-- <div class="btn " @click="closeTap">{{ $t('MY_WAL_23') }}</div>-->
|
||||
<!-- </div>-->
|
||||
</u-popup>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as api from '@/config/login.js'
|
||||
export default {
|
||||
name: 'Title',
|
||||
name: "Title",
|
||||
props: {
|
||||
userInfo: {
|
||||
type: Object,
|
||||
|
|
@ -37,66 +36,63 @@ export default {
|
|||
data() {
|
||||
return {
|
||||
noticeFlag: false,
|
||||
content: '',
|
||||
}
|
||||
content: "",
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
// this.getUserTc()
|
||||
// this.getUserTc();
|
||||
},
|
||||
methods: {
|
||||
closeTap() {
|
||||
this.noticeFlag = false
|
||||
this.$emit('close')
|
||||
},
|
||||
closeTap(){
|
||||
this.noticeFlag = false
|
||||
// this.$emit("getTree");
|
||||
},
|
||||
getUserTc(data) {
|
||||
api
|
||||
.indexPopScreen({
|
||||
grade: this.userInfo.pkGradeId,
|
||||
awards: this.userInfo.pkAwardsId,
|
||||
})
|
||||
.then(res => {
|
||||
if (res.code == '200') {
|
||||
let list = JSON.parse(localStorage.getItem('menuList'))
|
||||
let arr = res.data[0]?.publishLocation.split(',') || []
|
||||
arr.forEach(items => {
|
||||
if (items == this.publishLocationIndex) {
|
||||
this.noticeFlag = true
|
||||
this.content = res.data[0]
|
||||
} else {
|
||||
this.$emit('close')
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
api.indexPopScreen({
|
||||
grade: this.userInfo.pkGradeId,
|
||||
awards: this.userInfo.pkAwardsId,
|
||||
}).then((res) => {
|
||||
if (res.code == "200") {
|
||||
let list = JSON.parse(localStorage.getItem("menuList"));
|
||||
let arr = res.data[0].publishLocation.split(",");
|
||||
arr.forEach((items) => {
|
||||
if (items == this.publishLocationIndex) {
|
||||
this.noticeFlag = true;
|
||||
this.content = res.data[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.close-icons {
|
||||
position: absolute;
|
||||
right: 30rpx;
|
||||
top: 30rpx;
|
||||
.close-icons{
|
||||
position: absolute;
|
||||
right: 30rpx;
|
||||
top: 30rpx;
|
||||
}
|
||||
::v-deep .u-popup__content{
|
||||
height: 1120rpx;
|
||||
width: 690rpx;
|
||||
}
|
||||
::v-deep .u-popup__content {
|
||||
height: 1120rpx;
|
||||
width: 690rpx;
|
||||
.notice{
|
||||
height: 700rpx;
|
||||
|
||||
}
|
||||
// .notice{
|
||||
// height: 700rpx;
|
||||
// }
|
||||
::v-deep .el-dialog__headerbtn i {
|
||||
font-size: 24px;
|
||||
//visibility: hidden;
|
||||
color: #333;
|
||||
}
|
||||
::v-deep .el-dialog {
|
||||
margin-top: 113px !important;
|
||||
height: 815px;
|
||||
::v-deep .el-dialog{
|
||||
margin-top:113px !important;
|
||||
height:815px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
::v-deep .el-dialog__body {
|
||||
::v-deep .el-dialog__body{
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
.surebtn1 {
|
||||
|
|
@ -112,9 +108,7 @@ export default {
|
|||
border-radius: 6px 6px 6px 6px;
|
||||
text-align: center;
|
||||
font-size: 22px;
|
||||
font-family:
|
||||
PingFang SC-Medium,
|
||||
PingFang SC;
|
||||
font-family: PingFang SC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 66px;
|
||||
|
|
@ -140,9 +134,9 @@ export default {
|
|||
padding-top: 10px;
|
||||
}
|
||||
.title {
|
||||
font-size: 40rpx;
|
||||
text-align: center;
|
||||
margin: 20rpx auto;
|
||||
font-size: 40rpx;
|
||||
text-align: center;
|
||||
margin: 20rpx auto;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
|
@ -158,4 +152,4 @@ export default {
|
|||
height: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
@ -1,32 +1,35 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-12-13 15:02:12
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
<!-- 海报 -->
|
||||
<view class="popup" v-show="popShow">
|
||||
<view class="all" id="qrCodeDiv" ref="qrCodeDiv">
|
||||
<canvas
|
||||
:style="{ width: canvasW + 'px', height: canvasH + 'px' }"
|
||||
canvas-id="myCanvas"
|
||||
id="myCanvas"
|
||||
></canvas>
|
||||
<view class="popup"
|
||||
v-show="popShow">
|
||||
<view class="all"
|
||||
id="qrCodeDiv"
|
||||
ref="qrCodeDiv">
|
||||
<canvas :style="{ width: canvasW + 'px', height: canvasH + 'px' }"
|
||||
canvas-id="myCanvas"
|
||||
id="myCanvas"></canvas>
|
||||
</view>
|
||||
<view class="btn" @click="savePosterPath()">保存到手机</view>
|
||||
<view class="btn"
|
||||
@click="savePosterPath()">保存到手机</view>
|
||||
|
||||
</view>
|
||||
<!-- 模态框 -->
|
||||
<view class="mask" v-show="popShow" @tap="popShow = false"></view>
|
||||
<view class="mask"
|
||||
v-show="popShow"
|
||||
@tap="popShow = false"></view>
|
||||
<!-- 底部弹框 -->
|
||||
<u-action-sheet
|
||||
:actions="list"
|
||||
:closeOnClickOverlay="true"
|
||||
@close="closeIsShow"
|
||||
@select="selectClick"
|
||||
:show="isShow"
|
||||
></u-action-sheet>
|
||||
<u-action-sheet :actions="list"
|
||||
:closeOnClickOverlay="true"
|
||||
@close="closeIsShow"
|
||||
@select="selectClick"
|
||||
:show="isShow"></u-action-sheet>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
|
@ -65,11 +68,11 @@ export default {
|
|||
},
|
||||
toShare(item) {
|
||||
let pkId = item.pkId
|
||||
this.goodImg = item.cover || item.cover1
|
||||
this.goodImg = item.cover1
|
||||
qrCode({
|
||||
codeType: 1,
|
||||
waresId: pkId,
|
||||
}).then(res => {
|
||||
}).then((res) => {
|
||||
this.postImg = res.data
|
||||
this.toCanvas()
|
||||
// this.popShow = true
|
||||
|
|
@ -87,7 +90,7 @@ export default {
|
|||
ctx.drawImage(imgBg, 0, 0, this.canvasW, this.canvasH) //插入图片
|
||||
ctx.drawImage(imggoodList, 95, 175, 130, 130)
|
||||
ctx.drawImage(imgPost, 239, 392, 65, 65)
|
||||
ctx.draw(true, ret => {})
|
||||
ctx.draw(true, (ret) => {})
|
||||
}, 100)
|
||||
},
|
||||
//获取图片缓存地址
|
||||
|
|
@ -95,7 +98,7 @@ export default {
|
|||
return new Promise((reslove, reject) => {
|
||||
uni.getImageInfo({
|
||||
src: img,
|
||||
success: res => {
|
||||
success: (res) => {
|
||||
reslove(res.path)
|
||||
},
|
||||
})
|
||||
|
|
@ -119,7 +122,7 @@ export default {
|
|||
uni.showModal({
|
||||
title: '授权提示',
|
||||
content: '是否允许获取保存相册权限',
|
||||
success: res => {
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
// 点击确定,则调用相册授权
|
||||
uni.openSetting({
|
||||
|
|
@ -151,35 +154,32 @@ export default {
|
|||
saveLocal() {
|
||||
console.log('d')
|
||||
// canvas转图片
|
||||
uni.canvasToTempFilePath(
|
||||
{
|
||||
canvasId: 'myCanvas',
|
||||
success: function (res) {
|
||||
console.log('res', res)
|
||||
// // 保存相册
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: res.tempFilePath,
|
||||
success: function () {
|
||||
console.log('save success')
|
||||
uni.showToast({
|
||||
title: '已保存在本地相册',
|
||||
icon: 'none',
|
||||
})
|
||||
},
|
||||
fail: function () {
|
||||
uni.showToast({
|
||||
title: '保存失败',
|
||||
icon: 'none',
|
||||
})
|
||||
},
|
||||
})
|
||||
},
|
||||
fail: function (err) {
|
||||
console.log('err', err)
|
||||
},
|
||||
uni.canvasToTempFilePath({
|
||||
canvasId: 'myCanvas',
|
||||
success: function (res) {
|
||||
console.log('res', res)
|
||||
// // 保存相册
|
||||
uni.saveImageToPhotosAlbum({
|
||||
filePath: res.tempFilePath,
|
||||
success: function () {
|
||||
console.log('save success')
|
||||
uni.showToast({
|
||||
title: '已保存在本地相册',
|
||||
icon: 'none',
|
||||
})
|
||||
},
|
||||
fail: function () {
|
||||
uni.showToast({
|
||||
title: '保存失败',
|
||||
icon: 'none',
|
||||
})
|
||||
},
|
||||
})
|
||||
},
|
||||
this
|
||||
)
|
||||
fail: function (err) {
|
||||
console.log('err', err)
|
||||
},
|
||||
},this)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
@ -242,4 +242,4 @@ export default {
|
|||
background: rgba(0, 0, 0, 80%);
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
@ -1,326 +0,0 @@
|
|||
<template>
|
||||
<view class="raised-tabbar">
|
||||
<!-- 背景遮罩层,创建凸起效果 -->
|
||||
<view class="tabbar-bg">
|
||||
<view class="raised-circle"></view>
|
||||
</view>
|
||||
|
||||
<!-- TabBar内容 -->
|
||||
<view class="tabbar-content">
|
||||
<!-- 左侧两个选项 -->
|
||||
<view
|
||||
v-for="(item, index) in leftItems"
|
||||
:key="index"
|
||||
class="tabbar-item"
|
||||
:class="{ active: current === index }"
|
||||
@click="tabbarChange(index)"
|
||||
>
|
||||
<view class="item-icon">
|
||||
<image
|
||||
:src="current === index ? item.activeIcon : item.inactiveIcon"
|
||||
class="icon-normal"
|
||||
/>
|
||||
<view v-if="item.badge && item.badge > 0" class="badge">{{
|
||||
item.badge
|
||||
}}</view>
|
||||
</view>
|
||||
<text class="item-text" :class="{ active: current === index }">{{
|
||||
item.text
|
||||
}}</text>
|
||||
</view>
|
||||
|
||||
<!-- 中间凸起的选项 -->
|
||||
<view
|
||||
class="tabbar-item center-item"
|
||||
:class="{ active: current === 2 }"
|
||||
@click="tabbarChange(2)"
|
||||
v-if="!newShareMember"
|
||||
>
|
||||
<view class="center-icon-wrapper">
|
||||
<view class="center-icon">
|
||||
<image
|
||||
:src="
|
||||
current === 2 ? centerItem.activeIcon : centerItem.inactiveIcon
|
||||
"
|
||||
class="center-image"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
<text
|
||||
class="item-text center-text"
|
||||
:class="{ active: current === 2 }"
|
||||
>{{ centerItem.text }}</text
|
||||
>
|
||||
</view>
|
||||
|
||||
<!-- 右侧两个选项 -->
|
||||
<view
|
||||
v-for="(item, index) in rightItems"
|
||||
:key="index + 3"
|
||||
class="tabbar-item"
|
||||
:class="{ active: current === index + 3 }"
|
||||
@click="tabbarChange(index + 3)"
|
||||
>
|
||||
<view class="item-icon">
|
||||
<image
|
||||
:src="current === index + 3 ? item.activeIcon : item.inactiveIcon"
|
||||
class="icon-normal"
|
||||
/>
|
||||
<view v-if="item.badge && item.badge > 0" class="badge">{{
|
||||
item.badge
|
||||
}}</view>
|
||||
</view>
|
||||
<text class="item-text" :class="{ active: current === index + 3 }">{{
|
||||
item.text
|
||||
}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'RaisedTabbar',
|
||||
props: {
|
||||
current: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.newShareMember = uni.getStorageSync('User')?.loginType !== 0
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
newShareMember: false,
|
||||
// 完整的路由列表
|
||||
list: [
|
||||
{
|
||||
text: '首页',
|
||||
path: 'pages/index/index',
|
||||
},
|
||||
{
|
||||
text: '会员专区',
|
||||
path: 'pages/specialArea/index',
|
||||
},
|
||||
{
|
||||
text: '个人推广',
|
||||
path: 'pages/mine/share/index',
|
||||
},
|
||||
{
|
||||
text: '购物车',
|
||||
path: 'pages/shoppingCar/index',
|
||||
},
|
||||
{
|
||||
text: '我的',
|
||||
path: 'pages/mine/index',
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['shopCarLength']),
|
||||
// 左侧两个选项
|
||||
leftItems() {
|
||||
return [
|
||||
{
|
||||
text: '首页',
|
||||
activeIcon: require('@/static/images/one1.png'),
|
||||
inactiveIcon: require('@/static/images/one2.png'),
|
||||
},
|
||||
{
|
||||
text: '会员专区',
|
||||
activeIcon: require('@/static/images/five1.jpg'),
|
||||
inactiveIcon: require('@/static/images/five2.jpg'),
|
||||
},
|
||||
]
|
||||
},
|
||||
// 中间凸起选项
|
||||
centerItem() {
|
||||
return {
|
||||
text: '个人推广',
|
||||
activeIcon: require('@/static/images/code.svg'),
|
||||
inactiveIcon: require('@/static/images/code.svg'),
|
||||
}
|
||||
},
|
||||
// 右侧两个选项
|
||||
rightItems() {
|
||||
return [
|
||||
{
|
||||
text: '购物车',
|
||||
activeIcon: require('@/static/images/three1.png'),
|
||||
inactiveIcon: require('@/static/images/three2.png'),
|
||||
badge: this.shopCarLength,
|
||||
},
|
||||
{
|
||||
text: '我的',
|
||||
activeIcon: require('@/static/images/fore1.png'),
|
||||
inactiveIcon: require('@/static/images/fore2.png'),
|
||||
},
|
||||
]
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
tabbarChange(index) {
|
||||
this.$emit('change', index)
|
||||
uni.switchTab({
|
||||
url: '/' + this.list[index].path,
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.raised-tabbar {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1000;
|
||||
|
||||
.tabbar-bg {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 60px;
|
||||
background: #ffffff;
|
||||
|
||||
// 添加底部安全区域
|
||||
&::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -40px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: env(safe-area-inset-bottom);
|
||||
background: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
.tabbar-content {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
height: 60px;
|
||||
padding-bottom: 5px;
|
||||
background: transparent;
|
||||
|
||||
.tabbar-item {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding-bottom: 5px;
|
||||
position: relative;
|
||||
|
||||
.item-icon {
|
||||
position: relative;
|
||||
margin-bottom: 2px;
|
||||
|
||||
.icon-normal {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.badge {
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
right: -8px;
|
||||
background: #ff4757;
|
||||
color: white;
|
||||
border-radius: 50%;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
font-size: 10px;
|
||||
text-align: center;
|
||||
line-height: 16px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
|
||||
.item-text {
|
||||
font-size: 10px;
|
||||
color: #666666;
|
||||
line-height: 1.2;
|
||||
|
||||
&.active {
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
|
||||
// 中间凸起的特殊样式
|
||||
&.center-item {
|
||||
position: relative;
|
||||
|
||||
.center-icon-wrapper {
|
||||
position: absolute;
|
||||
top: -58rpx;
|
||||
background: #fff;
|
||||
border-radius: 50%;
|
||||
font-size: 0;
|
||||
padding: 4rpx;
|
||||
z-index: 10;
|
||||
|
||||
.center-icon {
|
||||
width: 92rpx;
|
||||
height: 92rpx;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
// box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
||||
position: relative;
|
||||
// 添加呼吸动画
|
||||
// animation: breathe 3s ease-in-out infinite;
|
||||
|
||||
.center-image {
|
||||
width: 92rpx;
|
||||
height: 92rpx;
|
||||
// position: absolute;
|
||||
// top: -10rpx;
|
||||
}
|
||||
|
||||
// 活跃状态
|
||||
// &.active {
|
||||
// background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
.center-text {
|
||||
margin-top: 25px;
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
&.active {
|
||||
.center-icon-wrapper .center-icon {
|
||||
// background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
||||
transform: scale(1.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 呼吸动画关键帧
|
||||
@keyframes breathe {
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1);
|
||||
// box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
// box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,407 +0,0 @@
|
|||
<template>
|
||||
<div v-if="popupVisible" class="region-select-overlay">
|
||||
<div class="region-select-popup">
|
||||
<div class="popup-header">
|
||||
<h3 class="popup-title">
|
||||
{{ reselected ? '修改' : '选择' }}收益区域({{ typeEnumMap[area] }})
|
||||
</h3>
|
||||
</div>
|
||||
<div class="popup-content">
|
||||
<picker-view
|
||||
v-if="popupVisible"
|
||||
class="picker-view"
|
||||
:value="pickerValue"
|
||||
@change="handlePickerChange"
|
||||
>
|
||||
<picker-view-column>
|
||||
<div v-for="p in provinceList" :key="p.id" class="picker-item">
|
||||
{{ p.name }}
|
||||
</div>
|
||||
</picker-view-column>
|
||||
<picker-view-column
|
||||
v-if="
|
||||
cityList &&
|
||||
cityList.length &&
|
||||
['city', 'county'].includes(this.area)
|
||||
"
|
||||
>
|
||||
<div v-for="c in cityList" :key="c.id" class="picker-item">
|
||||
{{ c.name }}
|
||||
</div>
|
||||
</picker-view-column>
|
||||
<picker-view-column
|
||||
v-if="countyList && countyList.length && this.area == 'county'"
|
||||
>
|
||||
<div v-for="d in countyList" :key="d.id" class="picker-item">
|
||||
{{ d.name }}
|
||||
</div>
|
||||
</picker-view-column>
|
||||
</picker-view>
|
||||
</div>
|
||||
<div class="popup-footer">
|
||||
<button
|
||||
v-if="showCancelButton"
|
||||
class="popup-btn popup-cancel"
|
||||
@click="handleClose"
|
||||
>
|
||||
取消
|
||||
</button>
|
||||
<button class="popup-btn popup-confirm" @click="handleConfirm">
|
||||
确认
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getRegionSelect, setRegion, getRegionAreaTree } from '@/config/mine.js'
|
||||
|
||||
export default {
|
||||
name: 'RegionSelect',
|
||||
props: {
|
||||
autoTrigger: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
showCancelButton: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
reselected: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
popupVisible: false,
|
||||
areaTree: [],
|
||||
pickerValue: [0, 0, 0],
|
||||
// indicatorStyle: `height: 50px;`,
|
||||
selectedList: [],
|
||||
regionList: [],
|
||||
provinceList: [],
|
||||
cityList: [],
|
||||
countyList: [],
|
||||
area: '',
|
||||
typeMap: {
|
||||
province: 1,
|
||||
city: 2,
|
||||
county: 3,
|
||||
},
|
||||
typeEnumMap: {
|
||||
province: '省',
|
||||
city: '市',
|
||||
county: '区',
|
||||
},
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
if (!this.autoTrigger) {
|
||||
return
|
||||
}
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
this.getRegionSelect()
|
||||
.then(selectedList => {
|
||||
this.selectedList = selectedList
|
||||
const area = selectedList.shift()
|
||||
this.open(area)
|
||||
})
|
||||
.catch(() => {
|
||||
this.$emit('success')
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
async getRegionSelect() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const res = await getRegionSelect()
|
||||
if (res?.code === 200) {
|
||||
const needSelected = Object.keys(res?.data || {})
|
||||
.filter(key => key !== 'data')
|
||||
.filter(key => res.data[key])
|
||||
.filter(key => !res.data?.data?.[`${key}Data`])
|
||||
.reverse()
|
||||
if (
|
||||
needSelected?.length &&
|
||||
Object.keys(res.data?.data || {}).length < needSelected?.length
|
||||
) {
|
||||
resolve(needSelected)
|
||||
} else {
|
||||
reject(false)
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
reject(false)
|
||||
}
|
||||
})
|
||||
},
|
||||
async open(area) {
|
||||
this.area = area
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
return new Promise(async (resolve, reject) => {
|
||||
this.popupVisible = true
|
||||
|
||||
await this.loadAreaTree(area)
|
||||
resolve()
|
||||
uni.hideLoading()
|
||||
})
|
||||
},
|
||||
async loadAreaTree(selectedArea) {
|
||||
try {
|
||||
const res = await getRegionAreaTree({
|
||||
type: this.typeMap[selectedArea],
|
||||
})
|
||||
if (res.code === 200 && res.data) {
|
||||
this.provinceList = res.data.filter(item => item.parent === 0)
|
||||
this.cityList = res.data.filter(item =>
|
||||
this.provinceList.find(province => province.pkId === item.parent)
|
||||
)
|
||||
this.countyList = res.data.filter(item =>
|
||||
this.cityList.find(city => city.pkId === item.parent)
|
||||
)
|
||||
this.getProvinceFilterList()
|
||||
this.getCityFilterList()
|
||||
this.generateRegionTree()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
} catch (error) {
|
||||
console.error('Failed to load area tree:', error)
|
||||
}
|
||||
},
|
||||
generateRegionTree() {
|
||||
this.countyList.forEach(item => {
|
||||
const city = this.cityList.find(city => city.pkId === item.parent)
|
||||
if (city) {
|
||||
if (!city.children) {
|
||||
city.children = [item]
|
||||
} else {
|
||||
city.children.push(item)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
this.cityList.forEach(item => {
|
||||
const province = this.provinceList.find(
|
||||
province => province.pkId === item.parent
|
||||
)
|
||||
if (province) {
|
||||
if (!province.children) {
|
||||
console.log(item)
|
||||
province.children = [item]
|
||||
} else {
|
||||
province.children.push(item)
|
||||
}
|
||||
}
|
||||
})
|
||||
this.provinceList = this.provinceList.filter(item => item.children)
|
||||
this.cityList = this.cityList.filter(item => item.children)
|
||||
this.cityList = this.provinceList[this.pickerValue[0]].children
|
||||
this.countyList = this.cityList[this.pickerValue[1]].children
|
||||
},
|
||||
getProvinceFilterList() {
|
||||
if (!this.cityList.length) {
|
||||
this.provinceList = []
|
||||
}
|
||||
this.provinceList = this.provinceList.filter(
|
||||
item => !!this.cityList.find(city => city.parent === item.pkId)
|
||||
)
|
||||
},
|
||||
getCityFilterList() {
|
||||
if (!this.countyList.length) {
|
||||
this.cityList = []
|
||||
}
|
||||
this.cityList = this.cityList.filter(
|
||||
item => !!this.countyList.find(county => county.parent === item.pkId)
|
||||
)
|
||||
},
|
||||
handlePickerChange(e) {
|
||||
const [pIndex, cIndex] = e.detail.value
|
||||
const oldPIndex = this.pickerValue[0]
|
||||
const oldCIndex = this.pickerValue[1]
|
||||
if (oldPIndex !== pIndex) {
|
||||
this.cityList = this.provinceList[pIndex].children
|
||||
this.countyList = this.cityList[0].children
|
||||
this.$set(this.pickerValue, 1, 0)
|
||||
this.$set(this.pickerValue, 2, 0)
|
||||
} else if (oldCIndex !== cIndex) {
|
||||
this.countyList = this.cityList[cIndex].children
|
||||
this.$set(this.pickerValue, 2, 0)
|
||||
}
|
||||
this.pickerValue = e.detail.value
|
||||
},
|
||||
handleClose() {
|
||||
this.popupVisible = false
|
||||
this.$emit('cancel')
|
||||
},
|
||||
async handleConfirm() {
|
||||
const [pIndex, cIndex, dIndex] = this.pickerValue
|
||||
const province = this.provinceList[pIndex]
|
||||
const city = this.cityList[cIndex]
|
||||
const county = this.countyList[dIndex]
|
||||
|
||||
try {
|
||||
const params = {
|
||||
type: this.typeMap[this.area],
|
||||
province: province.pkId,
|
||||
city: 0,
|
||||
county: 0,
|
||||
}
|
||||
if (this.area == 'city') {
|
||||
params.city = city.pkId
|
||||
} else if (this.area == 'county') {
|
||||
params.city = city.pkId
|
||||
params.county = county.pkId
|
||||
}
|
||||
const res = await setRegion(params)
|
||||
if (res.code === 200) {
|
||||
this.handleClose()
|
||||
if (this.selectedList.length) {
|
||||
this.area = this.selectedList.shift()
|
||||
this.pickerValue = [0, 0, 0]
|
||||
this.open(this.area)
|
||||
} else {
|
||||
this.$emit('success')
|
||||
}
|
||||
} else {
|
||||
throw new Error(res.message || 'Failed to set region')
|
||||
}
|
||||
} catch (error) {
|
||||
this.$emit('success')
|
||||
console.error('Failed to set region:', error)
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.region-select-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
z-index: 1000;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.region-select-popup {
|
||||
width: 90%;
|
||||
max-width: 680rpx;
|
||||
background-color: white;
|
||||
border-radius: 24rpx;
|
||||
/* animation: scale-up 0.3s ease-out; */
|
||||
max-height: 80vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4rpx 24rpx rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.popup-header {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 30rpx;
|
||||
border-bottom: 1rpx solid #f5f5f5;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.popup-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
color: #1c1c1e;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.popup-btn {
|
||||
border: none;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.popup-content {
|
||||
overflow: hidden;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.picker-view {
|
||||
width: 100%;
|
||||
height: 600rpx;
|
||||
/* margin-top: 20rpx; */
|
||||
}
|
||||
|
||||
.picker-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 24rpx;
|
||||
line-height: 100rpx;
|
||||
color: #666;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.popup-footer {
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
padding: 24rpx;
|
||||
gap: 24rpx;
|
||||
background-color: #f7f7f7;
|
||||
border-top: 1rpx solid #efefef;
|
||||
}
|
||||
|
||||
.popup-footer .popup-btn {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
padding: 14rpx 0;
|
||||
font-size: 28rpx;
|
||||
border-radius: 40rpx;
|
||||
font-weight: 500;
|
||||
transition:
|
||||
transform 0.1s ease,
|
||||
box-shadow 0.2s ease;
|
||||
}
|
||||
|
||||
.popup-footer .popup-btn:active {
|
||||
transform: scale(0.97);
|
||||
}
|
||||
|
||||
.popup-footer .popup-cancel {
|
||||
background-color: #eee;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.popup-footer .popup-confirm {
|
||||
background: linear-gradient(135deg, #007aff, #0056b3);
|
||||
color: white;
|
||||
box-shadow: 0 4rpx 12rpx rgba(0, 122, 255, 0.25);
|
||||
}
|
||||
|
||||
/* @keyframes scale-up {
|
||||
from {
|
||||
transform: scale(0.8);
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
transform: scale(1);
|
||||
opacity: 1;
|
||||
}
|
||||
} */
|
||||
</style>
|
||||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-08-10 10:47:07
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-08-09 10:30:33
|
||||
-->
|
||||
<template>
|
||||
<div>
|
||||
<u-popup class="notice"
|
||||
|
|
@ -293,7 +304,7 @@ export default {
|
|||
goods.addShopping(this.carList).then((res) => {
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: '购物车添加成功',
|
||||
title: this.$t('w_0036'),
|
||||
icon: 'success',
|
||||
mask: true,
|
||||
})
|
||||
|
|
@ -322,15 +333,15 @@ export default {
|
|||
|
||||
// 删除按钮
|
||||
.delBtn {
|
||||
background: #005BAC;
|
||||
background: #c8161d;
|
||||
color: #fff;
|
||||
border-color: #005BAC;
|
||||
border-color: #c8161d;
|
||||
}
|
||||
|
||||
.delBtn:hover {
|
||||
background: #005BAC;
|
||||
background: #c8161d;
|
||||
color: #fff;
|
||||
border-color: #005BAC;
|
||||
border-color: #c8161d;
|
||||
}
|
||||
|
||||
.view-class {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,9 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-30 20:18:30
|
||||
-->
|
||||
|
||||
<template>
|
||||
<view>
|
||||
|
|
|
|||
|
|
@ -1,317 +0,0 @@
|
|||
<template>
|
||||
<view class="default-share-page">
|
||||
<!-- 背景图片,替代CSS background -->
|
||||
<img
|
||||
class="share-bg-image"
|
||||
src="/static/images/share-bg.jpg"
|
||||
crossorigin="anonymous"
|
||||
@load="onBackgroundImageLoad"
|
||||
@error="onBackgroundImageError"
|
||||
/>
|
||||
<view class="qr-code-outer">
|
||||
<image
|
||||
class="qr-code"
|
||||
:src="qrCodeImage"
|
||||
mode="aspectFit"
|
||||
v-if="qrCodeImage"
|
||||
></image>
|
||||
<view v-else class="qr-code-placeholder">
|
||||
<view class="loader"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="member-code-outer">
|
||||
<text
|
||||
class="member-code-text"
|
||||
style="
|
||||
font-size: 20rpx;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
margin-top: 20rpx;
|
||||
"
|
||||
>{{ desensitization(userInfo.memberCode) }}</text
|
||||
>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import html2canvas from 'html2canvas'
|
||||
import { snapdom } from '@zumer/snapdom'
|
||||
|
||||
export default {
|
||||
name: 'DefaultSharePage',
|
||||
props: {
|
||||
qrCodeImage: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
userInfo: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
isWechat: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
isLoaded: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
backgroundImageLoaded: false,
|
||||
shareButtonShow: true,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
desensitization(str) {
|
||||
if (!str) return ''
|
||||
if (str.length <= 8) return str.slice(0, 4) + '****'
|
||||
const len = str.length - 6
|
||||
const placeholder = '*'.repeat(len)
|
||||
return str.slice(0, 4) + placeholder + str.slice(-2)
|
||||
},
|
||||
|
||||
// 背景图片加载成功
|
||||
onBackgroundImageLoad() {
|
||||
this.backgroundImageLoaded = true
|
||||
console.log('默认场景背景图片加载成功')
|
||||
},
|
||||
|
||||
// 背景图片加载失败
|
||||
onBackgroundImageError(e) {
|
||||
console.error('默认场景背景图片加载失败:', e)
|
||||
},
|
||||
|
||||
async sharePage() {
|
||||
if (!this.qrCodeImage) {
|
||||
uni.showToast({
|
||||
title: '二维码尚未生成',
|
||||
icon: 'none',
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
uni.showLoading({ title: '加载中...' })
|
||||
|
||||
try {
|
||||
this.shareButtonShow = false
|
||||
await this.$nextTick()
|
||||
|
||||
await this.capturePageWithHtml2Canvas()
|
||||
} catch (error) {
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '图片生成失败,请稍后重试', icon: 'none' })
|
||||
console.error('sharePage error:', error)
|
||||
} finally {
|
||||
// 恢复按钮显示
|
||||
this.shareButtonShow = true
|
||||
}
|
||||
},
|
||||
|
||||
// 使用html2canvas截取整个页面
|
||||
async capturePageWithHtml2Canvas() {
|
||||
console.log('开始使用html2canvas截取页面')
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
// 确保所有图片都已加载完成
|
||||
const waitForImages = () => {
|
||||
if (!this.backgroundImageLoaded || !this.qrCodeImage) {
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 额外等待确保渲染完成
|
||||
setTimeout(() => {
|
||||
const element = this.$el
|
||||
if (!element) {
|
||||
reject(new Error('找不到组件容器'))
|
||||
return
|
||||
}
|
||||
|
||||
const scale = 3
|
||||
html2canvas(element, {
|
||||
useCORS: true,
|
||||
// allowTaint: true,
|
||||
backgroundColor: null,
|
||||
scale,
|
||||
// canvas,
|
||||
width: element.offsetWidth,
|
||||
height: element.offsetHeight,
|
||||
})
|
||||
.then(canvas => {
|
||||
const context = canvas.getContext('2d')
|
||||
// context.scale(2, 2)
|
||||
context.mozImageSmoothingEnabled = false
|
||||
context.webkitImageSmoothingEnabled = false
|
||||
context.msImageSmoothingEnabled = false
|
||||
context.imageSmoothingEnabled = false
|
||||
const dataUrl = canvas.toDataURL('image/jpeg', 1)
|
||||
this.$emit('share-generated', dataUrl)
|
||||
resolve()
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('html2canvas截取失败:', err)
|
||||
reject(err)
|
||||
})
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
// 开始等待图片加载
|
||||
waitForImages()
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.default-share-page {
|
||||
position: relative;
|
||||
width: 600rpx;
|
||||
height: 1296rpx;
|
||||
// height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* 背景图片样式 */
|
||||
.share-bg-image {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 600rpx;
|
||||
height: 1296rpx;
|
||||
// height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.share-wrapper {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
bottom: 22%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.portal-frame {
|
||||
padding: 32rpx;
|
||||
width: 520rpx;
|
||||
border-radius: 40rpx;
|
||||
display: flex;
|
||||
box-sizing: border-box;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin: 0 auto;
|
||||
opacity: 0;
|
||||
transform: translateY(20rpx);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.portal-frame.is-loaded {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* 二维码样式区域 - 用户自定义样式位置 */
|
||||
.qr-code-outer {
|
||||
width: 140rpx;
|
||||
height: 140rpx;
|
||||
background: rgba(255, 255, 255, 0.98);
|
||||
border-radius: 20rpx;
|
||||
box-shadow: 0px 8rpx 20rpx rgba(50, 50, 90, 0.06);
|
||||
border: 1px solid #f0f0f0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 12rpx;
|
||||
box-sizing: border-box;
|
||||
position: absolute;
|
||||
// bottom: 460rpx;
|
||||
left: 374rpx;
|
||||
top: 708rpx;
|
||||
// right: 130rpx;
|
||||
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.qr-code,
|
||||
.qr-code-placeholder {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.qr-code {
|
||||
border-radius: 16rpx;
|
||||
}
|
||||
|
||||
.qr-code-placeholder {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.loader {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border: 8rpx solid rgba(0, 0, 0, 0.1);
|
||||
border-left-color: #0072ff;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/* 会员编号样式区域 - 用户自定义样式位置 */
|
||||
.member-code-text {
|
||||
/* 用户可以在这里自定义会员编号的样式 */
|
||||
}
|
||||
.member-code-outer {
|
||||
position: absolute;
|
||||
top: 1086rpx;
|
||||
left: 246rpx;
|
||||
// width: 300rpx;
|
||||
text-align: center;
|
||||
// background: rgb(217, 24, 25);
|
||||
border-radius: 20rpx;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
/* 下载按钮样式 */
|
||||
.share-button {
|
||||
margin-top: 28rpx;
|
||||
width: 280rpx;
|
||||
height: 72rpx;
|
||||
line-height: 72rpx;
|
||||
color: #fff;
|
||||
border-radius: 36rpx;
|
||||
font-size: 26rpx;
|
||||
font-weight: 500;
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
box-shadow: 0 5rpx 12rpx 0 rgba(102, 126, 234, 0.2);
|
||||
border: none;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
transition: all 0.3s ease;
|
||||
letter-spacing: 1rpx;
|
||||
}
|
||||
|
||||
button.share-button {
|
||||
padding: 0;
|
||||
line-height: 72rpx;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.share-button:active {
|
||||
transform: translateY(1rpx);
|
||||
box-shadow: 0 4rpx 10rpx rgba(102, 126, 234, 0.4);
|
||||
background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,178 +0,0 @@
|
|||
# 分享组件说明
|
||||
|
||||
## SpecialSharePage 组件
|
||||
|
||||
特殊场景分享页面组件,通过接口获取base64格式的背景图片。
|
||||
|
||||
### 主要特性
|
||||
|
||||
- 📱 **响应式**:适配各种屏幕尺寸
|
||||
- 🎨 **可定制**:支持样式自定义
|
||||
- 🔄 **重试机制**:支持接口调用失败时的重试
|
||||
- 🌐 **接口获取**:自动通过接口获取背景图片
|
||||
- 🖼️ **Base64支持**:接口返回base64格式的背景图片
|
||||
|
||||
### 使用方法
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<SpecialSharePage
|
||||
:qrCodeImage="base64QrCodeImage"
|
||||
:userInfo="userInfo"
|
||||
:isLoaded="true"
|
||||
@share-generated="handleShareGenerated"
|
||||
@background-image-error="handleError"
|
||||
@background-image-retry="handleRetry"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import SpecialSharePage from '@/components/share/SpecialSharePage.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
SpecialSharePage,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
base64QrCodeImage:
|
||||
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAQAAAADK...',
|
||||
userInfo: {
|
||||
memberCode: '12345678',
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleShareGenerated(dataUrl) {
|
||||
console.log('生成的分享图片:', dataUrl)
|
||||
// 处理生成的图片
|
||||
},
|
||||
handleError(error) {
|
||||
console.error('背景图片错误:', error)
|
||||
},
|
||||
handleRetry(retryCount) {
|
||||
console.log('背景图片重试:', retryCount)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
### Props
|
||||
|
||||
| 参数 | 类型 | 默认值 | 说明 |
|
||||
| ----------------------- | ------- | ------ | ------------------------ |
|
||||
| `qrCodeImage` | String | '' | 二维码图片(base64格式) |
|
||||
| `userInfo` | Object | {} | 用户信息对象 |
|
||||
| `isWechat` | Boolean | false | 是否为微信环境 |
|
||||
| `isLoaded` | Boolean | false | 是否加载完成 |
|
||||
| `skipImageVerification` | Boolean | false | 跳过图片验证(调试用) |
|
||||
|
||||
### Events
|
||||
|
||||
| 事件名 | 参数 | 说明 |
|
||||
| ------------------------ | ---------- | ---------------- |
|
||||
| `share-generated` | dataUrl | 分享图片生成成功 |
|
||||
| `background-image-error` | error | 背景图片加载错误 |
|
||||
| `background-image-retry` | retryCount | 背景图片重试 |
|
||||
|
||||
### 方法
|
||||
|
||||
| 方法名 | 说明 |
|
||||
| ------------------------------- | ------------------------------------ |
|
||||
| `generateShareImage()` | 生成分享图片 |
|
||||
| `retryGetBackgroundImage()` | 手动重试获取背景图 |
|
||||
| `getStatusInfo()` | 获取当前状态信息(调试用) |
|
||||
| `handleShareGenerated(dataUrl)` | 处理图片生成成功后的逻辑(内部方法) |
|
||||
|
||||
### 接口配置
|
||||
|
||||
组件使用 `getSharedImg` 接口获取背景图片:
|
||||
|
||||
```javascript
|
||||
// 在 config/login.js 中配置接口
|
||||
export const getSharedImg = () => {
|
||||
return http.get('/api/share/background')
|
||||
}
|
||||
```
|
||||
|
||||
接口应返回以下格式:
|
||||
|
||||
```javascript
|
||||
{
|
||||
code: 200,
|
||||
data: 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...',
|
||||
message: 'success'
|
||||
}
|
||||
```
|
||||
|
||||
### 调试
|
||||
|
||||
```javascript
|
||||
// 生成分享图片
|
||||
this.$refs.specialSharePage.generateShareImage()
|
||||
|
||||
// 手动重试获取背景图
|
||||
this.$refs.specialSharePage.retryGetBackgroundImage()
|
||||
|
||||
// 获取当前状态信息
|
||||
const status = this.$refs.specialSharePage.getStatusInfo()
|
||||
console.log('组件状态:', status)
|
||||
/*
|
||||
输出示例:
|
||||
{
|
||||
specialBackgroundImage: '123456 bytes',
|
||||
qrCodeImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEU...',
|
||||
backgroundImageLoaded: true,
|
||||
isLoadingBackground: false,
|
||||
imageLoadRetryCount: 0,
|
||||
isReady: true
|
||||
}
|
||||
*/
|
||||
```
|
||||
|
||||
### 工作流程
|
||||
|
||||
1. **组件挂载**:自动调用 `getSharedImg` 接口获取背景图
|
||||
2. **显示加载**:显示"正在获取背景图片..."状态
|
||||
3. **接口响应**:处理接口返回的base64背景图数据
|
||||
4. **准备就绪**:背景图和二维码都准备好后可以生成分享图片
|
||||
5. **生成图片**:使用html2canvas截取页面生成分享图片
|
||||
6. **处理结果**:
|
||||
- 关闭loading状态
|
||||
- 显示成功提示("图片生成成功,请长按保存")
|
||||
- 调用内部 `handleShareGenerated` 方法处理
|
||||
- 通过 `share-generated` 事件通知父组件
|
||||
|
||||
### 图片生成流程
|
||||
|
||||
```
|
||||
用户点击生成按钮
|
||||
↓
|
||||
检查前置条件(二维码、背景图)
|
||||
↓
|
||||
显示 "生成图片中..." loading
|
||||
↓
|
||||
使用 html2canvas 截取页面
|
||||
↓
|
||||
生成成功 → 关闭loading → 显示成功提示 → 发送事件
|
||||
↓
|
||||
生成失败 → 关闭loading → 显示错误提示
|
||||
```
|
||||
|
||||
### 错误处理
|
||||
|
||||
- **接口调用失败**:自动重试最多3次
|
||||
- **重试机制**:通过 `background-image-retry` 事件通知重试状态
|
||||
- **最终失败**:通过 `background-image-error` 事件通知错误
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. 确保 `getSharedImg` 接口返回完整的base64格式图片
|
||||
2. 组件会在mounted生命周期自动调用接口
|
||||
3. 支持手动重试机制,适用于网络不稳定的情况
|
||||
4. 生成的图片为JPEG格式,质量为100%
|
||||
5. 组件支持长按保存分享图片
|
||||
6. 接口失败时会显示相应的错误状态
|
||||
7. **图片生成成功后会自动显示提示信息**,无需在父组件中重复处理
|
||||
8. **组件内部和外部都会收到图片生成事件**,可根据需要在父组件中添加额外逻辑
|
||||
|
|
@ -1,501 +0,0 @@
|
|||
<template>
|
||||
<view ref="specialSharePage" class="special-share-page">
|
||||
<!-- 特殊场景背景图片 -->
|
||||
<image
|
||||
class="share-bg-image"
|
||||
:src="specialBackgroundImage"
|
||||
mode="scaleToFill"
|
||||
crossorigin="anonymous"
|
||||
@load="onBackgroundImageLoad"
|
||||
@error="onBackgroundImageError"
|
||||
v-if="specialBackgroundImage"
|
||||
></image>
|
||||
|
||||
<!-- 加载状态 -->
|
||||
<view
|
||||
class="loading-container"
|
||||
v-if="!specialBackgroundImage || isLoadingBackground"
|
||||
>
|
||||
<view class="loader"></view>
|
||||
<text class="loading-text">{{
|
||||
isLoadingBackground ? '正在获取背景图片...' : '正在加载分享背景...'
|
||||
}}</text>
|
||||
</view>
|
||||
|
||||
<view
|
||||
class="share-wrapper"
|
||||
v-if="specialBackgroundImage && !isLoadingBackground"
|
||||
>
|
||||
<view class="portal-frame" :class="{ 'is-loaded': isLoaded }">
|
||||
<view class="qr-code-outer special-qr-style">
|
||||
<image
|
||||
class="qr-code"
|
||||
:src="qrCodeImage"
|
||||
mode="aspectFit"
|
||||
v-if="qrCodeImage"
|
||||
></image>
|
||||
<view v-else class="qr-code-placeholder">
|
||||
<view class="loader"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<text
|
||||
class="member-code-text special-member-code-style"
|
||||
style="
|
||||
font-size: 30rpx;
|
||||
color: #005bac;
|
||||
font-weight: bold;
|
||||
margin-top: 20rpx;
|
||||
"
|
||||
>{{ desensitization(userInfo.memberCode) }}</text
|
||||
>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { snapdom } from '@zumer/snapdom'
|
||||
import html2canvas from 'html2canvas'
|
||||
import { getSharedImg } from '@/config/login'
|
||||
export default {
|
||||
name: 'SpecialSharePage',
|
||||
props: {
|
||||
qrCodeImage: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
userInfo: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
isWechat: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
isLoaded: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// 移除specialBackgroundImage prop,改为接口获取
|
||||
// 调试用:跳过图片验证
|
||||
skipImageVerification: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
backgroundImageLoaded: false,
|
||||
imageLoadRetryCount: 0,
|
||||
maxRetryCount: 3,
|
||||
specialBackgroundImage: '', // 存储接口返回的背景图
|
||||
isLoadingBackground: false, // 是否正在加载背景图
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getBackgroundImage()
|
||||
},
|
||||
methods: {
|
||||
desensitization(str) {
|
||||
if (!str) return ''
|
||||
if (str.length <= 8) return str.slice(0, 4) + '****'
|
||||
const len = str.length - 6
|
||||
const placeholder = '*'.repeat(len)
|
||||
return str.slice(0, 4) + placeholder + str.slice(-2)
|
||||
},
|
||||
|
||||
// 背景图片加载成功
|
||||
onBackgroundImageLoad() {
|
||||
this.backgroundImageLoaded = true
|
||||
console.log('特殊场景背景图片加载成功')
|
||||
},
|
||||
|
||||
// 背景图片加载失败
|
||||
onBackgroundImageError(e) {
|
||||
console.error('特殊场景背景图片加载失败:', e)
|
||||
this.backgroundImageLoaded = false
|
||||
this.imageLoadRetryCount++
|
||||
|
||||
// 如果重试次数未达到上限,可以通知父组件重试
|
||||
if (this.imageLoadRetryCount < this.maxRetryCount) {
|
||||
console.log(
|
||||
`图片加载失败,重试中 (${this.imageLoadRetryCount}/${this.maxRetryCount})`
|
||||
)
|
||||
this.$emit('background-image-retry', this.imageLoadRetryCount)
|
||||
} else {
|
||||
this.$emit('background-image-error', e)
|
||||
}
|
||||
},
|
||||
|
||||
// 获取特殊场景背景图片
|
||||
async getBackgroundImage() {
|
||||
if (this.skipImageVerification) {
|
||||
this.specialBackgroundImage = '' // 跳过验证时清空背景图
|
||||
this.backgroundImageLoaded = true
|
||||
return
|
||||
}
|
||||
|
||||
if (this.specialBackgroundImage) {
|
||||
// 如果背景图已加载,则直接使用
|
||||
this.backgroundImageLoaded = true
|
||||
return
|
||||
}
|
||||
|
||||
this.isLoadingBackground = true
|
||||
try {
|
||||
const result = await getSharedImg()
|
||||
if (result && result.code === 200 && result.data) {
|
||||
this.specialBackgroundImage =
|
||||
'data:image/png;base64,' + result.data.base64
|
||||
this.backgroundImageLoaded = true
|
||||
} else {
|
||||
this.backgroundImageLoaded = false
|
||||
this.imageLoadRetryCount++
|
||||
}
|
||||
} catch (error) {
|
||||
this.backgroundImageLoaded = false
|
||||
this.imageLoadRetryCount++
|
||||
if (this.imageLoadRetryCount < this.maxRetryCount) {
|
||||
this.$emit('background-image-retry', this.imageLoadRetryCount)
|
||||
} else {
|
||||
this.$emit('background-image-error', error)
|
||||
}
|
||||
} finally {
|
||||
this.isLoadingBackground = false
|
||||
}
|
||||
return this.specialBackgroundImage
|
||||
},
|
||||
|
||||
async generateShareImage() {
|
||||
// await this.getBackgroundImage()
|
||||
try {
|
||||
this.$nextTick(() => {
|
||||
const info = uni.getSystemInfoSync()
|
||||
console.log(info.platform, '.....info')
|
||||
if (info.platform === 'ios') {
|
||||
console.log('iOS detected, using html2canvas for capturing.')
|
||||
this.capturePageWithHtml2Canvas()
|
||||
} else {
|
||||
console.log('Non-iOS detected, using snapdom for capturing.')
|
||||
this.capturePageWithSnapDom()
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
uni.hideLoading()
|
||||
uni.showToast({ title: '图片生成失败,请稍后重试', icon: 'none' })
|
||||
}
|
||||
},
|
||||
|
||||
// 新增:使用html2canvas截取整个页面 (For iOS)
|
||||
async capturePageWithHtml2Canvas() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
// 确保所有图片都已加载完成
|
||||
const waitForImages = async () => {
|
||||
// 检查是否正在加载背景图片
|
||||
if (this.isLoadingBackground) {
|
||||
console.log('等待背景图片接口调用完成...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查背景图片是否加载完成
|
||||
if (!this.backgroundImageLoaded) {
|
||||
console.log('等待背景图片加载完成...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查二维码是否存在
|
||||
if (!this.qrCodeImage) {
|
||||
console.log('等待二维码生成...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查特殊背景图片参数是否存在
|
||||
if (!this.specialBackgroundImage) {
|
||||
console.log('等待特殊背景图片参数...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
console.log('所有图片准备就绪,开始使用html2canvas截图...')
|
||||
|
||||
// 等待确保渲染完成
|
||||
setTimeout(() => {
|
||||
const element = this.$el
|
||||
if (!element) {
|
||||
uni.hideLoading()
|
||||
reject(new Error('找不到组件容器'))
|
||||
return
|
||||
}
|
||||
|
||||
html2canvas(element, {
|
||||
useCORS: true,
|
||||
allowTaint: true,
|
||||
backgroundColor: null,
|
||||
scale: 2, // 提高清晰度
|
||||
dpi: 300,
|
||||
width: element.offsetWidth,
|
||||
height: element.offsetHeight,
|
||||
})
|
||||
.then(canvas => {
|
||||
const dataUrl = canvas.toDataURL('image/jpeg', 1.0)
|
||||
uni.hideLoading()
|
||||
// this.handleShareGenerated(dataUrl)
|
||||
this.$emit('share-generated', dataUrl)
|
||||
resolve()
|
||||
})
|
||||
.catch(err => {
|
||||
uni.hideLoading()
|
||||
console.error('html2canvas截取失败:', err)
|
||||
uni.showToast({
|
||||
title: '图片生成失败,请稍后重试',
|
||||
icon: 'none',
|
||||
})
|
||||
reject(err)
|
||||
})
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
// 开始等待图片加载
|
||||
waitForImages()
|
||||
})
|
||||
},
|
||||
|
||||
// 使用snapDOM截取整个页面
|
||||
async capturePageWithSnapDom() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
// 确保所有图片都已加载完成
|
||||
const waitForImages = async () => {
|
||||
// 检查是否正在加载背景图片
|
||||
if (this.isLoadingBackground) {
|
||||
console.log('等待背景图片接口调用完成...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查背景图片是否加载完成
|
||||
if (!this.backgroundImageLoaded) {
|
||||
console.log('等待背景图片加载完成...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查二维码是否存在
|
||||
if (!this.qrCodeImage) {
|
||||
console.log('等待二维码生成...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
// 检查特殊背景图片参数是否存在
|
||||
if (!this.specialBackgroundImage) {
|
||||
console.log('等待特殊背景图片参数...')
|
||||
setTimeout(waitForImages, 100)
|
||||
return
|
||||
}
|
||||
|
||||
console.log('所有图片准备就绪,开始截图...')
|
||||
|
||||
// 等待确保渲染完成
|
||||
setTimeout(async () => {
|
||||
const element = this.$el
|
||||
if (!element) {
|
||||
reject(new Error('找不到组件容器'))
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
// 获取元素的所有可能尺寸
|
||||
const rect = element.getBoundingClientRect()
|
||||
const offsetWidth = element.offsetWidth
|
||||
const offsetHeight = element.offsetHeight
|
||||
const scrollWidth = element.scrollWidth
|
||||
const scrollHeight = element.scrollHeight
|
||||
const clientWidth = element.clientWidth
|
||||
const clientHeight = element.clientHeight
|
||||
|
||||
// 计算实际需要的尺寸(取最大值确保完整)
|
||||
const elementWidth = Math.max(
|
||||
offsetWidth,
|
||||
scrollWidth,
|
||||
clientWidth,
|
||||
rect.width
|
||||
)
|
||||
const elementHeight = Math.max(
|
||||
offsetHeight,
|
||||
scrollHeight,
|
||||
clientHeight,
|
||||
rect.height
|
||||
)
|
||||
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
const result = await snapdom(element, {
|
||||
width: elementWidth,
|
||||
height: elementHeight,
|
||||
quality: 1,
|
||||
compress: false,
|
||||
|
||||
// useProxy: true,
|
||||
})
|
||||
const canvas = await result.toCanvas()
|
||||
|
||||
const dataUrl = canvas.toDataURL('image/jpeg')
|
||||
|
||||
uni.hideLoading()
|
||||
// this.handleShareGenerated(dataUrl)
|
||||
this.$emit('share-generated', dataUrl)
|
||||
resolve()
|
||||
} catch (err) {
|
||||
uni.hideLoading()
|
||||
console.error('snapDOM截取失败:', err)
|
||||
uni.showToast({
|
||||
title: '图片生成失败,请稍后重试',
|
||||
icon: 'none',
|
||||
})
|
||||
reject(err)
|
||||
}
|
||||
}, 500)
|
||||
} catch (err) {
|
||||
uni.hideLoading()
|
||||
console.error('snapDOM初始化失败:', err)
|
||||
uni.showToast({
|
||||
title: '图片生成失败,请稍后重试',
|
||||
icon: 'none',
|
||||
})
|
||||
reject(err)
|
||||
}
|
||||
}, 1000)
|
||||
}
|
||||
|
||||
// 开始等待图片加载
|
||||
waitForImages()
|
||||
})
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.special-share-page {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* 背景图片样式 */
|
||||
.share-bg-image {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
/* 加载状态 */
|
||||
.loading-container {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.loading-text {
|
||||
margin-top: 20rpx;
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.share-wrapper {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
bottom: 22%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.portal-frame {
|
||||
padding: 32rpx;
|
||||
width: 520rpx;
|
||||
border-radius: 40rpx;
|
||||
display: flex;
|
||||
box-sizing: border-box;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin: 0 auto;
|
||||
opacity: 0;
|
||||
transform: translateY(20rpx);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.portal-frame.is-loaded {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
/* 特殊场景二维码样式区域 - 用户自定义样式位置 */
|
||||
.qr-code-outer {
|
||||
width: 400rpx;
|
||||
height: 400rpx;
|
||||
border-radius: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 12rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.qr-code,
|
||||
.qr-code-placeholder {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.qr-code {
|
||||
border-radius: 16rpx;
|
||||
}
|
||||
|
||||
.qr-code-placeholder {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.loader {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border: 8rpx solid rgba(0, 0, 0, 0.1);
|
||||
border-left-color: #0072ff;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
/* 特殊场景会员编号样式区域 - 用户自定义样式位置 */
|
||||
.member-code-text {
|
||||
/* 用户可以在这里自定义会员编号的样式 */
|
||||
}
|
||||
|
||||
/* 特殊场景下的会员编号样式 */
|
||||
.special-member-code-style {
|
||||
/* 用户可以在这里自定义特殊场景下的会员编号样式 */
|
||||
/* 例如:不同的位置、颜色、字体等 */
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,46 +1,86 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-12 17:17:03
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2023-03-24 10:42:40
|
||||
-->
|
||||
<template>
|
||||
<u-popup :show="sucShow" closeable :round="10" mode="center" @close="sucShow= false">
|
||||
<view class="pop_a">
|
||||
<view class="tit">
|
||||
<u-icon name="checkmark-circle-fill" color="#029B00"></u-icon>
|
||||
<view>{{'注册成功'}}</view>
|
||||
<view>{{$t('w_0158')}}</view>
|
||||
</view>
|
||||
|
||||
<view class="getCode" @tap="onCopy">{{'复制'}}</view>
|
||||
<!-- <view class="digBody">
|
||||
<view class="red">{{$t('w_0159')}}
|
||||
<view class="copy"
|
||||
@click="onCopy">{{$t('MY_CK_27')}}</view>
|
||||
</view>
|
||||
<view>{{$t('CK_KS_14')}}: {{ allData.memberName }}</view>
|
||||
<view>{{$t('MN_T_1')}}: {{ allData.memberCode }}</view>
|
||||
<view>会员电话: {{ allData.phone }}</view>
|
||||
<view>登录密码: {{ allData.loginPassword }}</view>
|
||||
<view>支付密码: {{ allData.payPassword }}</view>
|
||||
<view>邮箱: {{ allData.email }}</view>
|
||||
<view>登录网址: {{ allData.urlAddress }}</view>
|
||||
</view>
|
||||
<span slot="footer"
|
||||
class="dialog-footer">
|
||||
<view class="btn"
|
||||
@click="handleClose">{{$t('w_0035')}}</view>
|
||||
<view class="hui"
|
||||
@click="handleClose">取消</view>
|
||||
</span> -->
|
||||
<!-- <view class="tit1">{{$t('w_0159')}}</view> -->
|
||||
<view class="getCode" @tap="onCopy">{{$t('MY_CK_27')}}</view>
|
||||
<view class="form">
|
||||
<u--form labelPosition="left" labelWidth="80px" :model="allData" ref="uForm">
|
||||
<u-form-item :label="'会员姓名'+':'" borderBottom>
|
||||
<u-form-item :label="$t('CK_KS_14')+':'" borderBottom>
|
||||
<u--input v-model="allData.memberName" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'会员编号'+':'" borderBottom>
|
||||
<u-form-item :label="$t('MN_T_1')+':'" borderBottom>
|
||||
<u--input v-model="allData.memberCode" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'会员电话'+':'" borderBottom>
|
||||
<u-form-item :label="$t('w_0160')+':'" borderBottom>
|
||||
<u--input v-model="allData.phone" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'登录密码'+':'" borderBottom>
|
||||
<u-form-item :label="$t('w_0041')+':'" borderBottom>
|
||||
<u--input v-model="allData.loginPassword" border="none">
|
||||
</u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'支付密码'+':'" borderBottom>
|
||||
<u-form-item :label="$t('N_I_217')+':'" borderBottom>
|
||||
<u--input v-model="allData.payPassword" border="none">
|
||||
</u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'登录网址'+':'" borderBottom>
|
||||
<u-form-item :label="$t('w_0161')+':'" borderBottom>
|
||||
<u--input v-model="allData.urlAddress" border="none"></u--input>
|
||||
</u-form-item>
|
||||
<!-- <u-form-item :label="'公众号搜索'+':'"
|
||||
borderBottom>
|
||||
<u--input v-model="allData.gzh"
|
||||
border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'APP(苹果)'+':'"
|
||||
borderBottom>
|
||||
<u--input v-model="allData.ios"
|
||||
border="none"></u--input>
|
||||
</u-form-item>
|
||||
<u-form-item :label="'APP(安卓)'+':'"
|
||||
borderBottom>
|
||||
<u--input v-model="allData.android"
|
||||
border="none"></u--input>
|
||||
</u-form-item> -->
|
||||
</u--form>
|
||||
<view class="disflx">
|
||||
<u-button
|
||||
type="success"
|
||||
class="uBtn"
|
||||
shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )"
|
||||
@tap="handleClose"
|
||||
>
|
||||
确定
|
||||
</u-button>
|
||||
<u-button type="success" class="uBtn" shape="circle"
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )"
|
||||
@tap="handleClose">{{$t('w_0035')}}</u-button>
|
||||
</view>
|
||||
</view>
|
||||
<img class="yh" v-show="bia" src="@/static/images/yh.gif" alt="">
|
||||
|
|
@ -78,38 +118,38 @@
|
|||
payPw() {},
|
||||
onCopy() {
|
||||
let text =
|
||||
'会员姓名' + ':' +
|
||||
this.$t('CK_KS_14') + ':' +
|
||||
this.allData.memberName +
|
||||
'\n' +
|
||||
'会员编号' + ':' +
|
||||
this.$t('MN_T_1') + ':' +
|
||||
this.allData.memberCode +
|
||||
'\n' +
|
||||
'会员电话' + ':' +
|
||||
this.$t('w_0160') + ':' +
|
||||
this.allData.phone +
|
||||
'\n' +
|
||||
'登录密码' + ':' +
|
||||
this.$t('w_0041') + ':' +
|
||||
this.allData.loginPassword +
|
||||
'\n' +
|
||||
'支付密码' + ':' +
|
||||
this.$t('N_I_217') + ':' +
|
||||
this.allData.payPassword +
|
||||
'\n' +
|
||||
'登录网址' + ':' +
|
||||
this.$t('w_0161') + ':' +
|
||||
this.allData.urlAddress
|
||||
// +
|
||||
// '\n' +
|
||||
// '公众号搜索'+':' +
|
||||
// this.$t('APP_ADD_7')+':' +
|
||||
// this.allData.gzh+
|
||||
// '\n' +
|
||||
// 'APP'+`(${'苹果'})` +
|
||||
// 'APP'+`(${this.$t('APP_ADD_8')})` +
|
||||
// ':' +
|
||||
// this.allData.ios+
|
||||
// '\n' +
|
||||
// 'APP'+`(${'安卓'})` +
|
||||
// 'APP'+`(${this.$t('APP_ADD_9')})` +
|
||||
// ':' +
|
||||
// this.allData.android
|
||||
this.$copyText(text).then((res) => {
|
||||
uni.showToast({
|
||||
title: '复制成功',
|
||||
title: this.$t('MY_CK_29'),
|
||||
icon: 'none',
|
||||
})
|
||||
})
|
||||
|
|
@ -176,7 +216,7 @@
|
|||
font-size: 30rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #005BAC;
|
||||
color: #fb3024;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,195 +0,0 @@
|
|||
<template>
|
||||
<view class="test-page">
|
||||
<view class="test-content">
|
||||
<view class="test-title">TabBar图标测试</view>
|
||||
|
||||
<!-- 显示当前状态 -->
|
||||
<view class="status-info">
|
||||
<text>当前选中: {{ currentTab }}</text>
|
||||
<text>主题皮肤: {{ systemSkin }}</text>
|
||||
<text>购物车数量: {{ shopCarLength || 0 }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 图标测试区域 -->
|
||||
<view class="icon-test">
|
||||
<view class="icon-section">
|
||||
<text class="section-title">首页图标测试</text>
|
||||
<view class="icon-row">
|
||||
<image src="@/static/images/one1.png" class="test-icon" />
|
||||
<image src="@/static/images/one2.png" class="test-icon" />
|
||||
<image src="@/static/images/one11.jpg" class="test-icon" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="icon-section">
|
||||
<text class="section-title">会员专区图标测试</text>
|
||||
<view class="icon-row">
|
||||
<image src="@/static/images/special1.png" class="test-icon" />
|
||||
<image src="@/static/images/special2.png" class="test-icon" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="icon-section">
|
||||
<text class="section-title">个人推广图标测试</text>
|
||||
<view class="icon-row">
|
||||
<image src="@/static/images/share-act.svg" class="test-icon" />
|
||||
<image src="@/static/images/share.svg" class="test-icon" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="icon-section">
|
||||
<text class="section-title">购物车图标测试</text>
|
||||
<view class="icon-row">
|
||||
<image src="@/static/images/three1.png" class="test-icon" />
|
||||
<image src="@/static/images/three2.png" class="test-icon" />
|
||||
<image src="@/static/images/three11.jpg" class="test-icon" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="icon-section">
|
||||
<text class="section-title">我的图标测试</text>
|
||||
<view class="icon-row">
|
||||
<image src="@/static/images/my_icon1.png" class="test-icon" />
|
||||
<image src="@/static/images/my_icon2.png" class="test-icon" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 主题切换按钮 -->
|
||||
<view class="theme-switcher">
|
||||
<button @click="switchTheme" class="theme-btn">
|
||||
切换主题 (当前: {{ systemSkin === 2 ? '绿色' : '默认' }})
|
||||
</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 使用修复后的TabBar -->
|
||||
<RaisedTabbar :current="currentTab" @change="handleTabChange" />
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import RaisedTabbar from './raised-tabbar.vue'
|
||||
import { mapGetters } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'TabbarTest',
|
||||
components: {
|
||||
RaisedTabbar,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentTab: 0,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['shopCarLength', 'user']),
|
||||
systemSkin() {
|
||||
return this.user?.skin || 0
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleTabChange(index) {
|
||||
this.currentTab = index
|
||||
console.log('Tab切换到:', index)
|
||||
},
|
||||
switchTheme() {
|
||||
// 这里只是演示,实际项目中应该通过Vuex更新
|
||||
if (this.user) {
|
||||
this.$store.commit('updateUserSkin', this.systemSkin === 2 ? 0 : 2)
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.test-page {
|
||||
min-height: 100vh;
|
||||
background: #f8f9fa;
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
.test-content {
|
||||
padding: 40rpx;
|
||||
}
|
||||
|
||||
.test-title {
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
color: #333;
|
||||
margin-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.status-info {
|
||||
background: white;
|
||||
border-radius: 16rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 40rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
|
||||
|
||||
text {
|
||||
display: block;
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
margin-bottom: 10rpx;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icon-test {
|
||||
background: white;
|
||||
border-radius: 16rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 40rpx;
|
||||
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.icon-section {
|
||||
margin-bottom: 40rpx;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 20rpx;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.icon-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.test-icon {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
border: 2rpx solid #eee;
|
||||
border-radius: 8rpx;
|
||||
background: #f9f9f9;
|
||||
}
|
||||
|
||||
.theme-switcher {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.theme-btn {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 50rpx;
|
||||
padding: 20rpx 40rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,275 @@
|
|||
<template>
|
||||
<view class="main">
|
||||
<!-- 推荐达人 -->
|
||||
<u-popup :show="drShow" :round="10" mode="center" @close="closeShow" closeable>
|
||||
<view class="uni-margin-wrap">
|
||||
<swiper class="swiper" circular :indicator-dots="indicatorDots" :autoplay="autoplay"
|
||||
:interval="interval" :duration="duration">
|
||||
<swiper-item>
|
||||
<view class="swiper-item">
|
||||
<view class="title-con">{{ $t("S_L_12") }}</view>
|
||||
<view class="screen">
|
||||
<view class="screen-view" @click="screenTaps(index, item)"
|
||||
v-for="(item, index) in screenList"
|
||||
:style="remIndex == item.id ? 'font-weight:bold' : ''">
|
||||
{{ item.name }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="tjClass" v-for="(item, index) in tjList">
|
||||
<view class="styleColors">NO.0{{ item.rank }}</view>
|
||||
<img class="avatar" v-if="item.headPath" :src="item.headPath" />
|
||||
<image class="avatar" v-else src="@/static/images/avatar.png" />
|
||||
<view class="user-name">{{ item.memberName }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
<swiper-item>
|
||||
<view class="swiper-item">
|
||||
<view class="title-con">{{ $t("S_L_13") }}</view>
|
||||
<view class="screen">
|
||||
<view class="screen-view" @click="screenTaps1(index, item)"
|
||||
v-for="(item, index) in screenList1"
|
||||
:style="remIndex1 == item.id ? 'font-weight:600' : ''">
|
||||
{{ item.name }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="tjClass" v-for="(item, index) in ksList">
|
||||
<view class="styleColors">NO.0{{ item.rank }}</view>
|
||||
<img class="avatar" v-if="item.headPath" :src="item.headPath" />
|
||||
<image class="avatar" v-else src="@/static/images/avatar.png" />
|
||||
<view class="user-name">{{ item.memberName }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
</view>
|
||||
</u-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as my from '@/config/mine.js'
|
||||
// import Swiper from "swiper";
|
||||
export default {
|
||||
name: "talentList",
|
||||
props: {
|
||||
drShow: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
screenList: [{
|
||||
name: this.$t("S_L_18"),
|
||||
id: 6
|
||||
},
|
||||
{
|
||||
name: this.$t("S_L_19"),
|
||||
id: 5
|
||||
},
|
||||
{
|
||||
name: this.$t("S_L_20"),
|
||||
id: 4
|
||||
},
|
||||
],
|
||||
screenList1: [{
|
||||
name: this.$t("S_L_18"),
|
||||
id: 9
|
||||
},
|
||||
{
|
||||
name: this.$t("S_L_19"),
|
||||
id: 8
|
||||
},
|
||||
{
|
||||
name: this.$t("S_L_20"),
|
||||
id: 7
|
||||
},
|
||||
],
|
||||
remIndex: 6, //推荐达人下标
|
||||
remIndex1: 9, //抗衰达人下标
|
||||
tjList: [],
|
||||
ksList: [],
|
||||
indicatorDots: true,
|
||||
autoplay: false,
|
||||
interval: 2000,
|
||||
duration: 500
|
||||
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
|
||||
this.getUserTj();
|
||||
this.getUserKs()
|
||||
},
|
||||
|
||||
|
||||
methods: {
|
||||
closeShow(){
|
||||
this.$emit('closeShow')
|
||||
},
|
||||
screenTaps(index, item) {
|
||||
this.remIndex = item.id;
|
||||
this.getUserTj();
|
||||
},
|
||||
screenTaps1(index, item) {
|
||||
this.remIndex1 = item.id;
|
||||
this.getUserKs();
|
||||
},
|
||||
getUserTj() {
|
||||
my.recommend({
|
||||
wallType: this.remIndex
|
||||
}).then((res) => {
|
||||
this.tjList = res.rows;
|
||||
});
|
||||
},
|
||||
getUserKs() {
|
||||
my.repurchase({
|
||||
wallType: this.remIndex1
|
||||
}).then((res) => {
|
||||
this.ksList = res.rows;
|
||||
});
|
||||
},
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.uni-margin-wrap {
|
||||
width: 690rpx;
|
||||
height:800rpx;
|
||||
|
||||
.swiper {
|
||||
height: 800rpx;
|
||||
.swiper-item {
|
||||
display: block;
|
||||
text-align: center;
|
||||
.title-con {
|
||||
font-size: 36rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #282828;
|
||||
margin: 60rpx 0;
|
||||
|
||||
}
|
||||
|
||||
.screen {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.screen-view {
|
||||
margin: 0 50rpx;
|
||||
cursor: pointer;
|
||||
font-size: 30rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
color: #282828;
|
||||
}
|
||||
}
|
||||
.tjClass {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 30rpx;
|
||||
justify-content: center;
|
||||
|
||||
.styleColors {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #FB3024;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 124rpx;
|
||||
height: 124rpx;
|
||||
border-radius: 50%;
|
||||
margin-top: 10rpx;
|
||||
margin: 0 30rpx;
|
||||
}
|
||||
|
||||
.user-name {
|
||||
font-size: 32rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #282828;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.swiper-container {
|
||||
|
||||
.swiper-slide {
|
||||
width: 650rpx;
|
||||
padding-bottom: 40rpx;
|
||||
background: #ffffff;
|
||||
text-align: center;
|
||||
|
||||
.title-con {
|
||||
font-size: 36rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #282828;
|
||||
margin: 60rpx 0;
|
||||
|
||||
}
|
||||
|
||||
.screen {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
.screen-view {
|
||||
margin: 0 50rpx;
|
||||
cursor: pointer;
|
||||
font-size: 30rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
color: #282828;
|
||||
}
|
||||
}
|
||||
|
||||
.tjClass {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 30rpx;
|
||||
justify-content: center;
|
||||
|
||||
.styleColors {
|
||||
font-size: 26rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: bold;
|
||||
color: #FB3024;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 124rpx;
|
||||
height: 124rpx;
|
||||
border-radius: 50%;
|
||||
margin-top: 10rpx;
|
||||
margin: 0 30rpx;
|
||||
}
|
||||
|
||||
.user-name {
|
||||
font-size: 32rpx;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #282828;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,4 +1,15 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2024-06-25 11:38:37
|
||||
-->
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-25 20:05:35
|
||||
-->
|
||||
<template>
|
||||
<u-popup :show="agreeMent"
|
||||
:closeable="true"
|
||||
|
|
@ -353,8 +364,8 @@ font-size:6.0000pt;"><font face="宋体">日</font></span></b><span style="mso-s
|
|||
<u-button type="success"
|
||||
class="uBtn"
|
||||
shape="circle"
|
||||
color="linear-gradient(to right, #005BAC, #005BAC )"
|
||||
@tap="agreeMent=false">{{'确定'}}</u-button>
|
||||
color="linear-gradient(to right, #fb3024, #fb3024 )"
|
||||
@tap="agreeMent=false">{{$t('w_0035')}}</u-button>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
|
||||
.act {
|
||||
color: #FFFFFF;
|
||||
background: #005BAC;
|
||||
background: #C8161D;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,25 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-28 16:30:26
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
<view v-for="(item,index) in data" :key="item.id">
|
||||
<view class="thetree">
|
||||
<view @click="toggleNode(index)" class="arrow"
|
||||
v-if="!expanded && item.children && item.children.length > 0">
|
||||
<u-icon size="56rpx" color="#005BAC" name="plus-circle"></u-icon>
|
||||
<u-icon size="56rpx" color="#ee252a" name="plus-circle"></u-icon>
|
||||
|
||||
</view>
|
||||
<view @click="toggleNode(index)" class="arrow"
|
||||
v-if="expanded && item.children && item.children.length > 0">
|
||||
<u-icon size="56rpx" color="#005BAC" name="minus-circle"></u-icon>
|
||||
<u-icon size="56rpx" color="#ee252a" name="minus-circle"></u-icon>
|
||||
|
||||
</view>
|
||||
<view class="fzbtn">
|
||||
<u-button @click="copyText(item.splice)" class='thebtn' size="small" :text="'复制'"></u-button>
|
||||
<u-button @click="copyText(item.splice)" class='thebtn' size="small" :text="$t('MY_CK_27')"></u-button>
|
||||
</view>
|
||||
<view class="maintree">{{ item.splice }}</view>
|
||||
|
||||
|
|
@ -49,7 +54,7 @@
|
|||
copyText(text){
|
||||
this.$copyText(text).then((res) => {
|
||||
uni.showToast({
|
||||
title: '复制成功',
|
||||
title: this.$t('MY_CK_29'),
|
||||
icon: 'none',
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-28 16:30:26
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
<!-- 身份证 -->
|
||||
|
|
@ -67,7 +72,7 @@
|
|||
this.fileList.push({
|
||||
...item,
|
||||
status: 'uploading',
|
||||
message: '上传中'
|
||||
message: this.$t('PER_DA_47')
|
||||
})
|
||||
})
|
||||
for (let i = 0; i < lists.length; i++) {
|
||||
|
|
|
|||
|
|
@ -1,165 +0,0 @@
|
|||
<template>
|
||||
<u-modal
|
||||
:show="show"
|
||||
:showConfirmButton="true"
|
||||
:showCancelButton="false"
|
||||
confirmText="我知道了"
|
||||
@confirm="handleConfirm"
|
||||
:closeOnClickOverlay="false"
|
||||
width="640rpx"
|
||||
:customStyle="{ 'border-radius': '16rpx' }"
|
||||
>
|
||||
<view class="withdrawal-guide-content">
|
||||
<view class="guide-title">提现绑定操作指南</view>
|
||||
<view class="guide-text">
|
||||
<text>尊敬的经销商伙伴们:</text>
|
||||
<text
|
||||
>为保障大家能够顺利、快捷地进行提现操作,同时积极响应并符合十一后国家法律法规的最新要求,现需各位经销商伙伴完成提现绑定操作。以下是详细的操作步骤,请大家按照顺序依次进行:</text
|
||||
>
|
||||
</view>
|
||||
<view class="guide-steps">
|
||||
<view class="step-item">
|
||||
<text class="step-number">1.</text>
|
||||
<text class="step-text"
|
||||
>扫码进入签约页面:使用微信扫描指定二维码,进入相关操作界面后,点击“去签约”。</text
|
||||
>
|
||||
</view>
|
||||
<view class="step-item">
|
||||
<text class="step-number">2.</text>
|
||||
<text class="step-text"
|
||||
>在线签约:在跳转的页面中,找到并点击“在线签约”选项。同意隐私政策:仔细阅读隐私政策申明,确认无误后,点击“同意并继续”。</text
|
||||
>
|
||||
</view>
|
||||
<view class="step-item">
|
||||
<text class="step-number">3.</text>
|
||||
<text class="step-text"
|
||||
>绑定手机号码:输入绑卡人的手机号码,获取验证码,将收到的验证码准确输入后,点击“下一步”。</text
|
||||
>
|
||||
</view>
|
||||
<view class="step-item">
|
||||
<text class="step-number">4.</text>
|
||||
<text class="step-text"
|
||||
>上传身份证照片:可选择现场拍摄身份证正反面照片,或从手机相册中选取已保存的身份证正反面照片进行上传,上传完成后点击“下一步”。</text
|
||||
>
|
||||
</view>
|
||||
<view class="step-item">
|
||||
<text class="step-number">5.</text>
|
||||
<text class="step-text"
|
||||
>输入银行卡号:准确输入银行卡号,系统将提示“签约成功”,随后自动跳转到协议页面。</text
|
||||
>
|
||||
</view>
|
||||
<view class="step-item">
|
||||
<text class="step-number">6.</text>
|
||||
<text class="step-text"
|
||||
>完成手写签名:在协议页面的最下方,进行手写签名操作,签名完成后即完成整个签约流程。</text
|
||||
>
|
||||
</view>
|
||||
</view>
|
||||
<view class="guide-footer">
|
||||
<text
|
||||
>请大家务必尽快办理提现绑定操作,以免影响后续的提现业务。若在操作过程中遇到任何疑问或困难,可随时与我们联系,我们将竭诚为大家提供帮助。感谢大家的理解与配合!</text
|
||||
>
|
||||
</view>
|
||||
<view class="qr-code-section">
|
||||
<image
|
||||
class="qr-code-image"
|
||||
src="@/static/images/qr-code.png"
|
||||
mode="aspectFit"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</u-modal>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'WithdrawalGuide',
|
||||
props: {
|
||||
show: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
handleConfirm() {
|
||||
this.$emit('confirm')
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.withdrawal-guide-content {
|
||||
padding: 0rpx 20rpx 20rpx;
|
||||
height: 80vh;
|
||||
overflow-y: auto;
|
||||
.guide-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #333333;
|
||||
text-align: center;
|
||||
margin-bottom: 32rpx;
|
||||
}
|
||||
|
||||
.guide-text {
|
||||
font-size: 26rpx;
|
||||
color: #666666;
|
||||
line-height: 40rpx;
|
||||
margin-bottom: 24rpx;
|
||||
|
||||
text {
|
||||
display: block;
|
||||
margin-bottom: 16rpx;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.guide-steps {
|
||||
margin-bottom: 24rpx;
|
||||
|
||||
.step-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 16rpx;
|
||||
|
||||
.step-number {
|
||||
color: #005bac;
|
||||
font-size: 26rpx;
|
||||
font-weight: bold;
|
||||
width: 32rpx;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.step-text {
|
||||
font-size: 26rpx;
|
||||
color: #666666;
|
||||
line-height: 40rpx;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.guide-footer {
|
||||
font-size: 26rpx;
|
||||
color: #666666;
|
||||
line-height: 40rpx;
|
||||
margin-bottom: 32rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.qr-code-section {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.qr-code-image {
|
||||
width: 200rpx;
|
||||
height: 200rpx;
|
||||
border-radius: 8rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-01 11:08:55
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//活动列表
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-12 11:40:34
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//认证详情
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 09:23:47
|
||||
*/
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
const TokenKey = 'Admin-Token'
|
||||
|
|
@ -8,7 +13,7 @@ export function getToken() {
|
|||
return Cookies.get(TokenKey)
|
||||
}
|
||||
export function setToken(token, expires) {
|
||||
return Cookies.set(TokenKey, token)
|
||||
return Cookies.set(TokenKey, token, { expires: expires })
|
||||
}
|
||||
export function removeToken() {
|
||||
return Cookies.remove(TokenKey)
|
||||
|
|
|
|||
|
|
@ -1,236 +1,202 @@
|
|||
const http = uni.$u.http
|
||||
|
||||
// 钱包余额
|
||||
export const getWalletBalance = params =>
|
||||
http.get('/member/api/wallet/balance', {
|
||||
params,
|
||||
})
|
||||
export const getWalletBalance = (params) => http.get('/member/api/wallet/balance', {
|
||||
params
|
||||
})
|
||||
|
||||
//提现账户
|
||||
export const getPkBdAccountList = params =>
|
||||
http.get('/system/api/account/pkBdAccountList', {
|
||||
params,
|
||||
})
|
||||
//提现账户
|
||||
export const getPkBdAccountList = (params) => http.get('/system/api/account/pkBdAccountList', {
|
||||
params
|
||||
})
|
||||
|
||||
//提现选择银行卡
|
||||
export const getDefaultBank = params =>
|
||||
http.get('/member/api/bank/default-bank', {
|
||||
params,
|
||||
})
|
||||
export const getDefaultBank = (params) => http.get('/member/api/bank/default-bank', {
|
||||
params
|
||||
})
|
||||
|
||||
//校验是否绑定银行卡
|
||||
export const checkIsbindBank = (params) => http.get('/member/api/bank/is-bind', {
|
||||
params
|
||||
})
|
||||
|
||||
//提现页面展示
|
||||
export const getWidthdrawShow = params =>
|
||||
http.get('/member/api/withdraw/show/add', {
|
||||
params,
|
||||
})
|
||||
export const getWidthdrawShow = (params) => http.get('/member/api/withdraw/show/add', {
|
||||
params
|
||||
})
|
||||
|
||||
//确认提现
|
||||
export const addWithdraw = params =>
|
||||
http.post('/member/api/withdraw/add', params)
|
||||
export const addWithdraw = (params) => http.post('/member/api/withdraw/add', params)
|
||||
|
||||
|
||||
//提现明细列表
|
||||
export const getWithdrawList = params =>
|
||||
http.get('/member/api/withdraw/list-detail', {
|
||||
params,
|
||||
})
|
||||
export const getWithdrawList = (params) => http.get('/member/api/withdraw/list-detail', {
|
||||
params
|
||||
})
|
||||
|
||||
//提现撤销
|
||||
export const cancelWithdraw = params =>
|
||||
http.get('/member/api/withdraw/cancel', {
|
||||
params,
|
||||
})
|
||||
export const cancelWithdraw = (params) => http.get('/member/api/withdraw/cancel', {
|
||||
params
|
||||
})
|
||||
|
||||
//获取转账转出账户
|
||||
export const getTransferAccount = params =>
|
||||
http.get('/member/api/transfer/transfer-account', {
|
||||
params,
|
||||
})
|
||||
export const getTransferAccount = (params) => http.get('/member/api/transfer/transfer-account', {
|
||||
params
|
||||
})
|
||||
|
||||
//根据用户编号查询用户姓名
|
||||
export const getTransferChineseName = params =>
|
||||
http.get('/member/api/transfer/chinese-name', {
|
||||
params,
|
||||
})
|
||||
export const getTransferChineseName = (params) => http.get('/member/api/transfer/chinese-name', {
|
||||
params
|
||||
})
|
||||
|
||||
//查询选择账户可转账余额
|
||||
export const getTransferMember = params =>
|
||||
http.get('/member/api/transfer/member-balance', {
|
||||
params,
|
||||
})
|
||||
export const getTransferMember = (params) => http.get('/member/api/transfer/member-balance', {
|
||||
params
|
||||
})
|
||||
|
||||
//确认转账
|
||||
export const addTransfer = params =>
|
||||
http.post('/member/api/transfer/add', params)
|
||||
export const addTransfer = (params) => http.post('/member/api/transfer/add', params)
|
||||
|
||||
//钱包银行卡列表
|
||||
export const getBankList = params =>
|
||||
http.get('/member/api/bank/list', {
|
||||
params,
|
||||
})
|
||||
export const getBankList = (params) => http.get('/member/api/bank/list', {
|
||||
params
|
||||
})
|
||||
|
||||
//解除绑定
|
||||
export const removeBankBind = params =>
|
||||
http.get('/member/api/bank/unbind-bank', {
|
||||
params,
|
||||
})
|
||||
export const removeBankBind = (params) => http.get('/member/api/bank/unbind-bank', {
|
||||
params
|
||||
})
|
||||
|
||||
//获取银行验证码
|
||||
export const getVerification = params =>
|
||||
http.get('/member/api/sms/verification', {
|
||||
params,
|
||||
})
|
||||
export const getVerification = (params) => http.get('/member/api/sms/verification', {
|
||||
params
|
||||
})
|
||||
|
||||
//绑定银行卡校验
|
||||
export const verifyBankCard = params =>
|
||||
http.post('/member/api/bank/verify-bank-card', params)
|
||||
export const verifyBankCard = (params) => http.post('/member/api/bank/verify-bank-card', params)
|
||||
|
||||
//是否配置白名单 白名单不进行银行卡四要素校验
|
||||
export const checkIfWhite = params =>
|
||||
http.get('/member/api/bank/is-white-list', {
|
||||
params,
|
||||
})
|
||||
export const checkIfWhite = (params) => http.get('/member/api/bank/is-white-list', {
|
||||
params
|
||||
})
|
||||
|
||||
//银行卡选择下拉选
|
||||
export const getBankCardChoiceList = params =>
|
||||
http.get('/system/api/bank/list', {
|
||||
params,
|
||||
})
|
||||
export const getBankCardChoiceList = (params) => http.get('/system/api/bank/list', {
|
||||
params
|
||||
})
|
||||
|
||||
//钱包绑卡
|
||||
export const bindWalletBankAdd = params =>
|
||||
http.post('/member/api/bank/add', params)
|
||||
export const bindWalletBankAdd = (params) => http.post('/member/api/bank/add', params)
|
||||
|
||||
// 交易明细
|
||||
export const getTransactionDetails = params =>
|
||||
http.post(
|
||||
'/member/api/wallet/transaction-details?pageNum=' +
|
||||
params.pageNum +
|
||||
'&pageSize=' +
|
||||
params.pageSize,
|
||||
params
|
||||
)
|
||||
export const getTransactionDetails = (params) => http.post('/member/api/wallet/transaction-details?pageNum=' + params
|
||||
.pageNum + "&pageSize=" + params.pageSize, params)
|
||||
|
||||
|
||||
//交易类型下拉选
|
||||
export const getTradeTypeList = params =>
|
||||
http.get('/member/api/wallet/trade-type', {
|
||||
params,
|
||||
})
|
||||
export const getTradeTypeList = (params) => http.get('/member/api/wallet/trade-type', {
|
||||
params
|
||||
})
|
||||
|
||||
//币种-账户类型下拉选
|
||||
export const getEnumsAccountList = params =>
|
||||
http.get('/system/api/account/pkBdAccountList', {
|
||||
params,
|
||||
})
|
||||
export const getEnumsAccountList = (params) => http.get('/system/api/account/pkBdAccountList', {
|
||||
params
|
||||
})
|
||||
|
||||
//意见反馈类型
|
||||
export const getFeedbackType = params =>
|
||||
http.get('/system/pub/enums/feedback-type', {
|
||||
params,
|
||||
})
|
||||
export const getFeedbackType = (params) => http.get('/system/pub/enums/feedback-type', {
|
||||
params
|
||||
})
|
||||
|
||||
//提交意见反馈列表
|
||||
export const saveFeedBack = params =>
|
||||
http.post('/system/api/feedback/save', params)
|
||||
export const saveFeedBack = (params) => http.post('/system/api/feedback/save', params)
|
||||
|
||||
|
||||
|
||||
// 公告、站内信、意见反馈数
|
||||
export const getNoticeCount = params =>
|
||||
http.get('/system/api/notice/index-count', {
|
||||
params,
|
||||
})
|
||||
export const getNoticeCount = (params) => http.get('/system/api/notice/index-count', {
|
||||
params
|
||||
})
|
||||
|
||||
// 公告站内信列表 公告1站内信2
|
||||
export const getNoticeList = params =>
|
||||
http.get('/system/api/notice/index-list', {
|
||||
params,
|
||||
})
|
||||
export const getNoticeList = (params) => http.get('/system/api/notice/index-list', {
|
||||
params
|
||||
})
|
||||
|
||||
//意见列表
|
||||
export const getFeedbackList = params =>
|
||||
http.get('/system/api/feedback/index-list', {
|
||||
params,
|
||||
})
|
||||
export const getFeedbackList = (params) => http.get('/system/api/feedback/index-list', {
|
||||
params
|
||||
})
|
||||
|
||||
|
||||
//获取公告、站内信详情
|
||||
export const getNoticeDetail = params =>
|
||||
http.get('/system/api/notice/index-detail', {
|
||||
params,
|
||||
})
|
||||
export const getNoticeDetail = (params) => http.get('/system/api/notice/index-detail', {
|
||||
params
|
||||
})
|
||||
|
||||
//二级密码校验
|
||||
export const checkPwd = params =>
|
||||
http.get('/member/api/recharge/check-pwd', {
|
||||
params,
|
||||
})
|
||||
export const checkPwd = (params) => http.get('/member/api/recharge/check-pwd', {
|
||||
params
|
||||
})
|
||||
|
||||
//是否进行实名认证
|
||||
export const getIfAuth = params =>
|
||||
http.get('/member/api/authentication/is-auth', {
|
||||
params,
|
||||
})
|
||||
export const getIfAuth = (params) => http.get('/member/api/authentication/is-auth', {
|
||||
params
|
||||
})
|
||||
|
||||
|
||||
//证件类型
|
||||
export const getCardType = params =>
|
||||
http.get('/system/pub/enums/id-type', {
|
||||
params,
|
||||
})
|
||||
export const getCardType = (params) => http.get('/system/pub/enums/id-type', {
|
||||
params
|
||||
})
|
||||
|
||||
//实名认证
|
||||
export const addAuthentication = params =>
|
||||
http.post('/member/api/authentication/add', params)
|
||||
export const addAuthentication = (params) => http.post('/member/api/authentication/add', params)
|
||||
|
||||
//上传图片
|
||||
export const getUploadUrl = params => http.post('/system/upload', params)
|
||||
export const getUploadUrl = (params) => http.post('/system/upload', params)
|
||||
|
||||
//成长之路-等级
|
||||
export const getGrowUpGrade = params =>
|
||||
http.get('/member/api/member-footmark/grow-up-footmark-grade', {
|
||||
params,
|
||||
})
|
||||
export const getGrowUpGrade = (params) => http.get('/member/api/member-footmark/grow-up-footmark-grade', {
|
||||
params
|
||||
})
|
||||
|
||||
//成长之路-奖衔
|
||||
export const getGrowUpAwards = params =>
|
||||
http.get('/member/api/member-footmark/grow-up-footmark-awards', {
|
||||
params,
|
||||
})
|
||||
export const getGrowUpAwards = (params) => http.get('/member/api/member-footmark/grow-up-footmark-awards', {
|
||||
params
|
||||
})
|
||||
|
||||
|
||||
//是否上传营业执照
|
||||
export const getIsExist = params =>
|
||||
http.get('/member/api/business/license/is-exist', {
|
||||
params,
|
||||
})
|
||||
export const getIsExist = (params) => http.get('/member/api/business/license/is-exist', {
|
||||
params
|
||||
})
|
||||
|
||||
//上传营业执照
|
||||
export const addLicense = params =>
|
||||
http.post('/member/api/business/license/add', params)
|
||||
export const addLicense = (params) => http.post('/member/api/business/license/add', params)
|
||||
|
||||
//营业执照详情
|
||||
export const getLicenseDetail = params =>
|
||||
http.get('/member/api/business/license/detail', {
|
||||
params,
|
||||
})
|
||||
export const getLicenseDetail = (params) => http.get('/member/api/business/license/detail', {
|
||||
params
|
||||
})
|
||||
|
||||
//修改营业执照
|
||||
export const updateLicense = params =>
|
||||
http.post('/member/api/business/license/update', params)
|
||||
export const updateLicense = (params) => http.post('/member/api/business/license/update', params)
|
||||
//ocr
|
||||
export const ocrIdCard = params =>
|
||||
http.post('/member/api/authentication/invoke-idCard', params)
|
||||
export const ocrIdCard = (params) => http.post('/member/api/authentication/invoke-idCard', params)
|
||||
//ocrBack
|
||||
export const ocrIdCardBack = params =>
|
||||
http.post('/member/api/authentication/invoke-idCard-back', params)
|
||||
export const ocrIdCardBack = (params) => http.post('/member/api/authentication/invoke-idCard-back', params)
|
||||
//实名认证详情
|
||||
export const authenticationDetails = params =>
|
||||
http.get('/member/api/authentication/detail', {
|
||||
params,
|
||||
})
|
||||
export const authenticationDetails = (params) => http.get('/member/api/authentication/detail', {
|
||||
params
|
||||
})
|
||||
//实名认证详情续约用
|
||||
export const agreementName = params =>
|
||||
http.get('/member/api/authentication/agreement-real-name', {
|
||||
params,
|
||||
})
|
||||
export const agreementName = (params) => http.get('/member/api/authentication/agreement-real-name', {
|
||||
params
|
||||
})
|
||||
|
||||
//设置默认银行卡
|
||||
export const updateDefault = params =>
|
||||
http.get('/member/api/bank/update-default', {
|
||||
params,
|
||||
})
|
||||
export const updateDefault = (params) => http.get('/member/api/bank/update-default', {
|
||||
params
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:45:00
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,57 +1,55 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-09-11 08:48:58
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//安置图
|
||||
export const getPlaceMent = params =>
|
||||
http.get('/member/api/achieve/query-place-tree', { params })
|
||||
export const getPlaceMent = (params) => http.get('/member/api/achieve/query-place-tree', {params})
|
||||
|
||||
|
||||
//安置图详情
|
||||
export const getTreeDetail = data =>
|
||||
http.post('/member/api/achieve/query-place-tree-detail', data)
|
||||
export const getTreeDetail = (data) => http.post('/member/api/achieve/query-place-tree-detail', data)
|
||||
|
||||
//安置图上方等级
|
||||
export const getAvatarInfo = params =>
|
||||
http.get('/member/api/member-structure/get-avatar-info', { params })
|
||||
export const getAvatarInfo = (params) => http.get('/member/api/member-structure/get-avatar-info', {params})
|
||||
|
||||
//安置图
|
||||
export const getDayType = params =>
|
||||
http.get('/system/pub/enums/get-day-type', { params })
|
||||
export const getDayType = (params) => http.get('/system/pub/enums/get-day-type', {params})
|
||||
|
||||
//获取安置业绩分布
|
||||
export const azAchievement = params =>
|
||||
http.get('/report/api/achieve/az-achievement', { params })
|
||||
export const azAchievement = (params) => http.get('/report/api/achieve/az-achievement', {params})
|
||||
|
||||
//获取安置业绩分布
|
||||
export const getPerformance = params =>
|
||||
http.get('/member/api/achieve/query-real-performance', { params })
|
||||
export const getPerformance = (params) => http.get('/member/api/achieve/query-real-performance', {params})
|
||||
|
||||
//获取真实业绩分布
|
||||
export const realPerformancePic = (params) => http.get('/member/api/achieve/query-real-performance-pic', {params})
|
||||
|
||||
|
||||
//获取推荐列表
|
||||
export const parentList = params =>
|
||||
http.get('/member/api/member/parent-list', { params })
|
||||
export const parentList = (params) => http.get('/member/api/member/parent-list', {params})
|
||||
|
||||
//获取平均时长
|
||||
export const getMemberRecommend = params =>
|
||||
http.get('/member/api/census/get-member-recommend-time', { params })
|
||||
export const getMemberRecommend = (params) => http.get('/member/api/census/get-member-recommend-time', {params})
|
||||
|
||||
//获取直推业绩左侧
|
||||
export const parentAchieveLeft = data =>
|
||||
http.post('/member/api/achieve/parent-achieve-left', data)
|
||||
export const parentAchieveLeft = (data) => http.post('/member/api/achieve/parent-achieve-left', data)
|
||||
|
||||
//获取直推业绩右侧
|
||||
export const parentAchieveRight = data =>
|
||||
http.post('/member/api/achieve/parent-achieve-right', data)
|
||||
export const parentAchieveRight = (data) => http.post('/member/api/achieve/parent-achieve-right',data)
|
||||
|
||||
//获取等级
|
||||
export const systemGrandeRange = params =>
|
||||
http.get('/system/manage/grade/gradeRanglist', { params })
|
||||
export const systemGrandeRange = (params) => http.get('/system/manage/grade/gradeRanglist', {params})
|
||||
|
||||
//新增业绩统计
|
||||
export const getPlaceNewAddAchieve = params =>
|
||||
http.get('/member/api/achieve/place-new-add-achieve-stat', { params })
|
||||
export const getPlaceNewAddAchieve = (params) => http.get('/member/api/achieve/place-new-add-achieve-stat', {params})
|
||||
|
||||
//获取业绩类型
|
||||
export const getYjList = params =>
|
||||
http.get('/system/pub/enums/achievement-type-member', { params })
|
||||
export const getYjList = (params) => http.get('/system/pub/enums/achievement-type-member', {params})
|
||||
|
||||
//月度业绩左右区业绩详情
|
||||
export const getAchieveDetails = params =>
|
||||
http.get('/member/api/achieve/place-new-add-achieve-details', { params })
|
||||
export const getAchieveDetails = (params) => http.get('/member/api/achieve/place-new-add-achieve-details', {params})
|
||||
|
||||
|
|
|
|||
118
config/goods.js
118
config/goods.js
|
|
@ -1,119 +1,87 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-23 11:10:29
|
||||
*/
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-23 11:10:29
|
||||
*/
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-23 11:10:29
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//商品列表
|
||||
export const getAllGoods = params =>
|
||||
http.post('/sale/api/wares/query-spe-wares', params)
|
||||
export const getAllGoods = (params) => http.post('/sale/api/wares/query-spe-wares', params)
|
||||
//商品详情
|
||||
export const waresDetail = params =>
|
||||
http.post('/sale/api/wares/query-spe-wares-detail', params)
|
||||
export const waresDetail = (params) => http.post('/sale/api/wares/query-spe-wares-detail', params)
|
||||
//嗨粉海粉短信
|
||||
export const verification = params =>
|
||||
http.get('/member/api/sms/fans-verification', { params })
|
||||
export const verification = (params) => http.get('/member/api/sms/fans-verification', { params })
|
||||
//嗨粉选择省市区
|
||||
export const getAllAreaList = params =>
|
||||
http.get('system/api/area/provinceList', { params })
|
||||
export const getAllAreaList = (params) => http.get('system/api/area/provinceList', { params })
|
||||
//嗨粉选择国家
|
||||
export const getCountry = params =>
|
||||
http.get('system/api/country/list', { params })
|
||||
export const getCountry = (params) => http.get('system/api/country/list', { params })
|
||||
//海粉注册
|
||||
export const regShareMember = params =>
|
||||
http.post('/member/api/member/reg-share-member', params)
|
||||
export const regShareMember = (params) => http.post('/member/api/member/reg-share-member', params)
|
||||
//hi粉注册
|
||||
export const hiRegister = params =>
|
||||
http.post('/member/api/fans/register', params)
|
||||
export const hiRegister = (params) => http.post('/member/api/fans/register', params)
|
||||
//幂等性
|
||||
export const generate = params =>
|
||||
http.get('/system/api/idempotent/generate', { params })
|
||||
export const generate = (params) => http.get('/system/api/idempotent/generate', { params })
|
||||
//发货
|
||||
export const deliveryList = params =>
|
||||
http.get('/system/pub/enums/delivery-list', { params })
|
||||
export const deliveryList = (params) => http.get('/system/pub/enums/delivery-list', { params })
|
||||
//海粉渠道
|
||||
export const jxhhSource = params =>
|
||||
http.get('/sale/api/t-source/list/' + params)
|
||||
export const jxhhSource = (params) => http.get('/sale/api/t-source/list/' + params)
|
||||
//海粉分类
|
||||
export const optionList = params =>
|
||||
http.post('/sale/api/twares-category-category/option-list', params)
|
||||
export const optionList = (params) => http.post('/sale/api/twares-category-category/option-list', params )
|
||||
//海粉商品
|
||||
export const sharingWares = params =>
|
||||
http.get('/sale/api/wares/sharing-zone-wares', { params })
|
||||
export const sharingWares = (params) => http.get('/sale/api/wares/sharing-zone-wares', { params })
|
||||
//分享邮费查询
|
||||
export const queryAdressPostage = params =>
|
||||
http.post('/sale/api/order/self-order-postage', params)
|
||||
export const queryAdressPostage = (params) => http.post('/sale/api/order/self-order-postage', params)
|
||||
//嗨粉分享确认订单
|
||||
export const confirmFunShareOrder = params =>
|
||||
http.post('/sale/api/order/confirm-self-fun-order', params)
|
||||
export const confirmFunShareOrder = (params) => http.post('/sale/api/order/confirm-self-fun-order', params)
|
||||
//海粉商品详情
|
||||
export const sharingWaresDetail = params =>
|
||||
http.get('/sale/api/wares/query-spe-sharing-wares-detail', { params })
|
||||
export const sharingWaresDetail = (params) => http.get('/sale/api/wares/query-spe-sharing-wares-detail', { params })
|
||||
//海粉订单确认
|
||||
export const confirmShareOrder = params =>
|
||||
http.post('/sale/api/order/confirm-share-order', params)
|
||||
export const confirmShareOrder = (params) => http.post('/sale/api/order/confirm-share-order', params)
|
||||
|
||||
//获取购物车
|
||||
export const getShopping = params =>
|
||||
http.get('/sale/api/shopping/getShopping', { params })
|
||||
export const getShopping = (params) => http.get('/sale/api/shopping/getShopping', { params })
|
||||
//分类列表
|
||||
export const classifyList = params =>
|
||||
http.get('/sale/api/area-classify/list', { params })
|
||||
export const classifyList = (params) => http.get('/sale/api/area-classify/list', { params })
|
||||
//加减购物车
|
||||
export const plusReduceShopping = params =>
|
||||
http.post('/sale/api/shopping/plusReduceShopping', params)
|
||||
export const plusReduceShopping = (params) => http.post('/sale/api/shopping/plusReduceShopping', params)
|
||||
//多删购物车
|
||||
export const batchDelShopping = params =>
|
||||
http.post('/sale/api/shopping/batchDelShopping', params)
|
||||
export const batchDelShopping = (params) => http.post('/sale/api/shopping/batchDelShopping', params)
|
||||
//添加购物车
|
||||
export const addShopping = params =>
|
||||
http.post('/sale/api/shopping/addShopping', params)
|
||||
export const addShopping = (params) => http.post('/sale/api/shopping/addShopping', params)
|
||||
//菜单权限
|
||||
export const menuList = params => http.get('/system/api/menu/list', { params })
|
||||
export const menuList = (params) => http.get('/system/api/menu/list', { params })
|
||||
//海粉分享
|
||||
export const shareCode = params =>
|
||||
http.get('/member/api/share/share-code-h5', { params })
|
||||
export const shareCode = (params) => http.get('/member/api/share/share-code-h5', { params })
|
||||
//嗨粉分享
|
||||
export const fansCode = params =>
|
||||
http.get('/member/api/share/fans-code-h5', { params })
|
||||
export const fansCode = (params) => http.get('/member/api/share/fans-code-h5', { params })
|
||||
//获取购物车数量
|
||||
export const getShoppingCount = params =>
|
||||
http.get('/sale/api/shopping/getShoppingCount', { params })
|
||||
export const getShoppingCount = (params) => http.get('/sale/api/shopping/getShoppingCount', { params })
|
||||
//获取购物车数小
|
||||
export const getSmallCount = params =>
|
||||
http.get('/sale/api/shopping/getAreaShoppingCount', { params })
|
||||
export const getSmallCount = (params) => http.get('/sale/api/shopping/getAreaShoppingCount', { params })
|
||||
//获取分享前缀
|
||||
export const prefix = params =>
|
||||
http.get('/member/api/member/query-country-prefix/' + params)
|
||||
export const prefix = (params) => http.get('/member/api/member/query-country-prefix/' + params, )
|
||||
//校验分享编号
|
||||
export const validateMember = params =>
|
||||
http.get('/member/api/member/validate-share-member/' + params)
|
||||
export const validateMember = (params) => http.get('/member/api/member/validate-share-member/' + params, )
|
||||
|
||||
//获取国家
|
||||
export const currencyList = params =>
|
||||
http.get('/system/api/country/list', { params })
|
||||
export const currencyList = (params) => http.get('/system/api/country/list' , {params} )
|
||||
//0元注册时
|
||||
export const checkShare = params =>
|
||||
http.get('/member/api/share/check-share-code', { params })
|
||||
export const checkShare = (params) => http.get('/member/api/share/check-share-code' , {params} )
|
||||
|
||||
//海粉订单详情
|
||||
export const waresinfo = params =>
|
||||
http.post('/sale/api/wares/query-confirm-waresinfo', params)
|
||||
|
||||
export const waresinfo = (params) => http.post('/sale/api/wares/query-confirm-waresinfo', params)
|
||||
//购物车注册下单校验
|
||||
export const validShop = (params) => http.post('/sale/api/order/valid-enough-shop', params)
|
||||
//hi粉确认订单
|
||||
export const fansConfirm = params =>
|
||||
http.post('/sale/api/order/fans-confirm-order', params)
|
||||
export const fansConfirm = (params) => http.post('/sale/api/order/fans-confirm-order', params)
|
||||
//购物车注册下单校验弹框
|
||||
export const energyShop = params =>
|
||||
http.post('/sale/api/wares/query-energy-silo', params)
|
||||
export const energyShop = (params) => http.post('/sale/api/wares/query-energy-silo', params)
|
||||
//hi粉确认订单
|
||||
export const energyShopSilo = params =>
|
||||
http.post('/sale/api/order/valid-silo', params)
|
||||
export const energyShopSilo = (params) => http.post('/sale/api/order/valid-silo', params)
|
||||
|
|
@ -1,30 +1,24 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-12 11:40:34
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//首页
|
||||
export const userIndex = params =>
|
||||
http.get('/sale/api/wares/get-app-index', { params })
|
||||
export const userIndex = (params) => http.get('/sale/api/wares/get-app-index', { params })
|
||||
|
||||
//修改头像
|
||||
export const updateHead = data =>
|
||||
http.post('/member/api/member/update-head', data)
|
||||
export const updateHead = (data) => http.post('/member/api/member/update-head', data)
|
||||
|
||||
//提货记录列表
|
||||
export const pickList = params =>
|
||||
http.get('/activity/api/pick/list', { params })
|
||||
export const pickList = (params) => http.get('/activity/api/pick/list', { params })
|
||||
|
||||
//提货专区列表
|
||||
export const pickLogList = params =>
|
||||
http.get('/activity/api/pick/pick-log', { params })
|
||||
export const pickLogList = (params) => http.get('/activity/api/pick/pick-log', { params })
|
||||
//植树活动
|
||||
export const queryTreeActivity = params =>
|
||||
http.get('/activity/api/sa-tree-order/queryTreeActivity', { params })
|
||||
export const queryTreeActivity = (params) => http.get('/activity/api/sa-tree-order/queryTreeActivity', { params })
|
||||
|
||||
//创客空间列表
|
||||
export const marketList = params =>
|
||||
http.get('/member/api/maker-space/list', { params })
|
||||
|
||||
export const getTopPeople = params =>
|
||||
http.post('/member/api/member-statistics/topPeople', params)
|
||||
|
||||
export const getTopAmount = params =>
|
||||
http.post('/member/api/member-statistics/topAmount', params)
|
||||
export const marketList = (params) => http.get('/member/api/maker-space/list', { params })
|
||||
134
config/login.js
134
config/login.js
|
|
@ -1,134 +1,134 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:45:00
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
// 验证码
|
||||
export const captchaImage = params => http.get('/code', { params })
|
||||
export const captchaImage = (params) => http.get('/code', { params })
|
||||
// 登录
|
||||
export const login = params => http.post('/member/auth/api/login', params)
|
||||
export const login = (params) => http.post('/member/auth/api/login', params)
|
||||
|
||||
//用户信息
|
||||
export const getInfo = params =>
|
||||
http.get('/member/api/member/get-info', { params })
|
||||
export const getInfo = (params) => http.get('/member/api/member/get-info', { params })
|
||||
|
||||
//获取个人资料
|
||||
export const getData = params =>
|
||||
http.get('/member/api/member/get-data', { params })
|
||||
export const getData = (params) => http.get('/member/api/member/get-data', { params })
|
||||
|
||||
//获取会员卡信息
|
||||
export const getCard = params =>
|
||||
http.get('/member/api/member/get-card', { params })
|
||||
export const getCard = (params) => http.get('/member/api/member/get-card', { params })
|
||||
|
||||
//获取验证码
|
||||
export const verification = params =>
|
||||
http.get('/member/api/sms/self-verification', { params })
|
||||
export const verification = (params) => http.get('/member/api/sms/verification', { params })
|
||||
|
||||
//忘记密码获取验证码
|
||||
export const forgetVerification = params =>
|
||||
http.get('/member/api/sms/forget-verification', { params })
|
||||
export const forgetVerification = (params) => http.get('/member/api/sms/forget-verification', { params })
|
||||
|
||||
//保存地址
|
||||
export const saveAddress = data =>
|
||||
http.post('/member/api/member-address/save', data)
|
||||
export const saveAddress = (data) => http.post('/member/api/member-address/save', data)
|
||||
|
||||
//更新邮箱
|
||||
export const updateEmail = (data) => http.put('/member/api/member/update-email', data)
|
||||
|
||||
//更新密码
|
||||
export const updatePassword = data =>
|
||||
http.put('/member/api/member/update-password', data)
|
||||
export const updatePassword = (data) => http.put('/member/api/member/update-password', data)
|
||||
|
||||
//忘记密码更新
|
||||
export const forgetPassword = data =>
|
||||
http.put('/member/api/member/forget-password', data)
|
||||
export const forgetPassword = (data) => http.put('/member/api/member/forget-password', data)
|
||||
|
||||
//获取地址详情
|
||||
export const getAddress = params =>
|
||||
http.get('/member/api/member-address/detail/' + params)
|
||||
export const getAddress = (params) => http.get('/member/api/member-address/detail/' + params)
|
||||
|
||||
//获取菜单权限
|
||||
export const menuList = data => http.get('/system/api/menu/list', data)
|
||||
export const menuList = (data) => http.get('/system/api/menu/list', data)
|
||||
|
||||
//更新个人资料
|
||||
export const updateData = data =>
|
||||
http.put('/member/api/member/update-data', data)
|
||||
export const updateData = (data) => http.put('/member/api/member/update-data', data)
|
||||
|
||||
//奖金来源
|
||||
export const queryBonusDetail = (data, data1) =>
|
||||
http.post('/bonus/api/bonus/query-bonus-detail/' + data1, data)
|
||||
export const queryBonusDetail = (data, data1) => http.post('/bonus/api/bonus/query-bonus-detail/' + data1, data)
|
||||
|
||||
//首购收益
|
||||
export const queryBonusFirst = (data, data1) =>
|
||||
http.post('/bonus/api/bonus/query-bonus-first/' + data1, data)
|
||||
export const queryBonusFirst = (data, data1) => http.post('/bonus/api/bonus/query-bonus-first/' + data1, data)
|
||||
|
||||
//复购收益
|
||||
export const queryBonusRepurchase = (data, data1) =>
|
||||
http.post('/bonus/api/bonus/query-bonus-repurchase/' + data1, data)
|
||||
export const queryBonusRepurchase = (data, data1) => http.post('/bonus/api/bonus/query-bonus-repurchase/' + data1, data)
|
||||
|
||||
//嗨粉收益
|
||||
export const queryBonusHiFun = (data, data1) => http.post('/bonus/api/bonus/query-bonus-hi-fun' + data1, data)
|
||||
|
||||
//云代收益
|
||||
export const queryBonusCloud = (data, data1) => http.post('/bonus/api/bonus/query-bonus-cloud/' + data1, data)
|
||||
|
||||
//复购券收益
|
||||
export const queryBonusCoupon = (data, data1) =>
|
||||
http.post('/bonus/api/bonus/query-bonus-coupon/' + data1, data)
|
||||
export const queryBonusCoupon = (data, data1) => http.post('/bonus/api/bonus/query-bonus-coupon/' + data1, data)
|
||||
|
||||
//创客空间收益
|
||||
export const queryBonusMaker = (data, data1) =>
|
||||
http.post('/bonus/api/bonus/query-bonus-maker/' + data1, data)
|
||||
export const queryBonusMaker = (data, data1) => http.post('/bonus/api/bonus/query-bonus-maker/' + data1, data)
|
||||
|
||||
//海粉收益
|
||||
export const queryBonusHaiFun = (data, data1) => http.post('/bonus/api/bonus/query-bonus-hai-fun/' + data1, data)
|
||||
|
||||
//获取奖金收益类型
|
||||
export const getBonusType = params =>
|
||||
http.get('/system/api/bd-bonus-items/list', { params })
|
||||
export const getBonusType = (params) => http.get('/system/api/bd-bonus-items/list', { params })
|
||||
|
||||
//获取语言下拉
|
||||
export const getLanguages = (params) => http.get('/system/pub/enums/get-languages', { params })
|
||||
|
||||
|
||||
//上传图片
|
||||
export const updateFile = params => http.post('/system/upload', params)
|
||||
export const updateFile = (params) => http.post('/system/upload', params)
|
||||
// 退出方法
|
||||
export const logout = () => http.delete('/member/auth/api/logout')
|
||||
|
||||
//订单数量
|
||||
export const orderNum = params => http.get('/sale/api/my-order/num', { params })
|
||||
export const orderNum = (params) => http.get('/sale/api/my-order/num', { params })
|
||||
|
||||
//获取用户是否显示弹窗
|
||||
export const indexPopScreen = params =>
|
||||
http.get('/system/api/notice/index-pop-screen', { params })
|
||||
export const indexPopScreen = (params) => http.get('/system/api/notice/index-pop-screen', { params })
|
||||
|
||||
//菜单权限
|
||||
export const getMenuList = params =>
|
||||
http.get('/system/api/menu/list', { params })
|
||||
export const getMenuList = (params) => http.get('/system/api/menu/list', { params })
|
||||
|
||||
//海粉默认登录(H5扫码使用)
|
||||
export const autoLogin = params =>
|
||||
http.post('/member/auth/api/auto-login', params)
|
||||
//分享列表商品
|
||||
export const queryWares = params =>
|
||||
http.get('/sale/api/wares/list-wares-share', { params })
|
||||
export const autoLogin = (params) => http.post('/member/auth/api/auto-login', params)
|
||||
//海粉商品
|
||||
export const queryWares = (params) => http.post('/sale/api/wares/query-spe-wares-copy', params)
|
||||
//保存礼品地址
|
||||
export const saveGiftAddress = params =>
|
||||
http.post('/member/api/member-gift/update-gift', params)
|
||||
export const saveGiftAddress = (params) => http.post('/member/api/member-gift/update-gift', params)
|
||||
|
||||
//获取会员真实奖衔
|
||||
export const getUserAwards = params =>
|
||||
http.get('/member/api/member/index-member-awards', { params })
|
||||
export const getUserAwards = (params) => http.get('/member/api/member/index-member-awards', { params })
|
||||
|
||||
//获取安置人编号
|
||||
export const fansConvertCode = params =>
|
||||
http.get('/member/api/member/fans-convert-code/' + params)
|
||||
export const fansConvertCode = (params) => http.get('/member/api/member/fans-convert-code/'+params )
|
||||
|
||||
//获取荣誉奖衔
|
||||
export const getIndexAwards = params =>
|
||||
http.get('/member/api/member/index-awards', { params })
|
||||
export const getIndexAwards = (params) => http.get('/member/api/member/index-awards', { params })
|
||||
//当前用户短信验证码
|
||||
export const selfVerification = params =>
|
||||
http.get('/member/api/sms/self-verification', { params })
|
||||
// 重置支付密码获取验证码
|
||||
export const resetPayPasswordVerification = params =>
|
||||
http.get('/member/api/sms/reset-verification', { params })
|
||||
export const selfVerification = (params) => http.get('/member/api/sms/self-verification', { params })
|
||||
|
||||
//更新支付密码
|
||||
export const forgetPayPassword = data =>
|
||||
http.put('/member/api/member/forget-pay-password', data)
|
||||
export const forgetPayPassword = (data) => http.put('/member/api/member/forget-pay-password', data)
|
||||
|
||||
// 站内信弹窗
|
||||
export const getIndexPopmail = params =>
|
||||
http.get('/system/api/notice/index-pop-mail', { params })
|
||||
export const getIndexPopmail = (params) => http.get('/system/api/notice/index-pop-mail', { params })
|
||||
|
||||
//站内信弹窗已读
|
||||
export const getNoticeDetail = params =>
|
||||
http.get('/system/api/notice/index-detail', { params })
|
||||
export const getNoticeDetail = (params) => http.get('/system/api/notice/index-detail', { params })
|
||||
|
||||
//直推排行弹窗
|
||||
export const getMemberDirectpush = (params) => http.get('/member/api/member/get-member-direct-push', { params })
|
||||
|
||||
//校验服务有效期
|
||||
export const agreement_expire = params =>
|
||||
http.get('/member/api/member/agreement_expire', { params })
|
||||
export const agreement_expire = (params) => http.get('/member/api/member/agreement_expire', { params })
|
||||
//会员奖衔信息
|
||||
export const memberAwards = (params) => http.get('/member/api/member/member-awards-info', { params })
|
||||
|
||||
//创客空间收益
|
||||
export const markBonus = (params) => http.post('/bonus/api/bonus/query-mark-bonus-detail', params)
|
||||
|
||||
//基本信息弹框
|
||||
export const index_repurchase = (params) => http.get('/member/api/member/index_repurchase', { params })
|
||||
|
|
|
|||
|
|
@ -9,61 +9,62 @@
|
|||
const http = uni.$u.http
|
||||
|
||||
//考核明细接口
|
||||
export const getAssessList = params =>
|
||||
http.get('/member/api/assess/assessList', {
|
||||
params,
|
||||
})
|
||||
export const getAssessList = (params) => http.get('/member/api/assess/assessList', {
|
||||
params
|
||||
})
|
||||
|
||||
//考核分红积分
|
||||
export const getAssAchieve = params =>
|
||||
http.get('/member/api/assess/assAchieve', {
|
||||
params,
|
||||
})
|
||||
export const getAssAchieve = (params) => http.get('/member/api/assess/assAchieve', {
|
||||
params
|
||||
})
|
||||
|
||||
|
||||
//考核状态复购考核
|
||||
export const getAssessStatusList = params =>
|
||||
http.get('/system/pub/enums/member-assess-status', {
|
||||
params,
|
||||
})
|
||||
export const getAssessStatusList = (params) => http.get('/system/pub/enums/member-assess-status', {
|
||||
params
|
||||
})
|
||||
|
||||
//注册等级下拉选
|
||||
export const getGradeList = params =>
|
||||
http.get('/system/api/grade/list', {
|
||||
params,
|
||||
})
|
||||
export const getGradeList = (params) => http.get('/system/api/grade/list', {
|
||||
params
|
||||
})
|
||||
|
||||
|
||||
//注册列表
|
||||
export const getRegList = params =>
|
||||
http.get('/member/api/market-news/reg-list', {
|
||||
params,
|
||||
})
|
||||
export const getRegList = (params) => http.get('/member/api/market-news/reg-list', {
|
||||
params
|
||||
})
|
||||
|
||||
//招商列表
|
||||
export const tripleCycleList = params =>
|
||||
http.get('/member/api/market-news/triple_cycle_list', {
|
||||
params,
|
||||
})
|
||||
export const tripleCycleList = (params) => http.get('/member/api/market-news/triple_cycle_list', {
|
||||
params
|
||||
})
|
||||
|
||||
//海粉列表
|
||||
export const seaFlourList = (params) => http.get('/member/api/market-news/sea_flour_list', {
|
||||
params
|
||||
})
|
||||
|
||||
//菜单列表
|
||||
export const menuList = params =>
|
||||
http.get('/system/api/menu/list', {
|
||||
params,
|
||||
})
|
||||
export const menuList = (params) => http.get('/system/api/menu/list', {
|
||||
params
|
||||
})
|
||||
//直推列表
|
||||
export const parentList = params =>
|
||||
http.get('/member/api/member/parent-list', {
|
||||
params,
|
||||
})
|
||||
export const parentList = (params) => http.get('/member/api/member/parent-list', {
|
||||
params
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 抗衰能量仓列表
|
||||
export const getSiloList = params => http.post('/member/api/silo/list', params)
|
||||
export const getSiloList = (params) => http.post('/member/api/silo/list', params)
|
||||
|
||||
|
||||
|
||||
//查询能量仓明细
|
||||
export const getSiloDetail = params =>
|
||||
http.post('/member/api/silo/detail', params)
|
||||
export const getSiloDetail = (params) => http.post('/member/api/silo/detail', params)
|
||||
|
||||
// 沙棘公益列表
|
||||
export const treeList = params =>
|
||||
http.get('/activity/api/tree-rule-pick/member-info-list', {
|
||||
params,
|
||||
})
|
||||
export const treeList = (params) => http.get('/activity/api/tree-rule-pick/member-info-list', {
|
||||
params
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,49 +1,28 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-09-26 10:35:29
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//我的市场
|
||||
export const getMyMarket = params =>
|
||||
http.get('/sale/api/order/index-myMarket', { params })
|
||||
export const getMyMarket = (params) => http.get('/sale/api/order/index-myMarket', { params })
|
||||
|
||||
// 我的市场点亮
|
||||
export const getMyMarketColor = params =>
|
||||
http.get('/system/manage/area/get-light-area', { params })
|
||||
export const getMyMarketColor = (params) => http.get('/system/manage/area/get-light-area', { params })
|
||||
// 礼品地址列表
|
||||
export const getMemberGift = params =>
|
||||
http.get('/member/api/member-gift/member-gift-list', { params })
|
||||
export const getMemberGift = (params) => http.get('/member/api/member-gift/member-gift-list', { params })
|
||||
|
||||
//全部荣誉墙
|
||||
export const getMemberHonorWallAll = params =>
|
||||
http.get('/member/api/member/member-honor-wall-all', { params })
|
||||
export const getMemberHonorWallAll = (params) => http.get('/member/api/member/member-honor-wall-all', { params })
|
||||
|
||||
// 获取抗衰达人
|
||||
export const repurchase =(params)=>http.post('/member/api/achieve/repurchase',params)
|
||||
|
||||
// 获取推荐达人
|
||||
export const recommend =(params)=>http.post('/member/api/achieve/recommend',params)
|
||||
|
||||
|
||||
//年度奖衔
|
||||
export const yearAwards = params =>
|
||||
http.get('/member/api/member/year-awards-list', { params })
|
||||
|
||||
// 结余查询
|
||||
export const getMemberBalance = () =>
|
||||
http.get('/member/api/member-structure/az-framework')
|
||||
|
||||
// 退款明细列表
|
||||
export const getRefundList = params =>
|
||||
http.get('/sale/api/my-order/refund-list', { params })
|
||||
|
||||
// 退款列表接口(别名)
|
||||
export const refundList = params =>
|
||||
http.get('/sale/api/my-order/refund-list', { params })
|
||||
|
||||
// 获取是否能区域选择的资格
|
||||
export const getRegionSelect = () => {
|
||||
return http.get('/member/api/member/get-region')
|
||||
}
|
||||
|
||||
// 设置区域
|
||||
export const setRegion = data =>
|
||||
http.post('/member/api/member/set-region', data)
|
||||
|
||||
// 获取可选择区域
|
||||
export const getRegionAreaTree = params =>
|
||||
http.get('/member/api/member/get-region-list', { params })
|
||||
|
||||
// 获取已有区域
|
||||
export const getSelectedRegion = () =>
|
||||
http.get('/member/api/member/get-all-region')
|
||||
export const yearAwards = (params) => http.get('/member/api/member/year-awards-list', { params })
|
||||
|
|
|
|||
|
|
@ -1,46 +1,39 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-12 11:40:34
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//支付配置
|
||||
export const payConfig = params => http.get('/pay/config', { params })
|
||||
export const payConfig = (params) => http.get('/pay/config', { params })
|
||||
//查询订单明细
|
||||
export const orderInfo = params =>
|
||||
http.post('/sale/api/order/query-order', params)
|
||||
export const orderInfo = (params) => http.post('/sale/api/order/query-order', params)
|
||||
//订单状态
|
||||
export const orderStatus = params =>
|
||||
http.get('/system/pub/enums/order-status-api', { params })
|
||||
export const orderStatus = (params) => http.get('/system/pub/enums/order-status-api', { params })
|
||||
|
||||
//计算邮费
|
||||
export const pickPostAge = params =>
|
||||
http.get('/activity/api/pick/postage', { params })
|
||||
export const pickPostAge = (params) => http.get('/activity/api/pick/postage', { params })
|
||||
//订单列表
|
||||
export const orderList = params =>
|
||||
http.get('/sale/api/my-order/list', { params })
|
||||
export const orderList = (params) => http.get('/sale/api/my-order/list', { params })
|
||||
//订单详情
|
||||
export const orderDetails = orderCode =>
|
||||
http.get('/sale/api/my-order/detail/' + orderCode)
|
||||
export const orderDetails = (orderCode) => http.get('/sale/api/my-order/detail/' + orderCode)
|
||||
//订单取消
|
||||
export const cancelOrder = orderCode =>
|
||||
http.delete('/sale/api/my-order/cancel/' + orderCode)
|
||||
export const cancelOrder = (orderCode) => http.delete('/sale/api/my-order/cancel/' + orderCode)
|
||||
//物流状态
|
||||
export const expressList = id => http.get('/sale/api/my-order/express/' + id)
|
||||
export const expressList = (id) => http.get('/sale/api/my-order/express/' + id,)
|
||||
//校验订单状态
|
||||
export const payCheck = id => http.get('/sale/api/my-order/pay-check/' + id)
|
||||
export const payCheck = (id) => http.get('/sale/api/my-order/pay-check/' + id,)
|
||||
//订单类型
|
||||
export const orderType = params =>
|
||||
http.get('/sale/api/my-order/order-type', { params })
|
||||
export const orderType = (params) => http.get('/sale/api/my-order/order-type', { params })
|
||||
//提货卡详情
|
||||
export const pickDetails = params =>
|
||||
http.get('/activity/api/pick/detail', { params })
|
||||
export const pickDetails = (params) => http.get('/activity/api/pick/detail', { params })
|
||||
|
||||
|
||||
//自助撤单列表
|
||||
export const selfRevokeList = params =>
|
||||
http.get('/sale/api/my-order/selfRevokeList', { params })
|
||||
export const selfRevokeList = (params) => http.get('/sale/api/my-order/selfRevokeList', { params })
|
||||
//自助撤单参数校验
|
||||
export const selfRevokeListCheck = params =>
|
||||
http.post('/sale/api/my-order/check-self-revoke-order', params)
|
||||
export const selfRevokeListCheck = (params) => http.post('/sale/api/my-order/check-self-revoke-order', params)
|
||||
//自助撤单
|
||||
export const selfRevokeOrder = params =>
|
||||
http.post('/sale/api/my-order/self-revoke-order', params)
|
||||
|
||||
export const canOrder = data =>
|
||||
http.post('/sale/api/order/check-before-confirm', data)
|
||||
export const selfRevokeOrder = (params) => http.post('/sale/api/my-order/self-revoke-order', params)
|
||||
|
|
@ -1,83 +1,70 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-31 19:18:11
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
|
||||
//支付配置
|
||||
export const payConfig = params => http.get('/pay/config', { params })
|
||||
export const payConfig = (params) => http.get('/pay/config', { params })
|
||||
//京东银行列表
|
||||
export const jdBankList = params => http.get('/pay/jd-fast/list', { params })
|
||||
export const jdBankList = (params) => http.get('/pay/jd-fast/list', { params })
|
||||
//汇付银行列表
|
||||
export const hfBankList = params => http.get('/pay/ada-fast/list', { params })
|
||||
export const hfBankList = (params) => http.get('/pay/ada-fast/list', { params })
|
||||
//通联银行列表
|
||||
export const tlBankList = params =>
|
||||
http.get('/pay/all-in-fast/list', { params })
|
||||
export const tlBankList = (params) => http.get('/pay/all-in-fast/list', { params })
|
||||
//查询订单明细
|
||||
export const orderInfo = params =>
|
||||
http.post('/sale/api/order/query-order', params)
|
||||
export const orderInfo = (params) => http.post('/sale/api/order/query-order', params)
|
||||
//查询订单消费明细
|
||||
export const spendDetails = params =>
|
||||
http.post('/sale/api/order/query-spend-details', params)
|
||||
export const spendDetails = (params) => http.post('/sale/api/order/query-spend-details', params)
|
||||
//京东绑卡短信
|
||||
export const bindJd = params => http.post('/pay/jd-fast/bind', params)
|
||||
export const bindJd = (params) => http.post('/pay/jd-fast/bind', params)
|
||||
//通联绑卡短信
|
||||
export const bindTl = params => http.post('/pay/all-in-fast/bind', params)
|
||||
export const bindTl = (params) => http.post('/pay/all-in-fast/bind', params)
|
||||
//汇付绑卡短信
|
||||
export const bindHf = params => http.post('/pay/ada-fast/bind', params)
|
||||
export const bindHf = (params) => http.post('/pay/ada-fast/bind', params)
|
||||
//京东绑卡
|
||||
export const bindJdConfirm = params =>
|
||||
http.post('/pay/jd-fast/bind-confirm', params)
|
||||
export const bindJdConfirm = (params) => http.post('/pay/jd-fast/bind-confirm', params)
|
||||
//通联绑卡
|
||||
export const bindTlConfirm = params =>
|
||||
http.post('/pay/all-in-fast/bind-confirm', params)
|
||||
export const bindTlConfirm = (params) => http.post('/pay/all-in-fast/bind-confirm', params)
|
||||
//汇付绑卡
|
||||
export const bindHfConfirm = params =>
|
||||
http.post('/pay/ada-fast/bind-confirm', params)
|
||||
|
||||
export const unifiedorder = params => http.post('/pay/unifiedorder', params)
|
||||
export const bindHfConfirm = (params) => http.post('/pay/ada-fast/bind-confirm', params)
|
||||
//银行卡支付获取验证码
|
||||
export const unifiedorder = (params) => http.post('/pay/unifiedorder', params)
|
||||
//汇付银行卡确认
|
||||
export const payConfirmHf = params =>
|
||||
http.post('/pay/ada-fast/pay-confirm', params)
|
||||
export const payConfirmHf = (params) => http.post('/pay/ada-fast/pay-confirm', params)
|
||||
//京东银行卡确认
|
||||
export const payConfirmJd = params =>
|
||||
http.post('/pay/jd-fast/pay-confirm', params)
|
||||
export const payConfirmJd = (params) => http.post('/pay/jd-fast/pay-confirm', params)
|
||||
//通联银行卡确认
|
||||
export const payConfirmTl = params =>
|
||||
http.post('/pay/all-in-fast/pay-confirm', params)
|
||||
export const payConfirmTl = (params) => http.post('/pay/all-in-fast/pay-confirm', params)
|
||||
//支付状态
|
||||
export const payStatus = params => http.get('/pay/status', { params })
|
||||
export const payStatus = (params) => http.get('/pay/status', { params })
|
||||
//幂等性
|
||||
export const generate = params =>
|
||||
http.get('/system/api/idempotent/generate', { params })
|
||||
export const generate = (params) => http.get('/system/api/idempotent/generate', { params })
|
||||
//支付注册订单
|
||||
export const payRegOrder = params =>
|
||||
http.post('/sale/api/order/pay-reg-order', params)
|
||||
export const payRegOrder = (params) => http.post('/sale/api/order/pay-reg-order', params)
|
||||
//支付其他订单
|
||||
export const payOthOrder = params =>
|
||||
http.post('/sale/api/order/pay-oth-order', params)
|
||||
export const payOthOrder = (params) => http.post('/sale/api/order/pay-oth-order', params)
|
||||
//宝付确认支付h5
|
||||
export const baoFuPay = params => http.post('/pay/baofu-code/order', params)
|
||||
export const baoFuPay = (params) => http.post('/pay/baofu-code/order', params)
|
||||
//汇付确认支付h5
|
||||
export const huiFuPay = params => http.post('/pay/ada-code/order', params)
|
||||
export const huiFuPay = (params) => http.post('/pay/ada-code/order', params)
|
||||
|
||||
//在线预充值
|
||||
export const preCharge = params =>
|
||||
http.get('/member/api/recharge/preCharge', { params })
|
||||
export const preCharge = (params) => http.get('/member/api/recharge/preCharge', { params })
|
||||
//海粉注册信息
|
||||
export const fansOrder = params =>
|
||||
http.get('/member/api/member/fans-order/' + params)
|
||||
export const fansOrder = (params) => http.get('/member/api/member/fans-order/'+params)
|
||||
//抽奖下单
|
||||
export const payDrawGift = params =>
|
||||
http.post('/activity/api/draw/pay-draw-num', params)
|
||||
export const payDrawGift = (params) => http.post('/activity/api/draw/pay-draw-num', params)
|
||||
//提货下单
|
||||
export const payPickOrder = params =>
|
||||
http.post('/activity/api/pick/order', params)
|
||||
export const payPickOrder = (params) => http.post('/activity/api/pick/order', params)
|
||||
//植树查看账户
|
||||
export const deductionAccount = params =>
|
||||
http.post('activity/api/sa-tree-order/deductionAccount', params)
|
||||
export const deductionAccount = (params) => http.post('activity/api/sa-tree-order/deductionAccount', params)
|
||||
//植树活动
|
||||
export const shoppingTree = params =>
|
||||
http.post('activity/api/sa-tree-order/shoppingTree', params)
|
||||
export const shoppingTree = (params) => http.post('activity/api/sa-tree-order/shoppingTree', params)
|
||||
//解绑银行卡
|
||||
export const unBind = params => http.post('/pay/ada-fast/un-bind', params)
|
||||
export const unBind = (params) => http.post('/pay/ada-fast/un-bind', params)
|
||||
|
||||
//查询注册信息
|
||||
export const registerInfo = params =>
|
||||
http.get('/member/api/member/register-order/' + params)
|
||||
export const registerInfo = (params) => http.get('/member/api/member/register-order/' + params,)
|
||||
|
|
@ -1,103 +1,83 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-06-08 14:52:59
|
||||
*/
|
||||
const http = uni.$u.http
|
||||
//幂等性
|
||||
export const generate = params =>
|
||||
http.get('/system/api/idempotent/generate', { params })
|
||||
export const generate = (params) => http.get('/system/api/idempotent/generate', { params })
|
||||
//商品列表
|
||||
export const getAllGoods = params =>
|
||||
http.post('/sale/api/wares/query-spe-wares', params)
|
||||
export const getAllGoods = (params) => http.post('/sale/api/wares/query-spe-wares', params)
|
||||
//商品详情
|
||||
export const waresDetail = params =>
|
||||
http.post('/sale/api/wares/query-spe-wares-detail', params)
|
||||
export const waresDetail = (params) => http.post('/sale/api/wares/query-spe-wares-detail', params)
|
||||
//获取国家
|
||||
export const countryList = params =>
|
||||
http.get('/system/api/country/list', { params })
|
||||
export const countryList = (params) => http.get('/system/api/country/list', { params })
|
||||
//发货
|
||||
export const deliveryList = params =>
|
||||
http.get('/system/pub/enums/delivery-list', { params })
|
||||
export const deliveryList = (params) => http.get('/system/pub/enums/delivery-list', { params })
|
||||
//运输
|
||||
export const transportList = params =>
|
||||
http.get('/system/pub/enums/transport-type', { params })
|
||||
export const transportList = (params) => http.get('/system/pub/enums/transport-type', { params })
|
||||
//行列表输
|
||||
export const bankList = params => http.get('/system/api/bank/list', { params })
|
||||
export const bankList = (params) => http.get('/system/api/bank/list', { params })
|
||||
//购物车商品详情
|
||||
export const shoppingWaresDetail = params =>
|
||||
http.post('/sale/api/shopping/get-shopping-wares-detail', params)
|
||||
export const shoppingWaresDetail = (params) => http.post('/sale/api/shopping/get-shopping-wares-detail', params)
|
||||
//一键注册
|
||||
export const quickReg = params => http.post('/sale/api/order/quick-reg', params)
|
||||
export const quickReg = (params) => http.post('/sale/api/order/quick-reg', params)
|
||||
//获取会员等级
|
||||
export const memLevel = params =>
|
||||
http.post('/sale/api/order/valid-mem-level', params)
|
||||
export const memLevel = (params) => http.post('/sale/api/order/valid-mem-level', params)
|
||||
//注册页面显示权限
|
||||
export const registerList = params =>
|
||||
http.get('/system/api/register-page/list', { params })
|
||||
export const registerList = (params) => http.get('/system/api/register-page/list', { params })
|
||||
//获取地址列表
|
||||
export const addressList = params =>
|
||||
http.get('/member/api/member-address/list', { params })
|
||||
export const addressList = (params) => http.get('/member/api/member-address/list', { params })
|
||||
//查询邮费
|
||||
export const queryPostage = params =>
|
||||
http.post('/sale/api/order/query-order-postage', params)
|
||||
export const queryPostage = (params) => http.post('/sale/api/order/query-order-postage', params)
|
||||
//确认注册订单-生成待支付订单
|
||||
export const confirmRegOrder = params =>
|
||||
http.post('/sale/api/order/confirm-reg-order', params)
|
||||
export const confirmRegOrder = (params) => http.post('/sale/api/order/confirm-reg-order', params)
|
||||
//根据推荐人编号获取安置信息
|
||||
export const validPcode = params =>
|
||||
http.post('/sale/api/order/valid-p-code', params)
|
||||
export const validPcode = (params) => http.post('/sale/api/order/valid-p-code', params)
|
||||
//注册订单验证安置人编号
|
||||
export const validPPcode = params =>
|
||||
http.post('/sale/api/order/valid-p-p-code', params)
|
||||
export const validPPcode = (params) => http.post('/sale/api/order/valid-p-p-code', params)
|
||||
//注册订单验证手机号
|
||||
export const validPhone = params =>
|
||||
http.post('/sale/api/order/valid-phone', params)
|
||||
export const validPhone = (params) => http.post('/sale/api/order/valid-phone', params)
|
||||
//获取name
|
||||
export const upgRel = params =>
|
||||
http.post('/sale/api/order/validate-upg-rel', params)
|
||||
export const upgRel = (params) => http.post('/sale/api/order/validate-upg-rel', params)
|
||||
//升级复购单确认
|
||||
export const confirmOthOrder = params =>
|
||||
http.post('/sale/api/order/confirm-oth-order', params)
|
||||
|
||||
export const confirmOthOrder = (params) => http.post('/sale/api/order/confirm-oth-order', params)
|
||||
//新人礼包确认
|
||||
export const confirmGiftOrder = (params) => http.post('/sale/api/order/confirm-gift-order', params)
|
||||
//嗨粉确认订单
|
||||
export const confirmFunOrder = params =>
|
||||
http.post('/sale/api/order/confirm-fun-order', params)
|
||||
export const confirmFunOrder = (params) => http.post('/sale/api/order/confirm-fun-order', params)
|
||||
//协议
|
||||
export const waresAgreement = params =>
|
||||
http.post('/sale/api/wares/get-wares-agreement', params)
|
||||
export const waresAgreement = (params) => http.post('/sale/api/wares/get-wares-agreement', params)
|
||||
//海粉订单详情
|
||||
export const waresinfo = params =>
|
||||
http.post('/sale/api/wares/query-confirm-waresinfo', params)
|
||||
export const waresinfo = (params) => http.post('/sale/api/wares/query-confirm-waresinfo', params)
|
||||
//海粉订单确认
|
||||
export const confirmShareOrder = params =>
|
||||
http.post('/sale/api/order/confirm-share-order', params)
|
||||
export const confirmShareOrder = (params) => http.post('/sale/api/order/confirm-share-order', params)
|
||||
//删除地址
|
||||
export const delAddress = data =>
|
||||
http.delete('/member/api/member-address/' + data)
|
||||
export const delAddress = (data) => http.delete('/member/api/member-address/' + data)
|
||||
//仓库店铺
|
||||
export const storehouseList = (params) => http.get('/system/api/storehouse/list', { params })
|
||||
//会员店铺
|
||||
export const storeList = (params) => http.get('/member/api/store/list', { params })
|
||||
//省市区
|
||||
export const areaList = params =>
|
||||
http.get('system/api/area/get-level-list', { params })
|
||||
export const areaList = (params) => http.get('system/api/area/get-level-list', { params })
|
||||
//创客空间选择
|
||||
export const list_maker = data =>
|
||||
http.post(
|
||||
'/member/api/maker-space/list-maker?pageNum=' +
|
||||
data.pageNum +
|
||||
'&pageSize=' +
|
||||
data.pageSize,
|
||||
data
|
||||
)
|
||||
export const list_maker = (data) => http.post('/member/api/maker-space/list-maker?pageNum=' + data.pageNum + '&pageSize=' + data.pageSize, data )
|
||||
|
||||
// 礼包获取邮费
|
||||
export const queryAdressPostage = params =>
|
||||
http.post('/sale/api/order/self-order-postage', params)
|
||||
export const queryAdressPostage = (params) => http.post('/sale/api/order/self-order-postage', params)
|
||||
// 特殊会员完善信息
|
||||
export const saveSpecial = params =>
|
||||
http.post('/member/api/member-special/save-special', params)
|
||||
export const saveSpecial = (params) => http.post('/member/api/member-special/save-special', params)
|
||||
// 下载
|
||||
export const specialExport = params =>
|
||||
http.post('/member/api/member-special/special-export', params, {
|
||||
header: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
responseType: 'blob',
|
||||
})
|
||||
export const specialExport = (params) => http.post('/member/api/member-special/special-export', params,{header: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
responseType: 'blob',})
|
||||
//特殊信息列表
|
||||
export const specialList = params =>
|
||||
http.get('/member/api/member-special/special-list', { params })
|
||||
export const specialList = (params) => http.get('/member/api/member-special/special-list', { params })
|
||||
|
||||
// 判断选中商品是否可以下单
|
||||
export const canOrder = data => http.post('/sale/api/order/can-order', data)
|
||||
// 自营合作支付校验
|
||||
export const checkPay = (params) => http.post('/sale/api/order/check-pay-type', params)
|
||||
// 创客空间接口
|
||||
export const queryCard = (params) => http.post('/sale/api/wares/query-cabin-card', params)
|
||||
|
||||
//复购特殊商品列表
|
||||
export const makerList = (params) => http.get('/sale/api/order/list-maker-ware', { params })
|
||||
|
|
@ -1,105 +1,71 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-05-24 14:43:45
|
||||
*/
|
||||
import { getToken, removeToken } from '@/config/auth.js'
|
||||
|
||||
module.exports = vm => {
|
||||
// 检查uni.$u.http是否可用
|
||||
if (!uni || !uni.$u || !uni.$u.http) {
|
||||
console.warn('uni.$u.http is not available, request configuration skipped')
|
||||
return
|
||||
}
|
||||
|
||||
// 初始化请求配置
|
||||
uni.$u.http.setConfig(config => {
|
||||
// 192.168.0.100:8080
|
||||
|
||||
//#ifdef DEV_SERVER
|
||||
console.log('DEV_SERVER')
|
||||
config.baseURL = 'https://t-app.beida666.com/prod-api'
|
||||
//#endif
|
||||
|
||||
//#ifdef QA_SERVER
|
||||
console.log('QA_SERVER')
|
||||
config.baseURL = '/prod-api'
|
||||
//#endif
|
||||
config.timeout = 30000
|
||||
module.exports = (vm) => {
|
||||
// 初始化请求配置
|
||||
uni.$u.http.setConfig((config) => {
|
||||
config.baseURL = 'https://p1.hzs413.com/inter-api';
|
||||
// config.baseURL = 'http://192.168.31.137:8080';
|
||||
// config.baseURL = 'https://cn.hzs413.com/inter-api/';
|
||||
config.timeout = 80000;
|
||||
return config
|
||||
})
|
||||
|
||||
|
||||
// 请求拦截
|
||||
uni.$u.http.interceptors.request.use(
|
||||
config => {
|
||||
config.data = config.data || {}
|
||||
config.header['Source'] = 3
|
||||
let token = getToken()
|
||||
let mToken = uni.getStorageSync('mToken')
|
||||
let lang = uni.getStorageSync('lang')
|
||||
if (lang) {
|
||||
config.header['Accept-Language'] = lang
|
||||
} else {
|
||||
config.header['Accept-Language'] = 'zh-CN'
|
||||
}
|
||||
if (token) {
|
||||
config.header['Authorization'] = token
|
||||
}
|
||||
config.header['token'] = mToken || ''
|
||||
return config
|
||||
},
|
||||
config => {
|
||||
return Promise.reject(config)
|
||||
uni.$u.http.interceptors.request.use((config) => {
|
||||
config.data = config.data || {}
|
||||
config.header['Source'] = 3
|
||||
let token = getToken();
|
||||
let mToken = uni.getStorageSync('mToken');
|
||||
let lang = uni.getStorageSync('lang');
|
||||
if (lang) {
|
||||
config.header['Accept-Language'] = lang
|
||||
} else {
|
||||
config.header['Accept-Language'] = 'zh-CN'
|
||||
}
|
||||
)
|
||||
if (token) {
|
||||
config.header['Authorization'] = token;
|
||||
}
|
||||
config.header['token'] = mToken || '';
|
||||
return config
|
||||
}, config => {
|
||||
return Promise.reject(config)
|
||||
})
|
||||
|
||||
// 响应拦截
|
||||
uni.$u.http.interceptors.response.use(
|
||||
response => {
|
||||
const data = response.data
|
||||
uni.$u.http.interceptors.response.use((response) => {
|
||||
const data = response.data
|
||||
// uni.$u.toast(data.msg)
|
||||
// if (data.code == 200) {
|
||||
// return data;
|
||||
// } else {
|
||||
// token过期,清除token重新获取
|
||||
if (data.code == 400 || data.code == 401 || data.code == 402) {
|
||||
// uni.showToast({
|
||||
// title: '登录超时',
|
||||
// icon: 'none',
|
||||
// duration: 1500,
|
||||
// })
|
||||
removeToken();
|
||||
// 跳转到登录
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/index'
|
||||
})
|
||||
}, 1500)
|
||||
} else if (data.code == 500) {
|
||||
uni.$u.toast(data.msg)
|
||||
return data;
|
||||
} else {
|
||||
// uni.$u.toast(data.msg)
|
||||
// if (data.code == 200) {
|
||||
// return data;
|
||||
// } else {
|
||||
// token过期,清除token重新获取
|
||||
if (data.code == 400 || data.code == 401 || data.code == 402) {
|
||||
// uni.showToast({
|
||||
// title: '登录超时',
|
||||
// icon: 'none',
|
||||
// duration: 1500,
|
||||
// })
|
||||
removeToken()
|
||||
// 跳转到登录
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/index',
|
||||
})
|
||||
}, 1500)
|
||||
} else if (data.code == 500) {
|
||||
if (['/member/api/member/get-info'].includes(response?.config?.url)) {
|
||||
uni.showToast({
|
||||
title: '登录失败',
|
||||
icon: 'none',
|
||||
duration: 800,
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({
|
||||
url: '/pages/login/index',
|
||||
})
|
||||
}, 800)
|
||||
removeToken()
|
||||
return data
|
||||
}
|
||||
uni.$u.toast(data.msg)
|
||||
return data
|
||||
} else {
|
||||
// uni.$u.toast(data.msg)
|
||||
return data
|
||||
}
|
||||
},
|
||||
response => {
|
||||
uni.$u.toast('服务器错误,请稍后重试')
|
||||
return data;
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}, (response) => {
|
||||
uni.$u.toast('服务器错误,请稍后重试')
|
||||
})
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
const http = uni.$u.http
|
||||
|
||||
export const getShareCode = params =>
|
||||
http.get('/member/api/share/get-shared-img', { params })
|
||||
|
||||
// 根据短码获取memberCode
|
||||
export const getMemberCode = code =>
|
||||
http.get(`/member/api/share/find-share-code/${code}`)
|
||||
|
||||
// 获取手机验证码
|
||||
export const getPhoneCode = params =>
|
||||
http.get('/member/api/share/share-sms-code', { params })
|
||||
|
||||
// 注册
|
||||
export const getRegister = data =>
|
||||
http.post('/member/api/share/share-register', data)
|
||||
|
||||
// 自动登录
|
||||
export const autoLogin = data =>
|
||||
// http.post('/retail-member/api/retail-auth/auto-login', data)
|
||||
http.post('/member/auth/api/share-login', data)
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
const http = uni.$u.http
|
||||
|
||||
//会员专区商品列表
|
||||
export const getAreaGoods = (params) => http.get('/sale/api/wares/list-wares', params)
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
* @Descripttion: 门票活动相关API
|
||||
* @version: 1.0.0
|
||||
* @Author: Assistant
|
||||
* @Date: 2025-01-22
|
||||
*/
|
||||
|
||||
const http = uni.$u.http
|
||||
|
||||
// 查询门票活动列表
|
||||
export const getTicketActivityList = params =>
|
||||
http.get('/sale/api/ticket/query-ac', { params })
|
||||
|
||||
// 查询我的门票
|
||||
export const getMyTicketList = params =>
|
||||
http.get('/sale/api/ticket/query', { params })
|
||||
|
||||
// 购买门票(暂时定义,等待后端提供具体接口)
|
||||
export const buyTicket = data => http.post('/sale/api/ticket/pay-ticket', data)
|
||||
|
||||
// 获取门票详情
|
||||
export const getTicketDetail = params =>
|
||||
http.get('/sale/api/ticket/detail', { params })
|
||||
|
||||
// 撤销门票
|
||||
export const cancelTicket = data =>
|
||||
http.post('/sale/api/ticket/cancel-pay-ticket', data)
|
||||
|
||||
// 更新门票
|
||||
export const updateTicket = data =>
|
||||
http.post('/sale/api/ticket/update-ticket', data)
|
||||
45
index.html
45
index.html
|
|
@ -1,25 +1,36 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-07-28 16:30:26
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<script>
|
||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
|
||||
CSS.supports('top: constant(a)'))
|
||||
document.write(
|
||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
|
||||
CSS.supports('top: constant(a)'))
|
||||
document.write(
|
||||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||
</script>
|
||||
<title></title>
|
||||
<!--preload-links-->
|
||||
<!--app-context-->
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>static/index.css"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"/>
|
||||
<script src="https://bd-qd.oss-cn-beijing.aliyuncs.com/test_01/language/zh-CN.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"><!--app-html--></div>
|
||||
<script type="module" src="/main.js"></script>
|
||||
<script type="module" src="static/cdn/echarts.min.js"></script>
|
||||
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
||||
</body>
|
||||
<link rel="stylesheet" href="<%= BASE_URL %>static/index.css" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<script src="https://hzs-in.oss-cn-beijing.aliyuncs.com/test-new/language/zh-CN.js"></script>
|
||||
<script src="https://hzs-in.oss-cn-beijing.aliyuncs.com/test-new/language/en-US.js"></script>
|
||||
<script src="https://hzs-in.oss-cn-beijing.aliyuncs.com/test-new/language/zh-TC.js"></script>
|
||||
<!-- <script src="https://hzs-in.oss-cn-beijing.aliyuncs.com/test-new/language/fr-FR.js"></script>
|
||||
<script src="https://hzs-in.oss-cn-beijing.aliyuncs.com/test-new/language/ru-RU.js"></script> -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"><!--app-html--></div>
|
||||
<script type="module" src="/main.js"></script>
|
||||
<script type="module" src="static/cdn/echarts.min.js"></script>
|
||||
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
49
main.js
49
main.js
|
|
@ -1,3 +1,15 @@
|
|||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2022-11-21 15:11:22
|
||||
*/
|
||||
/*
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: kBank
|
||||
* @Date: 2022-11-21 15:11:22
|
||||
*/
|
||||
import App from './App'
|
||||
|
||||
// #ifndef VUE3
|
||||
|
|
@ -5,48 +17,41 @@ import Vue from 'vue'
|
|||
import uview from '@/uni_modules/uview-ui'
|
||||
import store from '@/store/index.js'
|
||||
import Vue2OrgTree from 'vue-tree-color'
|
||||
import * as echarts from 'echarts'
|
||||
import { formatCurrency } from '@/util/index'
|
||||
Vue.prototype.$echarts = echarts
|
||||
import * as echarts from 'echarts';
|
||||
Vue.prototype.$echarts = echarts;
|
||||
Vue.use(Vue2OrgTree)
|
||||
import axios from 'axios'
|
||||
import { saveAs } from 'file-saver'
|
||||
import axios from 'axios';
|
||||
import { saveAs } from 'file-saver';
|
||||
window.wx = {}
|
||||
|
||||
import floating from '@/components/floating/floating.vue';
|
||||
/*底部数据*/
|
||||
|
||||
Vue.component('floating', floating)
|
||||
Vue.prototype.$store = store
|
||||
Vue.use(uview)
|
||||
Vue.config.productionTip = false
|
||||
App.mpType = 'app'
|
||||
const app = new Vue({
|
||||
...App,
|
||||
...App
|
||||
})
|
||||
|
||||
Vue.config.ignoredElements = [
|
||||
...Vue.config.ignoredElements,
|
||||
'wx-open-launch-weapp',
|
||||
]
|
||||
Vue.config.ignoredElements = [...Vue.config.ignoredElements, 'wx-open-launch-weapp']
|
||||
|
||||
|
||||
// 复制
|
||||
import VueClipboard from 'vue-clipboard2'
|
||||
Vue.use(VueClipboard)
|
||||
|
||||
|
||||
// #endif
|
||||
import {
|
||||
numberToCurrencyNo,
|
||||
toThousandthAndKeepDecimal,
|
||||
isLocal,
|
||||
isLocaled,
|
||||
} from '@/util/numberToCurrency'
|
||||
import { numberToCurrencyNo,toThousandthAndKeepDecimal, isLocal,isLocaled } from '@/util/numberToCurrency'
|
||||
Vue.prototype.isLocaled = isLocaled
|
||||
// 配置全局过滤器,实现数字千分位格式
|
||||
Vue.filter('numberToCurrency', formatCurrency)
|
||||
Vue.filter('numberToCurrency', numberToCurrencyNo)
|
||||
Vue.filter('toThousandthAndKeepDecimal', toThousandthAndKeepDecimal)
|
||||
// 配置全局过滤器,实现数字千分位格式
|
||||
Vue.filter('isLocal', isLocal)
|
||||
import i18n from '@/util/i18n/index'
|
||||
Vue.prototype._i18n = i18n
|
||||
Vue.prototype._i18n = i18n
|
||||
|
||||
// #ifdef VUE3
|
||||
import { createSSRApp } from 'vue'
|
||||
|
|
@ -55,9 +60,9 @@ export function createApp() {
|
|||
app.use(i18n)
|
||||
return {
|
||||
app,
|
||||
store,
|
||||
store
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
require('@/config/request.js')(app)
|
||||
app.$mount()
|
||||
app.$mount()
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name" : "qyj_console",
|
||||
"appid" : "__UNI__31B4587",
|
||||
"appid" : "",
|
||||
"description" : "",
|
||||
"versionName" : "1.0.0",
|
||||
"versionCode" : "100",
|
||||
|
|
@ -17,13 +17,7 @@
|
|||
"delay" : 0
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules" : {
|
||||
"Bluetooth" : {},
|
||||
"Barcode" : {},
|
||||
"Camera" : {},
|
||||
"Fingerprint" : {},
|
||||
"FaceID" : {}
|
||||
},
|
||||
"modules" : {},
|
||||
/* 应用发布信息 */
|
||||
"distribute" : {
|
||||
/* android打包配置 */
|
||||
|
|
@ -44,17 +38,12 @@
|
|||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
|
||||
]
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios" : {
|
||||
"dSYMs" : false
|
||||
},
|
||||
"ios" : {},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs" : {
|
||||
"push" : {}
|
||||
}
|
||||
"sdkConfigs" : {}
|
||||
}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
|
|
@ -83,29 +72,9 @@
|
|||
},
|
||||
"vueVersion" : "2",
|
||||
"h5" : {
|
||||
"template" : "index.html",
|
||||
"template" : "index.html",
|
||||
"router" : {
|
||||
"mode" : "hash"
|
||||
},
|
||||
"devServer" : {
|
||||
"https" : false,
|
||||
"port" : 8000,
|
||||
"disableHostCheck" : true,
|
||||
"proxy" : {
|
||||
"/prod-api" : {
|
||||
"target" : "http://192.168.0.104:8080",
|
||||
"changeOrigin" : true,
|
||||
"pathRewrite" : {
|
||||
"^/prod-api" : ""
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"optimization" : {
|
||||
"treeShaking" : {
|
||||
"enable" : true
|
||||
}
|
||||
}
|
||||
},
|
||||
"fallbackLocale" : "zh-Hans"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
50
package.json
50
package.json
|
|
@ -1,65 +1,33 @@
|
|||
{
|
||||
"name": "bd_cloud_h5",
|
||||
"name": "hzs_cloud_h5",
|
||||
"version": "1.0.0",
|
||||
"description": "h5",
|
||||
"description": "<!-- * @Descripttion: * @version: * @Author: 王三<E78E8B> * @Date: 2022-11-21 15:11:22 -->",
|
||||
"main": "main.js",
|
||||
"dependencies": {
|
||||
"@zumer/snapdom": "^1.9.6",
|
||||
"axios": "^1.5.0",
|
||||
"echarts": "^4.9.0",
|
||||
"file-saver": "^2.0.5",
|
||||
"glob": "^11.0.1",
|
||||
"html2canvas": "^1.4.1",
|
||||
"js-cookie": "^3.0.5",
|
||||
"qrcodejs2": "0.0.2",
|
||||
"swiper": "^3.4.2",
|
||||
"vconsole": "^3.15.1",
|
||||
"vue-clipboard2": "^0.3.3",
|
||||
"vue-i18n": "^9.2.2",
|
||||
"vue-tree-color": "^2.3.2",
|
||||
"weixin-js-sdk": "^1.6.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/eslint-config-prettier": "^8.0.0",
|
||||
"eslint": "^8.57.1",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-vue": "^9.33.0",
|
||||
"less": "^3.13.1",
|
||||
"less-loader": "^4.1.0",
|
||||
"prettier": "^3.5.3"
|
||||
"less-loader": "^4.1.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"format": "prettier --write .",
|
||||
"check-format": "prettier --check .",
|
||||
"lint": "eslint --ext .js,.vue .",
|
||||
"lint:fix": "eslint --ext .js,.vue . --fix",
|
||||
"format:check": "prettier --check \"**/*.{js,vue,json,md}\"",
|
||||
"format:write": "prettier --write \"**/*.{js,vue,json,md}\""
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://182.92.11.203:9999/web/hzs_cloud_h5.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"uni-app": {
|
||||
"scripts": {
|
||||
"dev-env": {
|
||||
"title": "开发环境",
|
||||
"env": {
|
||||
"UNI_PLATFORM": "h5"
|
||||
},
|
||||
"define": {
|
||||
"DEV_SERVER": true
|
||||
}
|
||||
},
|
||||
"prod-env": {
|
||||
"title": "测试环境",
|
||||
"env": {
|
||||
"UNI_PLATFORM": "h5"
|
||||
},
|
||||
"define": {
|
||||
"QA_SERVER": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"license": "ISC"
|
||||
}
|
||||
|
|
|
|||
79
pages.json
79
pages.json
|
|
@ -5,6 +5,7 @@
|
|||
"style": {
|
||||
"navigationBarTitleText": "首页",
|
||||
"navigationBarBackgroundColor": "#fff",
|
||||
// "enablePullDownRefresh": true,
|
||||
"navigationBarHidden": true,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
|
|
@ -79,6 +80,13 @@
|
|||
"navigationBarBackgroundColor": "#fff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/forgetEmail/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "邮箱设置",
|
||||
"navigationBarBackgroundColor": "#fff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/forgetPayPassword/index",
|
||||
"style": {
|
||||
|
|
@ -318,12 +326,6 @@
|
|||
"navigationBarTitleText": "注册专区"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/regiest/shareRegister",
|
||||
"style": {
|
||||
"navigationBarTitleText": "会员专区"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/shareArea/haiShare",
|
||||
"style": {
|
||||
|
|
@ -369,13 +371,6 @@
|
|||
"navigationBarTitleText": "绑定银行卡"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/pay/success",
|
||||
"style": {
|
||||
"navigationBarTitleText": "支付成功",
|
||||
"navigationBarBackgroundColor": "#fff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/order/index",
|
||||
"style": {
|
||||
|
|
@ -391,6 +386,12 @@
|
|||
"navigationBarTitleText": "注册专区"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/other/newGiftPay",
|
||||
"style": {
|
||||
"navigationBarTitleText": "新人礼包"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/other/haiConfirm",
|
||||
"style": {
|
||||
|
|
@ -448,14 +449,6 @@
|
|||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/refund/detail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "退款列表",
|
||||
"navigationBarBackgroundColor": "#fff",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/balance/transfer",
|
||||
"style": {
|
||||
|
|
@ -498,13 +491,6 @@
|
|||
"navigationBarBackgroundColor": "#fff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/region/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "收益区域",
|
||||
"navigationBarBackgroundColor": "#fff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/balance/transDetail",
|
||||
"style": {
|
||||
|
|
@ -834,13 +820,6 @@
|
|||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/share/index",
|
||||
"style": {
|
||||
"navigationBarHidden": true,
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/honorHall/honorHall",
|
||||
"style": {
|
||||
|
|
@ -861,32 +840,6 @@
|
|||
"navigationBarTitleText": "新增业绩",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/ticket/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "门票活动",
|
||||
"enablePullDownRefresh": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/ticket/buy",
|
||||
"style": {
|
||||
"navigationBarTitleText": "自助购票"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/ticket/detail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "我的门票"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/test-ticket",
|
||||
"style": {
|
||||
"navigationBarTitleText": "门票模块测试",
|
||||
"navigationBarBackgroundColor": "#fff"
|
||||
}
|
||||
}
|
||||
],
|
||||
"tabBar": {
|
||||
|
|
@ -901,7 +854,7 @@
|
|||
"pagePath": "pages/shoppingCar/index"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/mine/share/index"
|
||||
"pagePath": "pages/email/index"
|
||||
},
|
||||
{
|
||||
"pagePath": "pages/mine/index"
|
||||
|
|
@ -914,4 +867,4 @@
|
|||
"navigationBarBackgroundColor": "#F8F8F8",
|
||||
"backgroundColor": "#F8F8F8"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,16 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view class="contents">
|
||||
<u-form :model="addressForm" labelWidth="auto" ref="uForm">
|
||||
<view class="view-class">
|
||||
<u-form-item
|
||||
label="收货人"
|
||||
:label="$t('MY_ORD_10')"
|
||||
label-width="100px"
|
||||
prop="recName"
|
||||
>
|
||||
|
|
@ -19,7 +25,7 @@
|
|||
</view>
|
||||
<view class="view-class">
|
||||
<u-form-item
|
||||
label="联系方式"
|
||||
:label="$t('w_0052')"
|
||||
label-width="100px"
|
||||
prop="recPhone"
|
||||
>
|
||||
|
|
@ -43,7 +49,7 @@
|
|||
</u-form-item>
|
||||
</view>
|
||||
<view class="view-class" @click="getDiqu">
|
||||
<u-form-item label="收货地址" label-width="100px" prop="address">
|
||||
<u-form-item :label="$t('w_0068')" label-width="100px" prop="address">
|
||||
<view
|
||||
v-if="address"
|
||||
style="font-size: 28rpx; color: #333; margin-left: 20rpx"
|
||||
|
|
@ -65,7 +71,7 @@
|
|||
</view>
|
||||
<view class="view-class">
|
||||
<u-form-item
|
||||
label="详细地址"
|
||||
:label="$t('S_C_27')"
|
||||
class="label-style"
|
||||
label-width="100px"
|
||||
prop="recAddress"
|
||||
|
|
@ -75,7 +81,7 @@
|
|||
placeholder-class="place-class"
|
||||
class="border-color"
|
||||
maxlength="200"
|
||||
placeholder="请输入详细地址"
|
||||
:placeholder="$t('w_0070')"
|
||||
/>
|
||||
</u-form-item>
|
||||
</view>
|
||||
|
|
@ -98,17 +104,9 @@
|
|||
:defaultCode="defaultCode"
|
||||
@addressData="addressData"
|
||||
></v-address>
|
||||
<u-button
|
||||
:disabled="!addressForm.recName || !addressForm.recPhone || !addressForm.recAddress"
|
||||
type="success"
|
||||
shape="circle"
|
||||
class="btn"
|
||||
@click="submit"
|
||||
color="#005BAC"
|
||||
:loading="loading"
|
||||
>
|
||||
确定
|
||||
</u-button>
|
||||
<u-button type="success" shape="circle" class="btn" @click="submit">{{
|
||||
$t("w_0035")
|
||||
}}</u-button>
|
||||
<view style="height: 20rpx"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -137,7 +135,6 @@ export default {
|
|||
isDefault: 0,
|
||||
pkId: "",
|
||||
},
|
||||
loading: false,
|
||||
rules: {
|
||||
recName: [
|
||||
{
|
||||
|
|
@ -171,13 +168,13 @@ export default {
|
|||
message: "请输入手机号",
|
||||
trigger: ["blur"],
|
||||
},
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
return this.$u.test.mobile(value);
|
||||
},
|
||||
message: "手机号格式不正确",
|
||||
trigger: ["blur"],
|
||||
},
|
||||
// {
|
||||
// validator: (rule, value, callback) => {
|
||||
// return this.$u.test.mobile(value);
|
||||
// },
|
||||
// message: "手机号格式不正确",
|
||||
// trigger: ["blur"],
|
||||
// },
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -204,26 +201,19 @@ export default {
|
|||
},
|
||||
submit() {
|
||||
this.$refs.uForm.validate().then((res) => {
|
||||
this.loading = true
|
||||
api.saveAddress(this.addressForm).then((res) => {
|
||||
if (res.code == "200") {
|
||||
const toast = uni.showToast({
|
||||
uni.showToast({
|
||||
title: res.msg,
|
||||
icon: "none",
|
||||
complete() {
|
||||
success() {
|
||||
setTimeout(() => {
|
||||
this.loading = false
|
||||
uni.navigateBack(1)
|
||||
toast.hideToast()
|
||||
}, 500);
|
||||
uni.navigateBack(1);
|
||||
}, 2000);
|
||||
},
|
||||
});
|
||||
} else {
|
||||
this.loading = false
|
||||
}
|
||||
}).catch(() => {
|
||||
this.loading = false
|
||||
})
|
||||
});
|
||||
});
|
||||
},
|
||||
getDiqu() {
|
||||
|
|
@ -279,7 +269,7 @@ export default {
|
|||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
:v-deep .u-form-item__body__right__message {
|
||||
/deep/ .u-form-item__body__right__message {
|
||||
margin-left: 215rpx !important;
|
||||
padding-bottom: 20rpx;
|
||||
}
|
||||
|
|
@ -319,7 +309,7 @@ export default {
|
|||
.label-style {
|
||||
display: block !important;
|
||||
}
|
||||
:v-deep .label-style .u-form-item__body__left {
|
||||
/deep/ .label-style .u-form-item__body__left {
|
||||
display: block !important;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
|
@ -341,6 +331,8 @@ page {
|
|||
background-color: #fff;
|
||||
}
|
||||
.btn {
|
||||
background-color: #fb3024;
|
||||
border: none;
|
||||
height: 92rpx;
|
||||
line-height: 92rpx;
|
||||
font-size: 30rpx;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,9 @@
|
|||
<!--
|
||||
* @Descripttion:
|
||||
* @version:
|
||||
* @Author: 王三华
|
||||
* @Date: 2023-05-18 14:42:53
|
||||
-->
|
||||
<template>
|
||||
<view class="main">
|
||||
<view class="color-s">
|
||||
|
|
@ -18,7 +24,7 @@
|
|||
{{item.recAddress}}
|
||||
</view>
|
||||
<view class="address-e">
|
||||
{{item.recName}} {{item.recPhone}} <span class="color-style" v-if="item.isDefault==1">{{'默认'}}</span>
|
||||
{{item.recName}} {{item.recPhone}} <span class="color-style" v-if="item.isDefault==1">{{$t('w_0263')}}</span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="address-right" @click="update(item.pkId)">
|
||||
|
|
@ -64,7 +70,7 @@ export default {
|
|||
},
|
||||
del(id){
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
title: this.$t('w_0034'),
|
||||
content: '是否删除该地址',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
|
|
@ -104,7 +110,7 @@ export default {
|
|||
.color-style{
|
||||
width: 65rpx;
|
||||
height: 36rpx;
|
||||
background: #005BAC;
|
||||
background: #DE3932;
|
||||
border-radius: 2rpx;
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
|
|
@ -167,7 +173,7 @@ export default {
|
|||
position: absolute;
|
||||
width: 100%;
|
||||
height: 244rpx;
|
||||
background: linear-gradient(180deg, #005BAC 0%, rgba(255,182,182,0) 100%);
|
||||
background: linear-gradient(180deg, #F33030 0%, rgba(255,182,182,0) 100%);
|
||||
border-radius: 0px 0px 0px 0px;
|
||||
top: 0;
|
||||
}
|
||||
|
|
@ -199,7 +205,7 @@ export default {
|
|||
margin-bottom: 170rpx;
|
||||
}
|
||||
.btn{
|
||||
background-color: #005BAC;
|
||||
background-color: #FB3024;
|
||||
border: none;
|
||||
height: 92rpx;
|
||||
line-height: 92rpx;
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue