init
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/node_modules
|
||||||
|
/unpackage
|
24
.hbuilderx/launch.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
// launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
|
||||||
|
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
|
||||||
|
"version" : "0.0",
|
||||||
|
"configurations" : [
|
||||||
|
{
|
||||||
|
"app-plus" : {
|
||||||
|
"launchtype" : "local"
|
||||||
|
},
|
||||||
|
"default" : {
|
||||||
|
"launchtype" : "local"
|
||||||
|
},
|
||||||
|
"type" : "uniCloud"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"playground" : "custom",
|
||||||
|
"type" : "uni-app:app-ios"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"playground" : "standard",
|
||||||
|
"type" : "uni-app:app-android"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
27
App.vue
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
onLaunch: function() {
|
||||||
|
console.log('App Launch')
|
||||||
|
},
|
||||||
|
onShow: function() {
|
||||||
|
console.log('App Show')
|
||||||
|
},
|
||||||
|
onHide: function() {
|
||||||
|
console.log('App Hide')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
/* 引入的uview-ui的index.scss放第一行引入 */
|
||||||
|
@import "uview-ui/index.scss";
|
||||||
|
/*每个页面公共css */
|
||||||
|
page{
|
||||||
|
color: #fff;
|
||||||
|
font-size: 28rpx;
|
||||||
|
// background: url('@/static/image/home/bg.png') no-repeat;
|
||||||
|
// background-size: 100% 100%;
|
||||||
|
// background-attachment:fixed;
|
||||||
|
// height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
98
common/index.js
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
/**
|
||||||
|
* 通用消息框
|
||||||
|
* @param content string 消息内容
|
||||||
|
* @param fn function 回调
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
const msgToast = (content,fn,type='none') => {
|
||||||
|
uni.showToast({
|
||||||
|
title: content,
|
||||||
|
duration: 2000,
|
||||||
|
icon: type,
|
||||||
|
success: fn ? ()=>{
|
||||||
|
setTimeout(() => {
|
||||||
|
fn()
|
||||||
|
},1500)
|
||||||
|
} : function() {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 手机号验证 */
|
||||||
|
const vefTel = (key) => {
|
||||||
|
let reg_tel = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
|
||||||
|
///^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/; // 11位手机号
|
||||||
|
if (key === '' || key === undefined || key === null) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请输入手机号',
|
||||||
|
duration: 2000,
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
return false
|
||||||
|
} else if (!reg_tel.test(key)) {
|
||||||
|
|
||||||
|
uni.showToast({
|
||||||
|
title: '手机号码格式不正确',
|
||||||
|
duration: 2000,
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 非空验证 */
|
||||||
|
const vefEmpty = (key,msg) => {
|
||||||
|
if (key === '' || key === undefined || key === null) {
|
||||||
|
uni.showToast({
|
||||||
|
title: msg,
|
||||||
|
duration: 2000,
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const logout = () => {
|
||||||
|
msgToast('登录已过期,请重新登录',()=> {
|
||||||
|
uni.removeStorageSync('userInfo');
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '../login/login'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description: H5 App通用方案 解决H5刷新返回失败问题
|
||||||
|
* @param {*} params
|
||||||
|
*/
|
||||||
|
const navigateBack = (params) => {
|
||||||
|
const pages = getCurrentPages()
|
||||||
|
if (pages.length === 1) {
|
||||||
|
if (typeof params === 'number') {
|
||||||
|
history.go(-params)
|
||||||
|
} else {
|
||||||
|
history.back()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.navigateBack()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @description: 获取url参数
|
||||||
|
* @param {*} params
|
||||||
|
*/
|
||||||
|
const getLocationParams = (name) => {
|
||||||
|
const pages = getCurrentPages()
|
||||||
|
const curPage = pages[pages.length-1];
|
||||||
|
return name? curPage.options[name]:curPage.options;
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
msgToast,
|
||||||
|
vefTel,
|
||||||
|
vefEmpty,
|
||||||
|
logout,
|
||||||
|
navigateBack,
|
||||||
|
getLocationParams
|
||||||
|
}
|
167
components/navBar/navBar.vue
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="status_bar">
|
||||||
|
<!-- 这里是状态栏 -->
|
||||||
|
</view>
|
||||||
|
<view style="height: 110upx">
|
||||||
|
<u-sticky offset-top="0" v-if="stickyShow">
|
||||||
|
<u-navbar
|
||||||
|
:is-back="false"
|
||||||
|
:title="navTitle"
|
||||||
|
:bgColor="background"
|
||||||
|
:titleStyle="titleStyle"
|
||||||
|
:color="color"
|
||||||
|
>
|
||||||
|
<view slot="left">
|
||||||
|
<text
|
||||||
|
v-if="isBack"
|
||||||
|
@click="navigateBack"
|
||||||
|
class="back"
|
||||||
|
:style="{ backgroundColor: `${this._props.backBackGroundColor}` }"
|
||||||
|
>{{ $t("navbar.back") }}</text
|
||||||
|
>
|
||||||
|
<text v-else></text>
|
||||||
|
</view>
|
||||||
|
</u-navbar>
|
||||||
|
</u-sticky>
|
||||||
|
<u-navbar
|
||||||
|
:is-back="false"
|
||||||
|
:title="navTitle"
|
||||||
|
:bgColor="background1"
|
||||||
|
:titleStyle="titleStyle"
|
||||||
|
>
|
||||||
|
<view slot="left">
|
||||||
|
<text
|
||||||
|
v-if="isBack"
|
||||||
|
@click="navigateBack"
|
||||||
|
class="back"
|
||||||
|
:style="{ backgroundColor: `${this._props.backBackGroundColor}` }"
|
||||||
|
>{{ $t("navbar.back") }}</text
|
||||||
|
>
|
||||||
|
<text v-else></text>
|
||||||
|
</view>
|
||||||
|
<view slot="center" v-if="hasLogo">
|
||||||
|
<image
|
||||||
|
style="width: 202upx; height: 60upx"
|
||||||
|
src="../../static/image/home/fontree.png"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view slot="right" v-if="hasRight" @click="clickRight">
|
||||||
|
<image
|
||||||
|
style="width: 80upx; height: 34upx"
|
||||||
|
src="../../static/image/mine/feedback.png"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
</u-navbar>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "navBar",
|
||||||
|
props: {
|
||||||
|
isBack: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
navTitle: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
stickyShow: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
backToUrl: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
isSwitchTab: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
hasLogo: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
hasRight: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
backBackGroundColor: {
|
||||||
|
type: String,
|
||||||
|
default: "rgba(255, 255, 255)",
|
||||||
|
},
|
||||||
|
sfBack: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
background: "rgba(255, 255, 255)",
|
||||||
|
background1: "transparent",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
titleStyle() {
|
||||||
|
return {
|
||||||
|
color: this._props.color ?? "#fff",
|
||||||
|
fontSize: "36upx",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
navigateBack(params) {
|
||||||
|
const pages = getCurrentPages();
|
||||||
|
if (this.sfBack) {
|
||||||
|
return this.$emit("triggerSfBack");
|
||||||
|
}
|
||||||
|
if (this.backToUrl.length > 0) {
|
||||||
|
if (this.isSwitchTab) {
|
||||||
|
uni.switchTab({
|
||||||
|
url: this.backToUrl,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log("navigateTo");
|
||||||
|
uni.navigateTo({
|
||||||
|
url: this.backToUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (pages.length === 1) {
|
||||||
|
if (typeof params === "number") {
|
||||||
|
history.go(-params);
|
||||||
|
} else {
|
||||||
|
history.back();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.navigateBack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
clickRight() {
|
||||||
|
this.$emit("clickRight");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.back {
|
||||||
|
font-size: 28upx;
|
||||||
|
color: #ffffff;
|
||||||
|
padding: 10rpx 32rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
}
|
||||||
|
.status_bar {
|
||||||
|
height: var(--status-bar-height);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
288
components/slider-verify/slider-verify.vue
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
<template>
|
||||||
|
<view class="slider-verify-box" v-if="isShow">
|
||||||
|
<view class="verifyBox">
|
||||||
|
<view class="slider-title">{{$t('authentication.title')}}</view>
|
||||||
|
<view class="slide-content">
|
||||||
|
<!-- <view class="slide-tips">拖动下方滑块完成拼图</view> -->
|
||||||
|
<view class="slider-pintu">
|
||||||
|
<u-icon name="reload" size="32" color="#fff" class="reload" @tap="refreshVerify"></u-icon>
|
||||||
|
<image id="pintuImg" :src="'/static/image/slider-verify/' + img + '.jpg'" class="pintu"></image>
|
||||||
|
|
||||||
|
<view class="pintukuai" :style="{ top: top + 'px', left: oldx + 'px' }">
|
||||||
|
<image :src="'/static/image/slider-verify/' + img + '.jpg'"
|
||||||
|
:style="{ top: '-' + top + 'px', left: '-' + left + 'px'}"></image>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="yinying" :style="{ top: top + 'px', left: left + 'px' }"></view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="slider-movearea" @touchend="endTouchMove">
|
||||||
|
<movable-area :animation="true"><movable-view :x="x" direction="horizontal"
|
||||||
|
@change="startMove"></movable-view></movable-area>
|
||||||
|
|
||||||
|
<view class="huadao">{{$t('authentication.content')}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- <view class="slider-btn-group">
|
||||||
|
<view class="slider-btn" @tap="closeSlider">关闭</view>
|
||||||
|
<view class="slider-btn slide-btn-refresh" @tap="refreshVerify">刷新</view>
|
||||||
|
</view> -->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'slider-verify',
|
||||||
|
props: {
|
||||||
|
isShow: true
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
x: 0, //初始距离
|
||||||
|
oldx: 0, //移动的距离
|
||||||
|
img: '1', //显示哪张图片
|
||||||
|
left: 0, //随机拼图的最终X轴距离
|
||||||
|
top: 0, //拼图的top距离
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
// 每次打开重新刷新拼图
|
||||||
|
isShow(newValue, oldValue) {
|
||||||
|
if (newValue) {
|
||||||
|
this.refreshVerify(); //刷新
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
var that = this;
|
||||||
|
that.refreshVerify();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
//刷新验证
|
||||||
|
refreshVerify() {
|
||||||
|
var gl = Math.random().toFixed(2);
|
||||||
|
this.left = uni.upx2px(560) * gl > uni.upx2px(280) ? uni.upx2px(280) : uni.upx2px(560) * gl + uni.upx2px(
|
||||||
|
150); //生成随机X轴最终距离
|
||||||
|
this.top = uni.upx2px(190) * gl; //生成随机Y轴初始距离
|
||||||
|
|
||||||
|
if (gl <= 0.2) {
|
||||||
|
this.img = 1;
|
||||||
|
}
|
||||||
|
if (gl > 0.2 && gl <= 0.4) {
|
||||||
|
this.img = 2;
|
||||||
|
}
|
||||||
|
if (gl > 0.4 && gl <= 0.6) {
|
||||||
|
this.img = 3;
|
||||||
|
}
|
||||||
|
if (gl > 0.6 && gl <= 0.8) {
|
||||||
|
this.img = 4;
|
||||||
|
}
|
||||||
|
if (gl > 0.8 && gl <= 1) {
|
||||||
|
this.img = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.resetMove(); //重置阴影位置
|
||||||
|
},
|
||||||
|
|
||||||
|
/* 滑动中 */
|
||||||
|
startMove(e) {
|
||||||
|
this.oldx = e.detail.x;
|
||||||
|
},
|
||||||
|
|
||||||
|
/* 滑动结束 */
|
||||||
|
endTouchMove() {
|
||||||
|
var that = this;
|
||||||
|
|
||||||
|
if (Math.abs(that.oldx - that.left) <= 5) {
|
||||||
|
that.$emit('touchSliderResult', true);
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '',
|
||||||
|
// duration: 2500,
|
||||||
|
// icon: 'none',
|
||||||
|
// success() {
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
} else {
|
||||||
|
that.refreshVerify();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* 重置阴影位置 */
|
||||||
|
resetMove() {
|
||||||
|
this.x = 1;
|
||||||
|
this.oldx = 1;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.x = 0;
|
||||||
|
this.oldx = 0;
|
||||||
|
}, 300);
|
||||||
|
},
|
||||||
|
|
||||||
|
// 关闭
|
||||||
|
closeSlider() {
|
||||||
|
this.$emit('touchSliderResult', false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.slider-verify-box {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.verifyBox {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
// width: 85%;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 20upx;
|
||||||
|
box-shadow: 0 0 5upx rgba(0, 0, 0, 1);
|
||||||
|
|
||||||
|
.slider-title {
|
||||||
|
font-size: 36upx;
|
||||||
|
text-align: center;
|
||||||
|
padding: 12rpx 0;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-content {
|
||||||
|
width: 560rpx;
|
||||||
|
padding: 0 1em;
|
||||||
|
margin: 0 auto;
|
||||||
|
|
||||||
|
.slide-tips {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: rgba(2, 20, 33, 0.45);
|
||||||
|
padding: 0.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-pintu {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.reload {
|
||||||
|
position: absolute;
|
||||||
|
right: 10rpx;
|
||||||
|
top: 10rpx;
|
||||||
|
z-index: 101;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pintu {
|
||||||
|
width: 560rpx;
|
||||||
|
height: 315rpx;
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pintukuai {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 120rpx;
|
||||||
|
height: 120rpx;
|
||||||
|
z-index: 100;
|
||||||
|
box-shadow: 0 0 5upx rgba(0, 0, 0, 0.3);
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
image {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 560rpx;
|
||||||
|
height: 315rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.yinying {
|
||||||
|
position: absolute;
|
||||||
|
width: 120rpx;
|
||||||
|
height: 120rpx;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-movearea {
|
||||||
|
position: relative;
|
||||||
|
height: 80upx;
|
||||||
|
width: 100%;
|
||||||
|
margin: 25upx auto;
|
||||||
|
|
||||||
|
movable-area {
|
||||||
|
height: 80upx;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
movable-view {
|
||||||
|
width: 80upx;
|
||||||
|
height: 80upx;
|
||||||
|
border-radius: 50%;
|
||||||
|
// @include slider-movearea-bg();
|
||||||
|
background-color: #37ABEF;
|
||||||
|
background-image: url(../../static/image/slider-verify/icon-button-normal.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: auto 30upx;
|
||||||
|
background-position: center;
|
||||||
|
position: relative;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.huadao {
|
||||||
|
width: 100%;
|
||||||
|
height: 66upx;
|
||||||
|
line-height: 66upx;
|
||||||
|
background: #eee;
|
||||||
|
box-shadow: inset 0 0 5upx #ccc;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: absolute;
|
||||||
|
top: 7rpx;
|
||||||
|
left: 0;
|
||||||
|
font-size: 28rpx;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider-btn-group {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border-top: 1px solid rgba(2, 20, 33, 0.15);
|
||||||
|
|
||||||
|
.slider-btn {
|
||||||
|
flex: 1;
|
||||||
|
height: 100rpx;
|
||||||
|
line-height: 100rpx;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 36rpx;
|
||||||
|
color: rgba(2, 20, 33, 0.85);
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-btn-refresh {
|
||||||
|
color: rgba(14, 107, 176, 1);
|
||||||
|
border-left: 1px solid rgba(2, 20, 33, 0.15);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
102
components/tabBar/tabBar.vue
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="status_bar">
|
||||||
|
<!-- 这里是状态栏 -->
|
||||||
|
</view>
|
||||||
|
<u-tabbar :value="current" @change="changeTab" :fixed="true" :placeholder="false" :safeAreaInsetBottom="true"
|
||||||
|
:border="false" activeColor="#FFC748" inactiveColor="#1D1D1D">
|
||||||
|
<u-tabbar-item v-for="(item,index) in tabBarList" :key="index" :text="item.text">
|
||||||
|
<image class="u-page__item__slot-icon" slot="inactive-icon" :src="item.iconPath" ></image>
|
||||||
|
<image class="u-page__item__slot-icon" slot="active-icon" :src="item.selectedIconPath"></image>
|
||||||
|
</u-tabbar-item>
|
||||||
|
</u-tabbar>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "tabBar",
|
||||||
|
props: {
|
||||||
|
currentPage: String
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
current: 0,
|
||||||
|
tabBarList: [{
|
||||||
|
pagePath: "pages/index/index",
|
||||||
|
iconPath: "../../static/image/tabbar/new_home.png",
|
||||||
|
selectedIconPath: "../../static/image/tabbar/new_home_check.png",
|
||||||
|
text: this.$t('tabbar.home'),
|
||||||
|
customIcon: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pagePath: "pages/mine/index",
|
||||||
|
iconPath: "../../static/image/tabbar/new_mine.png",
|
||||||
|
selectedIconPath: "../../static/image/tabbar/new_mine_check.png",
|
||||||
|
text: this.$t('tabbar.mine'),
|
||||||
|
customIcon: false,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeTab(e) {
|
||||||
|
let page = '/' + this.tabBarList[e].pagePath
|
||||||
|
console.log(page);
|
||||||
|
uni.switchTab({
|
||||||
|
url: page,
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res);
|
||||||
|
},
|
||||||
|
fail: (e) => {
|
||||||
|
console.log(e);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
//隐藏原生tabbar
|
||||||
|
uni.hideTabBar();
|
||||||
|
/* this.tabBarList = [{
|
||||||
|
pagePath: "pages/index/index",
|
||||||
|
iconPath: "../../static/image/tabbar/home.png",
|
||||||
|
selectedIconPath: "../../static/image/tabbar/home_check.png",
|
||||||
|
text: this.$t('tabbar.home'),
|
||||||
|
customIcon: false,
|
||||||
|
},{
|
||||||
|
pagePath: "pages/mine/index",
|
||||||
|
iconPath: "../../static/image/tabbar/mine.png",
|
||||||
|
selectedIconPath: "../../static/image/tabbar/mine_check.png",
|
||||||
|
text: this.$t('tabbar.mine'),
|
||||||
|
customIcon: false,
|
||||||
|
}]; */
|
||||||
|
// 当前选中的菜单
|
||||||
|
this.tabBarList.forEach((i, index) => {
|
||||||
|
if (i.pagePath == this.currentPage) {
|
||||||
|
this.current = index
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.status_bar {
|
||||||
|
height: var(--status-bar-height);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.u-page__item__slot-icon {
|
||||||
|
width: 76rpx;
|
||||||
|
height: 76rpx;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.u-tabbar /deep/ .u-tabbar--fixed {
|
||||||
|
width: 100%;
|
||||||
|
height: 88rpx;
|
||||||
|
padding: 20px 0;
|
||||||
|
background: #FFFFFF;
|
||||||
|
}
|
||||||
|
</style>
|
103
components/welcome/welcome.vue
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<u-transition :show="show" mode="fade-down">
|
||||||
|
<view>
|
||||||
|
<image src="@/static/image/home/line.png" mode="" class="line"></image>
|
||||||
|
<image src="@/static/image/home/flower.png" mode="" class="flower"></image>
|
||||||
|
</view>
|
||||||
|
<view class="text">正在跳转至首页</view>
|
||||||
|
</u-transition>
|
||||||
|
<u-transition :show="showTxt" mode="fade-down">
|
||||||
|
|
||||||
|
<view class="title-one">- - -验证成功欢迎来到- - -</view>
|
||||||
|
<image class="img" src="@/static/image/home/fonchain.png"></image>
|
||||||
|
<image class="logo" src="@/static/image/home/logo.png"></image>
|
||||||
|
</u-transition>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
show: false,
|
||||||
|
showTxt:false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.show = true;
|
||||||
|
}, 400);
|
||||||
|
setTimeout(() => {
|
||||||
|
this.showTxt = true;
|
||||||
|
}, 500);
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
}, 2000);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url('@/static/image/home/welcomeBg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
// border: 1px solid red;
|
||||||
|
}
|
||||||
|
.line {
|
||||||
|
width: 2rpx;
|
||||||
|
height: 164rpx;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 0;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
.flower {
|
||||||
|
width: 43rpx;
|
||||||
|
height: 43rpx;
|
||||||
|
position: absolute;
|
||||||
|
left: 47%;
|
||||||
|
top: 167rpx;
|
||||||
|
// transform: translateX(-50%);
|
||||||
|
animation: fadenum 1s infinite;
|
||||||
|
}
|
||||||
|
.text {
|
||||||
|
position: absolute;
|
||||||
|
left: 37%;
|
||||||
|
top: 227rpx;
|
||||||
|
|
||||||
|
}
|
||||||
|
.title-one{
|
||||||
|
color: #558BF2;
|
||||||
|
position: absolute;
|
||||||
|
font-size: 33upx;
|
||||||
|
left: 26%;
|
||||||
|
top: 600rpx;
|
||||||
|
}
|
||||||
|
.img{
|
||||||
|
width: 500upx;
|
||||||
|
height: 80upx;
|
||||||
|
position: absolute;
|
||||||
|
left: 16%;
|
||||||
|
top: 650rpx;
|
||||||
|
}
|
||||||
|
.logo{
|
||||||
|
width: 200upx;
|
||||||
|
height: 55upx;
|
||||||
|
position: absolute;
|
||||||
|
left: 36%;
|
||||||
|
bottom: 20rpx;
|
||||||
|
}
|
||||||
|
@keyframes fadenum {
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
67
http/airdrop.js
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import http from './interface'
|
||||||
|
|
||||||
|
// 个人空投列表
|
||||||
|
export const collectionList = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/push/msgList',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 个人领取空投
|
||||||
|
export const getCollection = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/push/getCollection',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 个人具体空投展示
|
||||||
|
export const collectionSepcific = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/push/collectionSepcific',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 个人领取空投2
|
||||||
|
export const getCollectionStepTwo = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/payment/give',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 个人未点击空投和公告数量
|
||||||
|
export const checkPoint = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/push/unreadNum',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 个人阅读公告
|
||||||
|
export const readMsg = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/push/announcementSepcific',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 直接领取
|
||||||
|
export const directGet = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/collections/redirect/receive',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
collectionList,
|
||||||
|
getCollection,
|
||||||
|
collectionSepcific,
|
||||||
|
getCollectionStepTwo,
|
||||||
|
readMsg,
|
||||||
|
checkPoint,
|
||||||
|
directGet
|
||||||
|
}
|
13
http/index.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import http from './interface'
|
||||||
|
|
||||||
|
import login from './login'
|
||||||
|
import mine from './mine'
|
||||||
|
import series from './series'
|
||||||
|
import airdrop from './airdrop'
|
||||||
|
export default {
|
||||||
|
login,
|
||||||
|
mine,
|
||||||
|
series,
|
||||||
|
airdrop
|
||||||
|
}
|
||||||
|
|
176
http/interface.js
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
/**
|
||||||
|
* 通用uni-app网络请求
|
||||||
|
* 基于 Promise 对象实现更简单的 request 使用方式,支持请求和响应拦截
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
config: {
|
||||||
|
baseUrl: "https://shop.szjixun.cn",
|
||||||
|
// baseUrl: "http://114.218.158.24:9022",
|
||||||
|
header: {
|
||||||
|
"Content-Type": "application/json;charset=UTF-8",
|
||||||
|
// 'Content-Type':'application/x-www-form-urlencoded'
|
||||||
|
"Accept-Language":
|
||||||
|
navigator.language === "en"
|
||||||
|
? "en"
|
||||||
|
: navigator.language === "zh-Hans"
|
||||||
|
? "zh-CN"
|
||||||
|
: navigator.language === "zh-Hant"
|
||||||
|
? "zh-TW"
|
||||||
|
: "zh-CN",
|
||||||
|
},
|
||||||
|
data: {},
|
||||||
|
method: "GET",
|
||||||
|
dataType: "json" /* 如设为json,会对返回的数据做一次 JSON.parse */,
|
||||||
|
responseType: "text",
|
||||||
|
success () { },
|
||||||
|
fail () { },
|
||||||
|
complete () { },
|
||||||
|
},
|
||||||
|
interceptor: {
|
||||||
|
request: null,
|
||||||
|
response: null,
|
||||||
|
},
|
||||||
|
request (options) {
|
||||||
|
if (!options) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options.baseUrl = options.baseUrl || this.config.baseUrl;
|
||||||
|
options.dataType = options.dataType || this.config.dataType;
|
||||||
|
options.url = options.baseUrl + options.url;
|
||||||
|
options.data = options.data || {};
|
||||||
|
options.method = options.method || this.config.method;
|
||||||
|
//TODO 加密数据
|
||||||
|
options.header = options.header || this.config.header;
|
||||||
|
//TODO 数据签名
|
||||||
|
let _token = {
|
||||||
|
Authorization: uni.getStorageSync("mall_token") || "undefined",
|
||||||
|
};
|
||||||
|
options.header = Object.assign({}, options.header, _token);
|
||||||
|
console.log(navigator.language, 2222);
|
||||||
|
/*
|
||||||
|
|
||||||
|
_sign = {'sign': sign(JSON.stringify(options.data))}
|
||||||
|
options.header = Object.assign({}, options.header, _token,_sign)
|
||||||
|
*/
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let _config = null;
|
||||||
|
|
||||||
|
options.complete = (response) => {
|
||||||
|
let statusCode = response.statusCode;
|
||||||
|
response.config = _config;
|
||||||
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
if (statusCode === 200) {
|
||||||
|
// console.log("【" + _config.requestId + "】 结果:" + JSON.stringify(response.data))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.interceptor.response) {
|
||||||
|
let newResponse = this.interceptor.response(response);
|
||||||
|
if (newResponse) {
|
||||||
|
response = newResponse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (response.data.status === 401) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/login",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// 统一的响应日志记录
|
||||||
|
_reslog(response);
|
||||||
|
if (statusCode === 200) {
|
||||||
|
//成功
|
||||||
|
resolve(response.data);
|
||||||
|
} else {
|
||||||
|
reject(response);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
_config = Object.assign({}, this.config, options);
|
||||||
|
_config.requestId = new Date().getTime();
|
||||||
|
|
||||||
|
if (this.interceptor.request) {
|
||||||
|
this.interceptor.request(_config);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 统一的请求日志记录
|
||||||
|
_reqlog(_config);
|
||||||
|
|
||||||
|
uni.request(_config);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
get (url, data, options) {
|
||||||
|
if (!options) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options.url = url;
|
||||||
|
options.data = data;
|
||||||
|
options.method = "GET";
|
||||||
|
return this.request(options);
|
||||||
|
},
|
||||||
|
post (url, data, options, header) {
|
||||||
|
if (!options) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options.url = url;
|
||||||
|
options.data = data;
|
||||||
|
options.header = header;
|
||||||
|
options.method = "POST";
|
||||||
|
return this.request(options);
|
||||||
|
},
|
||||||
|
put (url, data, options) {
|
||||||
|
if (!options) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options.url = url;
|
||||||
|
options.data = data;
|
||||||
|
options.method = "PUT";
|
||||||
|
return this.request(options);
|
||||||
|
},
|
||||||
|
delete (url, data, options) {
|
||||||
|
if (!options) {
|
||||||
|
options = {};
|
||||||
|
}
|
||||||
|
options.url = url;
|
||||||
|
options.data = data;
|
||||||
|
options.method = "DELETE";
|
||||||
|
return this.request(options);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求接口日志记录
|
||||||
|
*/
|
||||||
|
function _reqlog (req) {
|
||||||
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
// console.log("【" + req.requestId + "】 地址:" + req.url)
|
||||||
|
if (req.data) {
|
||||||
|
// console.log("【" + req.requestId + "】 请求参数:" + JSON.stringify(req.data))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//TODO 调接口异步写入日志数据库
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应接口日志记录
|
||||||
|
*/
|
||||||
|
function _reslog (res) {
|
||||||
|
let _statusCode = res.statusCode;
|
||||||
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
// console.log("【" + res.config.requestId + "】 地址:" + res.config.url)
|
||||||
|
if (res.config.data) {
|
||||||
|
// console.log("【" + res.config.requestId + "】 请求参数:" + JSON.stringify(res.config.data))
|
||||||
|
}
|
||||||
|
// console.log("【" + res.config.requestId + "】 响应结果:" + JSON.stringify(res))
|
||||||
|
}
|
||||||
|
//TODO 除了接口服务错误外,其他日志调接口异步写入日志数据库
|
||||||
|
switch (_statusCode) {
|
||||||
|
case 200:
|
||||||
|
break;
|
||||||
|
case 401:
|
||||||
|
break;
|
||||||
|
case 404:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
51
http/login.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import http from './interface'
|
||||||
|
|
||||||
|
// 登录
|
||||||
|
export const login = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/login',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证码
|
||||||
|
export const sendCode = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/login/send',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 再次发送新号码验证码
|
||||||
|
export const sendNewCode = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/phone/send/token',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 确认新手机号
|
||||||
|
export const confirmNew = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/phone/update',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export const getOpenId = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/openid',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
login,
|
||||||
|
sendCode,
|
||||||
|
sendNewCode,
|
||||||
|
confirmNew,
|
||||||
|
getOpenId
|
||||||
|
|
||||||
|
}
|
109
http/mine.js
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
import http from './interface'
|
||||||
|
|
||||||
|
// 更改信息
|
||||||
|
export const update = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/my/update',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取信息
|
||||||
|
export const getInfo = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/my/info',
|
||||||
|
method: 'GET',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送老手机号验证码
|
||||||
|
export const mineCode = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/send',
|
||||||
|
method: 'GET',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 验证老手机号验证码
|
||||||
|
export const verifyCode = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/phone/send',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 验证操作密码
|
||||||
|
export const verifyPwd = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/user/my/pwd/check',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 反馈
|
||||||
|
export const feedBack = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/feedback/create',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 我的艺术品列表
|
||||||
|
export const paymentList= (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/payment/list',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 艺术品详情
|
||||||
|
export const paymentDetail= (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/payment/detail',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 申请快递
|
||||||
|
export const paymentApproval= (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/payment/material/approval',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取证书
|
||||||
|
export const certDetail= (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: '/mall/cert/detail',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const logout =(data) => {
|
||||||
|
return http.request({
|
||||||
|
url:'/mall/user/my/delete',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
export default {
|
||||||
|
update,
|
||||||
|
getInfo,
|
||||||
|
mineCode,
|
||||||
|
verifyCode,
|
||||||
|
verifyPwd,
|
||||||
|
feedBack,
|
||||||
|
paymentList,
|
||||||
|
paymentDetail,
|
||||||
|
paymentApproval,
|
||||||
|
certDetail,
|
||||||
|
logout
|
||||||
|
}
|
198
http/readme.md
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
**插件使用说明**
|
||||||
|
|
||||||
|
- 基于 Promise 对象实现更简单的 request 使用方式,支持请求和响应拦截
|
||||||
|
- 下载后把 vmeitime-http 文件夹 copy 到项目 common/ 目录下
|
||||||
|
|
||||||
|
## 1. 配置
|
||||||
|
|
||||||
|
### 1.1 全局配置修改(修改vmeitime-http/interface.js中config和interceptor)
|
||||||
|
``` javascript
|
||||||
|
config: {
|
||||||
|
baseUrl: "https://api.com/api/",
|
||||||
|
header: {
|
||||||
|
'Content-Type':'application/json;charset=UTF-8',
|
||||||
|
'Content-Type':'application/x-www-form-urlencoded'
|
||||||
|
},
|
||||||
|
dataType: "json",
|
||||||
|
responseType: "text"
|
||||||
|
},
|
||||||
|
interceptor: {
|
||||||
|
request: null,
|
||||||
|
response: null
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.2 具体接口调用时修改(在vmeitime-http/index.js文件中具体业务接口中配置)
|
||||||
|
``` javascript
|
||||||
|
//设置baseUrl
|
||||||
|
http.config.baseUrl = "http://localhost:8080/api/"
|
||||||
|
//设置请求前拦截器
|
||||||
|
http.interceptor.request = (config) => {
|
||||||
|
//添加通用参数
|
||||||
|
config.header = {
|
||||||
|
"token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//设置请求结束后拦截器
|
||||||
|
http.interceptor.response = (response) => {
|
||||||
|
//判断返回状态 执行相应操作
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 2. 使用
|
||||||
|
|
||||||
|
### 2.1 全局使用(在main.js注册)
|
||||||
|
|
||||||
|
``` // main.js
|
||||||
|
import api from '@/common/vmeitime-http/'
|
||||||
|
|
||||||
|
// 全局挂载后使用
|
||||||
|
Vue.prototype.$api = api
|
||||||
|
```
|
||||||
|
|
||||||
|
``` // pages/index/index.vue
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view class="content">
|
||||||
|
|
||||||
|
<view class="uni-padding-wrap uni-common-mt">
|
||||||
|
<view class="uni-textarea uni-common-mt">
|
||||||
|
<textarea :value="res"></textarea>
|
||||||
|
</view>
|
||||||
|
<view class="uni-btn-v uni-common-mt">
|
||||||
|
<button type="primary" @click="sendRequest" :loading="loading">发起请求</button>
|
||||||
|
<button type="default" @click="sendRequest1" :loading="loading">发起请求(async/await)</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
res: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(option) {
|
||||||
|
//this.sendRequest();
|
||||||
|
//this.sendRequest1();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 方式一
|
||||||
|
sendRequest: function() {
|
||||||
|
this.loading = true
|
||||||
|
this.$api.test({noncestr: Date.now()}).then((res)=>{
|
||||||
|
this.loading = false;
|
||||||
|
console.log('request success', res)
|
||||||
|
uni.showToast({
|
||||||
|
title: '请求成功',
|
||||||
|
icon: 'success',
|
||||||
|
mask: true
|
||||||
|
});
|
||||||
|
this.res = '请求结果 : ' + JSON.stringify(res);
|
||||||
|
}).catch((err)=>{
|
||||||
|
this.loading = false;
|
||||||
|
console.log('request fail', err);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
//方式二 https://segmentfault.com/a/1190000013292562?utm_source=channel-newest
|
||||||
|
async sendRequest1() {
|
||||||
|
this.loading = true
|
||||||
|
let res = await this.$api.test({noncestr: Date.now()});
|
||||||
|
this.loading = false;
|
||||||
|
this.res = '请求结果 : ' + JSON.stringify(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 2.2 局部使用(局部使用,不需要在 main.js 中注册)
|
||||||
|
|
||||||
|
``` // pages/index/index.vue
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<view class="content">
|
||||||
|
|
||||||
|
<view class="uni-padding-wrap uni-common-mt">
|
||||||
|
<view class="uni-textarea uni-common-mt">
|
||||||
|
<textarea :value="res"></textarea>
|
||||||
|
</view>
|
||||||
|
<view class="uni-btn-v uni-common-mt">
|
||||||
|
<button type="primary" @click="sendRequest" :loading="loading">发起请求</button>
|
||||||
|
<button type="default" @click="sendRequest1" :loading="loading">发起请求(async/await)</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import api from '@/common/vmeitime-http/'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
res: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(option) {
|
||||||
|
//this.sendRequest();
|
||||||
|
//this.sendRequest1();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 方式一
|
||||||
|
sendRequest: function() {
|
||||||
|
this.loading = true
|
||||||
|
api.test({noncestr: Date.now()}).then((res)=>{
|
||||||
|
this.loading = false;
|
||||||
|
console.log('request success', res)
|
||||||
|
uni.showToast({
|
||||||
|
title: '请求成功',
|
||||||
|
icon: 'success',
|
||||||
|
mask: true
|
||||||
|
});
|
||||||
|
this.res = '请求结果 : ' + JSON.stringify(res);
|
||||||
|
}).catch((err)=>{
|
||||||
|
this.loading = false;
|
||||||
|
console.log('request fail', err);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
//方式二
|
||||||
|
async sendRequest1() {
|
||||||
|
this.loading = true
|
||||||
|
let res = await this.api.test({noncestr: Date.now()});
|
||||||
|
this.loading = false;
|
||||||
|
this.res = '请求结果 : ' + JSON.stringify(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 3. 接口数据加密、接口签名核验
|
||||||
|
|
||||||
|
在vmeitime-http/interface.js文件中的request(Object)方法中补充修改相应的代码
|
||||||
|
|
||||||
|
## 4. 接口请求/响应日志记录
|
||||||
|
|
||||||
|
在vmeitime-http/interface.js文件中的request(Object)方法中补充修改相应的代码
|
||||||
|
|
||||||
|
## 5. 业务相关接口编写
|
||||||
|
|
||||||
|
在vmeitime-http/index.js文件中的编写具体业务相关的接口,参考test()方法
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
118
http/series.js
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
import http from "./interface";
|
||||||
|
|
||||||
|
// 系列列表
|
||||||
|
export const list = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/series/series-list",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 藏品列表
|
||||||
|
export const collectionsList = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/collections/list",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 藏品详情
|
||||||
|
export const collectionsInfo = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/collections/detail",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 购买
|
||||||
|
export const buy = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/payment/create",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 生成二维码
|
||||||
|
export const createQrcode = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/payment/offline/create",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 获取二维码信息
|
||||||
|
export const getQrcodeInfo = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/payment/info",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 确认支付
|
||||||
|
export const confirmPay = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/payment/seller/sure",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 取消支付
|
||||||
|
export const cancelPay = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/payment/seller/cancel",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//判断是否领取该藏品
|
||||||
|
export const userHaveDropNo = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/push/userHaveDropNo",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const collectionsDetail = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/collections/receive/info",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const collectionsReceive = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/collections/receive",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const collectionsBuy = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/collections/wx/buy",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export const getSeriesData = (data) => {
|
||||||
|
return http.request({
|
||||||
|
url: "/mall/series/series-detail",
|
||||||
|
method: "POST",
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export default {
|
||||||
|
list,
|
||||||
|
collectionsList,
|
||||||
|
collectionsInfo,
|
||||||
|
buy,
|
||||||
|
createQrcode,
|
||||||
|
getQrcodeInfo,
|
||||||
|
confirmPay,
|
||||||
|
cancelPay,
|
||||||
|
userHaveDropNo,
|
||||||
|
collectionsDetail,
|
||||||
|
collectionsReceive,
|
||||||
|
collectionsBuy,
|
||||||
|
getSeriesData
|
||||||
|
};
|
20
index.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<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' : '') + '" />')
|
||||||
|
</script>
|
||||||
|
<title></title>
|
||||||
|
<!--preload-links-->
|
||||||
|
<!--app-context-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"><!--app-html--></div>
|
||||||
|
<script type="module" src="/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
190
locale/en.json
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
"app.name": "fontree",
|
||||||
|
"tabbar.home": "Home",
|
||||||
|
"tabbar.mine": "Mine",
|
||||||
|
"index.title": "Home",
|
||||||
|
"locale.auto": "System",
|
||||||
|
"locale.en": "English",
|
||||||
|
"locale.zh-hans": "简体中文",
|
||||||
|
"locale.zh-hant": "繁体中文",
|
||||||
|
"api-header": "en",
|
||||||
|
"index.language-change-confirm": "Applying this setting will restart the app",
|
||||||
|
"navbar.back": "Back",
|
||||||
|
"login.title": "Login Registration",
|
||||||
|
"login.input": "Enter your phone number",
|
||||||
|
"login.agree": "Have read and agreed",
|
||||||
|
"login.service": "《Service Agreements》",
|
||||||
|
"login.privacy": "《Privacy Policy》",
|
||||||
|
"login.registration": "《Registration Protocol》",
|
||||||
|
"login.btn": "Send Verification Code",
|
||||||
|
"login.mess": "Please read and tick the agreement",
|
||||||
|
"authentication.title": "Security Verification",
|
||||||
|
"authentication.content": "Drag the slider to fill the puzzle",
|
||||||
|
"sendCode.title": "Enter Verification Code",
|
||||||
|
"sendCode.send": "Already sent to",
|
||||||
|
"sendCode.login": "Login",
|
||||||
|
"sendCode.update": "Update",
|
||||||
|
"sendCode.loading": "Getting verification code",
|
||||||
|
"sendCode.toast": "Send after the countdown",
|
||||||
|
"login.success": "Login successful",
|
||||||
|
"login.error": "Login failed",
|
||||||
|
"sendCode.updateSuccess": "Update successfully,please login again",
|
||||||
|
"sendCode.updateError": "Update failed",
|
||||||
|
"sendCode": "Verification code has been sent",
|
||||||
|
"welcome.toHome": "Jumping to Home",
|
||||||
|
"welcome.title": "Verification success Welcome to",
|
||||||
|
"collection.info": "Colletion Information",
|
||||||
|
"collection.buy": "Buy",
|
||||||
|
"collection.name": "Collection Name",
|
||||||
|
"collection.type": "Collection Type",
|
||||||
|
"collection.size": "Collection Size ",
|
||||||
|
"collection.specs": "Collection Specification",
|
||||||
|
"collection.address": "Collection Origin",
|
||||||
|
"collection.intro": "Collection Introduction",
|
||||||
|
"collection.detail": "Collection Details",
|
||||||
|
"collection.sell": "Collection Selling Point",
|
||||||
|
"collection.sellDec": "Collection Details",
|
||||||
|
"collection.company": "Technology Introduction ",
|
||||||
|
"collection.copyight": "Copyright Notice",
|
||||||
|
"collection.blockchain": "Blockchain Description",
|
||||||
|
"buyVerfy.title": "Real name verification is required to purchase goods",
|
||||||
|
"buyVerfy.username": "Real Name",
|
||||||
|
"buyVerfy.idNum": "ID Number",
|
||||||
|
"buyVerfy.suss": "Authenticates effectively",
|
||||||
|
"buyVerfy.error": "Invalid authentication",
|
||||||
|
"buyVerfy.done": "Complete",
|
||||||
|
"buyVerfy.noGift": "Sell Out",
|
||||||
|
"buyVerfy.cancel": "Cancel",
|
||||||
|
"login.pls": "Please login first",
|
||||||
|
"alipay.payment": "Alipay Payment",
|
||||||
|
"comfirm.num1": "",
|
||||||
|
"comfirm.num2": "piece",
|
||||||
|
"comfirm.total": "Total",
|
||||||
|
"comfirm.pay": "Confirm Payment",
|
||||||
|
"comfirm.copy": "Copy order verification code",
|
||||||
|
"payment.back": "Back to home",
|
||||||
|
"payment.cancel": "Cancel Payment",
|
||||||
|
"payment.check": "View Details",
|
||||||
|
"payment.success": "Payment Successful",
|
||||||
|
"payment.cancelSuccess": "Payment Cancelled",
|
||||||
|
"payment.failed": "Payment Failed",
|
||||||
|
"payInfo.title": "Check order",
|
||||||
|
"payInfo.subtxt1": "Verifying the user",
|
||||||
|
"payInfo.subtxt2": "order information",
|
||||||
|
"payInfo.confirmDate": "verification date",
|
||||||
|
"payInfo.buyerName": "Buyer Nickname",
|
||||||
|
"payInfo.artworkName": "product name",
|
||||||
|
"payInfo.orderPrice": "order amount",
|
||||||
|
"payInfo.payTypeName": "payment method",
|
||||||
|
"payInfo.payImages": "payment voucher",
|
||||||
|
"payInfo.typePrice": "enter payment method",
|
||||||
|
"payInfo.salesperson": "Please contact the salesperson to verify the consumption information offline",
|
||||||
|
"payInfo.waitConfirm": "Wait for the salesperson to confirm",
|
||||||
|
"payInfo.copyCode": "Enter order verification code",
|
||||||
|
"mine.language": "language",
|
||||||
|
"mine.message": "news",
|
||||||
|
"mine.setting": "seting",
|
||||||
|
"mine.scan": "Scanning code",
|
||||||
|
"mine.blockchain": "blockchain",
|
||||||
|
"mine.artwork": "My Collection",
|
||||||
|
"mine.noData": "No collection",
|
||||||
|
"mine.updateLang": "Change Language",
|
||||||
|
"updateLang.done": "Used",
|
||||||
|
"updateLang.change": "Change",
|
||||||
|
"password.title": "Unlock more functions with operation password",
|
||||||
|
"password.set": "set operation password ",
|
||||||
|
"password.name": "user",
|
||||||
|
"password.input": "Enter the password",
|
||||||
|
"password.com": "Confirm the password",
|
||||||
|
"password.get": "Use the password",
|
||||||
|
"password.step": "Next",
|
||||||
|
"password": "Operation Password",
|
||||||
|
"password.vername": "Information on user",
|
||||||
|
"password.username": "'s identity being verified",
|
||||||
|
"comfrim": "Confirm",
|
||||||
|
"password.inputPass": "Please enter the password",
|
||||||
|
"password.messError": "Please confirm two passwords are consistent",
|
||||||
|
"password.setSucc": "Set successfully",
|
||||||
|
"password.setError": "Set failed",
|
||||||
|
"password.verSucc": "Validation successful",
|
||||||
|
"password.verError": "Validation failed",
|
||||||
|
"avatar.def": "Restore default avatar",
|
||||||
|
"avatar.update": "Change the avator",
|
||||||
|
"userInfo.name": "Nickname",
|
||||||
|
"userInfo.updateName": "Change",
|
||||||
|
"userInfo.createTime": "Registration Date",
|
||||||
|
"userInfo.idNum": "ID Number",
|
||||||
|
"userInfo.phone": "Contact Number",
|
||||||
|
"phone.update": "Change",
|
||||||
|
"phone.verInfo": "After certification you can change binding",
|
||||||
|
"user.realName": "Real Name",
|
||||||
|
"user.verfy": "Real Name Authentication",
|
||||||
|
"user.username": "Name",
|
||||||
|
"user.verDone": "Authenticated",
|
||||||
|
"user.idNum": "ID card",
|
||||||
|
"account.logout": "Account Cancellation",
|
||||||
|
"account.signOut": "Log Out",
|
||||||
|
"set.name": "Set Nickname",
|
||||||
|
"set.input": "Please enter content",
|
||||||
|
"problem.feedback": "Problem Feedback",
|
||||||
|
"logout.info": "Are you sure you want to cancel the account?",
|
||||||
|
"logout.btn": "deregister",
|
||||||
|
"signout.info": "Are you sure to log out?",
|
||||||
|
"realname.conduct": "Carry On The Certification",
|
||||||
|
"save.update": "Save Change",
|
||||||
|
"airdrop": "Airdrop",
|
||||||
|
"announcement": "Announcement",
|
||||||
|
"read": "Read",
|
||||||
|
"to.accept": "Accept",
|
||||||
|
"close": "Close",
|
||||||
|
"basic.info": "Basic Information",
|
||||||
|
"series.name": "Series Name",
|
||||||
|
"series.issuer": "Issuer",
|
||||||
|
"series.time": "Transaction Date",
|
||||||
|
"series.price": "Transaction Price",
|
||||||
|
"series.hash": "HASH",
|
||||||
|
"series.No": "Number",
|
||||||
|
"phone.old": "Original phone number",
|
||||||
|
"phone.code": "Verification code",
|
||||||
|
"update.phone.title": "Change of mobile number requires verification of original mobile number",
|
||||||
|
"phone.new": "New phone number",
|
||||||
|
"input.phoneCode": "Please fill in the verification code and new phone number",
|
||||||
|
"apply.logistics": "Apply For Logistics",
|
||||||
|
"logistics.info": "Logistics Information ",
|
||||||
|
"telephone": "Enquiries",
|
||||||
|
"consignee.name": "Consignee Name",
|
||||||
|
"consignee.address": "Consignee Address",
|
||||||
|
"consignee.phone": "Contact Number",
|
||||||
|
"release.info": "Release Information",
|
||||||
|
"release.time": "Release Date",
|
||||||
|
"brand.side": "Brand Side",
|
||||||
|
"circulation.info": "Circulation Information",
|
||||||
|
"possessor": "Holder",
|
||||||
|
"collection.status": "Collection Status",
|
||||||
|
"in.library": "In our warehouse",
|
||||||
|
"been.applied": "Logistics has been applied",
|
||||||
|
"circulation.type": "Circulation Type",
|
||||||
|
"on.line": "On line",
|
||||||
|
"circulation.time": "Circulation Time",
|
||||||
|
"transaction.hash": "Transaction Hash",
|
||||||
|
"apply.tips": "Please consider carefully once the aapplication is irrevocable!",
|
||||||
|
"input.address": "Please Fill In The Address",
|
||||||
|
"input.pla": "Please enter",
|
||||||
|
"apply.btn": "Apply",
|
||||||
|
"error.consignee.name": "Please enter the name of the consignee",
|
||||||
|
"error.consignee.phone": "Please enter the phone number ",
|
||||||
|
"error.consignee.address": "Please enter the consignee address",
|
||||||
|
"apply.succes": "Successful aapplication",
|
||||||
|
"apply.error": "Application failed ",
|
||||||
|
"load.failed": "Load failed",
|
||||||
|
"update.succes": "Modified Successfully",
|
||||||
|
"code.actPass": "Please enter the operation password and verification code",
|
||||||
|
"code.start": "Get the code",
|
||||||
|
"code.change": "X s to reacquire",
|
||||||
|
"code.end": "Retrieve",
|
||||||
|
"error.phone": "The mobile phone number entered is incorrect",
|
||||||
|
"pick.up": "Pick up",
|
||||||
|
"letter.you": "A Letter To You",
|
||||||
|
"letter.all": "A Letter To All Staff"
|
||||||
|
|
||||||
|
}
|
36
locale/uni-app.en.json
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"uni.app.quit": "再按一次退出应用",
|
||||||
|
"uni.async.error": "连接服务器超时,点击屏幕重试",
|
||||||
|
"uni.showActionSheet.cancel": "取消",
|
||||||
|
"uni.showToast.unpaired": "请注意 showToast 与 hideToast 必须配对使用",
|
||||||
|
"uni.showLoading.unpaired": "请注意 showLoading 与 hideLoading 必须配对使用",
|
||||||
|
"uni.showModal.cancel": "取消",
|
||||||
|
"uni.showModal.confirm": "确定",
|
||||||
|
"uni.chooseImage.cancel": "取消",
|
||||||
|
"uni.chooseImage.sourceType.album": "从相册选择",
|
||||||
|
"uni.chooseImage.sourceType.camera": "拍摄",
|
||||||
|
"uni.chooseVideo.cancel": "取消",
|
||||||
|
"uni.chooseVideo.sourceType.album": "从相册选择",
|
||||||
|
"uni.chooseVideo.sourceType.camera": "拍摄",
|
||||||
|
"uni.previewImage.cancel": "取消",
|
||||||
|
"uni.previewImage.button.save": "保存图像",
|
||||||
|
"uni.previewImage.save.success": "保存图像到相册成功",
|
||||||
|
"uni.previewImage.save.fail": "保存图像到相册失败",
|
||||||
|
"uni.setClipboardData.success": "内容已复制",
|
||||||
|
"uni.scanCode.title": "扫码",
|
||||||
|
"uni.scanCode.album": "相册",
|
||||||
|
"uni.scanCode.fail": "识别失败",
|
||||||
|
"uni.scanCode.flash.on": "轻触照亮",
|
||||||
|
"uni.scanCode.flash.off": "轻触关闭",
|
||||||
|
"uni.startSoterAuthentication.authContent": "指纹识别中...",
|
||||||
|
"uni.picker.done": "完成",
|
||||||
|
"uni.picker.cancel": "取消",
|
||||||
|
"uni.video.danmu": "弹幕",
|
||||||
|
"uni.video.volume": "音量",
|
||||||
|
"uni.button.feedback.title": "问题反馈",
|
||||||
|
"uni.button.feedback.send": "发送"
|
||||||
|
},
|
||||||
|
"ios": {},
|
||||||
|
"android": {}
|
||||||
|
}
|
36
locale/uni-app.zh-Hans.json
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"uni.app.quit": "再按一次退出应用",
|
||||||
|
"uni.async.error": "连接服务器超时,点击屏幕重试",
|
||||||
|
"uni.showActionSheet.cancel": "取消",
|
||||||
|
"uni.showToast.unpaired": "请注意 showToast 与 hideToast 必须配对使用",
|
||||||
|
"uni.showLoading.unpaired": "请注意 showLoading 与 hideLoading 必须配对使用",
|
||||||
|
"uni.showModal.cancel": "取消",
|
||||||
|
"uni.showModal.confirm": "确定",
|
||||||
|
"uni.chooseImage.cancel": "取消",
|
||||||
|
"uni.chooseImage.sourceType.album": "从相册选择",
|
||||||
|
"uni.chooseImage.sourceType.camera": "拍摄",
|
||||||
|
"uni.chooseVideo.cancel": "取消",
|
||||||
|
"uni.chooseVideo.sourceType.album": "从相册选择",
|
||||||
|
"uni.chooseVideo.sourceType.camera": "拍摄",
|
||||||
|
"uni.previewImage.cancel": "取消",
|
||||||
|
"uni.previewImage.button.save": "保存图像",
|
||||||
|
"uni.previewImage.save.success": "保存图像到相册成功",
|
||||||
|
"uni.previewImage.save.fail": "保存图像到相册失败",
|
||||||
|
"uni.setClipboardData.success": "内容已复制",
|
||||||
|
"uni.scanCode.title": "扫码",
|
||||||
|
"uni.scanCode.album": "相册",
|
||||||
|
"uni.scanCode.fail": "识别失败",
|
||||||
|
"uni.scanCode.flash.on": "轻触照亮",
|
||||||
|
"uni.scanCode.flash.off": "轻触关闭",
|
||||||
|
"uni.startSoterAuthentication.authContent": "指纹识别中...",
|
||||||
|
"uni.picker.done": "完成",
|
||||||
|
"uni.picker.cancel": "取消",
|
||||||
|
"uni.video.danmu": "弹幕",
|
||||||
|
"uni.video.volume": "音量",
|
||||||
|
"uni.button.feedback.title": "问题反馈",
|
||||||
|
"uni.button.feedback.send": "发送"
|
||||||
|
},
|
||||||
|
"ios": {},
|
||||||
|
"android": {}
|
||||||
|
}
|
36
locale/uni-app.zh-Hant.json
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"uni.app.quit": "再按一次退出应用",
|
||||||
|
"uni.async.error": "连接服务器超时,点击屏幕重试",
|
||||||
|
"uni.showActionSheet.cancel": "取消",
|
||||||
|
"uni.showToast.unpaired": "请注意 showToast 与 hideToast 必须配对使用",
|
||||||
|
"uni.showLoading.unpaired": "请注意 showLoading 与 hideLoading 必须配对使用",
|
||||||
|
"uni.showModal.cancel": "取消",
|
||||||
|
"uni.showModal.confirm": "确定",
|
||||||
|
"uni.chooseImage.cancel": "取消",
|
||||||
|
"uni.chooseImage.sourceType.album": "从相册选择",
|
||||||
|
"uni.chooseImage.sourceType.camera": "拍摄",
|
||||||
|
"uni.chooseVideo.cancel": "取消",
|
||||||
|
"uni.chooseVideo.sourceType.album": "从相册选择",
|
||||||
|
"uni.chooseVideo.sourceType.camera": "拍摄",
|
||||||
|
"uni.previewImage.cancel": "取消",
|
||||||
|
"uni.previewImage.button.save": "保存图像",
|
||||||
|
"uni.previewImage.save.success": "保存图像到相册成功",
|
||||||
|
"uni.previewImage.save.fail": "保存图像到相册失败",
|
||||||
|
"uni.setClipboardData.success": "内容已复制",
|
||||||
|
"uni.scanCode.title": "扫码",
|
||||||
|
"uni.scanCode.album": "相册",
|
||||||
|
"uni.scanCode.fail": "识别失败",
|
||||||
|
"uni.scanCode.flash.on": "轻触照亮",
|
||||||
|
"uni.scanCode.flash.off": "轻触关闭",
|
||||||
|
"uni.startSoterAuthentication.authContent": "指纹识别中...",
|
||||||
|
"uni.picker.done": "完成",
|
||||||
|
"uni.picker.cancel": "取消",
|
||||||
|
"uni.video.danmu": "弹幕",
|
||||||
|
"uni.video.volume": "音量",
|
||||||
|
"uni.button.feedback.title": "问题反馈",
|
||||||
|
"uni.button.feedback.send": "发送"
|
||||||
|
},
|
||||||
|
"ios": {},
|
||||||
|
"android": {}
|
||||||
|
}
|
193
locale/zh-Hans.json
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
{
|
||||||
|
"app.name": "丰链艺树",
|
||||||
|
"tabbar.home": "首页",
|
||||||
|
"tabbar.mine": "我的",
|
||||||
|
"index.title": "首页",
|
||||||
|
"locale.auto": "系统",
|
||||||
|
"locale.en": "English",
|
||||||
|
"locale.zh-hans": "简体中文",
|
||||||
|
"locale.zh-hant": "繁体中文",
|
||||||
|
"api-header": "zh-CN",
|
||||||
|
"index.language-change-confirm": "应用此设置将重启App",
|
||||||
|
"navbar.back": "返回",
|
||||||
|
"login.title": "登录/注册",
|
||||||
|
"login.input": "在此输入手机号",
|
||||||
|
"login.agree": "已阅读并同意",
|
||||||
|
"login.service": "《平台服务协议》",
|
||||||
|
"login.privacy": "《隐私权政策》",
|
||||||
|
"login.registration": "《平台注册相关协议》",
|
||||||
|
"login.btn": "发送验证码",
|
||||||
|
"login.mess": "请阅读并勾选协议",
|
||||||
|
"authentication.title": "安全验证",
|
||||||
|
"authentication.content": "拖动滑块填充拼图",
|
||||||
|
"sendCode.title": "输入验证码",
|
||||||
|
"sendCode.send": "已发送到",
|
||||||
|
"sendCode.login": "登录",
|
||||||
|
"sendCode.update": "确认修改",
|
||||||
|
"sendCode.loading": "正在获取验证码",
|
||||||
|
"sendCode.toast": "倒计时结束后再发送",
|
||||||
|
"login.success": "登录成功",
|
||||||
|
"login.error": "登录失败",
|
||||||
|
"sendCode.updateSuccess": "修改成功,请重新登录",
|
||||||
|
"sendCode.updateError": "修改失败",
|
||||||
|
"sendCode": "验证码已发送",
|
||||||
|
"welcome.toHome": "正在跳转至首页",
|
||||||
|
"welcome.title": "验证成功欢迎来到",
|
||||||
|
"collection.info": "藏品信息",
|
||||||
|
"collection.buy": "购买",
|
||||||
|
"collection.name": "藏品名称",
|
||||||
|
"collection.type": "藏品类型",
|
||||||
|
"collection.size": "藏品尺寸",
|
||||||
|
"collection.specs": "藏品规格",
|
||||||
|
"collection.address": "藏品产地",
|
||||||
|
"collection.intro": "藏品介绍",
|
||||||
|
"collection.detail": "藏品详情",
|
||||||
|
"collection.sell": "藏品卖点",
|
||||||
|
"collection.sellDec": "藏品细节",
|
||||||
|
"collection.company": "工艺介绍",
|
||||||
|
"collection.copyight": "版权声明",
|
||||||
|
"collection.blockchain": "区块链说明",
|
||||||
|
"buyVerfy.title": "购买商品需要进行实名认证",
|
||||||
|
"buyVerfy.username": "真实姓名",
|
||||||
|
"buyVerfy.idNum": "身份证号",
|
||||||
|
"buyVerfy.suss": "实名认证有效",
|
||||||
|
"buyVerfy.error": "实名认证无效",
|
||||||
|
"buyVerfy.done": "完成",
|
||||||
|
"buyVerfy.cancel": "取消",
|
||||||
|
"buyVerfy.noGift": "售罄",
|
||||||
|
"login.pls": "请先登录",
|
||||||
|
"alipay.payment": "支付宝支付",
|
||||||
|
"comfirm.num1": "共",
|
||||||
|
"comfirm.num2": "件",
|
||||||
|
"comfirm.total": "合计",
|
||||||
|
"comfirm.pay": "生成核验二维码",
|
||||||
|
"confirm.payment":"去确认支付",
|
||||||
|
"comfirm.copy": "复制订单验证码",
|
||||||
|
"payment.back": "返回首页",
|
||||||
|
"payment.cancel": "取消交易",
|
||||||
|
"payment.check": "查看详情",
|
||||||
|
"payment.confirmSuccess": "交易成功",
|
||||||
|
"payment.cancelSuccess": "交易取消",
|
||||||
|
"payment.failed": "交易失败",
|
||||||
|
"payInfo.title": "核对订单",
|
||||||
|
"payInfo.subtxt1": "正在验证用户",
|
||||||
|
"payInfo.subtxt2": "的订单信息",
|
||||||
|
"payInfo.confirmDate": "核验日期",
|
||||||
|
"payInfo.buyerName": "买家昵称",
|
||||||
|
"payInfo.artworkName": "商品名称",
|
||||||
|
"payInfo.orderPrice": "订单金额",
|
||||||
|
"payInfo.payTypeName": "支付方式",
|
||||||
|
"payInfo.payImages": "支付凭证",
|
||||||
|
"payInfo.typePrice": "输入支付方式",
|
||||||
|
"payInfo.salesperson": "请联系工作人员核实消费信息",
|
||||||
|
"payInfo.waitConfirm": "等待销售员确认",
|
||||||
|
"payInfo.copyCode": "输入订单验证码",
|
||||||
|
"mine.language": "语言",
|
||||||
|
"mine.message": "消息",
|
||||||
|
"mine.setting": "设置",
|
||||||
|
"mine.scan": "扫码",
|
||||||
|
"mine.blockchain": "区块链",
|
||||||
|
"mine.artwork": "我的藏品",
|
||||||
|
"mine.noData": "暂无藏品",
|
||||||
|
"mine.updateLang": "更换语言",
|
||||||
|
"updateLang.done": "当前使用",
|
||||||
|
"updateLang.change": "更换",
|
||||||
|
"password.title": "使用操作密码解锁更多功能",
|
||||||
|
"password.set": "设置操作密码",
|
||||||
|
"password.name": "请用户",
|
||||||
|
"password.input": "输入操作密码",
|
||||||
|
"password.com": "确认操作密码",
|
||||||
|
"password.get": "使用操作密码",
|
||||||
|
"password.step": "下一步",
|
||||||
|
"password": "操作密码",
|
||||||
|
"password.vername": "正在验证用户",
|
||||||
|
"password.username": "身份信息",
|
||||||
|
"comfrim": "确认",
|
||||||
|
"password.inputPass": "请输入操作密码",
|
||||||
|
"password.messError": "请确认两次输入的操作密码相同",
|
||||||
|
"password.setSucc": "设置成功",
|
||||||
|
"password.setError": "设置失败",
|
||||||
|
"password.verSucc": "验证成功",
|
||||||
|
"password.verError": "验证失败",
|
||||||
|
"avatar.def": "恢复默认头像",
|
||||||
|
"avatar.update": "更换头像",
|
||||||
|
"userInfo.name": "昵称",
|
||||||
|
"userInfo.updateName": "修改昵称",
|
||||||
|
"userInfo.createTime": "注册日期",
|
||||||
|
"userInfo.idNum": "ID号码",
|
||||||
|
"userInfo.phone": "联系电话",
|
||||||
|
"phone.update": "换绑",
|
||||||
|
"phone.verInfo": "完成实名认证后才可以换绑手机",
|
||||||
|
"user.realName": "实名",
|
||||||
|
"user.verfy": "实名认证",
|
||||||
|
"user.username": "姓名",
|
||||||
|
"user.verDone": "已认证",
|
||||||
|
"user.idNum": "身份证",
|
||||||
|
"account.logout": "注销账号",
|
||||||
|
"account.signOut": "退出登录",
|
||||||
|
"set.name": "设置昵称",
|
||||||
|
"set.input": "请输入内容",
|
||||||
|
"problem.feedback": "问题反馈",
|
||||||
|
"logout.info": "是否确认要注销该账号",
|
||||||
|
"logout.btn": "注销",
|
||||||
|
"signout.info": "是否确认退出登录",
|
||||||
|
"realname.conduct": "进行实名认证",
|
||||||
|
"save.update": "保存修改",
|
||||||
|
"airdrop": "空投",
|
||||||
|
"announcement": "公告",
|
||||||
|
"read": "阅读",
|
||||||
|
"to.accept": "收下",
|
||||||
|
"close": "关闭",
|
||||||
|
"basic.info": "基础信息",
|
||||||
|
"series.name": "系列名称",
|
||||||
|
"series.issuer": "发行方",
|
||||||
|
"series.time": "交易日期",
|
||||||
|
"series.price": "交易价格",
|
||||||
|
"series.hash": "HASH值",
|
||||||
|
"series.No": "编号",
|
||||||
|
"phone.old": "原手机号",
|
||||||
|
"phone.code": "验证码",
|
||||||
|
"update.phone.title": "换绑手机号码需要原手机号验证",
|
||||||
|
"phone.new": "新手机号",
|
||||||
|
"input.phoneCode": "请填写验证码和新手机号",
|
||||||
|
"apply.logistics": "申请物流",
|
||||||
|
"logistics.info": "物流信息",
|
||||||
|
"telephone": "咨询电话",
|
||||||
|
"consignee.name": "收货人姓名",
|
||||||
|
"consignee.address": "收货地址",
|
||||||
|
"consignee.phone": "联系电话",
|
||||||
|
"release.info": "发行信息",
|
||||||
|
"release.time": "发行时间",
|
||||||
|
"brand.side": "品牌方",
|
||||||
|
"circulation.info": "流转信息",
|
||||||
|
"possessor": "持有人",
|
||||||
|
"collection.status": "藏品状态",
|
||||||
|
"in.library": "在库",
|
||||||
|
"been.applied": "已申请物流",
|
||||||
|
"circulation.type": "流转类型",
|
||||||
|
"on.line": "在线",
|
||||||
|
"circulation.time": "流转时间",
|
||||||
|
"transaction.hash": "交易哈希",
|
||||||
|
"apply.tips": "一旦申请,不可撤销,请着重考虑!",
|
||||||
|
"input.address": "请填写地址",
|
||||||
|
"input.pla": "请输入",
|
||||||
|
"apply.btn": "申请",
|
||||||
|
"error.consignee.name": "请输入收货人姓名",
|
||||||
|
"error.consignee.phone": "请输入联系电话",
|
||||||
|
"error.consignee.address": "请输入收货地址",
|
||||||
|
"apply.succes": "申请成功",
|
||||||
|
"apply.error": "申请失败",
|
||||||
|
"load.failed": "加载失败",
|
||||||
|
"update.succes": "修改成功",
|
||||||
|
"code.actPass": "请输入操作密码和验证码",
|
||||||
|
"code.start": "获取验证码",
|
||||||
|
"code.change": "X秒重新获取",
|
||||||
|
"code.end": "重新获取",
|
||||||
|
"error.phone": "手机号码不正确",
|
||||||
|
"pick.up": "领取",
|
||||||
|
"letter.you": "给你的一封信",
|
||||||
|
"letter.all": "给全体员工的一封信",
|
||||||
|
"sumbit":"提交",
|
||||||
|
"realHashTitle":"藏品信息",
|
||||||
|
"realHash":"藏品hash"
|
||||||
|
}
|
190
locale/zh-Hant.json
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
"app.name": "豐鏈藝樹",
|
||||||
|
"tabbar.home": "首頁",
|
||||||
|
"tabbar.mine": "我的",
|
||||||
|
"index.title": "首頁",
|
||||||
|
"locale.auto": "系統",
|
||||||
|
"locale.en": "English",
|
||||||
|
"locale.zh-hans": "简体中文",
|
||||||
|
"locale.zh-hant": "繁體中文",
|
||||||
|
"api-header": "zh-TW",
|
||||||
|
"index.language-change-confirm": "應用此設置將重啟App",
|
||||||
|
"navbar.back": "返回",
|
||||||
|
"login.title": "登入/注册",
|
||||||
|
"login.input": "在此輸入手機號",
|
||||||
|
"login.agree": "已閱讀並同意",
|
||||||
|
"login.service": "《平臺服務協議》",
|
||||||
|
"login.privacy": "《隱私權政策》",
|
||||||
|
"login.registration": "《平臺注册相關協議》",
|
||||||
|
"login.btn": "發送驗證碼",
|
||||||
|
"login.mess": "請閱讀並勾選協定",
|
||||||
|
"authentication.title": "安全驗證",
|
||||||
|
"authentication.content": "拖動滑塊填充拼圖",
|
||||||
|
"sendCode.title": "輸入驗證碼",
|
||||||
|
"sendCode.send": "已發送到",
|
||||||
|
"sendCode.login": "登入",
|
||||||
|
"sendCode.update": "確認修改",
|
||||||
|
"sendCode.loading": "正在獲取驗證碼",
|
||||||
|
"sendCode.toast": "倒數計時結束後再發送",
|
||||||
|
"login.success": "登入成功",
|
||||||
|
"login.error": "登入失敗",
|
||||||
|
"sendCode.updateSuccess": "修改成功,請重新登入",
|
||||||
|
"sendCode.updateError": "修改失敗",
|
||||||
|
"sendCode": "驗證碼已發送",
|
||||||
|
"welcome.toHome": "正在跳轉至首頁",
|
||||||
|
"welcome.title": "驗證成功歡迎來到",
|
||||||
|
"collection.info": "藏品資訊",
|
||||||
|
"collection.buy": "購買",
|
||||||
|
"collection.name": "藏品名稱",
|
||||||
|
"collection.type": "藏品類型",
|
||||||
|
"collection.size": "藏品尺寸",
|
||||||
|
"collection.specs": "藏品規格",
|
||||||
|
"collection.address": "藏品產地",
|
||||||
|
"collection.intro": "藏品介紹",
|
||||||
|
"collection.detail": "藏品詳情",
|
||||||
|
"collection.sell": "藏品賣點",
|
||||||
|
"collection.sellDec": "藏品細節",
|
||||||
|
"collection.company": "工藝介紹",
|
||||||
|
"collection.copyight": "版權聲明",
|
||||||
|
"collection.blockchain": "區塊鏈說明",
|
||||||
|
"buyVerfy.title": "購買商品需要進行實名認證",
|
||||||
|
"buyVerfy.username": "真實姓名",
|
||||||
|
"buyVerfy.idNum": "身份證號",
|
||||||
|
"buyVerfy.suss": "實名認證有效",
|
||||||
|
"buyVerfy.error": "實名認證無效",
|
||||||
|
"buyVerfy.done": "完成",
|
||||||
|
"buyVerfy.noGift": "售罄",
|
||||||
|
"buyVerfy.cancel": "取消",
|
||||||
|
"login.pls": "請先登錄",
|
||||||
|
"alipay.payment": "支付寶支付",
|
||||||
|
"comfirm.num1": "共",
|
||||||
|
"comfirm.num2": "件",
|
||||||
|
"comfirm.total": "合計",
|
||||||
|
"comfirm.pay": "生成核驗二維碼",
|
||||||
|
"comfirm.copy": "復製訂單碼驗證",
|
||||||
|
"payment.back": "返回首頁",
|
||||||
|
"payment.cancel": "取消交易",
|
||||||
|
"payment.check": "查看詳情",
|
||||||
|
"payment.confirmSuccess": "交易成功",
|
||||||
|
"payment.cancelSuccess": "交易取消",
|
||||||
|
"payment.failed": "交易失敗",
|
||||||
|
"payInfo.title": "核對訂單",
|
||||||
|
"payInfo.subtxt1": "正在驗證用戶",
|
||||||
|
"payInfo.subtxt2": "的訂單信息",
|
||||||
|
"payInfo.confirmDate": "核驗日期",
|
||||||
|
"payInfo.buyerName": "買家昵稱",
|
||||||
|
"payInfo.artworkName": "商品名稱",
|
||||||
|
"payInfo.orderPrice": "訂單金額",
|
||||||
|
"payInfo.payTypeName": "支付方式",
|
||||||
|
"payInfo.payImages": "支付憑證",
|
||||||
|
"payInfo.typePrice": "輸入支付方式",
|
||||||
|
"payInfo.salesperson": "請聯系業務員線下核實消費信息",
|
||||||
|
"payInfo.waitConfirm": "等待銷售員確認",
|
||||||
|
"payInfo.copyCode": "輸入訂單驗證碼",
|
||||||
|
"mine.language": "語言",
|
||||||
|
"mine.message": "消息",
|
||||||
|
"mine.setting": "設定",
|
||||||
|
"mine.scan": "掃碼",
|
||||||
|
"mine.blockchain": "區塊鏈",
|
||||||
|
"mine.artwork": "我的藏品",
|
||||||
|
"mine.noData": "暫無藏品",
|
||||||
|
"mine.updateLang": "更換語言",
|
||||||
|
"updateLang.done": "當前使用",
|
||||||
|
"updateLang.change": "更換",
|
||||||
|
"password.title": "使用操作密碼解鎖更多功能",
|
||||||
|
"password.set": "設定操作密碼",
|
||||||
|
"password.name": "請用戶",
|
||||||
|
"password.input": "輸入操作密碼",
|
||||||
|
"password.com": "確認操作密碼",
|
||||||
|
"password.get": "使用操作密碼",
|
||||||
|
"password.step": "下一步",
|
||||||
|
"password": "操作密碼",
|
||||||
|
"password.vername": "正在驗證用戶",
|
||||||
|
"password.username": "身份資訊",
|
||||||
|
"comfrim": "確認",
|
||||||
|
"password.inputPass": "請輸入操作密碼",
|
||||||
|
"password.messError": "請確認兩次輸入的操作密碼相同",
|
||||||
|
"password.setSucc": "設定成功",
|
||||||
|
"password.setError": "設定失敗",
|
||||||
|
"password.verSucc": "驗證成功",
|
||||||
|
"password.verError": "驗證失敗",
|
||||||
|
"avatar.def": "恢復默認頭像",
|
||||||
|
"avatar.update": "更換頭像",
|
||||||
|
"userInfo.name": "昵稱",
|
||||||
|
"userInfo.updateName": "修改昵稱",
|
||||||
|
"userInfo.createTime": "注册日期",
|
||||||
|
"userInfo.idNum": "ID號碼",
|
||||||
|
"userInfo.phone": "聯繫電話",
|
||||||
|
"phone.update": "換綁",
|
||||||
|
"phone.verInfo": "完成實名認證後才可以換綁手機",
|
||||||
|
"user.realName": "實名",
|
||||||
|
"user.verfy": "實名認證",
|
||||||
|
"user.username": "姓名",
|
||||||
|
"user.verDone": "已認證",
|
||||||
|
"user.idNum": "身份證",
|
||||||
|
"account.logout": "註銷帳號",
|
||||||
|
"account.signOut": "登出",
|
||||||
|
"set.name": "設定昵稱",
|
||||||
|
"set.input": "請輸入內容",
|
||||||
|
"problem.feedback": "問題迴響",
|
||||||
|
"logout.info": "是否確認要註銷該帳號",
|
||||||
|
"logout.btn": "註銷",
|
||||||
|
"signout.info": "是否確認登出",
|
||||||
|
"realname.conduct": "進行實名認證",
|
||||||
|
"save.update": "保存修改",
|
||||||
|
"airdrop": "空投",
|
||||||
|
"announcement": "公告",
|
||||||
|
"read": "閱讀",
|
||||||
|
"to.accept": "收下",
|
||||||
|
"close": "關閉",
|
||||||
|
"basic.info": "基礎資訊",
|
||||||
|
"series.name": "系列名稱",
|
||||||
|
"series.issuer": "發行方",
|
||||||
|
"series.time": "交易日期",
|
||||||
|
"series.price": "交易價格",
|
||||||
|
"series.hash": "HASH值",
|
||||||
|
"series.No": "編號",
|
||||||
|
"phone.old": "原手機號",
|
||||||
|
"phone.code": "驗證碼",
|
||||||
|
"update.phone.title": "換綁手機號碼需要原手機號驗證",
|
||||||
|
"phone.new": "新手機號",
|
||||||
|
"input.phoneCode": "請填寫驗證碼和新手機號",
|
||||||
|
"apply.logistics": "申請物流",
|
||||||
|
"logistics.info": "物流資訊",
|
||||||
|
"telephone": "諮詢電話",
|
||||||
|
"consignee.name": "收貨人姓名",
|
||||||
|
"consignee.address": "收貨地址",
|
||||||
|
"consignee.phone": "聯繫電話",
|
||||||
|
"release.info": "發行資訊",
|
||||||
|
"release.time": "發行時間",
|
||||||
|
"brand.side": "品牌方",
|
||||||
|
"circulation.info": "流轉資訊",
|
||||||
|
"possessor": "持有人",
|
||||||
|
"collection.status": "藏品狀態",
|
||||||
|
"in.library": "在庫",
|
||||||
|
"been.applied": "已經申請物流",
|
||||||
|
"circulation.type": "流轉類型",
|
||||||
|
"on.line": "線上",
|
||||||
|
"circulation.time": "流轉時間",
|
||||||
|
"transaction.hash": "交易雜湊",
|
||||||
|
"apply.tips": "一旦申請,不可撤銷,請著重考慮!",
|
||||||
|
"input.address": "請填寫地址",
|
||||||
|
"input.pla": "請輸入",
|
||||||
|
"apply.btn": "申請",
|
||||||
|
"error.consignee.name": "請輸入收貨人姓名",
|
||||||
|
"error.consignee.phone": "請輸入聯繫電話",
|
||||||
|
"error.consignee.address": "請輸入收貨地址",
|
||||||
|
"apply.succes": "申請成功",
|
||||||
|
"apply.error": "申請失敗",
|
||||||
|
"load.failed": "加載失敗",
|
||||||
|
"update.succes": "修改成功",
|
||||||
|
"code.actPass": "請輸入操作密碼和驗證碼",
|
||||||
|
"code.start": "獲取驗證碼",
|
||||||
|
"code.change": "X秒重新獲取",
|
||||||
|
"code.end": "重新獲取",
|
||||||
|
"error.phone": "手機號碼不正確",
|
||||||
|
"pick.up": "領取",
|
||||||
|
"letter.you": "給你的一封信",
|
||||||
|
"letter.all": "給全體員工的一封信"
|
||||||
|
|
||||||
|
}
|
52
main.js
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import App from "./App";
|
||||||
|
|
||||||
|
import en from "./locale/en.json";
|
||||||
|
import zhHans from "./locale/zh-Hans.json";
|
||||||
|
import zhHant from "./locale/zh-Hant.json";
|
||||||
|
const messages = {
|
||||||
|
en,
|
||||||
|
"zh-Hans": zhHans,
|
||||||
|
"zh-Hant": zhHant,
|
||||||
|
};
|
||||||
|
|
||||||
|
let i18nConfig = {
|
||||||
|
locale: uni.getLocale(), // 获取已设置的语言
|
||||||
|
messages,
|
||||||
|
};
|
||||||
|
|
||||||
|
//弹出框禁止滑动
|
||||||
|
Vue.prototype.stopScroll = function () {
|
||||||
|
var mo = function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
};
|
||||||
|
document.body.style.overflow = "hidden";
|
||||||
|
document.addEventListener("touchmove", mo, false); // 禁止页面滑动
|
||||||
|
};
|
||||||
|
|
||||||
|
//弹出框可以滑动
|
||||||
|
Vue.prototype.canScroll = function () {
|
||||||
|
var mo = function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
};
|
||||||
|
document.body.style.overflow = ""; // 出现滚动条
|
||||||
|
document.removeEventListener("touchmove", mo, false);
|
||||||
|
};
|
||||||
|
import Vue from "vue";
|
||||||
|
import VueI18n from "vue-i18n"; // v8.x
|
||||||
|
import uView from "uview-ui";
|
||||||
|
import common from "./common/index.js";
|
||||||
|
import api from "@/http/";
|
||||||
|
Vue.use(VueI18n);
|
||||||
|
Vue.use(uView);
|
||||||
|
Vue.prototype.$common = common;
|
||||||
|
Vue.prototype.$api = api;
|
||||||
|
// Vue.prototype.$baseUrl = "http://114.218.158.24:9022";
|
||||||
|
Vue.prototype.$baseUrl = "https://shop.szjixun.cn";
|
||||||
|
const i18n = new VueI18n(i18nConfig);
|
||||||
|
Vue.config.productionTip = false;
|
||||||
|
App.mpType = "app";
|
||||||
|
const app = new Vue({
|
||||||
|
i18n,
|
||||||
|
...App,
|
||||||
|
});
|
||||||
|
app.$mount();
|
122
manifest.json
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
{
|
||||||
|
"name" : "艺术商城",
|
||||||
|
"appid" : "__UNI__7D47507",
|
||||||
|
"description" : "",
|
||||||
|
"versionName" : "1.0.0",
|
||||||
|
"versionCode" : 101,
|
||||||
|
"locale" : "zh-Hans",
|
||||||
|
"transformPx" : false,
|
||||||
|
/* 5+App特有相关 */
|
||||||
|
"app-plus" : {
|
||||||
|
"safearea" : {
|
||||||
|
"bottom" : "none"
|
||||||
|
},
|
||||||
|
"usingComponents" : true,
|
||||||
|
"nvueStyleCompiler" : "uni-app",
|
||||||
|
"compilerVersion" : 3,
|
||||||
|
"splashscreen" : {
|
||||||
|
"alwaysShowBeforeRender" : true,
|
||||||
|
"waiting" : true,
|
||||||
|
"autoclose" : true,
|
||||||
|
"delay" : 0
|
||||||
|
},
|
||||||
|
/* 模块配置 */
|
||||||
|
"modules" : {
|
||||||
|
"Payment" : {},
|
||||||
|
"Camera" : {}
|
||||||
|
},
|
||||||
|
/* 应用发布信息 */
|
||||||
|
"distribute" : {
|
||||||
|
/* android打包配置 */
|
||||||
|
"android" : {
|
||||||
|
"permissions" : [
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
/* ios打包配置 */
|
||||||
|
"ios" : {
|
||||||
|
"dSYMs" : false
|
||||||
|
},
|
||||||
|
/* SDK配置 */
|
||||||
|
"sdkConfigs" : {
|
||||||
|
"payment" : {
|
||||||
|
"alipay" : {
|
||||||
|
"__platform__" : [ "ios", "android" ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ad" : {}
|
||||||
|
},
|
||||||
|
"splashscreen" : {
|
||||||
|
"androidStyle" : "common"
|
||||||
|
},
|
||||||
|
"icons" : {
|
||||||
|
"android" : {
|
||||||
|
"hdpi" : "unpackage/res/icons/72x72.png",
|
||||||
|
"xhdpi" : "unpackage/res/icons/96x96.png",
|
||||||
|
"xxhdpi" : "unpackage/res/icons/144x144.png",
|
||||||
|
"xxxhdpi" : "unpackage/res/icons/192x192.png"
|
||||||
|
},
|
||||||
|
"ios" : {
|
||||||
|
"appstore" : "unpackage/res/icons/1024x1024.png",
|
||||||
|
"ipad" : {
|
||||||
|
"app" : "unpackage/res/icons/76x76.png",
|
||||||
|
"app@2x" : "unpackage/res/icons/152x152.png",
|
||||||
|
"notification" : "unpackage/res/icons/20x20.png",
|
||||||
|
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||||
|
"proapp@2x" : "unpackage/res/icons/167x167.png",
|
||||||
|
"settings" : "unpackage/res/icons/29x29.png",
|
||||||
|
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||||
|
"spotlight" : "unpackage/res/icons/40x40.png",
|
||||||
|
"spotlight@2x" : "unpackage/res/icons/80x80.png"
|
||||||
|
},
|
||||||
|
"iphone" : {
|
||||||
|
"app@2x" : "unpackage/res/icons/120x120.png",
|
||||||
|
"app@3x" : "unpackage/res/icons/180x180.png",
|
||||||
|
"notification@2x" : "unpackage/res/icons/40x40.png",
|
||||||
|
"notification@3x" : "unpackage/res/icons/60x60.png",
|
||||||
|
"settings@2x" : "unpackage/res/icons/58x58.png",
|
||||||
|
"settings@3x" : "unpackage/res/icons/87x87.png",
|
||||||
|
"spotlight@2x" : "unpackage/res/icons/80x80.png",
|
||||||
|
"spotlight@3x" : "unpackage/res/icons/120x120.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* 快应用特有相关 */
|
||||||
|
"quickapp" : {},
|
||||||
|
/* 小程序特有相关 */
|
||||||
|
"mp-weixin" : {
|
||||||
|
"appid" : "",
|
||||||
|
"setting" : {
|
||||||
|
"urlCheck" : false
|
||||||
|
},
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"mp-alipay" : {
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"mp-baidu" : {
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"mp-toutiao" : {
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"uniStatistics" : {
|
||||||
|
"enable" : false
|
||||||
|
},
|
||||||
|
"vueVersion" : "2",
|
||||||
|
"h5" : {
|
||||||
|
"title" : "艺树商城"
|
||||||
|
}
|
||||||
|
}
|
480
package-lock.json
generated
Normal file
@ -0,0 +1,480 @@
|
|||||||
|
{
|
||||||
|
"name": "mall-app",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"dependencies": {
|
||||||
|
"jweixin-module": "^1.6.0",
|
||||||
|
"vue-3d-model": "^1.4.1",
|
||||||
|
"weixin-js-sdk": "^1.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/parser": {
|
||||||
|
"version": "7.20.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz",
|
||||||
|
"integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==",
|
||||||
|
"peer": true,
|
||||||
|
"bin": {
|
||||||
|
"parser": "bin/babel-parser.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/compiler-core": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/parser": "^7.16.4",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/compiler-dom": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/compiler-core": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/compiler-sfc": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/parser": "^7.16.4",
|
||||||
|
"@vue/compiler-core": "3.2.45",
|
||||||
|
"@vue/compiler-dom": "3.2.45",
|
||||||
|
"@vue/compiler-ssr": "3.2.45",
|
||||||
|
"@vue/reactivity-transform": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"magic-string": "^0.25.7",
|
||||||
|
"postcss": "^8.1.10",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/compiler-ssr": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/compiler-dom": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/reactivity": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/reactivity-transform": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/parser": "^7.16.4",
|
||||||
|
"@vue/compiler-core": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"magic-string": "^0.25.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/runtime-core": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/reactivity": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/runtime-dom": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/runtime-core": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"csstype": "^2.6.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/server-renderer": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/compiler-ssr": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vue": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vue/shared": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/csstype": {
|
||||||
|
"version": "2.6.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
|
||||||
|
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/estree-walker": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/jweixin-module": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
|
||||||
|
},
|
||||||
|
"node_modules/magic-string": {
|
||||||
|
"version": "0.25.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
|
||||||
|
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"sourcemap-codec": "^1.4.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/nanoid": {
|
||||||
|
"version": "3.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
|
||||||
|
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
|
||||||
|
"peer": true,
|
||||||
|
"bin": {
|
||||||
|
"nanoid": "bin/nanoid.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/picocolors": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/postcss": {
|
||||||
|
"version": "8.4.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
|
||||||
|
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "tidelift",
|
||||||
|
"url": "https://tidelift.com/funding/github/npm/postcss"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"nanoid": "^3.3.4",
|
||||||
|
"picocolors": "^1.0.0",
|
||||||
|
"source-map-js": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^10 || ^12 || >=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"peer": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map-js": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
||||||
|
"peer": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/sourcemap-codec": {
|
||||||
|
"version": "1.4.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
|
||||||
|
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
|
||||||
|
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/three": {
|
||||||
|
"version": "0.135.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/three/-/three-0.135.0.tgz",
|
||||||
|
"integrity": "sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ=="
|
||||||
|
},
|
||||||
|
"node_modules/vue": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
|
||||||
|
"peer": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/compiler-dom": "3.2.45",
|
||||||
|
"@vue/compiler-sfc": "3.2.45",
|
||||||
|
"@vue/runtime-dom": "3.2.45",
|
||||||
|
"@vue/server-renderer": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vue-3d-model": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue-3d-model/-/vue-3d-model-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-IQjpqEjK1OLF/0XgF6O++IvOPLinLQ2aWZQFHxPFoTfPlB4vQW2sgv8EJSqpsIYC/wSCdGlP3CEnv9L3aZHlow==",
|
||||||
|
"dependencies": {
|
||||||
|
"three": "^0.135.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vue": ">=2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/weixin-js-sdk": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ=="
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/parser": {
|
||||||
|
"version": "7.20.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz",
|
||||||
|
"integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"@vue/compiler-core": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.16.4",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/compiler-dom": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-core": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/compiler-sfc": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.16.4",
|
||||||
|
"@vue/compiler-core": "3.2.45",
|
||||||
|
"@vue/compiler-dom": "3.2.45",
|
||||||
|
"@vue/compiler-ssr": "3.2.45",
|
||||||
|
"@vue/reactivity-transform": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"magic-string": "^0.25.7",
|
||||||
|
"postcss": "^8.1.10",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/compiler-ssr": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-dom": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/reactivity": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/reactivity-transform": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/parser": "^7.16.4",
|
||||||
|
"@vue/compiler-core": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"magic-string": "^0.25.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/runtime-core": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/reactivity": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/runtime-dom": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/runtime-core": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45",
|
||||||
|
"csstype": "^2.6.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/server-renderer": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-ssr": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vue/shared": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"csstype": {
|
||||||
|
"version": "2.6.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
|
||||||
|
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"estree-walker": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"jweixin-module": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
|
||||||
|
},
|
||||||
|
"magic-string": {
|
||||||
|
"version": "0.25.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
|
||||||
|
"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"sourcemap-codec": "^1.4.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nanoid": {
|
||||||
|
"version": "3.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
|
||||||
|
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"picocolors": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"postcss": {
|
||||||
|
"version": "8.4.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
|
||||||
|
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"nanoid": "^3.3.4",
|
||||||
|
"picocolors": "^1.0.0",
|
||||||
|
"source-map-js": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"source-map-js": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"sourcemap-codec": {
|
||||||
|
"version": "1.4.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
|
||||||
|
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"three": {
|
||||||
|
"version": "0.135.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/three/-/three-0.135.0.tgz",
|
||||||
|
"integrity": "sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ=="
|
||||||
|
},
|
||||||
|
"vue": {
|
||||||
|
"version": "3.2.45",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz",
|
||||||
|
"integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
|
||||||
|
"peer": true,
|
||||||
|
"requires": {
|
||||||
|
"@vue/compiler-dom": "3.2.45",
|
||||||
|
"@vue/compiler-sfc": "3.2.45",
|
||||||
|
"@vue/runtime-dom": "3.2.45",
|
||||||
|
"@vue/server-renderer": "3.2.45",
|
||||||
|
"@vue/shared": "3.2.45"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"vue-3d-model": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue-3d-model/-/vue-3d-model-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-IQjpqEjK1OLF/0XgF6O++IvOPLinLQ2aWZQFHxPFoTfPlB4vQW2sgv8EJSqpsIYC/wSCdGlP3CEnv9L3aZHlow==",
|
||||||
|
"requires": {
|
||||||
|
"three": "^0.135.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weixin-js-sdk": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
7
package.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"jweixin-module": "^1.6.0",
|
||||||
|
"vue-3d-model": "^1.4.1",
|
||||||
|
"weixin-js-sdk": "^1.6.0"
|
||||||
|
}
|
||||||
|
}
|
253
pages.json
Normal file
@ -0,0 +1,253 @@
|
|||||||
|
{
|
||||||
|
"easycom": {
|
||||||
|
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
|
||||||
|
},
|
||||||
|
"pages": [
|
||||||
|
//pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
||||||
|
{
|
||||||
|
"path": "pages/start/start",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/changePhone/changePhone",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/realName/realName",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/series/series",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/activeSeries/activeSeries",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/detail/detail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/login/login",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/setting/setting",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/notice/notice",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/comfirm/comfirm",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/payment/payment",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/detail/detail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/cert/cert",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/login/sendCode/sendCode",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/login/welcome/welcome",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/detail/open3D/open3D",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/mine/confirmOrder/confirmOrder",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/payment/reciveOK",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/activity/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "系列活动详情页",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/index/activity/detail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "藏品活动详情页",
|
||||||
|
"enablePullDownRefresh": false,
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false // 禁用原生导航
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "components/tabBar/tabBar",
|
||||||
|
"style": {}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"globalStyle": {
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"navigationBarTitleText": "uni-app",
|
||||||
|
"navigationBarBackgroundColor": "#F8F8F8",
|
||||||
|
"backgroundColor": "#F8F8F8",
|
||||||
|
"app-plus": {
|
||||||
|
"bounce": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tabBar": {
|
||||||
|
"list": [{
|
||||||
|
"pagePath": "pages/index/index",
|
||||||
|
"text": "%tabbar.home%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pagePath": "pages/mine/index",
|
||||||
|
"text": "%tabbar.mine%"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"uniIdRouter": {}
|
||||||
|
}
|
104
pages/index/activeSeries/activeSeries.vue
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<!-- <navBar navTitle="" :stickyShow="stickyShow" :backBackGroundColor="'rgba(255, 255, 255, 0.4)'"></navBar> -->
|
||||||
|
<view class="top">
|
||||||
|
<button class="back" @click="back">返回</button>
|
||||||
|
<image src="@/static/image/home/activity/series.png" mode="" class="cover"></image>
|
||||||
|
<button class="btn" @click="detail">查看详情
|
||||||
|
<image src="@/static/image/home/activity/right.png" mode="scaleToFill" class="img" />
|
||||||
|
</button>
|
||||||
|
</view>
|
||||||
|
<view class="article-box">
|
||||||
|
<image src="@/static/image/home/activity/article.png" mode="" class="article"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stickyShow: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
back() {
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
detail() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/index/detail/detail'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 240rpx;
|
||||||
|
height: 58rpx;
|
||||||
|
position: absolute;
|
||||||
|
color: #FFFFFF;
|
||||||
|
background: #3E0007;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
bottom: 44rpx;
|
||||||
|
left: 254rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 12rpx;
|
||||||
|
height: 12rpx;
|
||||||
|
margin-left: 14rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cover {
|
||||||
|
width: 100%;
|
||||||
|
height: 1624rpx;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
position: absolute;
|
||||||
|
width: 128rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
background: rgba(255, 255, 255, 0.4);
|
||||||
|
color: #FFFFFF;
|
||||||
|
z-index: 999;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
font-size: 32rpx;
|
||||||
|
line-height: 56rpx;
|
||||||
|
left: 26rpx;
|
||||||
|
top: 30rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.article-box {
|
||||||
|
background: url('@/static/image/home/activity/container.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
width: 100%;
|
||||||
|
height: 1382rpx;
|
||||||
|
padding: 72rpx 44rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.article {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
428
pages/index/activity/detail.vue
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<!-- <navBar :navTitle="collectionsDetail.Name" :isBack="true" :stickyShow="stickyShow"></navBar> -->
|
||||||
|
<view class="fixed-box">
|
||||||
|
<view class="btn">
|
||||||
|
<u-button
|
||||||
|
type="warning"
|
||||||
|
:text="$t('navbar.back')"
|
||||||
|
class="back"
|
||||||
|
@click="back"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
v-if="collectionsDetail.Num === collectionsDetail.SellNum"
|
||||||
|
:disabled="true"
|
||||||
|
type="primary"
|
||||||
|
:text="$t('buyVerfy.noGift')"
|
||||||
|
class="buyer"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
v-else
|
||||||
|
type="primary"
|
||||||
|
:text="$t('collection.buy')"
|
||||||
|
class="buyer"
|
||||||
|
@click="buy"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_01.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_02.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_03.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_04.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_05.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_06.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/activity/xqy1_07.png"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
|
||||||
|
<view style="height: 160rpx"></view>
|
||||||
|
<u-popup
|
||||||
|
:show="showVerfy"
|
||||||
|
mode="center"
|
||||||
|
@close="closeVerfy"
|
||||||
|
bgColor="transparent"
|
||||||
|
>
|
||||||
|
<view class="popup-box">
|
||||||
|
<view class="title">{{ $t("buyVerfy.title") }}</view>
|
||||||
|
<view class="">
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("buyVerfy.username") }}:</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--input
|
||||||
|
border="none"
|
||||||
|
shape="circle"
|
||||||
|
v-model="realName"
|
||||||
|
@focus="verfFocus"
|
||||||
|
></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("buyVerfy.idNum") }}:</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--input
|
||||||
|
border="none"
|
||||||
|
shape="circle"
|
||||||
|
v-model="idNum"
|
||||||
|
@focus="verfFocus"
|
||||||
|
></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="flex-end">
|
||||||
|
<view class="fl-e" v-if="succes">
|
||||||
|
<image
|
||||||
|
src="../../../static/image/home/true.png"
|
||||||
|
mode=""
|
||||||
|
style="width: 30rpx; height: 30rpx; margin-right: 5px"
|
||||||
|
></image>
|
||||||
|
<text style="color: #ffffff; font-size: 24rpx">{{
|
||||||
|
$t("buyVerfy.suss")
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="fl-e" v-if="err">
|
||||||
|
<image
|
||||||
|
src="../../../static/image/home/false.png"
|
||||||
|
mode=""
|
||||||
|
style="width: 30rpx; height: 30rpx; margin-right: 5px"
|
||||||
|
></image>
|
||||||
|
<text style="color: #fd343c; font-size: 24rpx">{{
|
||||||
|
$t("buyVerfy.error")
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<u-button
|
||||||
|
:text="$t('buyVerfy.done')"
|
||||||
|
color="#558BF2"
|
||||||
|
@click="verifyName"
|
||||||
|
style="
|
||||||
|
width: 622rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
:text="$t('buyVerfy.cancel')"
|
||||||
|
color="#000000"
|
||||||
|
@click="closeVerfy"
|
||||||
|
style="
|
||||||
|
width: 622rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stickyShow: false,
|
||||||
|
showVerfy: false,
|
||||||
|
CollectionUID: "",
|
||||||
|
collectionsDetail: {},
|
||||||
|
sellPoint: [],
|
||||||
|
collDetails: [],
|
||||||
|
companyInfo: [],
|
||||||
|
copyright: [],
|
||||||
|
Blockchain: [],
|
||||||
|
realName: "",
|
||||||
|
idNum: "",
|
||||||
|
err: false,
|
||||||
|
succes: false,
|
||||||
|
SeriesName: "",
|
||||||
|
isHave: false,
|
||||||
|
AirdorpUid: "",
|
||||||
|
isClose: true,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onPageScroll(e) {
|
||||||
|
this.stickyShow = e.scrollTop > 5 ? true : false;
|
||||||
|
},
|
||||||
|
onLoad: function (option) {
|
||||||
|
this.CollectionUID = option.CollectionUID;
|
||||||
|
this.SeriesName = option.SeriesName;
|
||||||
|
// this.getCollectionDetail();
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getCollectionDetail();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
open3D() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/index/detail/open3D/open3D",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
back() {
|
||||||
|
// this.$common.navigateBack();
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/index/activity/index?detail=" +
|
||||||
|
uni.getStorageSync("activity_params"),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getCollectionDetail() {
|
||||||
|
let data = {
|
||||||
|
CollectionsUID: this.CollectionUID,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.collectionsInfo(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
// await this.getPick(res.data.CollectionUID)
|
||||||
|
this.collectionsDetail = res.data;
|
||||||
|
// (this.AllImgList = res.data.CutImg ? JSON.parse(res.data.CutImg) : []),
|
||||||
|
// this.cutImg();
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* async getPick(uid) {
|
||||||
|
let parmas = {
|
||||||
|
uuid: uid
|
||||||
|
}
|
||||||
|
let res = await this.$api.series.userHaveDropNo(parmas);
|
||||||
|
if(res.status === 0) {
|
||||||
|
console.log(res.data.Hava);
|
||||||
|
this.isHave = res.data.Have != 0 ? false : true;
|
||||||
|
this.AirdorpUid = res.data.UserAirdorpUid
|
||||||
|
} else {
|
||||||
|
this.isHave = false
|
||||||
|
}
|
||||||
|
}, */
|
||||||
|
/* cutImg() {
|
||||||
|
this.AllImgList.forEach((v) => {
|
||||||
|
if (v.label === "卖点") {
|
||||||
|
this.sellPoint = v.imgs;
|
||||||
|
} else if (v.label === "藏品细节") {
|
||||||
|
this.collDetails = v.imgs;
|
||||||
|
} else if (v.label === "工艺/公司介绍") {
|
||||||
|
this.companyInfo = v.imgs;
|
||||||
|
} else if (v.label === "版权声明") {
|
||||||
|
this.copyright = v.imgs;
|
||||||
|
} else if (v.label === "区块链说明") {
|
||||||
|
this.Blockchain = v.imgs;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, */
|
||||||
|
buy() {
|
||||||
|
let token = uni.getStorageSync("mall_token");
|
||||||
|
let realName = uni.getStorageSync("mall-user-info")
|
||||||
|
? uni.getStorageSync("mall-user-info").realName
|
||||||
|
: "";
|
||||||
|
if (!token) {
|
||||||
|
uni.$u.toast(this.$t("login.pls"));
|
||||||
|
uni.setStorageSync(
|
||||||
|
"return_url",
|
||||||
|
"/pages/index/activity/detail?CollectionUID=" +
|
||||||
|
this.CollectionUID +
|
||||||
|
"&SeriesName=" +
|
||||||
|
this.SeriesName
|
||||||
|
);
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/login",
|
||||||
|
});
|
||||||
|
} else if (!realName) {
|
||||||
|
this.showVerfy = true;
|
||||||
|
} else {
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/index/comfirm/comfirm?Collection=" +
|
||||||
|
encodeURIComponent(JSON.stringify(this.collectionsDetail)),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* async pickUp() {
|
||||||
|
let data = {
|
||||||
|
UserId: uni.getStorageSync('mall-user-info').ID,
|
||||||
|
Uuid: this.AirdorpUid
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.getCollection(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.recive();
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async recive() {
|
||||||
|
let data = {
|
||||||
|
collectionsUID: this.CollectionUID,
|
||||||
|
userAirdropUuid: this.AirdorpUid
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.getCollectionStepTwo(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/index/payment/reciveOK'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
}, */
|
||||||
|
async verifyName() {
|
||||||
|
let data = {
|
||||||
|
idNum: this.idNum,
|
||||||
|
realName: this.realName,
|
||||||
|
};
|
||||||
|
let res = await this.$api.mine.update(data);
|
||||||
|
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.succes = true;
|
||||||
|
uni.setStorageSync("mall-user-info", res.data);
|
||||||
|
setTimeout(() => {
|
||||||
|
this.idNum = "";
|
||||||
|
this.realName = "";
|
||||||
|
this.showVerfy = false;
|
||||||
|
this.err = false;
|
||||||
|
}, 1000);
|
||||||
|
} else {
|
||||||
|
this.err = true;
|
||||||
|
this.succes = false;
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
verfFocus() {
|
||||||
|
this.err = false;
|
||||||
|
this.succes = false;
|
||||||
|
},
|
||||||
|
doneVerfy() {
|
||||||
|
this.showVerfy = false;
|
||||||
|
},
|
||||||
|
closeVerfy() {
|
||||||
|
this.showVerfy = false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.fixed-box {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 172rpx;
|
||||||
|
// background: #3e3e3e;
|
||||||
|
background: rgba(0, 0, 0, 1);
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: flex;
|
||||||
|
padding: 42rpx 38rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
width: 172rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
// background: #efba42;
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
border-color: rgba(0, 0, 0, 1);
|
||||||
|
margin-right: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buyer {
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
// background: #558bf2;
|
||||||
|
background: rgba(
|
||||||
|
252,
|
||||||
|
73,
|
||||||
|
71,
|
||||||
|
1
|
||||||
|
); //linear-gradient(#FFA10A 0%,#C12020 100%);
|
||||||
|
border-color: rgba(0, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .disBtn {
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
line-height: 56upx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
background: rgba(65, 0, 0, 1);
|
||||||
|
border: 1upx #fff solid;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.popup-box {
|
||||||
|
background: rgba(0, 0, 0, 1);
|
||||||
|
width: 698rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 0;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 80rpx;
|
||||||
|
margin-bottom: 100rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-box {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 34rpx 34rpx 38rpx;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 22rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
background: rgba(255, 255, 255, 0.5);
|
||||||
|
width: 450rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
/deep/ .input-placeholder {
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-end {
|
||||||
|
padding: 0 34rpx 34rpx 38rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
|
||||||
|
.fl-e {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
154
pages/index/activity/index.vue
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="container">
|
||||||
|
<view class="top-back">
|
||||||
|
<text @click="navigateBack">{{$t('navbar.back')}}</text>
|
||||||
|
</view>
|
||||||
|
<image src="@/static/image/home/activity/series.png" mode="widthFix" class="image1"></image>
|
||||||
|
<view class="click" @click="goDetail"></view>
|
||||||
|
<view class="btn" @click="goDetail">
|
||||||
|
查看详情
|
||||||
|
<image src="@/static/image/home/activity/right.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="info">
|
||||||
|
<view class="content">
|
||||||
|
<image src="@/static/image/home/title.png" mode="widthFix" class="title"></image>
|
||||||
|
<image src="http://cdn2.tyfon.com.cn/activity/wen_an.png" mode="widthFix" class="wenan"></image>
|
||||||
|
<image src="@/static/image/home/activity/from.png" mode="widthFix" class="from"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
collectionsData: [],
|
||||||
|
CollectionUID: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad: function(option) {
|
||||||
|
this.seriesItem = JSON.parse(decodeURIComponent(option.detail));
|
||||||
|
this.getCollections()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
navigateBack() {
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
goDetail() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/index/activity/detail?CollectionUID=' + this.CollectionUID + '&SeriesName=' + this.seriesItem.SeriesName
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async getCollections(){
|
||||||
|
let data = {
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 99999,
|
||||||
|
SeriesUID:this.seriesItem.SeriesUuid
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.collectionsList(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
// this.collectionsData = res.data.Data;
|
||||||
|
res.data.Data.forEach(i =>{
|
||||||
|
if(i.CollectionUID == 'd00c6694-f223-48e7-a9fc-a08d7fe18b1e' || i.Name == '泰丰十周年纪念胸章') {
|
||||||
|
this.CollectionUID = i.CollectionUID
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t('load.failed'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
image{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.image1{
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
.info{
|
||||||
|
width: 100%;
|
||||||
|
background:url('@/static/image/home/activity/bg.png'), #5F000B;
|
||||||
|
background-position: bottom right;
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding: 72upx 34upx 52upx 34upx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.content{
|
||||||
|
width: 100%;
|
||||||
|
background: rgba(11,0,0,0.4);
|
||||||
|
border-radius: 8upx;
|
||||||
|
padding: 40upx 26upx 80upx 26upx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
.title{
|
||||||
|
margin: auto;
|
||||||
|
width: 300upx;
|
||||||
|
}
|
||||||
|
.wenan{
|
||||||
|
width: 618upx;
|
||||||
|
margin-top: 24upx;
|
||||||
|
}
|
||||||
|
.from{
|
||||||
|
width: 356upx;
|
||||||
|
position: absolute;
|
||||||
|
right: 26upx;
|
||||||
|
bottom: 52upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.container{
|
||||||
|
position: relative;
|
||||||
|
.top-back{
|
||||||
|
width: 68upx;
|
||||||
|
background: rgba(255, 255, 255, 0.4);
|
||||||
|
padding: 6upx 32upx;
|
||||||
|
border-radius: 40upx;
|
||||||
|
font-size: 28upx;
|
||||||
|
color: #ffffff;
|
||||||
|
position: absolute;
|
||||||
|
top: 50upx;
|
||||||
|
left: 46upx;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
.click{
|
||||||
|
position: absolute;
|
||||||
|
width: 240upx;
|
||||||
|
height: 304upx;
|
||||||
|
bottom: 410upx;
|
||||||
|
left: 50%;
|
||||||
|
transform: rotateZ(-17deg) translateX(-58%);
|
||||||
|
}
|
||||||
|
.btn{
|
||||||
|
position: absolute;
|
||||||
|
width: 240upx;
|
||||||
|
height: 58upx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background: rgba(62, 0, 7, 1);
|
||||||
|
|
||||||
|
border-radius: 40upx;
|
||||||
|
bottom: 30upx;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
image{
|
||||||
|
width: 10upx;
|
||||||
|
margin-left: 10upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
595
pages/index/comfirm/comfirm.vue
Normal file
@ -0,0 +1,595 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar
|
||||||
|
navTitle=""
|
||||||
|
:hasLogo="true"
|
||||||
|
:color="'#000000'"
|
||||||
|
:backBackGroundColor="'rgb(105, 154, 112)'"
|
||||||
|
></navBar>
|
||||||
|
<view class="goods">
|
||||||
|
<image :src="collection.CollectionImg" mode=""></image>
|
||||||
|
<view class="right">
|
||||||
|
<view class="title">{{ collection.Name }}</view>
|
||||||
|
<text style="font-size: 30rpx" class="price">
|
||||||
|
¥
|
||||||
|
<text style="font-size: 48rpx; font-weight: 600" class="price">{{
|
||||||
|
collection.Price.toFixed(2)
|
||||||
|
}}</text>
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="pay">
|
||||||
|
<!-- <u-radio-group v-model="payType" style="width: 100%">
|
||||||
|
<view class="item" v-for="(item, index) in list" :key="index">
|
||||||
|
<view class="left">
|
||||||
|
<image :src="item.icon"></image>
|
||||||
|
{{ item.name }}
|
||||||
|
</view>
|
||||||
|
<u-radio :name="item.id" active-color="#07C160"></u-radio>
|
||||||
|
</view>
|
||||||
|
</u-radio-group> -->
|
||||||
|
<view class="item">
|
||||||
|
<view class="min200">{{ $t("payInfo.buyerName") }}</view>
|
||||||
|
<view class="value">{{ nickName }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min200">{{ $t("payInfo.orderPrice") }}</view>
|
||||||
|
<view class="value">{{ collection.Price }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min200">{{ $t("payInfo.typePrice") }}</view>
|
||||||
|
<!-- <view>{{ payTypeName }}</view> -->
|
||||||
|
<view>
|
||||||
|
<payComponet @payModeHandel="payModeHandel" />
|
||||||
|
</view>
|
||||||
|
<!-- <u-input
|
||||||
|
v-model="payTypeName"
|
||||||
|
shape="circle"
|
||||||
|
border="none"
|
||||||
|
class="login-input"
|
||||||
|
></u-input> -->
|
||||||
|
</view>
|
||||||
|
<view class="item" v-show="payTypeName === '央行数字人民币'">
|
||||||
|
<view class="min200">{{ $t("payInfo.payImages") }}</view>
|
||||||
|
<view
|
||||||
|
><u-upload
|
||||||
|
:fileList="fileList"
|
||||||
|
@afterRead="afterRead"
|
||||||
|
@delete="deletePic"
|
||||||
|
multiple
|
||||||
|
:previewFullImage="true"
|
||||||
|
></u-upload
|
||||||
|
></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
style="text-align: center; color: #699a70"
|
||||||
|
v-if="payTypeName === '央行数字人民币'"
|
||||||
|
>{{ $t("payInfo.salesperson") }}
|
||||||
|
</view>
|
||||||
|
<view class="online-pay" v-else>
|
||||||
|
<view class="mode">请选择线上支付方式</view>
|
||||||
|
<view class="line"></view>
|
||||||
|
|
||||||
|
<u-radio-group v-model="value">
|
||||||
|
<u-radio>
|
||||||
|
<view class="mode-pay">
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/money.png"
|
||||||
|
mode="scaleToFill"
|
||||||
|
class="img"
|
||||||
|
/>
|
||||||
|
<view class="text">数字人名币</view>
|
||||||
|
</view>
|
||||||
|
</u-radio>
|
||||||
|
</u-radio-group>
|
||||||
|
</view>
|
||||||
|
<view class="navigation">
|
||||||
|
<view class="left">
|
||||||
|
<view class="price">
|
||||||
|
<text>{{ $t("comfirm.total") }}:</text>
|
||||||
|
<text>¥</text>
|
||||||
|
<text style="font-size: 46rpx">{{
|
||||||
|
collection.Price.toFixed(2)
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="right"
|
||||||
|
><u-button class="btn" @click="showCode" :disabled="!uploadFlag">{{
|
||||||
|
$t("confirm.payment")
|
||||||
|
}}</u-button>
|
||||||
|
</view>
|
||||||
|
<!-- <u-button :text="$t('comfirm.pay')" @click="showCode" :disabled="!uploadFlag" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
background: rgba(252, 73, 71, 1);
|
||||||
|
border-color: #3e3e3e;
|
||||||
|
color: #fff;
|
||||||
|
"></u-button> -->
|
||||||
|
</view>
|
||||||
|
<u-popup :show="show" @close="show = false" mode="center">
|
||||||
|
<view>
|
||||||
|
<view class="pop-title">{{ $t("payInfo.waitConfirm") }}</view>
|
||||||
|
<view class="codebox">
|
||||||
|
<img :src="qrCode" />
|
||||||
|
</view>
|
||||||
|
<u-button
|
||||||
|
:text="$t('comfirm.copy')"
|
||||||
|
color="#699A70"
|
||||||
|
@click="copyCode"
|
||||||
|
style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import payComponet from "pages/index/comfirm/payComponet/payComponet";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
payComponet,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
id: 0,
|
||||||
|
name: this.$t("alipay.payment"),
|
||||||
|
icon: "/static/image/home/zhifubao.png",
|
||||||
|
},
|
||||||
|
// {id: 1, name: '微信支付', icon:'/static/image/home/weixin.png'},
|
||||||
|
],
|
||||||
|
show: false,
|
||||||
|
numTotal: 1,
|
||||||
|
payType: 0,
|
||||||
|
collection: {},
|
||||||
|
fileList: [],
|
||||||
|
payTypeName: "央行数字人民币", // 暂时去除线上支付
|
||||||
|
nickName: "",
|
||||||
|
qrCode: "",
|
||||||
|
codeSec: "",
|
||||||
|
// 完成上传flag
|
||||||
|
uploadFlag: false,
|
||||||
|
value: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad: function (option) {
|
||||||
|
this.collection = JSON.parse(decodeURIComponent(option.Collection));
|
||||||
|
// 从localStorage中获取用户昵称
|
||||||
|
this.nickName = uni.getStorageSync("mall-user-info").nickName;
|
||||||
|
console.log(this.nickName, "nickName");
|
||||||
|
},
|
||||||
|
// 监听文件列表,如果长度小于1,禁用提交按钮
|
||||||
|
watch: {
|
||||||
|
fileList: function (val) {
|
||||||
|
if (val.length < 1) {
|
||||||
|
this.uploadFlag = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 将二维码内容复制到剪贴板
|
||||||
|
copyCode() {
|
||||||
|
uni.setClipboardData({
|
||||||
|
data: this.codeSec,
|
||||||
|
success: (res) => {
|
||||||
|
uni.showToast({
|
||||||
|
title: "复制成功",
|
||||||
|
icon: "success",
|
||||||
|
duration: 2000,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
fail: (res) => {
|
||||||
|
uni.showToast({
|
||||||
|
title: "复制失败",
|
||||||
|
icon: "none",
|
||||||
|
duration: 2000,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async submit() {
|
||||||
|
let res = await this.$api.series.buy({
|
||||||
|
collectionsUID: this.collection.CollectionUID,
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
// window.location.href = res.data.Url
|
||||||
|
uni.requestPayment({
|
||||||
|
provider: "alipay",
|
||||||
|
orderInfo: res.data.AppParams,
|
||||||
|
success: (result) => {
|
||||||
|
console.log(result, "成功回调");
|
||||||
|
let rawdata = JSON.parse(result.rawdata);
|
||||||
|
let outTradeNo = JSON.parse(rawdata.result)
|
||||||
|
.alipay_trade_app_pay_response.out_trade_no;
|
||||||
|
this.toFinish(outTradeNo);
|
||||||
|
},
|
||||||
|
fail: (error) => {},
|
||||||
|
});
|
||||||
|
} else if (res.status === 401) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/login",
|
||||||
|
});
|
||||||
|
uni.clearStorageSync();
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除图片
|
||||||
|
deletePic(event) {
|
||||||
|
this[`fileList`].splice(event.index, 1);
|
||||||
|
},
|
||||||
|
async afterRead(event) {
|
||||||
|
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
|
||||||
|
let lists = [].concat(event.file);
|
||||||
|
let fileListLen = this[`fileList`].length;
|
||||||
|
lists.map((item) => {
|
||||||
|
this[`fileList`].push({
|
||||||
|
...item,
|
||||||
|
status: "uploading",
|
||||||
|
message: "上传中",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
for (let i = 0; i < lists.length; i++) {
|
||||||
|
const result = await this.uploadFilePromise(lists[i].url);
|
||||||
|
console.log(result, "result");
|
||||||
|
let item = this[`fileList`][fileListLen];
|
||||||
|
this[`fileList`].splice(
|
||||||
|
fileListLen,
|
||||||
|
1,
|
||||||
|
Object.assign(item, {
|
||||||
|
status: "success",
|
||||||
|
message: "",
|
||||||
|
url: result,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
fileListLen++;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
uploadFilePromise(url) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const Authorization = uni.getStorageSync("token");
|
||||||
|
const userId = uni.getStorageSync("mall-user-info").ID;
|
||||||
|
let a = uni.uploadFile({
|
||||||
|
url: this.$baseUrl + "/mall/upload/file",
|
||||||
|
filePath: url,
|
||||||
|
name: "file",
|
||||||
|
formData: {
|
||||||
|
type: "image",
|
||||||
|
source: "user",
|
||||||
|
mask: userId,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
Authorization,
|
||||||
|
},
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res, "res");
|
||||||
|
res.data = JSON.parse(res.data);
|
||||||
|
resolve(res.data.data.ori_url);
|
||||||
|
this.uploadFlag = true;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 支付成功跳转
|
||||||
|
async toFinish(tradeno) {
|
||||||
|
let res = await this.$api.mine.paymentDetail({
|
||||||
|
outTradeNo: tradeno,
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
console.log(res);
|
||||||
|
// uni.$u.toast('支付成功');
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/index/payment/payment?artworkUid=" +
|
||||||
|
res.data.pay.artworkUid +
|
||||||
|
"&ID=" +
|
||||||
|
res.data.pay.ID,
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 打开二维码
|
||||||
|
async showCode() {
|
||||||
|
// 生成二维码
|
||||||
|
console.log(this.fileList, "fileList");
|
||||||
|
if (!this.payTypeName) {
|
||||||
|
uni.$u.toast(this.$t("payInfo.typePrice"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let res = await this.$api.series.createQrcode({
|
||||||
|
collectionsUID: this.collection.CollectionUID,
|
||||||
|
payTypeName: this.payTypeName,
|
||||||
|
payImages: this.fileList.map((item) => item.url),
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.qrCode = res.data.Code;
|
||||||
|
this.codeSec = res.data.CodeSc;
|
||||||
|
this.show = true;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
payModeHandel(mode) {
|
||||||
|
this.payTypeName = mode === "线下支付" ? "央行数字人民币" : mode;
|
||||||
|
console.log(this.payTypeName);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/new_bg.png") no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-radio {
|
||||||
|
width: 550rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.online-pay {
|
||||||
|
margin: 40rpx 45rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
height: 190rpx;
|
||||||
|
|
||||||
|
.mode {
|
||||||
|
color: #699a70;
|
||||||
|
font-size: 28rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
margin-bottom: 22rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
width: 568rpx;
|
||||||
|
height: 0.5rpx;
|
||||||
|
background: #9dd0a4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-pay {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
// margin-top: 30rpx;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 26rpx;
|
||||||
|
height: 26rpx;
|
||||||
|
margin-right: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
color: #434343;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.goods {
|
||||||
|
margin: 40rpx 45rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 40rpx 22rpx;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 228rpx;
|
||||||
|
height: 228rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
margin-left: 20rpx;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 32rpx;
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
color: #699a70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.min200 {
|
||||||
|
min-width: 200rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-input {
|
||||||
|
height: 68upx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.6);
|
||||||
|
padding: 0 20rpx;
|
||||||
|
|
||||||
|
/deep/ .uni-input-placeholder {
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
color: #fff;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay {
|
||||||
|
margin: 40rpx 45rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20rpx 22rpx;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
// justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin: 10rpx 0;
|
||||||
|
margin-bottom: 30upx;
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navigation {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 10;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 100rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 30rpx 16rpx 30rpx 10rpx;
|
||||||
|
|
||||||
|
.left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 20rpx;
|
||||||
|
margin-left: 30rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
|
||||||
|
.num {
|
||||||
|
width: 84rpx;
|
||||||
|
color: #878787;
|
||||||
|
margin-right: 10rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
flex: 1;
|
||||||
|
color: #434343;
|
||||||
|
|
||||||
|
text:nth-child(1) {
|
||||||
|
// color: #000000;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
text:nth-child(2) {
|
||||||
|
font-size: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
text:nth-child(3) {
|
||||||
|
font-size: 60rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding-right: 40rpx;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 258rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
line-height: 56rpx;
|
||||||
|
background: #699a70;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
color: #ffffff;
|
||||||
|
text-align: center;
|
||||||
|
border: none;
|
||||||
|
// background-color: $tree-theme-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
font-size: 30upx;
|
||||||
|
width: 400rpx;
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 40upx;
|
||||||
|
|
||||||
|
.imgBox {
|
||||||
|
width: 300rpx;
|
||||||
|
height: 300rpx;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 300rpx;
|
||||||
|
height: 300rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-upload__button {
|
||||||
|
background-color: #878787;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-popup__content {
|
||||||
|
background-color: #3e3e3e !important;
|
||||||
|
width: 700upx !important;
|
||||||
|
height: 880upx !important;
|
||||||
|
display: flex !important;
|
||||||
|
align-items: center !important;
|
||||||
|
|
||||||
|
.pop-title {
|
||||||
|
font-size: 40upx;
|
||||||
|
color: #699a70;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 80upx;
|
||||||
|
margin-top: 70upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 520upx;
|
||||||
|
height: 520upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.codebox {
|
||||||
|
width: 570upx;
|
||||||
|
height: 570upx;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 10upx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
124
pages/index/comfirm/payComponet/payComponet.vue
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<template>
|
||||||
|
<view class="butttonGroup" :class="{ bg: isShow }">
|
||||||
|
<view class="onlineBox">
|
||||||
|
<view class="title">{{ selectPayMode }}</view>
|
||||||
|
<image
|
||||||
|
v-show="!isShow"
|
||||||
|
src="@/static/image/home/down-icon.png"
|
||||||
|
mode="scaleToFill"
|
||||||
|
class="img"
|
||||||
|
@click="showPay('up')"
|
||||||
|
/>
|
||||||
|
<image
|
||||||
|
v-show="isShow"
|
||||||
|
src="@/static/image/home/up-icon.png"
|
||||||
|
mode="scaleToFill"
|
||||||
|
class="img"
|
||||||
|
@click="showPay('down')"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
<view class="mode" v-show="isShow">
|
||||||
|
<view v-for="(item, index) in modeList" :key="item.id" class="pay">
|
||||||
|
<view
|
||||||
|
:class="['name', currect === index ? 'active' : '']"
|
||||||
|
@click="checkPay(item, index)"
|
||||||
|
>{{ item.name }}</view
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
modeList: [
|
||||||
|
// { id: "1", name: "线上支付" },// 暂时去除线上支付
|
||||||
|
{ id: "2", name: "线下支付" },
|
||||||
|
],
|
||||||
|
isShow: false,
|
||||||
|
currect: 0,
|
||||||
|
selectPayMode: "线下支付", // 暂时去除线上支付
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
showPay(type) {
|
||||||
|
if (type === "up") {
|
||||||
|
this.isShow = true;
|
||||||
|
} else {
|
||||||
|
this.isShow = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
checkPay(item, index) {
|
||||||
|
this.currect = index;
|
||||||
|
if (this.selectPayMode === item.name) {
|
||||||
|
return this.selectPayMode;
|
||||||
|
}
|
||||||
|
this.selectPayMode = item.name;
|
||||||
|
this.$emit("payModeHandel", this.selectPayMode);
|
||||||
|
this.isShow = false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.bg {
|
||||||
|
background: #f5f5f5;
|
||||||
|
}
|
||||||
|
.butttonGroup {
|
||||||
|
width: 198rpx;
|
||||||
|
border-radius: 30rpx 30rpx 0 0;
|
||||||
|
position: relative;
|
||||||
|
border: 0;
|
||||||
|
.onlineBox {
|
||||||
|
width: 198rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 60rpx;
|
||||||
|
background-color: #e4e4e4;
|
||||||
|
border-radius: 30rpx;
|
||||||
|
color: #434343;
|
||||||
|
font-size: 20rpx;
|
||||||
|
border: 0;
|
||||||
|
justify-content: space-around;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
// margin-left: 40rpx;
|
||||||
|
// margin-right: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.mode {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 150rpx;
|
||||||
|
height: 80rpx; // 暂时去除线上支付
|
||||||
|
border-radius: 0 0 30rpx 30rpx;
|
||||||
|
z-index: 1;
|
||||||
|
color: #434343;
|
||||||
|
font-size: 20rpx;
|
||||||
|
background: #f5f5f5;
|
||||||
|
top: 57rpx;
|
||||||
|
.pay {
|
||||||
|
padding: 0 20rpx;
|
||||||
|
.name {
|
||||||
|
height: 42rpx;
|
||||||
|
padding: 8rpx 0;
|
||||||
|
margin-top: 14rpx;
|
||||||
|
line-height: 42rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.active {
|
||||||
|
background: rgba(157, 208, 164, 0.2);
|
||||||
|
border-radius: 30rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
832
pages/index/detail/detail.vue
Normal file
@ -0,0 +1,832 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar
|
||||||
|
:navTitle="collectionsDetail.Name"
|
||||||
|
:stickyShow="stickyShow"
|
||||||
|
:color="'#000000'"
|
||||||
|
:backBackGroundColor="'#699A70'"
|
||||||
|
v-if="!isActive"
|
||||||
|
:sfBack="true"
|
||||||
|
@triggerSfBack="back"
|
||||||
|
></navBar>
|
||||||
|
<view
|
||||||
|
class="fixed-box"
|
||||||
|
:style="{ background: !isActive ? '#FFFFFF' : '#000000' }"
|
||||||
|
>
|
||||||
|
<view class="btn" v-if="!isActive">
|
||||||
|
<u-button
|
||||||
|
type="primary"
|
||||||
|
:text="$t('navbar.back')"
|
||||||
|
class="back"
|
||||||
|
@click="back"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
v-if="this.collectionsDetail.CurrencyType === 'point'"
|
||||||
|
type="success"
|
||||||
|
:text="'积分制尚未开通'"
|
||||||
|
class="buyer"
|
||||||
|
></u-button>
|
||||||
|
|
||||||
|
<u-button
|
||||||
|
v-if="this.collectionsDetail.CurrencyType === 'normal'"
|
||||||
|
type="success"
|
||||||
|
:text="
|
||||||
|
this.collectionsDetail.SaleType === 'draw'
|
||||||
|
? '领取'
|
||||||
|
: this.collectionsDetail.SaleType === 'normal'
|
||||||
|
? '¥' + price + $t('collection.buy')
|
||||||
|
: '仅限渠道购买'
|
||||||
|
"
|
||||||
|
class="buyer"
|
||||||
|
@click="buy"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
<view class="btn" v-else>
|
||||||
|
<u-button
|
||||||
|
type="primary"
|
||||||
|
:text="$t('navbar.back')"
|
||||||
|
class="back-active"
|
||||||
|
@click="back"
|
||||||
|
></u-button>
|
||||||
|
<u-button type="success" :text="'售罄'" class="sell-out"></u-button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="!isActive">
|
||||||
|
<view class="top-img">
|
||||||
|
<!-- @click="open3D"-->
|
||||||
|
<image
|
||||||
|
:src="this.collectionsDetail.CollectionImg"
|
||||||
|
mode="widthFix"
|
||||||
|
></image>
|
||||||
|
<!-- <text class="price" v-if="this.collectionsDetail.Price != 0">¥{{ this.collectionsDetail.Price }}</text> -->
|
||||||
|
</view>
|
||||||
|
<!-- <view class="title-t">{{ collectionsDetail.Price != 0 ? $t('letter.all') : $t('letter.you') }}</view> -->
|
||||||
|
<!-- <view class="info-box" style="padding: 28rpx 32rpx">
|
||||||
|
<image src="@/static/image/home/to1.png" class="title-img" v-if="collectionsDetail.Price != 0"></image>
|
||||||
|
<image src="@/static/image/home/to.png" class="title-img" v-else></image>
|
||||||
|
<image src="@/static/image/home/333.png" class="content-img" mode="widthFix"
|
||||||
|
v-if="collectionsDetail.Price != 0"></image>
|
||||||
|
<image src="@/static/image/home/222.png" class="content-img" mode="widthFix" v-else></image>
|
||||||
|
<view style="text-align: right;">
|
||||||
|
<image src="@/static/image/home/from.png" class="from-img"></image>
|
||||||
|
</view>
|
||||||
|
</view> -->
|
||||||
|
<view
|
||||||
|
class="title-t"
|
||||||
|
:style="{ fontSize: '36rpx', color: '#434343', fontWeight: 600 }"
|
||||||
|
>{{ $t("collection.info") }}
|
||||||
|
</view>
|
||||||
|
<view class="info-box" style="padding: 28rpx 32rpx; background: #ffffff">
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.name") }}</text>
|
||||||
|
<text class="value">{{ this.collectionsDetail.Name || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.type") }}</text>
|
||||||
|
<text class="value">{{
|
||||||
|
this.collectionsDetail.CollectionType || "-"
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.size") }}</text>
|
||||||
|
<text class="value">{{ this.collectionsDetail.Size || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.specs") }}</text>
|
||||||
|
<text class="value">{{ this.collectionsDetail.Specs || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.address") }}</text>
|
||||||
|
<text class="value">{{ this.collectionsDetail.Address || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.intro") }}</text>
|
||||||
|
<view class="des">{{ this.collectionsDetail.Intro || "-" }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="title-t"
|
||||||
|
:style="{ fontSize: '36rpx', color: '#434343', fontWeight: 600 }"
|
||||||
|
>{{ $t("collection.detail") }}
|
||||||
|
</view>
|
||||||
|
<view class="detail-info">
|
||||||
|
<!-- <view class="title-t">{{$t('collection.sell')}}</view>
|
||||||
|
<view class="box">
|
||||||
|
<image v-for="item in sellPoint" :key="item" :src="item" mode="widthFix" class="img"></image>
|
||||||
|
</view> -->
|
||||||
|
<view
|
||||||
|
v-if="
|
||||||
|
this.CollectionUID !== '372afbef-4d3c-4e06-8fae-2ef1068b0a89' &&
|
||||||
|
collDetails.length > 0
|
||||||
|
"
|
||||||
|
class="title-t"
|
||||||
|
>{{ $t("collection.sellDec") }}</view
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
v-if="
|
||||||
|
this.CollectionUID !== '372afbef-4d3c-4e06-8fae-2ef1068b0a89' &&
|
||||||
|
collDetails.length > 0
|
||||||
|
"
|
||||||
|
class="box"
|
||||||
|
>
|
||||||
|
<image
|
||||||
|
v-for="item in collDetails"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
v-if="
|
||||||
|
this.CollectionUID !== '372afbef-4d3c-4e06-8fae-2ef1068b0a89' &&
|
||||||
|
companyInfo.length > 0
|
||||||
|
"
|
||||||
|
class="title-t"
|
||||||
|
>{{ $t("collection.company") }}</view
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
v-if="
|
||||||
|
this.CollectionUID !== '372afbef-4d3c-4e06-8fae-2ef1068b0a89' &&
|
||||||
|
companyInfo.length > 0
|
||||||
|
"
|
||||||
|
class="box"
|
||||||
|
>
|
||||||
|
<image
|
||||||
|
v-for="item in companyInfo"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view v-if="copyright.length > 0" class="title-t">{{
|
||||||
|
$t("collection.copyight")
|
||||||
|
}}</view>
|
||||||
|
<view v-if="copyright.length > 0" lass="box">
|
||||||
|
<image
|
||||||
|
v-for="item in copyright"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view v-if="Blockchain.length > 0" class="title-t">{{
|
||||||
|
$t("collection.blockchain")
|
||||||
|
}}</view>
|
||||||
|
<view v-if="Blockchain.length > 0" class="box">
|
||||||
|
<image
|
||||||
|
v-for="item in Blockchain"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="" style="text-align: center; margin-top: 30rpx">
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/fontree.png"
|
||||||
|
mode=""
|
||||||
|
class="logo"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-else class="active">
|
||||||
|
<view class="head">
|
||||||
|
<u-button class="back" @click="back"> 返回 </u-button>
|
||||||
|
<view>泰丰十周年纪念徽章</view>
|
||||||
|
</view>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/drawing-board.png"
|
||||||
|
mode="scaleToFill"
|
||||||
|
class="drawing-board"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
<view style="height: 180rpx"></view>
|
||||||
|
<u-popup
|
||||||
|
:show="showVerfy"
|
||||||
|
mode="center"
|
||||||
|
@close="closeVerfy"
|
||||||
|
bgColor="transparent"
|
||||||
|
>
|
||||||
|
<view class="popup-box">
|
||||||
|
<view class="title">{{ $t("buyVerfy.title") }}</view>
|
||||||
|
<view class="">
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("buyVerfy.username") }}:</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--input
|
||||||
|
border="none"
|
||||||
|
shape="circle"
|
||||||
|
v-model="realName"
|
||||||
|
@focus="verfFocus"
|
||||||
|
></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("buyVerfy.idNum") }}:</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--input
|
||||||
|
border="none"
|
||||||
|
shape="circle"
|
||||||
|
v-model="idNum"
|
||||||
|
@focus="verfFocus"
|
||||||
|
></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="flex-end">
|
||||||
|
<view class="fl-e" v-if="succes">
|
||||||
|
<image
|
||||||
|
src="../../../static/image/home/true.png"
|
||||||
|
mode=""
|
||||||
|
style="width: 30rpx; height: 30rpx; margin-right: 5px"
|
||||||
|
></image>
|
||||||
|
<text style="color: #ffffff; font-size: 24rpx">{{
|
||||||
|
$t("buyVerfy.suss")
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="fl-e" v-if="err">
|
||||||
|
<image
|
||||||
|
src="../../../static/image/home/false.png"
|
||||||
|
mode=""
|
||||||
|
style="width: 30rpx; height: 30rpx; margin-right: 5px"
|
||||||
|
></image>
|
||||||
|
<text style="color: #fd343c; font-size: 24rpx">{{
|
||||||
|
$t("buyVerfy.error")
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button
|
||||||
|
:text="$t('buyVerfy.done')"
|
||||||
|
color="#699A70"
|
||||||
|
@click="verifyName"
|
||||||
|
style="
|
||||||
|
'width: 622rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 114rpx;'
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
<view @click="closeVerfy" class="cancel">{{
|
||||||
|
$t("buyVerfy.cancel")
|
||||||
|
}}</view>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stickyShow: false,
|
||||||
|
showVerfy: false,
|
||||||
|
CollectionUID: "",
|
||||||
|
collectionsDetail: {},
|
||||||
|
sellPoint: [],
|
||||||
|
collDetails: [],
|
||||||
|
companyInfo: [],
|
||||||
|
copyright: [],
|
||||||
|
Blockchain: [],
|
||||||
|
realName: "",
|
||||||
|
idNum: "",
|
||||||
|
err: false,
|
||||||
|
succes: false,
|
||||||
|
SeriesName: "",
|
||||||
|
isHave: false,
|
||||||
|
AirdorpUid: "",
|
||||||
|
price: "",
|
||||||
|
isActive: false,
|
||||||
|
currencyType: "",
|
||||||
|
pageParams: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onPageScroll(e) {
|
||||||
|
this.stickyShow = e.scrollTop > 5 ? true : false;
|
||||||
|
},
|
||||||
|
onLoad: function (option) {
|
||||||
|
this.pageParams = option;
|
||||||
|
this.CollectionUID = option.CollectionUID;
|
||||||
|
this.SeriesName = option.SeriesName;
|
||||||
|
this.price = option.Price;
|
||||||
|
this.isActive = !Object.keys(option).length;
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getCollectionDetail();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
calcRouteParams(obj) {
|
||||||
|
if (obj && JSON.stringify(obj) !== "{}") {
|
||||||
|
let str = "?";
|
||||||
|
for (let key in obj) {
|
||||||
|
str += key + "=" + obj[key] + "&";
|
||||||
|
}
|
||||||
|
return str.slice(0, -1);
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
},
|
||||||
|
open3D() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/index/detail/open3D/open3D",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
back() {
|
||||||
|
let routesRecord = getCurrentPages();
|
||||||
|
if (routesRecord.length > 1) {
|
||||||
|
this.$common.navigateBack();
|
||||||
|
} else {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getCollectionDetail() {
|
||||||
|
if (this.isActive) return;
|
||||||
|
let data = {
|
||||||
|
CollectionsUID: this.CollectionUID,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.collectionsInfo(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
// await this.getPick(res.data.CollectionUID);
|
||||||
|
this.collectionsDetail = res.data;
|
||||||
|
(this.AllImgList = res.data.CutImg ? JSON.parse(res.data.CutImg) : []),
|
||||||
|
this.cutImg();
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getPick(uid) {
|
||||||
|
if (this.isActive) return;
|
||||||
|
let parmas = {
|
||||||
|
uuid: uid,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.userHaveDropNo(parmas);
|
||||||
|
if (res.status === 0) {
|
||||||
|
console.log(res.data.Hava);
|
||||||
|
this.isHave = res.data.Have != 0 ? false : true;
|
||||||
|
this.AirdorpUid = res.data.UserAirdorpUid;
|
||||||
|
} else {
|
||||||
|
this.isHave = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cutImg() {
|
||||||
|
this.AllImgList.forEach((v) => {
|
||||||
|
if (Array.isArray(v.imgs)) {
|
||||||
|
v.imgs = v.imgs.filter((img) => {
|
||||||
|
if (img) {
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
switch (v.label) {
|
||||||
|
case "卖点":
|
||||||
|
this.sellPoint = v.imgs;
|
||||||
|
break;
|
||||||
|
case "藏品细节":
|
||||||
|
this.collDetails = v.imgs;
|
||||||
|
break;
|
||||||
|
case "工艺/公司介绍":
|
||||||
|
this.companyInfo = v.imgs;
|
||||||
|
break;
|
||||||
|
case "版权声明":
|
||||||
|
this.copyright = v.imgs;
|
||||||
|
break;
|
||||||
|
case "区块链说明":
|
||||||
|
this.Blockchain = v.imgs;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
buy() {
|
||||||
|
// 只有领取和普通购买 才执行下去
|
||||||
|
if (
|
||||||
|
this.collectionsDetail.CurrencyType === "normal" &&
|
||||||
|
["normal", "draw"].includes(this.collectionsDetail.SaleType)
|
||||||
|
) {
|
||||||
|
let token = uni.getStorageSync("mall_token");
|
||||||
|
let realName = uni.getStorageSync("mall-user-info")
|
||||||
|
? uni.getStorageSync("mall-user-info").realName
|
||||||
|
: "";
|
||||||
|
if (!token) {
|
||||||
|
uni.$u.toast(this.$t("login.pls"));
|
||||||
|
uni.setStorageSync(
|
||||||
|
"login-redirect",
|
||||||
|
"/pages/index/detail/detail" + this.calcRouteParams(this.pageParams)
|
||||||
|
);
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/login",
|
||||||
|
});
|
||||||
|
} else if (!realName) {
|
||||||
|
this.showVerfy = true;
|
||||||
|
} else {
|
||||||
|
if (this.collectionsDetail.SaleType === "draw") {
|
||||||
|
this.directGet();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/index/comfirm/comfirm?Collection=" +
|
||||||
|
encodeURIComponent(JSON.stringify(this.collectionsDetail)),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async directGet() {
|
||||||
|
let data = {
|
||||||
|
CollectionsUID: this.collectionsDetail.CollectionUID,
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.directGet(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast("领取成功!");
|
||||||
|
this.getCollectionDetail();
|
||||||
|
|
||||||
|
let routesRecord = getCurrentPages();
|
||||||
|
if (routesRecord.length > 1) {
|
||||||
|
let that = this;
|
||||||
|
setTimeout(() => {
|
||||||
|
that.$common.navigateBack();
|
||||||
|
}, 1000);
|
||||||
|
} else {
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async pickUp() {
|
||||||
|
let data = {
|
||||||
|
UserId: uni.getStorageSync("mall-user-info").ID,
|
||||||
|
Uuid: this.AirdorpUid,
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.getCollection(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.recive();
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async recive() {
|
||||||
|
let data = {
|
||||||
|
collectionsUID: this.CollectionUID,
|
||||||
|
userAirdropUuid: this.AirdorpUid,
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.getCollectionStepTwo(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/index/payment/reciveOK",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async verifyName() {
|
||||||
|
let data = {
|
||||||
|
idNum: this.idNum,
|
||||||
|
realName: this.realName,
|
||||||
|
};
|
||||||
|
if (!data.idNum || !data.realName) {
|
||||||
|
return uni.$u.toast("姓名和身份证号不能为空");
|
||||||
|
}
|
||||||
|
if (!uni.$u.test.idCard(data.idNum)) {
|
||||||
|
return uni.$u.toast("身份证号不正确");
|
||||||
|
}
|
||||||
|
let res = await this.$api.mine.update(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.succes = true;
|
||||||
|
uni.setStorageSync("mall-user-info", res.data);
|
||||||
|
setTimeout(() => {
|
||||||
|
this.idNum = "";
|
||||||
|
this.realName = "";
|
||||||
|
this.showVerfy = false;
|
||||||
|
this.err = false;
|
||||||
|
this.succes = false;
|
||||||
|
}, 1000);
|
||||||
|
} else {
|
||||||
|
this.err = true;
|
||||||
|
this.succes = false;
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
verfFocus() {
|
||||||
|
this.err = false;
|
||||||
|
this.succes = false;
|
||||||
|
},
|
||||||
|
doneVerfy() {
|
||||||
|
this.showVerfy = false;
|
||||||
|
},
|
||||||
|
closeVerfy() {
|
||||||
|
this.showVerfy = false;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/new_bg.png?x-oss-process=image/resize,w_750,h_1580")
|
||||||
|
no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.head {
|
||||||
|
position: absolute;
|
||||||
|
top: 30rpx;
|
||||||
|
left: 26rpx;
|
||||||
|
display: flex;
|
||||||
|
height: 110rpx;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 32rpx;
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
|
.back {
|
||||||
|
width: 128rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
color: #ffffff;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
line-height: 56rpx;
|
||||||
|
background: rgba(255, 255, 255, 0.4);
|
||||||
|
margin-right: 78rpx;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawing-board {
|
||||||
|
width: 100%;
|
||||||
|
height: 6986rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fixed-box {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 172rpx;
|
||||||
|
// background: #3e3e3e;
|
||||||
|
background: #ffffff;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: flex;
|
||||||
|
padding: 42rpx 38rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
width: 172rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
// background: #efba42;
|
||||||
|
background: #efba42;
|
||||||
|
border-color: aliceblue;
|
||||||
|
margin-right: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-active {
|
||||||
|
width: 172rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
// background: #efba42;
|
||||||
|
background: rgba(255, 255, 255, 0.4);
|
||||||
|
border-color: aliceblue;
|
||||||
|
margin-right: 30rpx;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buyer {
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
// background: #558bf2;
|
||||||
|
background: #699a70;
|
||||||
|
border-color: aliceblue;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sell-out {
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
// background: #558bf2;
|
||||||
|
background: #fc4947;
|
||||||
|
border-color: #fc4947;
|
||||||
|
}
|
||||||
|
|
||||||
|
.disBtn {
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
line-height: 56upx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
background: rgba(65, 0, 0, 1);
|
||||||
|
border: 1upx #fff solid;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-img {
|
||||||
|
background-size: contain;
|
||||||
|
width: 660rpx;
|
||||||
|
height: 660rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin: 44rpx 44rpx 32rpx 46rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.price {
|
||||||
|
font-size: 48rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 10rpx;
|
||||||
|
right: 30upx;
|
||||||
|
// left: 50%;
|
||||||
|
// transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .box-item {
|
||||||
|
// background: rgba(255, 255, 255, 0.3);
|
||||||
|
// background: rgba(11, 0, 0, 0.4);
|
||||||
|
// margin: 0 44rpx 0 46rpx;
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
// height: 198rpx;
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
|
||||||
|
.detail-info {
|
||||||
|
// background: rgba(0, 0, 0, 0.8);
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin: 30rpx;
|
||||||
|
padding: 23rpx;
|
||||||
|
|
||||||
|
.box {
|
||||||
|
// margin: 0 44rpx 0 46rpx;
|
||||||
|
margin-bottom: 46rpx;
|
||||||
|
// background: url('@/static/image/home/bg-info.png') no-repeat; // rgba(255, 255, 255, 0.3);
|
||||||
|
border-radius: 15rpx;
|
||||||
|
// padding: 38rpx 32rpx;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-t {
|
||||||
|
text-align: center;
|
||||||
|
margin: 40rpx 0 30rpx 0;
|
||||||
|
color: #494949;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
margin: 0 44rpx 0 46rpx;
|
||||||
|
margin-bottom: 46rpx;
|
||||||
|
// background: rgba(255, 255, 255, 0.3);
|
||||||
|
background: rgba(11, 0, 0, 0.3);
|
||||||
|
// background: url('@/static/image/home/bg-info.png') no-repeat;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
// padding: 38rpx 32rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.title-img {
|
||||||
|
width: 300upx;
|
||||||
|
height: 50upx;
|
||||||
|
margin-bottom: 32upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-img {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.from-img {
|
||||||
|
width: 356upx;
|
||||||
|
height: 44upx;
|
||||||
|
margin-top: 20upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
font-size: 20rpx;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
padding-right: 40rpx;
|
||||||
|
width: 130rpx;
|
||||||
|
color: #434343;
|
||||||
|
font-size: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
|
||||||
|
.des {
|
||||||
|
width: 450rpx;
|
||||||
|
/* display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden; */
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: normal;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
width: 202rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-box {
|
||||||
|
background: #ffffff;
|
||||||
|
height: 842rpx;
|
||||||
|
width: 698rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 38rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 96rpx;
|
||||||
|
margin-bottom: 152rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-box {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding-bottom: 34rpx;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 22rpx;
|
||||||
|
color: #699a70;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
background-color: rgba(135, 135, 135, 0.5);
|
||||||
|
width: 515rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
/deep/ .input-placeholder {
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
font-size: 24rpx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-end {
|
||||||
|
padding: 0 34rpx 34rpx 38rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
|
||||||
|
.fl-e {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel {
|
||||||
|
color: #878787;
|
||||||
|
font-size: 32rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
50
pages/index/detail/open3D/open3D.vue
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="ThreeJSCity">
|
||||||
|
<!-- <model-obj class="ThreeDShow" src="../../static/5.obj" mtl="../../static/5.mtl" ></model-obj> -->
|
||||||
|
<!-- :background-alpha="alpha" :lights="lights"-->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import { ModelStl,ModelObj } from 'vue-3d-model'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
alpha: 0,
|
||||||
|
lights: [{
|
||||||
|
type: 'HemisphereLight',
|
||||||
|
position: {x: 0, y: 1, z: 0},
|
||||||
|
skyColor: 0xffffff,
|
||||||
|
// groundColor: 0xFF0000, // 此代码为灯光后颜色
|
||||||
|
intensity: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'DirectionalLight',
|
||||||
|
position: {x: 1, y: 1, z: 1},
|
||||||
|
color: 0xffffff,
|
||||||
|
intensity: .7,
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: { ModelStl ,ModelObj},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.ThreeJSCity {
|
||||||
|
width: 750upx;
|
||||||
|
height: 100vh;
|
||||||
|
// border:1px solid red;
|
||||||
|
background: url('../../../../static/bg-3d.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
// z-index:0;
|
||||||
|
// background: #fff;
|
||||||
|
.ThreeDShow {
|
||||||
|
width: 750upx;
|
||||||
|
height: 750upx;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
171
pages/index/dialog/dialog.vue
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<u-popup :show="show" mode="center" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="item">
|
||||||
|
<image style="width: 600upx; height: 600upx" :src="detail.collectionImg"></image>
|
||||||
|
</view>
|
||||||
|
<view style="
|
||||||
|
color: rgb(0, 0, 0);
|
||||||
|
margin-top: 10upx;
|
||||||
|
margin-bottom: 10upx;
|
||||||
|
font-size: 40upx;
|
||||||
|
">
|
||||||
|
{{ detail.name }}
|
||||||
|
</view>
|
||||||
|
<view style="color: #6c6c6c; margin-top: 10upx; margin-bottom: 10upx" v-html="detail.intro">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn-box">
|
||||||
|
<u-button :text="detail.isReceive
|
||||||
|
? '已被领取'
|
||||||
|
: detail.saleType === 'homebuy'
|
||||||
|
? '¥' + detail.price + '购买'
|
||||||
|
: $t('to.accept')
|
||||||
|
" @click="recive" style="
|
||||||
|
width: 460rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
background: #699a70;
|
||||||
|
border: none;
|
||||||
|
color: #fff;
|
||||||
|
"></u-button>
|
||||||
|
<view style="margin-top: 30rpx; text-align: center" @click="close">{{
|
||||||
|
$t("buyVerfy.cancel")
|
||||||
|
}}</view>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
// const jweixin = require("jweixin-module");
|
||||||
|
// import jweixin from "weixin-js-sdk";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
show: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
isShow: {
|
||||||
|
immediate: true,
|
||||||
|
handler(newValue) {
|
||||||
|
this.show = newValue;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
props: ["detail", "collectionsUID", "num", "isShow"],
|
||||||
|
methods: {
|
||||||
|
close() {
|
||||||
|
this.show = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
async recive() {
|
||||||
|
if (this.detail.isReceive) return;
|
||||||
|
if (this.detail.saleType === 'homebuy') {
|
||||||
|
this.payHandle()
|
||||||
|
} else {
|
||||||
|
await this.$api.series
|
||||||
|
.collectionsReceive({
|
||||||
|
collectionsUID: this.collectionsUID,
|
||||||
|
num: this.num,
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.show = false;
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg, null, "error");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
async payHandle() {
|
||||||
|
await this.$api.series
|
||||||
|
.collectionsBuy({
|
||||||
|
collectionsUID: this.collectionsUID,
|
||||||
|
num: this.num,
|
||||||
|
openId: uni.getStorageSync("openId"),
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.vxPay(res.data);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
vxPay(data) {
|
||||||
|
jweixin.config({
|
||||||
|
debug: false,
|
||||||
|
appId: "wx72ffc6670d5ddb12",
|
||||||
|
timestamp: 1682402430,
|
||||||
|
nonceStr: "123",
|
||||||
|
signature: "123",
|
||||||
|
jsApiList: ["chooseWXPay"],
|
||||||
|
});
|
||||||
|
jweixin.chooseWXPay({
|
||||||
|
prepay_id: data.prepay_id,
|
||||||
|
appId: data.appId,
|
||||||
|
timestamp: data.timeStamp,
|
||||||
|
nonceStr: data.nonceStr,
|
||||||
|
package: data.package,
|
||||||
|
signType: data.signType,
|
||||||
|
paySign: data.paySign,
|
||||||
|
success: () => {
|
||||||
|
this.$common.msgToast("支付成功", null, "success");
|
||||||
|
this.close();
|
||||||
|
},
|
||||||
|
fail: (res) => {
|
||||||
|
this.$common.msgToast(res.errMsg, null, "error");
|
||||||
|
},
|
||||||
|
});
|
||||||
|
jweixin.error(function (res) {
|
||||||
|
this.$common.msgToast("用户取消支付", null, "error");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.popupLocale-box {
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 42rpx;
|
||||||
|
|
||||||
|
.u-button {
|
||||||
|
width: 260rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
395
pages/index/index.vue
Normal file
@ -0,0 +1,395 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<tabBar :currentPage="'pages/index/index'"></tabBar>
|
||||||
|
<view class="content">
|
||||||
|
<image
|
||||||
|
src="../../static/image/home/fontree.png"
|
||||||
|
mode=""
|
||||||
|
class="logo"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<scroll-view
|
||||||
|
scroll-y
|
||||||
|
@scrolltolower="onreachBottom"
|
||||||
|
:refresher-enabled="true"
|
||||||
|
:refresher-triggered="isrefresh"
|
||||||
|
@refresherpulling="openLoading"
|
||||||
|
@refresherrefresh="onRefresh"
|
||||||
|
@refresherrestore="onRestore"
|
||||||
|
@scroll="onScroll"
|
||||||
|
:scroll-anchoring="true"
|
||||||
|
refresher-background="#699A70"
|
||||||
|
refresher-default-style="none"
|
||||||
|
:style="'height:' + listHeight + 'px;'"
|
||||||
|
:refresher-threshold="300"
|
||||||
|
class="scroll"
|
||||||
|
>
|
||||||
|
<image
|
||||||
|
src="../../static/image/home/new_line.png"
|
||||||
|
mode=""
|
||||||
|
class="line"
|
||||||
|
v-if="showPull"
|
||||||
|
></image>
|
||||||
|
<image
|
||||||
|
src="../../static/image/home/new_flower.png"
|
||||||
|
mode=""
|
||||||
|
class="flower-static"
|
||||||
|
v-if="showPull"
|
||||||
|
></image>
|
||||||
|
<view v-for="(item, index) in listData" :key="index" class="item">
|
||||||
|
<view class="box">
|
||||||
|
<!-- :style="'background: url(' + item.CoverImg + ');'" -->
|
||||||
|
<image
|
||||||
|
:src="item.CoverImg"
|
||||||
|
mode="scaleToFill"
|
||||||
|
class="img"
|
||||||
|
@click="goLink(item)"
|
||||||
|
></image>
|
||||||
|
<!-- <view class="bt-con">
|
||||||
|
<view class="name">{{ item.SeriesName }}</view>
|
||||||
|
<view class="des">{{ item.Desc }}</view>
|
||||||
|
</view> -->
|
||||||
|
<view class="description">
|
||||||
|
<view class="text">
|
||||||
|
<view class="name">{{ item.SeriesName }}</view>
|
||||||
|
<view class="des">{{ item.Desc }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="line-des"></view>
|
||||||
|
<view
|
||||||
|
class="detail"
|
||||||
|
@click="goLink(item)"
|
||||||
|
:style="{
|
||||||
|
background:
|
||||||
|
item.SeriesName === '泰丰十周年' ? '#FC4947' : '#699A70',
|
||||||
|
}"
|
||||||
|
>查看详情</view
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<Dialog
|
||||||
|
:detail="detail"
|
||||||
|
:collectionsUID="collectionsUID"
|
||||||
|
:num="num"
|
||||||
|
:isShow="isShow"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
haojia
|
||||||
|
<script>
|
||||||
|
import Dialog from "./dialog/dialog.vue";
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Dialog,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
title: "Hello",
|
||||||
|
fromLogin: true,
|
||||||
|
listData: [],
|
||||||
|
page: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
showPull: false,
|
||||||
|
isrefresh: false,
|
||||||
|
listHeight: uni.getSystemInfoSync().windowHeight - 88 - 61,
|
||||||
|
isShow: false,
|
||||||
|
collectionsUID: "",
|
||||||
|
num: "",
|
||||||
|
detail: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
|
||||||
|
let curRoute = routes[routes.length - 2];
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
this.onreachBottom();
|
||||||
|
const collectionsUID = uni.getStorageSync("collectionsUID");
|
||||||
|
if (collectionsUID) {
|
||||||
|
this.collectionsUID = collectionsUID;
|
||||||
|
}
|
||||||
|
const num = uni.getStorageSync("num");
|
||||||
|
if (num) {
|
||||||
|
this.num = JSON.parse(num);
|
||||||
|
}
|
||||||
|
if (this.collectionsUID && this.num) {
|
||||||
|
this.collectionsDetail();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
openLoading(e) {
|
||||||
|
if (e.detail.deltaY < 0) return;
|
||||||
|
this.showPull = true;
|
||||||
|
this.isrefresh = true;
|
||||||
|
},
|
||||||
|
onRefresh(e) {
|
||||||
|
if (this._freshing) return;
|
||||||
|
this._freshing = true;
|
||||||
|
this.isrefresh = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
this.getData();
|
||||||
|
}, 2000);
|
||||||
|
},
|
||||||
|
onRestore() {
|
||||||
|
this.showPull = false;
|
||||||
|
},
|
||||||
|
onreachBottom() {
|
||||||
|
this.getData();
|
||||||
|
},
|
||||||
|
onScroll() {
|
||||||
|
this.page++;
|
||||||
|
let params = {
|
||||||
|
page: this.page,
|
||||||
|
pageSize: this.pageSize,
|
||||||
|
};
|
||||||
|
uni.$u.debounce(async () => {
|
||||||
|
await this.$api.series
|
||||||
|
.list(params)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status === 0) {
|
||||||
|
if (res.data.Data) {
|
||||||
|
this.listData = [...this.listData, ...(res.data.Data || [])];
|
||||||
|
}
|
||||||
|
this.page--;
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
},
|
||||||
|
goLink(item) {
|
||||||
|
// uni.navigateTo({
|
||||||
|
// url: '/pages/index/activity/index?detail=' + encodeURIComponent(JSON.stringify(item))
|
||||||
|
// });
|
||||||
|
console.log(1111, item);
|
||||||
|
if (item.SeriesName === "泰丰十周年") {
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/index/activeSeries/activeSeries?detail=" +
|
||||||
|
encodeURIComponent(JSON.stringify(item)),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/index/series/series?SeriesUID=" + item.SeriesUuid,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getData() {
|
||||||
|
let params = {
|
||||||
|
page: 1,
|
||||||
|
pageSize: this.pageSize,
|
||||||
|
};
|
||||||
|
await this.$api.series
|
||||||
|
.list(params)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.listData = res.data.Data;
|
||||||
|
/* } else {
|
||||||
|
this.listData = [...this.listData, ...res.data.Data || []];
|
||||||
|
} */
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.isrefresh = false; //触发onRestore,并关闭刷新图标
|
||||||
|
this._freshing = false;
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(1231312312, err);
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async collectionsDetail() {
|
||||||
|
if (uni.getStorageSync("collectionsDetail")) {
|
||||||
|
await this.$api.series
|
||||||
|
.collectionsDetail({
|
||||||
|
collectionsUID: this.collectionsUID,
|
||||||
|
num: this.num,
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.detail = res.data;
|
||||||
|
this.isShow = true;
|
||||||
|
uni.setStorageSync("collectionsDetail", false);
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg, null, "error");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/new_bg.png") no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-scroll-view-refresher {
|
||||||
|
max-height: 250rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-scroll-view {
|
||||||
|
overflow-y: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
height: 122rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
|
||||||
|
// padding-top: 300rpx;
|
||||||
|
// border: 1px solid red;
|
||||||
|
.logo {
|
||||||
|
width: 188rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
margin-top: 36rpx;
|
||||||
|
margin-left: 48rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
width: 2rpx;
|
||||||
|
height: 164rpx;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 0;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.flower-static {
|
||||||
|
width: 43rpx;
|
||||||
|
height: 43rpx;
|
||||||
|
position: absolute;
|
||||||
|
left: 47%;
|
||||||
|
top: 167rpx;
|
||||||
|
animation: fadenum 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadenum {
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
width: 656rpx;
|
||||||
|
height: 814rpx;
|
||||||
|
margin: 0 48rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 656rpx;
|
||||||
|
height: 656rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// .bt-con {
|
||||||
|
// position: absolute;
|
||||||
|
// bottom: 0;
|
||||||
|
// width: 656rpx;
|
||||||
|
// height: 158rpx;
|
||||||
|
// background: rgba(255, 255, 255, 0.3);
|
||||||
|
|
||||||
|
// //
|
||||||
|
// .name {
|
||||||
|
// font-size: 32rpx;
|
||||||
|
// border-bottom: 1rpx solid #fff;
|
||||||
|
// margin: 28rpx 50rpx 0 50rpx;
|
||||||
|
// text-align: center;
|
||||||
|
// padding-bottom: 10rpx;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .des {
|
||||||
|
// padding-top: 10rpx;
|
||||||
|
// font-size: 20rpx;
|
||||||
|
// text-align: center;
|
||||||
|
// overflow: hidden;
|
||||||
|
// text-overflow: ellipsis;
|
||||||
|
// white-space: nowrap;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
.description {
|
||||||
|
width: 656rpx;
|
||||||
|
height: 158rpx;
|
||||||
|
// border: 1px solid red;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 18px 11px 18px 11px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-bottom-left-radius: 8rpx;
|
||||||
|
border-bottom-right-radius: 8rpx;
|
||||||
|
|
||||||
|
.text {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.name {
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #000000;
|
||||||
|
font-family: "Songti TC";
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.des {
|
||||||
|
margin-right: 28rpx;
|
||||||
|
font-size: 20rpx;
|
||||||
|
color: #939393;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-des {
|
||||||
|
width: 1rpx;
|
||||||
|
height: 114rpx;
|
||||||
|
background-color: #d8d8d8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail {
|
||||||
|
background: #699a70;
|
||||||
|
padding: 12rpx 40rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-left: 19px;
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
76
pages/index/payment/payment.vue
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar navTitle="" :hasLogo="true" :backToUrl="'/pages/index/index'" :isSwitchTab="true"></navBar>
|
||||||
|
<view class="" style="text-align: center;margin-top: 60upx;">
|
||||||
|
<image src="@/static/image/home/ok-logo.png" mode="" class="pay-Img"></image>
|
||||||
|
<image src="@/static/image/home/ok.png" mode="" class="payImg"></image>
|
||||||
|
</view>
|
||||||
|
<view class="btns">
|
||||||
|
<view class="item">
|
||||||
|
<u-button :text="$t('payment.back')" color="#EDC466" @click="goHome" style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<!-- <u-button :text="$t('payment.check')" color="#558BF2" @click="goDetail" style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button> -->
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
artworkUid:'',
|
||||||
|
ID: '',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad: function (option) {
|
||||||
|
this.ID = option.ID
|
||||||
|
this.artworkUid = option.artworkUid
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goHome() {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
goDetail() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/mine/detail/detail?ID=' + this.ID + '&artworkUid=' + this.artworkUid
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page{
|
||||||
|
background: url('@/static/image/home/bg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment:fixed;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-Img{
|
||||||
|
width: 608upx;
|
||||||
|
height: 576upx;
|
||||||
|
margin-top: 30upx;
|
||||||
|
}
|
||||||
|
.payImg{
|
||||||
|
width: 218rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
margin-top: 20upx;
|
||||||
|
/* position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 40%;
|
||||||
|
transform: translate(-50%,-50%); */
|
||||||
|
}
|
||||||
|
.btns{
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
bottom: 200rpx;
|
||||||
|
.item{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
76
pages/index/payment/reciveOK.vue
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar navTitle="" :hasLogo="true" :backToUrl="'/pages/index/index'" :isSwitchTab="true"></navBar>
|
||||||
|
<view class="" style="text-align: center;margin-top: 60upx;">
|
||||||
|
<image src="@/static/image/home/ok-logo.png" mode="" class="pay-Img"></image>
|
||||||
|
<image src="@/static/image/home/recive.png" mode="" class="payImg"></image>
|
||||||
|
</view>
|
||||||
|
<view class="btns">
|
||||||
|
<view class="item">
|
||||||
|
<u-button :text="$t('payment.back')" color="#EDC466" @click="goHome" style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<!-- <u-button :text="$t('payment.check')" color="#558BF2" @click="goDetail" style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button> -->
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
artworkUid:'',
|
||||||
|
ID: '',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad: function (option) {
|
||||||
|
this.ID = option.ID
|
||||||
|
this.artworkUid = option.artworkUid
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goHome() {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
goDetail() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/mine/detail/detail?ID=' + this.ID + '&artworkUid=' + this.artworkUid
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page{
|
||||||
|
background: url('@/static/image/home/bg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment:fixed;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-Img{
|
||||||
|
width: 608upx;
|
||||||
|
height: 576upx;
|
||||||
|
margin-top: 30upx;
|
||||||
|
}
|
||||||
|
.payImg{
|
||||||
|
width: 218rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
margin-top: 20upx;
|
||||||
|
/* position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 40%;
|
||||||
|
transform: translate(-50%,-50%); */
|
||||||
|
}
|
||||||
|
.btns{
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
bottom: 200rpx;
|
||||||
|
.item{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
292
pages/index/series/series.vue
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
<template>
|
||||||
|
<view class="container">
|
||||||
|
<navBar
|
||||||
|
navTitle=""
|
||||||
|
:stickyShow="stickyShow"
|
||||||
|
:backBackGroundColor="'#699A70'"
|
||||||
|
></navBar>
|
||||||
|
|
||||||
|
<image :src="seriesItem.CoverImg" mode="" class="cover"></image>
|
||||||
|
<view class="designation">
|
||||||
|
<view class="left-x">
|
||||||
|
<view class="name">{{ seriesItem.SeriesName }}</view>
|
||||||
|
<view class="line"></view>
|
||||||
|
<view class="des">
|
||||||
|
{{ seriesItem.Desc }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="right-x">
|
||||||
|
<image :src="seriesItem.BrandImg" mode="" class="img"></image>
|
||||||
|
{{ seriesItem.BrandName }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="order-box">
|
||||||
|
<view
|
||||||
|
class="item"
|
||||||
|
v-for="i in collectionsData"
|
||||||
|
:key="i.CollectionUID"
|
||||||
|
@click="goDetail(i.CollectionUID)"
|
||||||
|
>
|
||||||
|
<image :src="i.CollectionImg" mode="" class="img"> </image>
|
||||||
|
<view class="content">
|
||||||
|
<view class="title">{{ i.Name }}</view>
|
||||||
|
<view class="price">
|
||||||
|
<text v-if="i.CurrencyType === 'normal'">¥</text>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/jifen.png"
|
||||||
|
mode="scaleToFill"
|
||||||
|
style="width: 24rpx; height: 24rpx"
|
||||||
|
v-else
|
||||||
|
/>
|
||||||
|
{{ i.Price }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="bot-text">
|
||||||
|
<view class="text-line"></view>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/fontree.png"
|
||||||
|
mode="aspectFit"
|
||||||
|
class="logo"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stickyShow: false,
|
||||||
|
seriesItem: {},
|
||||||
|
collectionsData: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
onLoad: function (option) {
|
||||||
|
Object.assign(this.seriesItem, { SeriesUuid: option.SeriesUID });
|
||||||
|
this.getPageData();
|
||||||
|
this.getCollections();
|
||||||
|
},
|
||||||
|
onPageScroll(e) {
|
||||||
|
this.stickyShow = e.scrollTop > 5 ? true : false;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getPageData() {
|
||||||
|
let params = {
|
||||||
|
seriesUuid: this.seriesItem.SeriesUuid,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.getSeriesData(params);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.seriesItem = res.data;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
navigateBack() {
|
||||||
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
goDetail(CollectionUID) {
|
||||||
|
const price = this.collectionsData.find(
|
||||||
|
(item) => item.CollectionUID === CollectionUID
|
||||||
|
).Price;
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/index/detail/detail?CollectionUID=" +
|
||||||
|
CollectionUID +
|
||||||
|
"&SeriesName=" +
|
||||||
|
this.seriesItem.SeriesName +
|
||||||
|
"&Price=" +
|
||||||
|
price,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getCollections() {
|
||||||
|
let data = {
|
||||||
|
Page: 1,
|
||||||
|
PageSize: 99999,
|
||||||
|
SeriesUID: this.seriesItem.SeriesUuid,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.collectionsList(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.collectionsData = res.data.Data;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/detail-kind-bg.png?x-oss-process=image/resize,w_750,h_1580")
|
||||||
|
no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-position: top center;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
// border: 1px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
padding-bottom: 1upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-box {
|
||||||
|
margin: 72upx 45upx;
|
||||||
|
background: rgba(11, 0, 0, 0.4);
|
||||||
|
border-radius: 8upx;
|
||||||
|
padding: 36upx;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.title-img {
|
||||||
|
width: 300upx;
|
||||||
|
height: 44upx;
|
||||||
|
margin-bottom: 24upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-img {
|
||||||
|
width: 594upx;
|
||||||
|
height: 1074upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.from-img {
|
||||||
|
width: 356upx;
|
||||||
|
height: 44upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.cover {
|
||||||
|
width: 100%;
|
||||||
|
height: 772rpx;
|
||||||
|
object-fit: cover;
|
||||||
|
margin-top: -110rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.designation {
|
||||||
|
margin: 20rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 28rpx 26rpx;
|
||||||
|
|
||||||
|
.left-x {
|
||||||
|
width: 460rpx;
|
||||||
|
|
||||||
|
.name {
|
||||||
|
color: #000000;
|
||||||
|
font-size: 32rpx;
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
width: 100%;
|
||||||
|
background: #878787;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.des {
|
||||||
|
padding-top: 30rpx;
|
||||||
|
width: 100%;
|
||||||
|
font-size: 20rpx;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-x {
|
||||||
|
color: #878787;
|
||||||
|
font-size: 24rpx;
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 128rpx;
|
||||||
|
height: 128rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-bottom: 10rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-box {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0 24rpx;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
width: 332rpx;
|
||||||
|
height: 418rpx;
|
||||||
|
background: #797979;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 332rpx;
|
||||||
|
height: 318rpx;
|
||||||
|
// object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
width: 100%;
|
||||||
|
height: 74rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
text-align: center;
|
||||||
|
// border-radius: 8rpx;
|
||||||
|
padding: 10rpx 0;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 32rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price {
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bot-text {
|
||||||
|
margin-top: 40rpx;
|
||||||
|
padding-bottom: 50rpx;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.text-line {
|
||||||
|
width: 90%;
|
||||||
|
height: 1rpx;
|
||||||
|
background: #878787;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copyright {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #878787;
|
||||||
|
margin-top: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
width: 252rpx;
|
||||||
|
height: 76rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
193
pages/login/login.vue
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
<template>
|
||||||
|
<view class="main">
|
||||||
|
<navBar navTitle="" :backToUrl="'/pages/index/index'" :isSwitchTab="true" :color="'#000000'"
|
||||||
|
:backBackGroundColor="'#3D553D'"></navBar>
|
||||||
|
<view class="hint">*登录/注册后才可以体验所有功能</view>
|
||||||
|
<view style="margin-top: 446upx; font-size: 40upx">{{ $t('login.title') }}</view>
|
||||||
|
<view class="input-box">
|
||||||
|
<u-input v-model="TelNum" :placeholder="$t('login.input')" shape="circle" type="number" border="none"
|
||||||
|
class="login-input"></u-input>
|
||||||
|
<u-checkbox-group v-model="checked" iconPlacement="left" placement="row" @change="changechec">
|
||||||
|
<u-checkbox name="yes" shape="circle"></u-checkbox>
|
||||||
|
<view class="know">
|
||||||
|
{{ $t('login.agree') }}
|
||||||
|
<text>{{ $t('login.service') }}</text>
|
||||||
|
<text>{{ $t('login.privacy') }}</text>
|
||||||
|
<text>{{ $t('login.registration') }}</text>
|
||||||
|
</view>
|
||||||
|
</u-checkbox-group>
|
||||||
|
</view>
|
||||||
|
<u-button :loading="loading" @click="goSendCode" class="btn" :text="$t('login.btn')" shape="circle"
|
||||||
|
color="#699A70"></u-button>
|
||||||
|
<slider-verify :isShow="sliderVerifyFLag" @touchSliderResult="verifyResult" ref="verifyElement"></slider-verify>
|
||||||
|
<image class="logo" src="../../static/image/home/fontree-white.png"></image>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
TelNum: "",
|
||||||
|
Password: "",
|
||||||
|
checkKnow: "",
|
||||||
|
loading: false,
|
||||||
|
sliderVerifyFLag: false,
|
||||||
|
count: 120,
|
||||||
|
timer: null,
|
||||||
|
checked: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad(e) {
|
||||||
|
if (Object.keys(e).length) {
|
||||||
|
const { collectionsUID, num } = e
|
||||||
|
uni.setStorageSync('collectionsUID', collectionsUID);
|
||||||
|
uni.setStorageSync('num', num);
|
||||||
|
if (uni.getStorageSync("mall-user-info") && uni.getStorageSync("mall_token")) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/welcome/welcome",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goSendCode() {
|
||||||
|
if (!uni.$u.test.mobile(this.TelNum)) {
|
||||||
|
this.$u.toast(this.$t('error.phone'));
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (this.checked.length > 0) {
|
||||||
|
this.sliderVerifyFLag = true;
|
||||||
|
} else {
|
||||||
|
this.$u.toast(this.$t('login.mess'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
changechec() {
|
||||||
|
console.log(this.checked);
|
||||||
|
},
|
||||||
|
countdown() {
|
||||||
|
this.timer = setInterval(() => {
|
||||||
|
this.count--;
|
||||||
|
if (this.count === 0) {
|
||||||
|
clearInterval(this.timer);
|
||||||
|
// this.isReset = false;
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
// 滑块验证结果回调函数
|
||||||
|
verifyResult(res) {
|
||||||
|
console.log(res);
|
||||||
|
setTimeout(() => {
|
||||||
|
this.sliderVerifyFLag = false;
|
||||||
|
this.countdown();
|
||||||
|
if (res) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "../login/sendCode/sendCode?telNum=" + this.TelNum,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
/deep/ .u-input__content__field-wrapper__field {
|
||||||
|
font-size: 24upx !important;
|
||||||
|
margin-left: 10upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/.u-checkbox__icon-wrap--circle {
|
||||||
|
width: 25upx !important;
|
||||||
|
height: 25upx !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-checkbox-label--left {
|
||||||
|
margin-top: -20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/login-bg.png") no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.hint {
|
||||||
|
width: 588rpx;
|
||||||
|
height: 72rpx;
|
||||||
|
background-color: rgba(157, 208, 164, 0.3);
|
||||||
|
font-size: 28rpx;
|
||||||
|
line-height: 72rpx;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
position: absolute;
|
||||||
|
top: 216rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.know {
|
||||||
|
margin-top: 20upx;
|
||||||
|
font-size: 28upx;
|
||||||
|
color: rgba(255, 255, 255, 0.6);
|
||||||
|
|
||||||
|
text {
|
||||||
|
color: #699A70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-box {
|
||||||
|
position: absolute;
|
||||||
|
top: 658upx;
|
||||||
|
width: 638upx;
|
||||||
|
|
||||||
|
.login-input {
|
||||||
|
height: 68upx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
margin-bottom: 17upx;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
|
||||||
|
/deep/ .uni-input-placeholder {
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
color: #fff;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
width: 24upx;
|
||||||
|
height: 24upx;
|
||||||
|
margin-right: 20upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
width: 344upx;
|
||||||
|
height: 60upx;
|
||||||
|
position: absolute;
|
||||||
|
top: 942upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-way {
|
||||||
|
color: #fcb462;
|
||||||
|
font-size: 28upx;
|
||||||
|
position: absolute;
|
||||||
|
top: 1068upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: 202upx;
|
||||||
|
height: 56upx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 40upx;
|
||||||
|
}</style>
|
201
pages/login/sendCode/sendCode.vue
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
<template>
|
||||||
|
<view class="main">
|
||||||
|
<navBar navTitle="" :isSwitchTab="true" :color="'#000000'" :backBackGroundColor="'#3D553D'"></navBar>
|
||||||
|
<u-code :seconds="seconds" @start="start" ref="uCode"
|
||||||
|
:start-text="$t('code.start')"
|
||||||
|
:change-text="$t('code.change')"
|
||||||
|
:end-text="$t('code.end')"
|
||||||
|
@change="codeChange"></u-code>
|
||||||
|
<view class="main-word">{{$t('sendCode.title')}}</view>
|
||||||
|
<view class="sec">
|
||||||
|
<view>{{$t('sendCode.send')}}</view>
|
||||||
|
<u--text mode="phone" color="#fff" :text="telNum || newNum" format="encrypt"></u--text>
|
||||||
|
<view class="resend" @tap="getCode">{{ tips }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="code-box"><u-code-input v-model="Code" :focus="focus"></u-code-input></view>
|
||||||
|
<u-button v-if="!this.token" class="btn" :text="$t('sendCode.login')" shape="circle" color="#699A70" @click="gologin" ></u-button>
|
||||||
|
<u-button v-else class="btn" :text="$t('sendCode.update')" shape="circle" color="#558BF2" @click="confirmChange" ></u-button>
|
||||||
|
<image class="logo" src="../../../static/image/home/fontree-white.png"></image>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tips: "",
|
||||||
|
// refCode: null,
|
||||||
|
seconds: 60,
|
||||||
|
wathTime: 10,
|
||||||
|
Code: "",
|
||||||
|
focus: false,
|
||||||
|
telNum: "",
|
||||||
|
token: "",
|
||||||
|
newNum: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
if (this.telNum) {
|
||||||
|
this.getCode();
|
||||||
|
} else {
|
||||||
|
this.getNewCode();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
this.telNum = options.telNum;
|
||||||
|
this.token = options.token;
|
||||||
|
this.newNum = options.newNum;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
codeChange(text) {
|
||||||
|
this.tips = text;
|
||||||
|
},
|
||||||
|
async getCode() {
|
||||||
|
if (this.$refs.uCode.canGetCode) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: this.$t("sendCode.loading"),
|
||||||
|
});
|
||||||
|
|
||||||
|
let res = await this.$api.login.sendCode({ telNum: this.telNum });
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.hideLoading();
|
||||||
|
// 这里此提示会被this.start()方法中的提示覆盖
|
||||||
|
this.focus = true;
|
||||||
|
this.$refs.uCode.start();
|
||||||
|
// 通知验证码组件内部开始倒计时
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("sendCode.toast"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getNewCode() {
|
||||||
|
if (this.$refs.uCode.canGetCode) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: this.$t("sendCode.loading"),
|
||||||
|
});
|
||||||
|
|
||||||
|
let res = await this.$api.login.sendNewCode({ token: this.token });
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.hideLoading();
|
||||||
|
// 这里此提示会被this.start()方法中的提示覆盖
|
||||||
|
this.focus = true;
|
||||||
|
this.$refs.uCode.start();
|
||||||
|
// 通知验证码组件内部开始倒计时
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("sendCode.toast"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async gologin() {
|
||||||
|
let data = {
|
||||||
|
telNum: this.telNum,
|
||||||
|
password: "",
|
||||||
|
code: this.Code,
|
||||||
|
};
|
||||||
|
let res = await this.$api.login.login(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.$common.msgToast(this.$t("login.success"), null, "success");
|
||||||
|
uni.setStorageSync("mall-user-info", res.data.accountInfo);
|
||||||
|
uni.setStorageSync("mall_token", res.data.token);
|
||||||
|
let returnUrl = uni.getStorageSync("return_url");
|
||||||
|
if (returnUrl) {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: returnUrl,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/welcome/welcome",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg || this.$t("login.error"), null, "error");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async confirmChange() {
|
||||||
|
let data = {
|
||||||
|
code: this.Code,
|
||||||
|
};
|
||||||
|
let res = await this.$api.login.confirmNew(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.$common.msgToast(
|
||||||
|
this.$t("sendCode.updateSuccess"),
|
||||||
|
null,
|
||||||
|
"success"
|
||||||
|
);
|
||||||
|
uni.removeStorageSync("mall-user-info");
|
||||||
|
uni.removeStorageSync("mall_token");
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: "/pages/login/login",
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg || this.$t("sendCode.updateError"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
start() {
|
||||||
|
uni.$u.toast(this.$t("sendCode"));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url('@/static/image/home/login-bg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
.main-word {
|
||||||
|
color: #fff;
|
||||||
|
position: absolute;
|
||||||
|
font-size: 40upx;
|
||||||
|
font-weight: bold;
|
||||||
|
top: 274upx;
|
||||||
|
}
|
||||||
|
.sec {
|
||||||
|
color: #fff;
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
top: 380upx;
|
||||||
|
.resend {
|
||||||
|
margin-left: 20upx;
|
||||||
|
color: #fcb462;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.code-box {
|
||||||
|
position: absolute;
|
||||||
|
top: 554upx;
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
width: 344upx;
|
||||||
|
height: 60upx;
|
||||||
|
position: absolute;
|
||||||
|
top: 742upx;
|
||||||
|
}
|
||||||
|
/deep/ .u-code-input__item {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 20upx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.65);
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
width: 202upx;
|
||||||
|
height: 56upx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 40upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
134
pages/login/welcome/welcome.vue
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<image src="@/static/image/home/new_line.png" mode="" class="line"></image>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/new_flower.png"
|
||||||
|
mode=""
|
||||||
|
class="flower"
|
||||||
|
></image>
|
||||||
|
<view class="text">{{ $t("welcome.toHome") }}</view>
|
||||||
|
<!-- <view class="title-one">- - -{{$t('welcome.title')}}- - -</view> -->
|
||||||
|
<!-- <image class="img" src="@/static/image/home/fonchain.png"></image> -->
|
||||||
|
<image class="logo" src="@/static/image/home/fontree-white.png"></image>
|
||||||
|
<u-loading-page
|
||||||
|
loading-text="请在微信浏览器中打开"
|
||||||
|
:loading="loading"
|
||||||
|
></u-loading-page>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
// if (this.loading) return;
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: uni.getStorageSync("login-redirect") || "/pages/index/index",
|
||||||
|
success: () => {
|
||||||
|
uni.setStorageSync("collectionsDetail", true);
|
||||||
|
if (uni.getStorageSync("login-redirect")) {
|
||||||
|
uni.removeStorageSync("login-redirect");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}, 3000);
|
||||||
|
},
|
||||||
|
onLoad(params) {
|
||||||
|
// 获取openid
|
||||||
|
if (params) {
|
||||||
|
uni.setStorageSync("openid_code", params.code);
|
||||||
|
uni.setStorageSync("openid_state", params.state);
|
||||||
|
}
|
||||||
|
let ua = navigator.userAgent.toLowerCase();
|
||||||
|
if (ua.match(/MicroMessenger/i) == "micromessenger") {
|
||||||
|
let openid_code = uni.getStorageSync("openid_code");
|
||||||
|
if (!openid_code) {
|
||||||
|
const apiUrl = "https://appointteam.szjixun.cn/";
|
||||||
|
window.location.href = `${apiUrl}api/appointment/auth/wx?time=${Math.random()}¬ifyUrl=${encodeURIComponent(
|
||||||
|
window.location.href
|
||||||
|
)}`;
|
||||||
|
} else {
|
||||||
|
this.handleOpenId();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.loading = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async handleOpenId() {
|
||||||
|
let params = {
|
||||||
|
code: uni.getStorageSync("openid_code"),
|
||||||
|
state: uni.getStorageSync("openid_state"),
|
||||||
|
};
|
||||||
|
await this.$api.login
|
||||||
|
.getOpenId(params)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.setStorageSync("openId", res.data.openId);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/welcome-bg.png") no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
// border: 1px solid red;
|
||||||
|
}
|
||||||
|
.line {
|
||||||
|
width: 2rpx;
|
||||||
|
height: 164rpx;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 0;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
.flower {
|
||||||
|
width: 43rpx;
|
||||||
|
height: 43rpx;
|
||||||
|
position: absolute;
|
||||||
|
left: 47%;
|
||||||
|
top: 167rpx;
|
||||||
|
// transform: translateX(-50%);
|
||||||
|
animation: fadenum 1s infinite;
|
||||||
|
}
|
||||||
|
@keyframes fadenum {
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.text {
|
||||||
|
position: absolute;
|
||||||
|
// left: 37%;
|
||||||
|
top: 227rpx;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.title-one {
|
||||||
|
color: #558bf2;
|
||||||
|
position: absolute;
|
||||||
|
font-size: 33upx;
|
||||||
|
// left: 26%;
|
||||||
|
top: 600rpx;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
width: 202rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
position: absolute;
|
||||||
|
top: 92rpx;
|
||||||
|
left: 46rpx;
|
||||||
|
}
|
||||||
|
</style>
|
557
pages/mine/cert/cert.vue
Normal file
@ -0,0 +1,557 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar
|
||||||
|
:navTitle="seriesName"
|
||||||
|
:stickyShow="stickyShow"
|
||||||
|
:color="'#000000'"
|
||||||
|
:backBackGroundColor="'#699A70'"
|
||||||
|
>
|
||||||
|
</navBar>
|
||||||
|
<view class="top-img">
|
||||||
|
<image :src="collectionImg"></image>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view
|
||||||
|
class=""
|
||||||
|
style="margin: auto; width: 500rpx"
|
||||||
|
v-if="physical && status === 2"
|
||||||
|
>
|
||||||
|
<u-button
|
||||||
|
type="primary"
|
||||||
|
:text="$t('apply.logistics')"
|
||||||
|
class="apply"
|
||||||
|
@click="apply"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
<view class="info-box">
|
||||||
|
<view class="title">{{ $t("logistics.info") }}</view>
|
||||||
|
<view class="address-box">
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("telephone") }}</text>
|
||||||
|
<text class="value" @click="goPhone">(852) 5491 1547</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="address-box" v-if="status > 3">
|
||||||
|
<view class="item bm">
|
||||||
|
<text class="label">{{ $t("consignee.name") }}</text>
|
||||||
|
<text class="value">{{ express.name }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item bm">
|
||||||
|
<text class="label">{{ $t("consignee.address") }}</text>
|
||||||
|
<text class="value">{{ express.address }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("consignee.phone") }}</text>
|
||||||
|
<text class="value">{{ express.telNum }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="info-box">
|
||||||
|
<view class="title">{{ $t("realHashTitle") }}</view>
|
||||||
|
<view class="box">
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("realHash") }}</text>
|
||||||
|
<text class="value">{{ realHash }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="info-box">
|
||||||
|
<view class="title">{{ $t("release.info") }}</view>
|
||||||
|
<view class="box">
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.issuer") }}</text>
|
||||||
|
<text class="value">{{ detail.publisher || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("release.time") }}</text>
|
||||||
|
<text class="value">{{ detail.published_time || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("brand.side") }}</text>
|
||||||
|
<text class="value">{{ detail.brand_name || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.hash") }}</text>
|
||||||
|
<text class="value">{{ detail.brand_hash || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="info-box">
|
||||||
|
<view class="title">{{ $t("circulation.info") }}</view>
|
||||||
|
<view class="detail">
|
||||||
|
<view class="item" v-for="(item, index) in flows" :key="index">
|
||||||
|
<view class="left">
|
||||||
|
{{ item.createdAt }}
|
||||||
|
<!-- <view class="" style="font-size: 10rpx;">
|
||||||
|
星期二 下午 5:07
|
||||||
|
</view> -->
|
||||||
|
</view>
|
||||||
|
<view class="right">
|
||||||
|
<view class="cricle2" v-if="item.status === 1"></view>
|
||||||
|
<view class="cricle" v-else></view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("possessor") }}</text>
|
||||||
|
<text class="value">{{ item.holdName || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.status") }}</text>
|
||||||
|
<text class="value">{{
|
||||||
|
item.status == 1 ? $t("in.library") : $t("been.applied")
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("circulation.type") }}</text>
|
||||||
|
<text class="value">{{
|
||||||
|
item.type == 1 ? $t("on.line") : "-"
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("circulation.time") }}</text>
|
||||||
|
<text class="value">{{ item.createdAt || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item" v-if="item.flowHash">
|
||||||
|
<text class="label">{{ $t("transaction.hash") }}</text>
|
||||||
|
<text class="value" style="font-size: 24rpx">{{
|
||||||
|
item.flowHash || "-"
|
||||||
|
}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="" style="text-align: center; margin-top: 30rpx">
|
||||||
|
<image src="@/static/image/home/fontree.png" mode="" class="logo"></image>
|
||||||
|
</view>
|
||||||
|
<u-popup
|
||||||
|
:show="showApply"
|
||||||
|
mode="center"
|
||||||
|
@close="closeApply"
|
||||||
|
bgColor="transparent"
|
||||||
|
>
|
||||||
|
<view class="popup-top"> *{{ $t("apply.tips") }} </view>
|
||||||
|
<view class="popup-box">
|
||||||
|
<view class="title">{{ $t("input.address") }}</view>
|
||||||
|
<view class="">
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("consignee.name") }}</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--input
|
||||||
|
border="none"
|
||||||
|
shape="circle"
|
||||||
|
v-model="name"
|
||||||
|
:placeholder="$t('input.pla')"
|
||||||
|
></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("consignee.address") }}</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--textarea
|
||||||
|
v-model="address"
|
||||||
|
border="none"
|
||||||
|
:placeholder="$t('input.pla')"
|
||||||
|
autoHeight
|
||||||
|
></u--textarea>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="label">{{ $t("consignee.phone") }}</view>
|
||||||
|
<view class="input">
|
||||||
|
<u--input
|
||||||
|
border="none"
|
||||||
|
shape="circle"
|
||||||
|
v-model="telNum"
|
||||||
|
:placeholder="$t('input.pla')"
|
||||||
|
></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="btns">
|
||||||
|
<u-button
|
||||||
|
:text="$t('navbar.back')"
|
||||||
|
color="#EDC466"
|
||||||
|
@click="closeApply"
|
||||||
|
style="width: 260rpx; height: 56rpx; border-radius: 40rpx"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
:text="$t('apply.btn')"
|
||||||
|
color="#699A70"
|
||||||
|
@click="applyCom"
|
||||||
|
style="width: 260rpx; height: 56rpx; border-radius: 40rpx"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stickyShow: false,
|
||||||
|
showApply: false,
|
||||||
|
address: "",
|
||||||
|
name: "",
|
||||||
|
telNum: "",
|
||||||
|
CollectionsUID: "",
|
||||||
|
express: {},
|
||||||
|
flows: [],
|
||||||
|
detail: {},
|
||||||
|
seriesName: "",
|
||||||
|
collectionImg: "",
|
||||||
|
ID: "",
|
||||||
|
status: "",
|
||||||
|
realHash: "",
|
||||||
|
physical: "",
|
||||||
|
//订单状态(1-待支付 2-成功 3-失败,4-已申请快递,5后台批准快递 6-退款)
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onPageScroll(e) {
|
||||||
|
this.stickyShow = e.scrollTop > 5 ? true : false;
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
console.log(11111111, this.flows);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
apply() {
|
||||||
|
this.showApply = true;
|
||||||
|
},
|
||||||
|
closeApply() {
|
||||||
|
this.showApply = false;
|
||||||
|
this.name = "";
|
||||||
|
this.address = "";
|
||||||
|
this.telNum = "";
|
||||||
|
},
|
||||||
|
async applyCom() {
|
||||||
|
let name = this.$common.vefEmpty(
|
||||||
|
this.name,
|
||||||
|
this.$t("error.consignee.name")
|
||||||
|
);
|
||||||
|
let address = this.$common.vefEmpty(
|
||||||
|
this.address,
|
||||||
|
this.$t("error.consignee.address")
|
||||||
|
);
|
||||||
|
let telNum = this.$common.vefEmpty(
|
||||||
|
this.telNum,
|
||||||
|
this.$t("error.consignee.phone")
|
||||||
|
);
|
||||||
|
if (!name || !address || !telNum) return;
|
||||||
|
let data = {
|
||||||
|
ID: Number(this.ID),
|
||||||
|
express: {
|
||||||
|
address: this.address,
|
||||||
|
name: this.name,
|
||||||
|
telNum: this.telNum,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
let res = await this.$api.mine.paymentApproval(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast(this.$t("apply.succes"));
|
||||||
|
this.status = 4;
|
||||||
|
this.express = res.data.express;
|
||||||
|
this.flows = res.data.flows;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("apply.error"));
|
||||||
|
}
|
||||||
|
this.showApply = false;
|
||||||
|
this.name = "";
|
||||||
|
this.address = "";
|
||||||
|
this.telNum = "";
|
||||||
|
},
|
||||||
|
goPhone(val) {
|
||||||
|
// 拨打电话
|
||||||
|
uni.makePhoneCall({
|
||||||
|
phoneNumber: val,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getDetail() {
|
||||||
|
let data = {
|
||||||
|
CollectionsUID: this.CollectionsUID,
|
||||||
|
};
|
||||||
|
let res = await this.$api.mine.certDetail(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.detail = res.data;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
onLoad(option) {
|
||||||
|
const item = JSON.parse(decodeURIComponent(option.data));
|
||||||
|
this.CollectionsUID = item.CollectionsUID;
|
||||||
|
this.physical = item.physical;
|
||||||
|
this.ID = item.payDetail.ID;
|
||||||
|
this.express = item.payDetail.express;
|
||||||
|
this.flows = item.payDetail.flows;
|
||||||
|
this.status = item.payDetail.status;
|
||||||
|
this.realHash = item.payDetail.realHash;
|
||||||
|
this.collectionImg = item.collectionImg;
|
||||||
|
console.log(this.collectionImg);
|
||||||
|
this.seriesName = item.seriesName;
|
||||||
|
this.getDetail();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/detail-kind-bg.png") no-repeat;
|
||||||
|
// background-size: 100% 100%;
|
||||||
|
// background-attachment:fixed;
|
||||||
|
// height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-img {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: contain;
|
||||||
|
width: 660rpx;
|
||||||
|
height: 660rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin: 44rpx 44rpx 32rpx 46rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.apply {
|
||||||
|
width: 500rpx;
|
||||||
|
height: 60rpx;
|
||||||
|
border-radius: 40rpx !important;
|
||||||
|
// background: #558BF2;
|
||||||
|
background: #699a70;
|
||||||
|
border-color: #699a70;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
margin: 0 44rpx 0 46rpx;
|
||||||
|
margin-bottom: 46rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
// padding: 38rpx 32rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 32rpx;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
// background: rgba(255,255,255,0.3);
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
margin: 32rpx 0;
|
||||||
|
font-size: 20rpx;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
color: #434343;
|
||||||
|
padding-right: 40rpx;
|
||||||
|
width: 130rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: #878787;
|
||||||
|
width: 450rpx;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.address-box {
|
||||||
|
// background: rgba(255,255,255,0.3);
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
|
||||||
|
.bm {
|
||||||
|
border-bottom: 1px solid #dedede;
|
||||||
|
padding-bottom: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin: 15rpx 0;
|
||||||
|
font-size: 20rpx;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
padding-right: 40rpx;
|
||||||
|
width: 150rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
text-align: right;
|
||||||
|
width: 400rpx;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: normal;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail {
|
||||||
|
// background: rgba(255,255,255,0.3);
|
||||||
|
padding: 24rpx 32rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left {
|
||||||
|
font-size: 16rpx;
|
||||||
|
padding-right: 30rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right {
|
||||||
|
border-left: 1rpx solid #464646;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
color: #434343;
|
||||||
|
padding-right: 20rpx;
|
||||||
|
width: 130rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: #434343;
|
||||||
|
width: 260rpx;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cricle {
|
||||||
|
width: 22rpx;
|
||||||
|
height: 22rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -14rpx;
|
||||||
|
background: #e4e4e4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cricle2 {
|
||||||
|
width: 21rpx;
|
||||||
|
height: 21rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -13rpx;
|
||||||
|
background: #699a70;
|
||||||
|
border: 1px solid #699a70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
width: 202rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-box {
|
||||||
|
background: rgba(0, 0, 0, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 0;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
margin-bottom: 100rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
// align-items: center;
|
||||||
|
padding: 0 34rpx 34rpx 38rpx;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
width: 340rpx;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
/deep/ .input-placeholder {
|
||||||
|
font-size: 24rpx;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-textarea {
|
||||||
|
background: transparent;
|
||||||
|
width: 340rpx;
|
||||||
|
padding: 0;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-textarea__field {
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btns {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-top {
|
||||||
|
width: 582rpx;
|
||||||
|
padding: 22rpx 0;
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
font-size: 32rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
</style>
|
189
pages/mine/changePhone/changePhone.vue
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
<template>
|
||||||
|
<view class="main">
|
||||||
|
<navBar navTitle="" :hasLogo="true" :hasRight="true" :backToUrl="'/pages/mine/setting/setting'"
|
||||||
|
@clickRight="clickRight" :color="'#000000'" :backBackGroundColor="'#3D553D'" />
|
||||||
|
<u-code :seconds="seconds" @start="start" ref="uCode"
|
||||||
|
:start-text="$t('code.start')"
|
||||||
|
:change-text="$t('code.change')"
|
||||||
|
:end-text="$t('code.end')"
|
||||||
|
@change="codeChange"></u-code>
|
||||||
|
<view class="info">
|
||||||
|
<view class="item">
|
||||||
|
<view class="lable">{{$t('phone.old')}}</view>
|
||||||
|
<view class="gray">{{ telNum }}</view>
|
||||||
|
</view>
|
||||||
|
<u-divider></u-divider>
|
||||||
|
<view class="item">
|
||||||
|
<view class="lable">{{$t('phone.code')}}</view>
|
||||||
|
<view style="margin-left: 30upx;">
|
||||||
|
<u--input style="width: 130upx;" border="none" v-model="code" type="number"></u--input>
|
||||||
|
</view>
|
||||||
|
<view class="resend" @tap="getCode">{{ tips }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view style="color: #717171; text-align: right;font-size: 10rpx;margin-right:56rpx;margin-top:16rpx">*{{$t('update.phone.title')}}</view>
|
||||||
|
<view class="info" style="height: 120upx;">
|
||||||
|
<view class="item">
|
||||||
|
<view class="lable">{{$t('phone.new')}}</view>
|
||||||
|
<view style="margin-left: 30upx;">
|
||||||
|
<u--input style="width: 200upx; color:#878787" :placeholder="$t('input.pla')" border="none" v-model="newTelNum" type="number"></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button :text="$t('save.update')" color="#699A70" @click="changePhone" class="btn" style=""></u-button>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tips: '',
|
||||||
|
// refCode: null,
|
||||||
|
seconds: 60,
|
||||||
|
wathTime: 10,
|
||||||
|
code: '',
|
||||||
|
focus: false,
|
||||||
|
telNum: '',
|
||||||
|
newTelNum: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad(opt) {
|
||||||
|
this.telNum = opt.telNum
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
cancel() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/mine/setting/setting'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
codeChange(text) {
|
||||||
|
this.tips = text;
|
||||||
|
},
|
||||||
|
async getCode() {
|
||||||
|
if (this.$refs.uCode.canGetCode) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: this.$t('sendCode.loading')
|
||||||
|
});
|
||||||
|
|
||||||
|
let res = await this.$api.mine.mineCode();
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.hideLoading();
|
||||||
|
// 这里此提示会被this.start()方法中的提示覆盖
|
||||||
|
this.focus = true;
|
||||||
|
this.$refs.uCode.start();
|
||||||
|
// 通知验证码组件内部开始倒计时
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t('sendCode.toast'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
start() {
|
||||||
|
uni.$u.toast(this.$t('sendCode'));
|
||||||
|
},
|
||||||
|
async changePhone(){
|
||||||
|
if(!this.code || !this.newTelNum){
|
||||||
|
uni.$u.toast(this.$t('input.phoneCode'));
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let data = {code:this.code,newTelNum:this.newTelNum}
|
||||||
|
let res = await this.$api.mine.verifyCode(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/login/sendCode/sendCode?token='+res.data.token+'&newNum='+this.newTelNum
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url('@/static/image/home/new_bg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
display: grid;
|
||||||
|
justify-content: center;
|
||||||
|
/deep/.uni-input-input{
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
margin-top: 40upx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
image {
|
||||||
|
width: 201upx;
|
||||||
|
height: 60upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
height: 56rpx;
|
||||||
|
width: 600upx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 120upx;
|
||||||
|
left: 10%;
|
||||||
|
}
|
||||||
|
.cancel {
|
||||||
|
text-align: center;
|
||||||
|
height: 56rpx;
|
||||||
|
width: 600upx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 40upx;
|
||||||
|
left: 10%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.info {
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
width: 650upx;
|
||||||
|
height: 218upx;
|
||||||
|
background: #FFFFFF;
|
||||||
|
margin: 65rpx 50rpx 0 50rpx;
|
||||||
|
|
||||||
|
padding: 0 65rpx 0 65rpx;
|
||||||
|
.item {
|
||||||
|
font-size: 30upx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 40upx;
|
||||||
|
.rz {
|
||||||
|
margin-left: 10upx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
background-color: #558bf2;
|
||||||
|
width: 60upx;
|
||||||
|
|
||||||
|
border-radius: 40upx;
|
||||||
|
padding: 0upx 20upx 4upx 20upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.lable{
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
.gray {
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
/deep/ .u-input__content__field-wrapper__field {
|
||||||
|
color: #fff !important;
|
||||||
|
}
|
||||||
|
.resend {
|
||||||
|
color: #699A70;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
223
pages/mine/confirmOrder/confirmOrder.vue
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar
|
||||||
|
navTitle=""
|
||||||
|
:hasLogo="true"
|
||||||
|
:backToUrl="'/pages/index/index'"
|
||||||
|
:isSwitchTab="true"
|
||||||
|
:color="'#000000'" :backBackGroundColor="'#3D553D'"
|
||||||
|
></navBar>
|
||||||
|
<view class="info">
|
||||||
|
<view class="head">
|
||||||
|
<view class="title">{{ $t("payInfo.title") }}</view>
|
||||||
|
<view class="user"
|
||||||
|
>{{ $t("payInfo.subtxt1") }}<span style="color:#699A70">{{ payInfo.buyerTel }}</span
|
||||||
|
>{{ $t("payInfo.subtxt2") }}</view
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min160">{{ $t("payInfo.confirmDate") }}:</view>
|
||||||
|
<view class="lable">{{ today }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min160">{{ $t("payInfo.buyerName") }}:</view>
|
||||||
|
<view class="lable">{{ payInfo.buyerName }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min160">{{ $t("payInfo.orderPrice") }}:</view>
|
||||||
|
<view class="lable">{{ payInfo.price }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min160">{{ $t("payInfo.artworkName") }}:</view>
|
||||||
|
<view class="lable">{{ payInfo.artworkName }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min160">{{ $t("payInfo.payTypeName") }}:</view>
|
||||||
|
<view class="lable">{{ payInfo.payTypeName }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="min160">{{ $t("payInfo.payImages") }}:</view>
|
||||||
|
<view class="imgBox">
|
||||||
|
<u--image
|
||||||
|
v-for="(item, index) in payInfo.payImages"
|
||||||
|
width="300rpx"
|
||||||
|
height="300rpx"
|
||||||
|
:key="index"
|
||||||
|
:src="item"
|
||||||
|
@click="privewImg(item)"
|
||||||
|
mode="scaleToFill"
|
||||||
|
></u--image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button
|
||||||
|
:text="$t('comfrim')"
|
||||||
|
color="#699A70"
|
||||||
|
@click="comfirmPayment"
|
||||||
|
style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 60rpx;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
:text="$t('payment.cancel')"
|
||||||
|
color="#808080"
|
||||||
|
@click="cancelPayment"
|
||||||
|
style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
infoCode: "",
|
||||||
|
collectionsInfo: {},
|
||||||
|
payInfo: {},
|
||||||
|
today: "",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取核验码信息
|
||||||
|
async getCodeInfo() {
|
||||||
|
let data = {
|
||||||
|
code: this.infoCode,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.getQrcodeInfo(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.collectionsInfo = res.data.collections;
|
||||||
|
this.payInfo = res.data.pay;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 确认支付
|
||||||
|
async comfirmPayment() {
|
||||||
|
let data = {
|
||||||
|
code: this.infoCode,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.confirmPay(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast(this.$t("payment.confirmSuccess"));
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg || this.$t("payment.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 取消支付
|
||||||
|
async cancelPayment() {
|
||||||
|
let data = {
|
||||||
|
code: this.infoCode,
|
||||||
|
};
|
||||||
|
let res = await this.$api.series.cancelPay(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast(this.$t("payment.cancelSuccess"));
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
}, 2000);
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg || this.$t("payment.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 预览图片
|
||||||
|
privewImg(url) {
|
||||||
|
uni.previewImage({
|
||||||
|
urls: [url],
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
onLoad: function (option) {
|
||||||
|
this.infoCode = option.code;
|
||||||
|
this.getCodeInfo();
|
||||||
|
// 获取今天的日期
|
||||||
|
let date = new Date();
|
||||||
|
let year = date.getFullYear();
|
||||||
|
let month = date.getMonth() + 1;
|
||||||
|
let day = date.getDate();
|
||||||
|
this.today = year + "年" + month + "月" + day + "日";
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/new_bg.png") no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
// border: 1px solid red;696.1123
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.min160 {
|
||||||
|
min-width: 160rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
// 居中
|
||||||
|
.info {
|
||||||
|
width: 600rpx;
|
||||||
|
height: 1100rpx;
|
||||||
|
margin-top: 60rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
padding: 40rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow-y: scroll;
|
||||||
|
.head {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
margin-top: 44rpx;
|
||||||
|
font-size: 40rpx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
.lable{
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
.user {
|
||||||
|
font-size: 16rpx;
|
||||||
|
color: #878787;
|
||||||
|
margin-bottom: 66rpx;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 40rpx;
|
||||||
|
}
|
||||||
|
.item {
|
||||||
|
font-size: 30upx;
|
||||||
|
width: 400rpx;
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 40upx;
|
||||||
|
.imgBox {
|
||||||
|
width: 300rpx;
|
||||||
|
height: 300rpx;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
margin-left: 20rpx;
|
||||||
|
}
|
||||||
|
.image {
|
||||||
|
width: 300rpx;
|
||||||
|
height: 300rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
405
pages/mine/detail/detail.vue
Normal file
@ -0,0 +1,405 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<navBar
|
||||||
|
:navTitle="collectionsDetail.name"
|
||||||
|
:stickyShow="stickyShow"
|
||||||
|
:color="'#000000'"
|
||||||
|
:backBackGroundColor="'#699A70'"
|
||||||
|
></navBar>
|
||||||
|
|
||||||
|
<view class="top-img">
|
||||||
|
<image :src="collectionsDetail.coverImg"></image>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="title-t"
|
||||||
|
:style="{ fontSize: '36rpx', color: '#434343', fontWeight: 600 }"
|
||||||
|
>{{ $t("basic.info") }}</view
|
||||||
|
>
|
||||||
|
<view class="info-box" style="padding: 28rpx 32rpx 4rpx 32rpx">
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.name") }}</text>
|
||||||
|
<text class="value">{{ payDetail.seriesName }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.issuer") }}</text>
|
||||||
|
<text class="value">{{ payDetail.senderName }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.time") }}</text>
|
||||||
|
<text class="value">{{ payDetail.createdAt }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.price") }}</text>
|
||||||
|
<text class="value">
|
||||||
|
<text v-if="collectionsDetail.currencyType === 'normal'">{{
|
||||||
|
symbol
|
||||||
|
}}</text>
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/jifen.png"
|
||||||
|
mode="scaleToFill"
|
||||||
|
style="width: 24rpx; height: 24rpx"
|
||||||
|
v-else
|
||||||
|
/>
|
||||||
|
{{ payDetail.price }}
|
||||||
|
<!-- <text v-if="payDetail.payType === 6">{{
|
||||||
|
$t("airdrop")
|
||||||
|
}}</text> -->
|
||||||
|
</text>
|
||||||
|
</view>
|
||||||
|
<!-- <view class="item">
|
||||||
|
<text class="label">{{$t('series.No')}}</text>
|
||||||
|
<text class="value">{{payDetail.payNum}}</text>
|
||||||
|
</view> -->
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("series.hash") }}</text>
|
||||||
|
<text class="value">{{ payDetail.artworkHash }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="title-t">{{ $t("collection.info") }}</view>
|
||||||
|
<view class="info-box" style="padding: 28rpx 32rpx">
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.name") }}</text>
|
||||||
|
<text class="value">{{ collectionsDetail.name || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.type") }}</text>
|
||||||
|
<text class="value">{{ collectionsDetail.collectionType || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.size") }}</text>
|
||||||
|
<text class="value">{{ collectionsDetail.size || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.specs") }}</text>
|
||||||
|
<text class="value">{{ collectionsDetail.specs || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.address") }}</text>
|
||||||
|
<text class="value">{{ collectionsDetail.address || "-" }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="label">{{ $t("collection.intro") }}</text>
|
||||||
|
<view class="des">{{ collectionsDetail.intro || "-" }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="title-t"
|
||||||
|
:style="{ fontSize: '36rpx', color: '#434343', fontWeight: 600 }"
|
||||||
|
>{{ $t("collection.detail") }}</view
|
||||||
|
>
|
||||||
|
<view class="detail-info">
|
||||||
|
<!-- <view class="title-t">{{$t('collection.sell')}}</view>
|
||||||
|
<view class="box-item">
|
||||||
|
<image v-for="item in sellPoint" :key="item" :src="item" mode="widthFix"></image>
|
||||||
|
</view> -->
|
||||||
|
<view v-if="collDetails.length > 0" class="title-t">{{
|
||||||
|
$t("collection.sellDec")
|
||||||
|
}}</view>
|
||||||
|
<view v-if="collDetails.length > 0" class="box">
|
||||||
|
<image
|
||||||
|
v-for="item in collDetails"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view v-if="companyInfo.length > 0" class="title-t">{{
|
||||||
|
$t("collection.company")
|
||||||
|
}}</view>
|
||||||
|
<view v-if="companyInfo.length > 0" class="box">
|
||||||
|
<image
|
||||||
|
v-for="item in companyInfo"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view v-if="copyright.length > 0" class="title-t">{{
|
||||||
|
$t("collection.copyight")
|
||||||
|
}}</view>
|
||||||
|
<view v-if="copyright.length > 0" class="box">
|
||||||
|
<image
|
||||||
|
v-for="item in copyright"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view v-if="Blockchain.length > 0" class="title-t">{{
|
||||||
|
$t("collection.blockchain")
|
||||||
|
}}</view>
|
||||||
|
<view v-if="Blockchain.length > 0" class="box">
|
||||||
|
<image
|
||||||
|
v-for="item in Blockchain"
|
||||||
|
:src="item"
|
||||||
|
:key="item"
|
||||||
|
mode="widthFix"
|
||||||
|
class="img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="" style="text-align: center; margin-top: 30rpx">
|
||||||
|
<image
|
||||||
|
src="@/static/image/home/fontree.png"
|
||||||
|
mode="aspectFit"
|
||||||
|
class="logo"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<image
|
||||||
|
src="../../../static/image/mine/cert.png"
|
||||||
|
@click="goCert"
|
||||||
|
mode=""
|
||||||
|
class="cert-img"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stickyShow: false,
|
||||||
|
ID: 0,
|
||||||
|
collectionsDetail: {},
|
||||||
|
sellPoint: [],
|
||||||
|
collDetails: [],
|
||||||
|
companyInfo: [],
|
||||||
|
copyright: [],
|
||||||
|
Blockchain: [],
|
||||||
|
payDetail: {},
|
||||||
|
allImgList: [],
|
||||||
|
symbol:
|
||||||
|
uni.getLocale() === "en"
|
||||||
|
? "$"
|
||||||
|
: uni.getLocale() === "zh-Hant"
|
||||||
|
? "HK$"
|
||||||
|
: "¥",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onPageScroll(e) {
|
||||||
|
this.stickyShow = e.scrollTop > 5 ? true : false;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
goCert() {
|
||||||
|
console.log(this.collectionsDetail.coverImg);
|
||||||
|
let data = {
|
||||||
|
CollectionsUID: this.collectionsDetail.collectionUID,
|
||||||
|
collectionImg: this.collectionsDetail.coverImg,
|
||||||
|
seriesName: this.collectionsDetail.name,
|
||||||
|
physical: this.collectionsDetail.physical,
|
||||||
|
payDetail: this.payDetail,
|
||||||
|
};
|
||||||
|
uni.navigateTo({
|
||||||
|
url:
|
||||||
|
"/pages/mine/cert/cert?data=" +
|
||||||
|
encodeURIComponent(JSON.stringify(data)),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async getDetail() {
|
||||||
|
let data = {
|
||||||
|
ID: Number(this.ID),
|
||||||
|
};
|
||||||
|
let res = await this.$api.mine.paymentDetail(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.collectionsDetail = res.data.collections;
|
||||||
|
this.payDetail = res.data.pay;
|
||||||
|
(this.allImgList = this.collectionsDetail.cutImg
|
||||||
|
? JSON.parse(this.collectionsDetail.cutImg)
|
||||||
|
: []),
|
||||||
|
this.cutImg();
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t("load.failed"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
cutImg() {
|
||||||
|
this.allImgList.forEach((v) => {
|
||||||
|
if (Array.isArray(v.imgs)) {
|
||||||
|
v.imgs = v.imgs.filter((img) => {
|
||||||
|
if (img) {
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.allImgList.forEach((v) => {
|
||||||
|
if (v.label === "卖点") {
|
||||||
|
this.sellPoint = v.imgs;
|
||||||
|
} else if (v.label === "藏品细节") {
|
||||||
|
this.collDetails = v.imgs;
|
||||||
|
} else if (v.label === "工艺/公司介绍") {
|
||||||
|
this.companyInfo = v.imgs;
|
||||||
|
} else if (v.label === "版权声明") {
|
||||||
|
this.copyright = v.imgs;
|
||||||
|
} else if (v.label === "区块链说明") {
|
||||||
|
this.Blockchain = v.imgs;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
onLoad(option) {
|
||||||
|
this.ID = option.ID;
|
||||||
|
this.artworkUid = option.artworkUid;
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getDetail();
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/detail-kind-bg.png") no-repeat;
|
||||||
|
// background-size: 100% 100%;
|
||||||
|
// background-attachment:fixed;
|
||||||
|
// height: 100vh;
|
||||||
|
}
|
||||||
|
.fixed-box {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 172rpx;
|
||||||
|
background: #3e3e3e;
|
||||||
|
z-index: 10;
|
||||||
|
.btn {
|
||||||
|
display: flex;
|
||||||
|
padding: 42rpx 38rpx;
|
||||||
|
}
|
||||||
|
.back {
|
||||||
|
width: 172rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
background: #efba42;
|
||||||
|
margin-right: 30rpx;
|
||||||
|
}
|
||||||
|
.buyer {
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
background: #558bf2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.top-img {
|
||||||
|
// background: url('../../../static/image/home/box.png') no-repeat;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: contain;
|
||||||
|
width: 660rpx;
|
||||||
|
height: 660rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin: 44rpx 44rpx 32rpx 46rpx;
|
||||||
|
position: relative;
|
||||||
|
.price {
|
||||||
|
font-size: 48rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 10rpx;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.box-item {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
// margin: 0 44rpx 0 46rpx;
|
||||||
|
image {
|
||||||
|
width: 100%;
|
||||||
|
// height: 198rpx;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.detail-info {
|
||||||
|
// background: rgba(0,0,0,0.8);
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
margin: 30rpx;
|
||||||
|
padding: 23rpx;
|
||||||
|
.box {
|
||||||
|
// margin: 0 44rpx 0 46rpx;
|
||||||
|
margin-bottom: 46rpx;
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
border-radius: 8rpx;
|
||||||
|
// padding: 38rpx 32rpx;
|
||||||
|
position: relative;
|
||||||
|
.item-img {
|
||||||
|
width: 234rpx;
|
||||||
|
height: 234rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
position: absolute;
|
||||||
|
top: 38rpx;
|
||||||
|
right: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.title-t {
|
||||||
|
text-align: center;
|
||||||
|
margin: 40rpx 0 16rpx 0;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
.info-box {
|
||||||
|
margin: 0 44rpx 0 46rpx;
|
||||||
|
margin-bottom: 46rpx;
|
||||||
|
background: #ffffff;
|
||||||
|
// background: rgba(11, 0, 0, 0.3);
|
||||||
|
border-radius: 8rpx;
|
||||||
|
// padding: 38rpx 32rpx;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
font-size: 20rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
.label {
|
||||||
|
color: #434343;
|
||||||
|
padding-right: 40rpx;
|
||||||
|
width: 130rpx;
|
||||||
|
}
|
||||||
|
.value {
|
||||||
|
color: #878787;
|
||||||
|
width: 450rpx;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
.des {
|
||||||
|
color: #878787;
|
||||||
|
width: 450rpx;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
overflow: hidden;
|
||||||
|
word-break: break-all;
|
||||||
|
white-space: normal;
|
||||||
|
font-size: 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
margin-top: 10rpx;
|
||||||
|
width: 202rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
.cert-img {
|
||||||
|
position: fixed;
|
||||||
|
right: 40rpx;
|
||||||
|
bottom: 25vh;
|
||||||
|
width: 84rpx;
|
||||||
|
height: 84rpx;
|
||||||
|
}
|
||||||
|
</style>
|
100
pages/mine/feedback/feedback.vue
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<template>
|
||||||
|
<u-popup :show="isShow" mode="center" bgColor="transparent" @close="close">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="title">{{ $t('problem.feedback') }}</view>
|
||||||
|
<view class="item">
|
||||||
|
<u--textarea height="340" v-model="content" :placeholder="$t('set.input')" maxlength="200" count
|
||||||
|
border="none"></u--textarea>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view style="display: flex;">
|
||||||
|
<u-button :text="$t('navbar.back')" color="#EDC466" @click="close"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<u-button :text="$t('sumbit')" color="#699A70" @click="sendFeedBack"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
content: '',
|
||||||
|
isShow: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: ['showQa'],
|
||||||
|
watch: {
|
||||||
|
showQa() {
|
||||||
|
this.isShow = this.showQa
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async sendFeedBack() {
|
||||||
|
let res = await this.$api.mine.feedBack({
|
||||||
|
content: this.content
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.$common.msgToast(res.msg, null, 'success');
|
||||||
|
this.show = false
|
||||||
|
this.content = ''
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.$emit('closeFeed', false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" >
|
||||||
|
.popupLocale-box {
|
||||||
|
background: rgba(0, 0, 0, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 42rpx;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.u-button {
|
||||||
|
width: 260rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 34rpx 0 38rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tips {
|
||||||
|
color: #DC0023;
|
||||||
|
font-size: 20rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 80rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-textarea__count {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-textarea-textarea {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-textarea {
|
||||||
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
849
pages/mine/index.vue
Normal file
@ -0,0 +1,849 @@
|
|||||||
|
<template>
|
||||||
|
<view v-show="showPage">
|
||||||
|
<tabBar :currentPage="'pages/mine/index'"></tabBar>
|
||||||
|
<view class="logo">
|
||||||
|
<image src="../../static/image/home/fontree.png" mode="" class="img"></image>
|
||||||
|
</view>
|
||||||
|
<scroll-view scroll-y :scroll-anchoring="true" :style="'height:' + listHeight + 'px;'">
|
||||||
|
|
||||||
|
<view class="user-box">
|
||||||
|
<u-avatar :src="userInfo.avatar" class="avatar" size="75" fontSize="18" bg-color="#558BF2"></u-avatar>
|
||||||
|
<view class="info">
|
||||||
|
<view class="username">{{ userInfo.nickName }}</view>
|
||||||
|
<view class="blockchain">{{ $t("mine.blockchain") }}:{{ userInfo.account }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="mine-icon">
|
||||||
|
<view class="message" @click="goMess">
|
||||||
|
<u-badge v-if="notReadNum > 0" class="point" numberType="overflow" max="99" :value="notReadNum">
|
||||||
|
</u-badge>
|
||||||
|
<image src="../../static/image/mine/message-icon.png" mode="" style="width: 60rpx; height: 60rpx">
|
||||||
|
</image>
|
||||||
|
<view class="value">{{ $t("mine.message") }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="scan" @click="goScan" v-if="canScan">
|
||||||
|
<image src="../../static/image/mine/scan-icon.png" mode="" style="width: 60rpx; height: 60rpx"></image>
|
||||||
|
<view class="value">{{ $t("mine.scan") }}</view>
|
||||||
|
</view>
|
||||||
|
<view @click="goLang" class="tag">
|
||||||
|
<image src="../../static/image/mine/language.png" mode="" style="width: 60rpx; height: 60rpx"></image>
|
||||||
|
<view class="value">{{ $t("mine.language") }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="setting" @click="goSets">
|
||||||
|
<image src="../../static/image/mine/setting-icon.png" mode="" style="width: 60rpx; height: 60rpx">
|
||||||
|
</image>
|
||||||
|
<view class="value">{{ $t("mine.setting") }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="his-title-text">
|
||||||
|
<view>我的历史购买记录</view>
|
||||||
|
<view class="line"></view>
|
||||||
|
</view>
|
||||||
|
<view class="his-box">
|
||||||
|
<view class="item" v-for="(item, index) in paymentList" :key="index"
|
||||||
|
@click="goDetail(item.ID, item.artworkUid)">
|
||||||
|
<image src="../../static/image/mine/icon-logo1.png" v-if="item.artworkLevel == 'D'" mode=""
|
||||||
|
class="icon"></image>
|
||||||
|
<image src="../../static/image/mine/icon-logo2.png" v-if="item.artworkLevel == 'C'" mode=""
|
||||||
|
class="icon"></image>
|
||||||
|
<image src="../../static/image/mine/icon-logo3.png" v-if="item.artworkLevel == 'B'" mode=""
|
||||||
|
class="icon"></image>
|
||||||
|
<image src="../../static/image/mine/icon-logo4.png" v-if="item.artworkLevel == 'A'" mode=""
|
||||||
|
class="icon"></image>
|
||||||
|
<image :src="item.coverImg || item.artworkImg" mode="" class="img"> </image>
|
||||||
|
<view class="contentD content" v-if="item.artworkLevel == 'D'">{{
|
||||||
|
item.artworkName
|
||||||
|
}}</view>
|
||||||
|
<view class="contentC content" v-if="item.artworkLevel == 'C'">{{
|
||||||
|
item.artworkName
|
||||||
|
}}</view>
|
||||||
|
<view class="contentB content" v-if="item.artworkLevel == 'B'">{{
|
||||||
|
item.artworkName
|
||||||
|
}}</view>
|
||||||
|
<view class="contentA content" v-if="item.artworkLevel == 'A'">{{
|
||||||
|
item.artworkName
|
||||||
|
}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-empty mode="favor" v-if="!paymentList" :text="$t('mine.noData')" marginTop="100"></u-empty>
|
||||||
|
</scroll-view>
|
||||||
|
<u-popup :show="showLocale" mode="center" @close="closeLocale" @open="openLocale" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="title">{{ $t("mine.updateLang") }}</view>
|
||||||
|
<view class="item" v-for="(item, index) in locales" :key="index"
|
||||||
|
:style="{ borderBottom: (item.code !== 'en' ? '1px solid #dedede' : 'none') }">
|
||||||
|
<view class="left">{{ item.text }}</view>
|
||||||
|
<view class="right">
|
||||||
|
<text v-if="item.code == applicationLocale">{{
|
||||||
|
$t("updateLang.done")
|
||||||
|
}}</text>
|
||||||
|
<u-tag v-else :text="$t('updateLang.change')" @click="onLocaleChange(item)" class="tag-btn"
|
||||||
|
shape="circle" bgColor="#699A70" borderColor="#699A70"></u-tag>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button :text="$t('navbar.back')" color="#EDC466" @click="closeLocale" style="
|
||||||
|
width: 260rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
"></u-button>
|
||||||
|
</u-popup>
|
||||||
|
<u-popup :show="showSetPass" mode="bottom" @close="closeBack" bgColor="transparent">
|
||||||
|
<view class="step-top">{{ $t("password.title") }}</view>
|
||||||
|
<view class="step-box">
|
||||||
|
<view class="title">{{ $t("password.set") }}</view>
|
||||||
|
<view class="step-pl">
|
||||||
|
{{ $t("password.name") }}
|
||||||
|
<text>{{ userInfo.telNum | disposeTel }}</text>
|
||||||
|
{{ $t("password.set") }}
|
||||||
|
</view>
|
||||||
|
<view class="verfy-box">
|
||||||
|
<view>
|
||||||
|
<view class="label">{{ $t("password.input") }}:</view>
|
||||||
|
<u-code-input v-model="setPwd" dot :maxlength="6" hairline color="#ffffff"
|
||||||
|
borderColor="transparent"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="verfy-box">
|
||||||
|
<view>
|
||||||
|
<view class="label">{{ $t("password.com") }}:</view>
|
||||||
|
<u-code-input v-model="confirmPwd" dot :maxlength="6" hairline color="#ffffff"
|
||||||
|
borderColor="transparent"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button :text="$t('password.step')" color="#699A70" @click="step2" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 150rpx;
|
||||||
|
"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<u-popup :show="showVerfyPass" mode="bottom" @close="closeBack" bgColor="transparent">
|
||||||
|
<view class="step-top">{{ $t("password.title") }}</view>
|
||||||
|
<view class="step-box">
|
||||||
|
<view class="title">{{ $t("password.get") }}</view>
|
||||||
|
<view class="verfy-box">
|
||||||
|
<view>
|
||||||
|
<view class="label">{{ $t("password.input") }}:</view>
|
||||||
|
<u-code-input v-model="userPwd" dot :maxlength="6" hairline color="#ffffff"
|
||||||
|
borderColor="transparent"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="verfy-box" style="margin-top: 40upx">
|
||||||
|
<view>
|
||||||
|
<view class="label">{{ $t("password.com") }}:</view>
|
||||||
|
<u-code-input v-model="confirmUserPwd" dot :maxlength="6" hairline color="#ffffff"
|
||||||
|
borderColor="transparent"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button :text="$t('buyVerfy.done')" color="#699A70" @click="stepDone" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 150rpx;
|
||||||
|
"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<u-popup :show="showAuthentication" mode="center" @close="closePass" bgColor="transparent">
|
||||||
|
<view class="pass-box">
|
||||||
|
<view class="title">{{ $t("password") }}</view>
|
||||||
|
<view class="verfy-box">
|
||||||
|
<view>
|
||||||
|
<view class="label" style="margin-top:30rpx">{{ $t("password.input") }}:</view>
|
||||||
|
<u-code-input v-model="userPwd" dot :maxlength="6" hairline color="#ffffff"
|
||||||
|
borderColor="transparent"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="flex-end">
|
||||||
|
{{ $t("password.vername") }}
|
||||||
|
<text>{{ userInfo.telNum | disposeTel }}</text>
|
||||||
|
{{ $t("password.username") }}
|
||||||
|
</view>
|
||||||
|
<u-button :text="$t('comfrim')" color="#699A70" @click="comPass" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top:30rpx;
|
||||||
|
"></u-button>
|
||||||
|
<u-button :text="$t('payment.back')" color="#EDC466" @click="closePass" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<!-- 邀请码弹窗 -->
|
||||||
|
<u-popup :show="showInvite" mode="center" @close="closeInvite" bgColor="transparent">
|
||||||
|
<view class="invite-box">
|
||||||
|
<view style="margin-bottom: 20upx">{{ $t("payInfo.copyCode") }}</view>
|
||||||
|
<u-input v-model="codeSC" shape="circle" border="none" class="login-input"></u-input>
|
||||||
|
<u-button :text="$t('comfrim')" color="#558BF2" @click="sendConfirm" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
"></u-button>
|
||||||
|
<u-button :text="$t('close')" color="rgb(224,119,115)" @click="closeInvite" style="
|
||||||
|
width: 484rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
src: "",
|
||||||
|
showLocale: false,
|
||||||
|
applicationLocale: "",
|
||||||
|
userInfo: {},
|
||||||
|
showSetPass: false,
|
||||||
|
showVerfyPass: false,
|
||||||
|
showAuthentication: false,
|
||||||
|
setPwd: "",
|
||||||
|
confirmPwd: "",
|
||||||
|
userPwd: "",
|
||||||
|
confirmUserPwd: "",
|
||||||
|
paymentList: [],
|
||||||
|
notReadNum: 0,
|
||||||
|
showPage: false,
|
||||||
|
isAndroid: false,
|
||||||
|
canScan: false,
|
||||||
|
showInvite: false,
|
||||||
|
codeSC: "",
|
||||||
|
showPull: false,
|
||||||
|
listHeight: uni.getSystemInfoSync().windowHeight - 88 - 61,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
locales() {
|
||||||
|
return [
|
||||||
|
// {
|
||||||
|
// text: this.$t("locale.auto"),
|
||||||
|
// code: "auto",
|
||||||
|
// },
|
||||||
|
{
|
||||||
|
text: this.$t("locale.zh-hans"),
|
||||||
|
code: "zh-Hans",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: this.$t("locale.zh-hant"),
|
||||||
|
code: "zh-Hant",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: this.$t("locale.en"),
|
||||||
|
code: "en",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
disposeTel(phoneNum) {
|
||||||
|
return Number(phoneNum).toString().slice(0, 3) + '****' + Number(phoneNum).toString().slice(-4);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
toJSON() { },
|
||||||
|
|
||||||
|
goLang() {
|
||||||
|
this.showLocale = true;
|
||||||
|
},
|
||||||
|
closeLocale() {
|
||||||
|
this.showLocale = false;
|
||||||
|
},
|
||||||
|
closeInvite() {
|
||||||
|
this.showInvite = false;
|
||||||
|
this.codeSC = "";
|
||||||
|
},
|
||||||
|
openLocale() {
|
||||||
|
// console.log(uni.getLocale());
|
||||||
|
let systemInfo = uni.getSystemInfoSync();
|
||||||
|
this.systemLocale = systemInfo.language;
|
||||||
|
this.applicationLocale = uni.getLocale();
|
||||||
|
this.isAndroid = systemInfo.platform.toLowerCase() === "android";
|
||||||
|
uni.onLocaleChange((e) => {
|
||||||
|
this.applicationLocale = e.locale;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onLocaleChange(e) {
|
||||||
|
// console.log(e)
|
||||||
|
if (this.isAndroid) {
|
||||||
|
uni.showModal({
|
||||||
|
content: this.$t("index.language-change-confirm"),
|
||||||
|
success: (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
uni.setLocale(e.code);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
uni.setLocale(e.code);
|
||||||
|
this.$i18n.locale = e.code;
|
||||||
|
}
|
||||||
|
// console.log(this.$refs.tabbarRef);
|
||||||
|
this.$refs.tabbarRef.tabBarList = [{
|
||||||
|
pagePath: "pages/index/index",
|
||||||
|
iconPath: "../../static/image/tabbar/home.png",
|
||||||
|
selectedIconPath: "../../static/image/tabbar/home_check.png",
|
||||||
|
text: this.$t("tabbar.home"),
|
||||||
|
customIcon: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pagePath: "pages/mine/index",
|
||||||
|
iconPath: "../../static/image/tabbar/mine.png",
|
||||||
|
selectedIconPath: "../../static/image/tabbar/mine_check.png",
|
||||||
|
text: this.$t("tabbar.mine"),
|
||||||
|
customIcon: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
goDetail(ID, artworkUid) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/mine/detail/detail?ID=" + ID + "&artworkUid=" + artworkUid,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
goMess() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/mine/notice/notice",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
goSets() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/mine/setting/setting",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 唤起扫描二维码
|
||||||
|
goScan() {
|
||||||
|
this.showInvite = true;
|
||||||
|
// 判断当前页面是不是H5
|
||||||
|
// try {
|
||||||
|
// uni.scanCode({
|
||||||
|
// success: (res) => {
|
||||||
|
// if (res.result) {
|
||||||
|
// console.log(res.result, "res.result");
|
||||||
|
// uni.navigateTo({
|
||||||
|
// url: `/pages/mine/confirmOrder/confirmOrder?code=${res.result}`,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// } catch (error) {
|
||||||
|
// console.log(123123);
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
sendConfirm() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: `/pages/mine/confirmOrder/confirmOrder?code=${this.codeSC}`,
|
||||||
|
});
|
||||||
|
this.closeInvite();
|
||||||
|
},
|
||||||
|
// 获取未读消息
|
||||||
|
async getNotReadMsg() {
|
||||||
|
let res = await this.$api.airdrop.checkPoint();
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.notReadNum = res.data.Count;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 设置密码
|
||||||
|
step2() {
|
||||||
|
if (!this.setPwd || !this.confirmPwd) {
|
||||||
|
this.$common.msgToast(this.$t("password.inputPass"), null, "error");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.setPwd !== this.confirmPwd) {
|
||||||
|
this.$common.msgToast(this.$t("password.messError"), null, "error");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.setPassword();
|
||||||
|
},
|
||||||
|
// 设置密码接口
|
||||||
|
async setPassword() {
|
||||||
|
let res = await this.$api.mine.update({
|
||||||
|
password: this.confirmPwd,
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast(this.$t("password.setSucc"));
|
||||||
|
this.showSetPass = false;
|
||||||
|
this.showVerfyPass = true;
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg || this.$t("password.setError"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 验证密码接口
|
||||||
|
async verifyPwd(setFlag) {
|
||||||
|
let res = await this.$api.mine.verifyPwd({
|
||||||
|
password: this.userPwd,
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast(this.$t("password.verSucc"));
|
||||||
|
this.showVerfyPass = false;
|
||||||
|
this.showAuthentication = false;
|
||||||
|
// 如果有setFlag 说明是验证操作密码,在localStorage中存储一个标识
|
||||||
|
if (setFlag) {
|
||||||
|
uni.setStorageSync("isSetPass", 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg || this.$t("password.verError"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 第一次验证操作密码
|
||||||
|
async stepDone() {
|
||||||
|
if (!this.userPwd || !this.confirmUserPwd) {
|
||||||
|
this.$common.msgToast(this.$t("password.inputPass"), null, "error");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.userPwd !== this.confirmUserPwd) {
|
||||||
|
this.$common.msgToast(this.$t("password.messError"), null, "error");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.verifyPwd();
|
||||||
|
this.showVerfyPass = false;
|
||||||
|
},
|
||||||
|
// 验证操作密码
|
||||||
|
async comPass() {
|
||||||
|
let vef = this.$common.vefEmpty(
|
||||||
|
this.userPwd,
|
||||||
|
this.$t("password.inputPass")
|
||||||
|
);
|
||||||
|
if (!vef) return;
|
||||||
|
await this.verifyPwd(true);
|
||||||
|
this.userPwd = "";
|
||||||
|
//
|
||||||
|
},
|
||||||
|
// 返回
|
||||||
|
closePass() {
|
||||||
|
this.showAuthentication = false;
|
||||||
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 返回主页
|
||||||
|
closeBack() {
|
||||||
|
this.showSetPass = false;
|
||||||
|
this.showVerfyPass = false;
|
||||||
|
uni.switchTab({
|
||||||
|
url: "/pages/index/index",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 获取信息
|
||||||
|
async getInfo() {
|
||||||
|
uni.showLoading();
|
||||||
|
await this.$api.mine
|
||||||
|
.getInfo()
|
||||||
|
.then(async (res) => {
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.userInfo = res.data;
|
||||||
|
this.showPage = true;
|
||||||
|
await this.getPaymentInfo();
|
||||||
|
await this.getNotReadMsg();
|
||||||
|
} else if (res.status === 401) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: "/pages/login/login",
|
||||||
|
});
|
||||||
|
uni.clearStorageSync();
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg, null, "error");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
uni.showToast({
|
||||||
|
title: this.$t("load.failed"),
|
||||||
|
icon: "none"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
uni.hideLoading();
|
||||||
|
/* let res = await this.$api.mine.getInfo();
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.userInfo = res.data;
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg , null, "error");
|
||||||
|
} */
|
||||||
|
},
|
||||||
|
// 获取藏品
|
||||||
|
async getPaymentInfo() {
|
||||||
|
let res = await this.$api.mine.paymentList();
|
||||||
|
console.log(1111, res)
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.paymentList = res.data.data;
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg || this.$t("load.failed"), null, "error");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
async onShow() {
|
||||||
|
this.showPage = false;
|
||||||
|
await this.getInfo();
|
||||||
|
this.canScan = uni.getStorageSync("mall-user-info")?.canScan;
|
||||||
|
|
||||||
|
// 判断是否是第一次设置
|
||||||
|
if (this.userInfo.isNeedChange === 1) {
|
||||||
|
this.showSetPass = true;
|
||||||
|
} else {
|
||||||
|
this.userPwd = "";
|
||||||
|
// 如果localStorage中有isSetPass 说明已经设置过操作密码,不需要再次验证
|
||||||
|
this.showAuthentication = uni.getStorageSync("isSetPass") !== 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url("@/static/image/home/mine-bg.png") no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
// border: 1px solid red;696.1123
|
||||||
|
}
|
||||||
|
.login-input {
|
||||||
|
height: 68upx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.6);
|
||||||
|
padding: 0 20rpx;
|
||||||
|
|
||||||
|
/deep/ .uni-input-placeholder {
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
color: #E4E4E4;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: 100vw;
|
||||||
|
height: 122rpx;
|
||||||
|
background: #FFFFFF;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 188rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
margin-top: 36rpx;
|
||||||
|
margin-left: 48rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-box {
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
height: 210rpx;
|
||||||
|
margin: 20rpx 28rpx 20rpx 28rpx;
|
||||||
|
padding: 22rpx 20rpx;
|
||||||
|
display: flex;
|
||||||
|
box-sizing: border-box;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
margin-left: 50rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
|
||||||
|
.username {
|
||||||
|
width: 75%;
|
||||||
|
color: #000000;
|
||||||
|
font-size: 34rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blockchain {
|
||||||
|
color: #699A70;
|
||||||
|
font-size: 20rpx;
|
||||||
|
margin-top: 10rpx;
|
||||||
|
width: 75%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.mine-icon {
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
height: 130rpx;
|
||||||
|
margin: 0rpx 28rpx 40rpx 28rpx;
|
||||||
|
padding: 20rpx 20rpx;
|
||||||
|
display: flex;
|
||||||
|
box-sizing: border-box;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.value {
|
||||||
|
color: #000000;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag,
|
||||||
|
.message,
|
||||||
|
.scan,
|
||||||
|
.setting {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.point {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 999;
|
||||||
|
left: 35rpx;
|
||||||
|
top: 0rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// .scan {
|
||||||
|
|
||||||
|
// width: 60rpx;
|
||||||
|
|
||||||
|
// font-size: 20rpx;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.his-title-text {
|
||||||
|
font-size: 24rpx;
|
||||||
|
margin: 28rpx;
|
||||||
|
padding-bottom: 4upx;
|
||||||
|
color: #959595;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&>.line {
|
||||||
|
flex: 1;
|
||||||
|
height: 0.5rpx;
|
||||||
|
background: #D0D0D0;
|
||||||
|
margin-left: 5rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.his-box {
|
||||||
|
margin: 0 8rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
width: 332rpx;
|
||||||
|
height: 418rpx;
|
||||||
|
// background: #000000;
|
||||||
|
// border-radius: 8rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
margin: 20rpx 10rpx 0 18rpx;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
width: 28rpx;
|
||||||
|
height: 28rpx;
|
||||||
|
position: absolute;
|
||||||
|
top: 16rpx;
|
||||||
|
right: 18rpx;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img {
|
||||||
|
width: 100%;
|
||||||
|
height: 324rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
height: 96rpx;
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
font-size: 32rpx;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 96rpx;
|
||||||
|
background-position: center center;
|
||||||
|
background-size:cover !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentD {
|
||||||
|
background: url("../../static/image/mine/item-bg1.png") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentC {
|
||||||
|
background: url("../../static/image/mine/item-bg2.png") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentB {
|
||||||
|
background: url("../../static/image/mine/item-bg3.png") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentA {
|
||||||
|
background: url("../../static/image/mine/item-bg4.png") no-repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.invite-box {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popupLocale-box {
|
||||||
|
background: rgba(0, 0, 0, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 42rpx;
|
||||||
|
|
||||||
|
.content3 {
|
||||||
|
background: url("../../static/image/mine/item-bg3.png") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content4 {
|
||||||
|
background: url("../../static/image/mine/item-bg4.png") no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
height: 96rpx;
|
||||||
|
width: 100%;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
font-size: 32rpx;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 96rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.popupLocale-box {
|
||||||
|
background: rgba(0, 0, 0, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 42rpx 0 42rpx;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.u-button {
|
||||||
|
width: 260rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 34rpx 50rpx 38rpx 0;
|
||||||
|
// border-bottom: 1px solid #dedede;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.right {
|
||||||
|
font-size: 20rpx;
|
||||||
|
|
||||||
|
.tag-btn {
|
||||||
|
width: 100rpx;
|
||||||
|
|
||||||
|
/deep/ .u-tag {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-tag__text--medium {
|
||||||
|
font-size: 20rpx;
|
||||||
|
text-align: center;
|
||||||
|
height: 40rpx;
|
||||||
|
line-height: 40rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.u-popup__content {
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-top {
|
||||||
|
width: 466rpx;
|
||||||
|
padding: 16rpx 40rpx;
|
||||||
|
background: #699A70;
|
||||||
|
margin: auto;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-box {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 26rpx;
|
||||||
|
background: #FFFFFF;
|
||||||
|
padding-bottom: 80rpx;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin: 46rpx 0 34rpx 0;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-pl {
|
||||||
|
text-align: center;
|
||||||
|
color: #878787;
|
||||||
|
font-size: 28rpx;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.verfy-box {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 24rpx;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
margin-top: 90rpx;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-code-input__item {
|
||||||
|
background: rgba(228, 228, 228, 0.7);
|
||||||
|
width: 60rpx !important;
|
||||||
|
height: 60rpx !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pass-box {
|
||||||
|
width: 582rpx;
|
||||||
|
height: 484rpx;
|
||||||
|
background: #FFFFFF;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin: 46rpx 0 34rpx 0;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-end {
|
||||||
|
margin-top: 70rpx;
|
||||||
|
padding: 58rpx;
|
||||||
|
text-align: right;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
}</style>
|
367
pages/mine/notice/notice.vue
Normal file
@ -0,0 +1,367 @@
|
|||||||
|
<template>
|
||||||
|
<view class="main">
|
||||||
|
<feedback :showQa="showQa" @closeFeed ='closeFeed'/>
|
||||||
|
<navBar :navTitle="'消息'" :hasRight="true" :stickyShow="stickyShow" :currentPage="'pages/mine/index'" :backBackGroundColor="'#699A70'" @clickRight="clickRight"/>
|
||||||
|
<view class="list">
|
||||||
|
<scroll-view style="width: 100%; height: calc(100vh - 200upx); position: relative" scroll-y="true">
|
||||||
|
<view
|
||||||
|
class="card"
|
||||||
|
v-for="item in indexList"
|
||||||
|
:key="item.Uuid"
|
||||||
|
:style="!item.Clicked ||!item.Claimed? 'background-color: #E4E4E4;':'background-color: #FFFFFF;' "
|
||||||
|
@click="openKt(item)"
|
||||||
|
>
|
||||||
|
<view class="avtor"><image class="avtimg" :src="item.PicUrl"></image></view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="item-txt">
|
||||||
|
<view v-if="item.DropOrAnnounce === 0" class="kt">{{$t('airdrop')}}</view>
|
||||||
|
<view v-else class="gonggao">{{$t('announcement')}}</view>
|
||||||
|
<view v-if="item.DropOrAnnounce === 0" class="title">{{ item.Series }}</view>
|
||||||
|
<view v-else class="title">{{ item.Title }}</view>
|
||||||
|
<image
|
||||||
|
v-if="!item.Clicked&& item.DropOrAnnounce === 0"
|
||||||
|
class="dian"
|
||||||
|
src="../../../static/image/mine/dian.png"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view class="item-txt" style="margin-top: 10upx">
|
||||||
|
<view v-if="item.DropOrAnnounce === 0" class="content">{{ item.Desc }}</view>
|
||||||
|
<view v-else class="content" v-html="item.Content"></view>
|
||||||
|
<!-- <view style="font-size: 12upx;color: rgba(255, 255, 255, 0.3);">{{ item.TimeFormat }}</view> -->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
<u-popup :show="showKt" mode="center" @close="closePop" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view style="padding-left: 190upx; padding-right: 190upx">
|
||||||
|
<view v-if="!this.isMsgDetail" class="title">{{$t('airdrop')}}</view>
|
||||||
|
<view v-else style="background-color: #EDC466;" class="title">{{$t('announcement')}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item"><image style="width: 600upx; height: 600upx" :src="listItem.PicUrl"></image></view>
|
||||||
|
<view
|
||||||
|
style="
|
||||||
|
color: #000;
|
||||||
|
margin-top: 10upx;
|
||||||
|
margin-bottom: 10upx;
|
||||||
|
font-size: 40upx;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{ this.isMsgDetail ? listItem.Title : listItem.Collection }}
|
||||||
|
</view>
|
||||||
|
<view v-if="!this.isMsgDetail" style="color: #6c6c6c; margin-top: 10upx; margin-bottom: 10upx">
|
||||||
|
{{ listItem.Desc }}
|
||||||
|
</view>
|
||||||
|
<view v-else style="color: #6c6c6c; margin-top: 10upx; margin-bottom: 10upx" v-html="listItem.Content"></view>
|
||||||
|
</view>
|
||||||
|
<view style="display: flex">
|
||||||
|
<u-button
|
||||||
|
v-if="listItem.Claimed === 0 && !this.isMsgDetail"
|
||||||
|
:text="$t('to.accept')"
|
||||||
|
|
||||||
|
@click="recive"
|
||||||
|
style="width: 460rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;background: #699A70;
|
||||||
|
border: none;
|
||||||
|
color:#fff;"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
v-if="listItem.Clicked === 0 && this.isMsgDetail"
|
||||||
|
:text="$t('read')"
|
||||||
|
@click="readMsg"
|
||||||
|
style="
|
||||||
|
width: 460rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
background: #699A70;
|
||||||
|
border: none;
|
||||||
|
color:#fff;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
v-if="listItem.Clicked === 1 && this.isMsgDetail"
|
||||||
|
:text="$t('close')"
|
||||||
|
|
||||||
|
@click="closePop"
|
||||||
|
style="
|
||||||
|
width: 460rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
background: #699A70;
|
||||||
|
border: none;
|
||||||
|
color:#fff;
|
||||||
|
"
|
||||||
|
></u-button>
|
||||||
|
<u-button
|
||||||
|
v-if="listItem.Claimed === 1 && !this.isMsgDetail"
|
||||||
|
:text="$t('close')"
|
||||||
|
|
||||||
|
@click="closePop"
|
||||||
|
style="width: 460rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;background: #699A70;
|
||||||
|
border: none;
|
||||||
|
color:#fff;"
|
||||||
|
></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import feedback from '../feedback/feedback.vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components:{
|
||||||
|
feedback
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showKt: false,
|
||||||
|
stickyShow: false,
|
||||||
|
indexList: [],
|
||||||
|
listItem: {},
|
||||||
|
isMsgDetail: false,
|
||||||
|
showQa:false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
this.loadmore();
|
||||||
|
},
|
||||||
|
onPageScroll(e) {
|
||||||
|
this.stickyShow = e.scrollTop > 5 ? true : false;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
closePop() {
|
||||||
|
this.showKt = false;
|
||||||
|
this.loadmore();
|
||||||
|
this.canScroll();
|
||||||
|
},
|
||||||
|
// 打开空头详情
|
||||||
|
async openKt(item) {
|
||||||
|
this.listItem = item;
|
||||||
|
// console.log(this.listItem);
|
||||||
|
if (this.listItem.DropOrAnnounce === 0) {
|
||||||
|
this.isMsgDetail = false;
|
||||||
|
await this.clickDetail();
|
||||||
|
} else {
|
||||||
|
this.isMsgDetail = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.showKt = true;
|
||||||
|
this.stopScroll();
|
||||||
|
},
|
||||||
|
// 阅读
|
||||||
|
async readMsg(){
|
||||||
|
let data = {
|
||||||
|
Uuid: this.listItem.Uuid,
|
||||||
|
Clicked: this.listItem.Clicked
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.readMsg(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.showKt = false;
|
||||||
|
this.canScroll();
|
||||||
|
this.loadmore();
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 查看详情
|
||||||
|
async clickDetail() {
|
||||||
|
let data = {
|
||||||
|
Collection: this.listItem.Collection,
|
||||||
|
Desc: this.listItem.Desc,
|
||||||
|
PicUrl: this.listItem.PicUrl,
|
||||||
|
Series: this.listItem.Series,
|
||||||
|
Uuid: this.listItem.Uuid,
|
||||||
|
Clicked: this.listItem.Clicked
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.collectionSepcific(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 加载空投列表
|
||||||
|
async loadmore() {
|
||||||
|
let res = await this.$api.airdrop.collectionList();
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.indexList = res.data.Data;
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 接受1
|
||||||
|
async recive() {
|
||||||
|
let data = {
|
||||||
|
UserId: uni.getStorageSync('mall-user-info').ID,
|
||||||
|
Uuid: this.listItem.Uuid
|
||||||
|
};
|
||||||
|
|
||||||
|
let res = await this.$api.airdrop.getCollection(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.step2(this.listItem.CollectionUid);
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 接受1
|
||||||
|
async step2(id) {
|
||||||
|
let data = {
|
||||||
|
collectionsUID: id,
|
||||||
|
userAirdropUuid: this.listItem.Uuid
|
||||||
|
};
|
||||||
|
let res = await this.$api.airdrop.getCollectionStepTwo(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.showKt = false;
|
||||||
|
this.canScroll();
|
||||||
|
this.loadmore();
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
clickRight() {
|
||||||
|
this.showQa = true;
|
||||||
|
},
|
||||||
|
closeFeed(isShow){
|
||||||
|
this.showQa = isShow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: #F5F5F5;
|
||||||
|
// background-size: 100% 100%;
|
||||||
|
// background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
height: 100%;
|
||||||
|
padding: 36upx 32upx;
|
||||||
|
.list {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
// .u-popup /deep/ .u-transition {
|
||||||
|
// background-color: rgba(0, 0, 0, 0.9) !important;
|
||||||
|
// }
|
||||||
|
.popupLocale-box {
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 42rpx;
|
||||||
|
.title {
|
||||||
|
// background-color: rgba(88, 146, 255, 0.6);
|
||||||
|
background: rgba(105,154,112, 0.6);
|
||||||
|
font-size: 40rpx;
|
||||||
|
|
||||||
|
border-radius: 40upx;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
.u-button {
|
||||||
|
width: 260rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
}
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
width: 100%;
|
||||||
|
height: 200upx;
|
||||||
|
border-radius: 8upx;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 20upx;
|
||||||
|
display: inline-flex;
|
||||||
|
// background: #FFFFFF;
|
||||||
|
.avtor {
|
||||||
|
width: 220upx;
|
||||||
|
margin-top: 30upx;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
align-items: center;
|
||||||
|
.avtimg {
|
||||||
|
width: 144upx;
|
||||||
|
height: 144upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.item {
|
||||||
|
flex: 1;
|
||||||
|
height: 100%;
|
||||||
|
padding-right: 20upx;
|
||||||
|
position: relative;
|
||||||
|
.happy {
|
||||||
|
position: absolute;
|
||||||
|
width: 181upx;
|
||||||
|
height: 176upx;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.item-txt {
|
||||||
|
margin-top: 30upx;
|
||||||
|
display: inline-flex;
|
||||||
|
width: 100%;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
.kt {
|
||||||
|
padding: 4upx 16upx ;
|
||||||
|
// background-color: #558bf2;
|
||||||
|
background: #699A70;
|
||||||
|
border-radius: 30upx;
|
||||||
|
margin-right: 10upx;
|
||||||
|
font-size: 24upx;
|
||||||
|
}
|
||||||
|
.gonggao {
|
||||||
|
padding: 4upx 16upx ;
|
||||||
|
background-color: #edc466;
|
||||||
|
border-radius: 30upx;
|
||||||
|
margin-right: 10upx;
|
||||||
|
font-size: 24upx;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
width: 290upx;
|
||||||
|
font-size: 34upx;
|
||||||
|
line-height: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 1;
|
||||||
|
word-break: break-all;
|
||||||
|
color: #434343;
|
||||||
|
text-align: left;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
}
|
||||||
|
.dian {
|
||||||
|
width: 40upx;
|
||||||
|
height: 40upx;
|
||||||
|
position: absolute;
|
||||||
|
right: 20upx;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
width: 300upx;
|
||||||
|
height: 80upx;
|
||||||
|
word-break: break-all;
|
||||||
|
text-align: left;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2; //这儿的数字代表的就是你所需要实现效果的第N行
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
152
pages/mine/realName/realName.vue
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
<template>
|
||||||
|
<view class="main">
|
||||||
|
<navBar navTitle="" :hasLogo="true" :backToUrl="'/pages/mine/setting/setting'" :backBackGroundColor="'#3D553D'" />
|
||||||
|
<view class="input-box">
|
||||||
|
<view class="text">{{ $t('realname.conduct') }}</view>
|
||||||
|
<view class="formItem">
|
||||||
|
<view style="color: #434343;font-size: 26upx;">{{ $t('buyVerfy.username') }}:</view>
|
||||||
|
<u-input v-model="realName" shape="circle" border="none" class="login-input"></u-input>
|
||||||
|
</view>
|
||||||
|
<view class="formItem">
|
||||||
|
<view style="color:#434343;font-size: 26upx;">{{ $t('buyVerfy.idNum') }}:</view>
|
||||||
|
<u-input v-model="idNum" shape="circle" border="none" class="login-input"></u-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-button :text="$t('buyVerfy.done')" color="#699A70" @click="save" class="btn"></u-button>
|
||||||
|
<!-- <view @click="cancel" class="cancel">{{ $t('buyVerfy.cancel') }}</view> -->
|
||||||
|
<u-toast ref="uToast" />
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
idNum: '',
|
||||||
|
realName: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
cancel() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/mine/setting/setting'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async save() {
|
||||||
|
if (!this.idNum || !this.realName) {
|
||||||
|
return this.$refs.uToast.show({
|
||||||
|
message: '姓名和身份证号码不能为空',
|
||||||
|
type: 'error',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let data = { idNum: this.idNum, realName: this.realName }
|
||||||
|
let res = await this.$api.mine.update(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
message: this.$t('buyVerfy.done'),
|
||||||
|
type: 'success',
|
||||||
|
})
|
||||||
|
this.cancel()
|
||||||
|
} else {
|
||||||
|
this.$refs.uToast.show({
|
||||||
|
message: res.msg,
|
||||||
|
type: 'error',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url('@/static/image/home/new_bg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-input__content__field-wrapper__field {
|
||||||
|
font-size: 24upx !important;
|
||||||
|
margin-left: 10upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
margin-top: 40upx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 201upx;
|
||||||
|
height: 60upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
height: 56rpx;
|
||||||
|
width: 600upx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 120upx;
|
||||||
|
left: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cancel {
|
||||||
|
text-align: center;
|
||||||
|
height: 56rpx;
|
||||||
|
width: 600upx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
margin-top: 30rpx;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 40upx;
|
||||||
|
left: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-box {
|
||||||
|
position: absolute;
|
||||||
|
top: 258upx;
|
||||||
|
width: 638upx;
|
||||||
|
|
||||||
|
.text {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 45upx;
|
||||||
|
margin-bottom: 250upx;
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formItem {
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 40upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-input {
|
||||||
|
height: 60upx;
|
||||||
|
background-color: rgba(135, 135, 135, 0.5);
|
||||||
|
margin-left: 10upx;
|
||||||
|
width: 482upx;
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
color: #fff;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
width: 24upx;
|
||||||
|
height: 24upx;
|
||||||
|
margin-right: 20upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
501
pages/mine/setting/setting.vue
Normal file
@ -0,0 +1,501 @@
|
|||||||
|
<template>
|
||||||
|
<view class="main">
|
||||||
|
<navBar navTitle="" :hasLogo="true" :hasRight="true" :backToUrl="'/pages/mine/index'" :isSwitchTab="true"
|
||||||
|
@clickRight="clickRight" :color="'#000000'" :backBackGroundColor="'rgb(105, 154, 112)'" />
|
||||||
|
<view class="avtor">
|
||||||
|
<image :src="userInfo.avatar + '?x-oss-process=image/resize,w_158,h_158'"></image>
|
||||||
|
<view>
|
||||||
|
<u-button :text="$t('avatar.def')" shape="circle" class="size" style="background-color: #000000;"
|
||||||
|
@click="backDafult"></u-button>
|
||||||
|
<u-upload :fileList="fileList" name="1" accept="image" @afterRead="upLoaded">
|
||||||
|
<u-button :text="$t('avatar.update')" shape="circle" class="size"></u-button>
|
||||||
|
</u-upload>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="info">
|
||||||
|
<view class="item">
|
||||||
|
<view class="title">{{ $t('userInfo.name') }}</view>
|
||||||
|
<view class="gray" style="display:flex;justify-content: center;align-items: center;">
|
||||||
|
<view>{{ userInfo.nickName }}</view>
|
||||||
|
<text class="rz" @click="showName = true">{{ $t('userInfo.updateName') }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-divider></u-divider>
|
||||||
|
<view class="item">
|
||||||
|
<view class="title">{{ $t('userInfo.createTime') }}</view>
|
||||||
|
<view class="gray">{{ userInfo.createdAt }}</view>
|
||||||
|
</view>
|
||||||
|
<u-divider></u-divider>
|
||||||
|
<view class="item">
|
||||||
|
<view class="title">{{ $t('userInfo.idNum') }}</view>
|
||||||
|
<view class="gray">{{ userInfo.ID }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="info">
|
||||||
|
<view class="item">
|
||||||
|
<view class="title">{{ $t('userInfo.phone') }}</view>
|
||||||
|
<view class="gray" style="display: flex;">
|
||||||
|
<u--text mode="phone" :text="userInfo.telNum" format="encrypt"></u--text>
|
||||||
|
<view class="rz" style="background-color:#676767;" @click="goChangeNum">{{ $t('phone.update') }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view style="width: 100%; text-align: right;color: #656565;margin-top: 20upx;font-size:20rpx">
|
||||||
|
*{{ $t('phone.verInfo') }}</view>
|
||||||
|
<view v-if="!userInfo.realName" class="info" style="margin-top: 20upx;">
|
||||||
|
<view class="item">
|
||||||
|
<view class="title">{{ $t('user.realName') }}</view>
|
||||||
|
<view class="gray"><text class="rz" @click="goRealName">{{ $t('user.verfy') }}</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="userInfo.realName" class="info" style="margin-top: 20upx;">
|
||||||
|
<view class="item">
|
||||||
|
<view class="title" style="display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;">
|
||||||
|
{{ $t('user.username') }}
|
||||||
|
<view
|
||||||
|
style="background-color:#699A70 ;border-radius: 40rpx;font-size: 20rpx;padding: 0 15rpx 0 15rpx;color:#FFFFFF;margin-left:10rpx">
|
||||||
|
{{ $t('user.verDone') }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="gray">
|
||||||
|
{{ userInfo.realName }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<u-divider></u-divider>
|
||||||
|
<view class="item">
|
||||||
|
<view class="title">{{ $t('user.idNum') }}</view>
|
||||||
|
<view class="gray">{{ userInfo.idNum }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn">
|
||||||
|
<u-button :text="$t('account.logout')" shape="circle" class="size"
|
||||||
|
style=" background-color:#ED6666;color: #fff;border: 0;margin-right: 20upx;"
|
||||||
|
@click="showDestory = true"></u-button>
|
||||||
|
<u-button @click="showLogout = true" :text="$t('account.signOut')" shape="circle" class="size"
|
||||||
|
style="background-color: #3E3E3E;color: #fff;border: 0;"></u-button>
|
||||||
|
</view>
|
||||||
|
<u-popup :show="showName" mode="center" @close="showName = false" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="title" style="color:#FFFFFF;font-size:40rpx">{{ $t('set.name') }}</view>
|
||||||
|
<view class="item">
|
||||||
|
<u--input :placeholder="$t('set.input')" shape="circle" v-model="changeName"
|
||||||
|
style="background-color: rgba(255, 255, 255, 0.5);border: 0;margin-left: 50upx;"
|
||||||
|
class="setName"></u--input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view style="display: flex;">
|
||||||
|
<u-button :text="$t('navbar.back')" color="#EDC466" @click="showName = false"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<u-button :text="$t('comfrim')" color="#699A70" @click="updateName"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<feedback :showQa="showQa" @closeFeed='closeFeed' />
|
||||||
|
<u-popup :show="showDestory" mode="center" @close="showDestory = false" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="title" style="margin-bottom: 0;">
|
||||||
|
<image style="width: 76upx;height: 76upx;" src="../../../static/image/mine/warning.png"></image>
|
||||||
|
</view>
|
||||||
|
<view class="item" style="font-size: 32upx;">{{ $t('logout.info') }}</view>
|
||||||
|
</view>
|
||||||
|
<view style="display: flex;">
|
||||||
|
<u-button :text="$t('navbar.back')" color="#EDC466" @click="showDestory = false"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<u-button :text="$t('comfrim')" color="#ED6666" @click="goConfirm"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<u-popup :show="confirmDestory" mode="center" @close="confirmDestory = false" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="title" style="margin-bottom: 0;">
|
||||||
|
<image style="width: 76upx;height: 76upx;" src="../../../static/image/mine/confim-warning.png"></image>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="sec">
|
||||||
|
<view>{{ $t('sendCode.send') }}{{ userInfo.telNum }}</view>
|
||||||
|
<view class="resend" @tap="getCode">{{ tips }}</view>
|
||||||
|
</view>
|
||||||
|
<view class="code-box">
|
||||||
|
<u-code-input v-model="Code" :focus="focus"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="action-box">
|
||||||
|
<view class="confirm-input">
|
||||||
|
<view style="margin-bottom: 15upx;color: rgba(255, 255, 255, 0.6);">{{ $t('password.input') }}:
|
||||||
|
</view>
|
||||||
|
<u-code-input v-model="actCode"></u-code-input>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="tips">*注意:此操作将彻底删除该账号所有信息</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
<view style="display: flex;">
|
||||||
|
<u-button :text="$t('navbar.back')" color="#ECC366" @click="confirmDestory = false"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<u-button :text="$t('logout.btn')" color="#ED6666" @click="destoryAccount"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<u-popup :show="showLogout" mode="center" @close="showLogout = false" bgColor="transparent">
|
||||||
|
<view class="popupLocale-box">
|
||||||
|
<view class="title" style="margin-bottom: 0;">
|
||||||
|
<image style="width: 80upx;height: 80upx;" src="../../../static/image/mine/warning.png"></image>
|
||||||
|
</view>
|
||||||
|
<view class="item" style="font-size: 30upx;">{{ $t('signout.info') }}</view>
|
||||||
|
</view>
|
||||||
|
<view style="display: flex;">
|
||||||
|
<u-button :text="$t('navbar.back')" color="#ECC366" @click="showLogout = false"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
<u-button :text="$t('comfrim')" color="#ED6666" @click="logout"
|
||||||
|
style="width: 260rpx;height: 56rpx;border-radius: 40rpx;margin-top: 30rpx;"></u-button>
|
||||||
|
</view>
|
||||||
|
</u-popup>
|
||||||
|
<u-code :seconds="seconds" @start="start" ref="uCode" @change="codeChange"></u-code>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import feedback from '../feedback/feedback.vue';
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
feedback
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showName: false,
|
||||||
|
showQa: false,
|
||||||
|
showDestory: false,
|
||||||
|
showLogout: false,
|
||||||
|
confirmDestory: false,
|
||||||
|
fileList: [],
|
||||||
|
tips: '',
|
||||||
|
seconds: 60,
|
||||||
|
wathTime: 10,
|
||||||
|
changeName: '',
|
||||||
|
focus: false,
|
||||||
|
Code: '',
|
||||||
|
actCode: '',
|
||||||
|
userInfo: {},
|
||||||
|
// content: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getInfo()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取信息
|
||||||
|
async getInfo() {
|
||||||
|
let res = await this.$api.mine.getInfo();
|
||||||
|
if (res.status === 0) {
|
||||||
|
this.userInfo = res.data;
|
||||||
|
} else {
|
||||||
|
this.$common.msgToast(res.msg, null, 'error');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取头像
|
||||||
|
uploadFilePromise(url) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const Authorization = uni.getStorageSync('token');
|
||||||
|
const userId = uni.getStorageSync('mall-user-info').ID
|
||||||
|
let a = uni.uploadFile({
|
||||||
|
url: this.$baseUrl + '/mall/upload/file',
|
||||||
|
filePath: url,
|
||||||
|
name: 'file',
|
||||||
|
formData: {
|
||||||
|
type: 'image',
|
||||||
|
source: 'user',
|
||||||
|
mask: userId
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
Authorization
|
||||||
|
},
|
||||||
|
success: res => {
|
||||||
|
resolve(res.data);
|
||||||
|
|
||||||
|
this.updateInfo({
|
||||||
|
avatar: JSON.parse(res.data).data.ori_url
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 上传头像
|
||||||
|
async upLoaded(file, lists, name) {
|
||||||
|
this.uploadFilePromise(file.file.url);
|
||||||
|
},
|
||||||
|
// 发送验证码
|
||||||
|
start() {
|
||||||
|
uni.$u.toast(this.$t('sendCode'));
|
||||||
|
},
|
||||||
|
// 改变提示
|
||||||
|
codeChange(text) {
|
||||||
|
this.tips = text;
|
||||||
|
},
|
||||||
|
async destoryAccount() {
|
||||||
|
if (!this.Code || !this.actCode) {
|
||||||
|
this.$common.msgToast(this.$t('code.actPass'), null, 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const data = {
|
||||||
|
password: this.actCode,
|
||||||
|
code: this.Code
|
||||||
|
}
|
||||||
|
const res = await this.$api.mine.logout(data)
|
||||||
|
if (res.status === 0) {
|
||||||
|
console.log(res)
|
||||||
|
this.confirmDestory = false;
|
||||||
|
this.logout()
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取验证码
|
||||||
|
async getCode() {
|
||||||
|
if (this.$refs.uCode.canGetCode) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: this.$t('sendCode.loading')
|
||||||
|
});
|
||||||
|
|
||||||
|
let res = await this.$api.mine.mineCode({
|
||||||
|
TelNum: this.userInfo.telNum
|
||||||
|
});
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.hideLoading();
|
||||||
|
// 这里此提示会被this.start()方法中的提示覆盖
|
||||||
|
this.focus = true;
|
||||||
|
this.$refs.uCode.start();
|
||||||
|
// 通知验证码组件内部开始倒计时
|
||||||
|
} else {
|
||||||
|
uni.hideLoading();
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(this.$t('sendCode.toast'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 退出登录
|
||||||
|
logout() {
|
||||||
|
// uni.removeStorageSync("mall-user-info");
|
||||||
|
// uni.removeStorageSync("token");
|
||||||
|
uni.clearStorageSync();
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 确认销毁
|
||||||
|
goConfirm() {
|
||||||
|
this.showDestory = false;
|
||||||
|
this.confirmDestory = true;
|
||||||
|
},
|
||||||
|
// 修改电话
|
||||||
|
goChangeNum() {
|
||||||
|
if (!this.userInfo.realName) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/mine/changePhone/changePhone?telNum=' + this.userInfo.telNum
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 实名认证
|
||||||
|
goRealName() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/mine/realName/realName'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
// 更新昵称
|
||||||
|
async updateName() {
|
||||||
|
await this.updateInfo({
|
||||||
|
nickName: this.changeName
|
||||||
|
})
|
||||||
|
this.showName = false
|
||||||
|
},
|
||||||
|
// 更新信息
|
||||||
|
async updateInfo(data) {
|
||||||
|
let res = await this.$api.mine.update(data);
|
||||||
|
if (res.status === 0) {
|
||||||
|
uni.$u.toast(this.$t('update.succes'));
|
||||||
|
this.getInfo()
|
||||||
|
uni.setStorageSync('mall-user-info', this.userInfo);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uni.$u.toast(res.msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// ,默认头像
|
||||||
|
backDafult() {
|
||||||
|
this.updateInfo({
|
||||||
|
avatar: 'https://dci-file.bj.bcebos.com/shop-main/prod/image/0/user/6ae57adf-7d05-4f84-9053-d39967870327.jpg'
|
||||||
|
})
|
||||||
|
|
||||||
|
},
|
||||||
|
// 反馈
|
||||||
|
clickRight() {
|
||||||
|
this.showQa = true;
|
||||||
|
},
|
||||||
|
closeFeed(isShow) {
|
||||||
|
this.showQa = isShow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page {
|
||||||
|
background: url('@/static/image/home/new_bg.png') no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-attachment: fixed;
|
||||||
|
height: 100vh;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sec {
|
||||||
|
color: #ffffff;
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
top: 120upx;
|
||||||
|
|
||||||
|
.resend {
|
||||||
|
margin-left: 100upx;
|
||||||
|
color: #fcb462;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-box {
|
||||||
|
margin-top: 70upx;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .u-code-input__item {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 20upx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.65);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main {
|
||||||
|
display: grid;
|
||||||
|
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.avtor {
|
||||||
|
margin-top: 40upx;
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: space-around;
|
||||||
|
|
||||||
|
image {
|
||||||
|
width: 160upx;
|
||||||
|
height: 160upx;
|
||||||
|
border-radius: 40upx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size {
|
||||||
|
color: #fff;
|
||||||
|
border: 0;
|
||||||
|
background-color: #699A70;
|
||||||
|
margin-bottom: 20upx;
|
||||||
|
width: 348upx;
|
||||||
|
height: 64upx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-box {
|
||||||
|
|
||||||
|
margin-top: 50upx;
|
||||||
|
position: relative;
|
||||||
|
height: 250upx;
|
||||||
|
background-color: rgba(255, 255, 255, 0.3);
|
||||||
|
|
||||||
|
.confirm-input {
|
||||||
|
position: absolute;
|
||||||
|
top: 30%;
|
||||||
|
left: 4%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
width: 600upx;
|
||||||
|
background: #FFFFFF;
|
||||||
|
margin-top: 65upx;
|
||||||
|
padding: 34rpx 40upx;
|
||||||
|
|
||||||
|
.item {
|
||||||
|
font-size: 30upx;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.rz {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin-left: 10upx;
|
||||||
|
font-size: 20rpx;
|
||||||
|
background-color: #699A70;
|
||||||
|
color: #FFFFFF;
|
||||||
|
border-radius: 40upx;
|
||||||
|
padding: 6rpx 34rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.gray {
|
||||||
|
color: #878787;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
margin-top: 100upx;
|
||||||
|
width: 100%;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popupLocale-box {
|
||||||
|
background: rgba(0, 0, 0, 0.8);
|
||||||
|
width: 582rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 30rpx 42rpx;
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 40rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.u-button {
|
||||||
|
width: 260rpx;
|
||||||
|
height: 56rpx;
|
||||||
|
border-radius: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 34rpx 0 38rpx 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tips {
|
||||||
|
color: #DC0023;
|
||||||
|
font-size: 20rpx;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 80rpx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.setName {
|
||||||
|
/deep/ .uni-input-placeholder {
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/deep/ .uni-input-input {
|
||||||
|
color: #ffffff;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
}</style>
|
46
pages/start/start.vue
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<!-- <image src="../../static/image/start/logo.png" mode="" class="logo"></image> -->
|
||||||
|
<!-- <image src="../../static/image/start/welcome.png" mode="" class="welcome"></image> -->
|
||||||
|
<!-- <image src="../../static/image/start/bt-bg.png" mode="" class="btBg"></image> -->
|
||||||
|
<!-- <view class="btn" @click="goHome">
|
||||||
|
点击进入
|
||||||
|
</view> -->
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
/* goHome() {
|
||||||
|
console.log(1111);
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
} */
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/index'
|
||||||
|
})
|
||||||
|
},1000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
page{
|
||||||
|
height: 100vh;
|
||||||
|
background:url('../../static/image/start/new_bg.png') no-repeat center center fixed;
|
||||||
|
background-size: cover;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
14
static/1.mtl
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#
|
||||||
|
## Alias OBJ Material File
|
||||||
|
# Exported from SketchUp, (c) 2000-2012 Trimble Navigation Limited
|
||||||
|
|
||||||
|
newmtl Color_D06
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.894118 0.752941 0.329412
|
||||||
|
Ks 0.330000 0.330000 0.330000
|
||||||
|
|
||||||
|
newmtl Color_D07
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.650980 0.513725 0.105882
|
||||||
|
Ks 0.330000 0.330000 0.330000
|
||||||
|
|
25988
static/1.obj
Normal file
19
static/5.mtl
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#
|
||||||
|
## Alias OBJ Material File
|
||||||
|
# Exported from SketchUp, (c) 2000-2012 Trimble Navigation Limited
|
||||||
|
|
||||||
|
newmtl Color_D06
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.894118 0.752941 0.329412
|
||||||
|
Ks 0.330000 0.330000 0.330000
|
||||||
|
|
||||||
|
newmtl ForegroundColor
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.000000 0.000000 0.000000
|
||||||
|
Ks 0.330000 0.330000 0.330000
|
||||||
|
|
||||||
|
newmtl Color_D07
|
||||||
|
Ka 0.000000 0.000000 0.000000
|
||||||
|
Kd 0.650980 0.513725 0.105882
|
||||||
|
Ks 0.330000 0.330000 0.330000
|
||||||
|
|
76656
static/5.obj
Normal file
BIN
static/app.png
Normal file
After Width: | Height: | Size: 1.8 MiB |
BIN
static/bg-3d.png
Normal file
After Width: | Height: | Size: 403 KiB |
5
static/book.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
安卓证书
|
||||||
|
|
||||||
|
证书别名: mallapp
|
||||||
|
秘钥密码: 12345678
|
||||||
|
证明文件: <同目录的mall-app.keystore>SDSSS
|
BIN
static/code.jpg
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
static/image/home/1.png
Normal file
After Width: | Height: | Size: 451 KiB |
BIN
static/image/home/1/1.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
static/image/home/1/2.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
static/image/home/1/bg.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
static/image/home/1/flower.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
static/image/home/1/line.png
Normal file
After Width: | Height: | Size: 134 B |
BIN
static/image/home/1/top-bg.png
Normal file
After Width: | Height: | Size: 3.5 MiB |
BIN
static/image/home/1/top-bg1.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
static/image/home/222.png
Normal file
After Width: | Height: | Size: 382 KiB |
BIN
static/image/home/333.png
Normal file
After Width: | Height: | Size: 465 KiB |
BIN
static/image/home/activity/article.png
Normal file
After Width: | Height: | Size: 578 KiB |
BIN
static/image/home/activity/bg.png
Normal file
After Width: | Height: | Size: 244 KiB |
BIN
static/image/home/activity/container.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
static/image/home/activity/from.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
static/image/home/activity/right.png
Normal file
After Width: | Height: | Size: 280 B |
BIN
static/image/home/activity/series.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
static/image/home/activity/series1.png
Normal file
After Width: | Height: | Size: 3.0 MiB |
BIN
static/image/home/activity/title.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
static/image/home/activity/wen_an.png
Normal file
After Width: | Height: | Size: 630 KiB |
BIN
static/image/home/activity/xqy1_01.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
static/image/home/activity/xqy1_02.png
Normal file
After Width: | Height: | Size: 777 KiB |
BIN
static/image/home/activity/xqy1_03.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
static/image/home/activity/xqy1_04.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
static/image/home/activity/xqy1_05.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
static/image/home/activity/xqy1_06.png
Normal file
After Width: | Height: | Size: 1.3 MiB |
BIN
static/image/home/activity/xqy1_07.png
Normal file
After Width: | Height: | Size: 382 KiB |
BIN
static/image/home/bg-info.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
static/image/home/bg.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
static/image/home/button.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
static/image/home/detail-bg.png
Normal file
After Width: | Height: | Size: 7.1 MiB |
BIN
static/image/home/detail-kind-bg.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
static/image/home/detail_bg.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
static/image/home/down-icon.png
Normal file
After Width: | Height: | Size: 623 B |
BIN
static/image/home/drawing-board.png
Normal file
After Width: | Height: | Size: 5.1 MiB |
BIN
static/image/home/false.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
static/image/home/flower.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
static/image/home/fonchain.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
static/image/home/fontree-white.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
static/image/home/fontree.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
static/image/home/from.png
Normal file
After Width: | Height: | Size: 7.6 KiB |