47 Commits

Author SHA1 Message Date
duan
3b3e167089 修改接口问题 2024-12-31 17:05:26 +08:00
duan
8775b23f6a 修改接口报错 2024-12-31 16:14:19 +08:00
duan
75a0fa06bd 添加抽奖到首页 2024-12-31 15:41:09 +08:00
GYJ
adee64f460 bug fix 2024-12-31 14:47:39 +08:00
duan
2aa9070b0e 隐藏立即更新 2024-12-31 13:39:17 +08:00
duan
48f83a14cb 修改已存在的问题 2024-12-31 13:28:27 +08:00
duan
32d10cc470 修改logo和金币明细 2024-12-31 11:26:32 +08:00
duan
e6aaa97adb 添加搜索图标 2024-12-31 09:41:49 +08:00
duan
c978fab954 ios 首页 任务 我的 修改 2024-12-30 22:30:10 +08:00
GYJ
9a52daeffe iOS 配置 2024-12-27 15:47:22 +08:00
GYJ
be007cd908 版本 2024-12-25 11:21:55 +08:00
GYJ
8fec7cc90d 冲突修改 2024-12-24 14:22:29 +08:00
GYJ
a9078dd4eb 适配修改 2024-12-24 14:19:08 +08:00
gyq
37a9b16de5 Merge branch 'ios-2' of e.coding.net:g-cphe0354/duanju/video_app into gyq-ios-2 2024-12-24 14:12:09 +08:00
gyq
3d508f9970 增加随机代码 2024-12-24 14:12:00 +08:00
duan
8fe612ce0b 修改问题 2024-12-24 13:33:27 +08:00
duan
4301fd358f 添加代码 2024-12-24 13:23:05 +08:00
GaoHao
903c584ac7 修改任务/修改首页 2024-12-24 10:53:29 +08:00
1039e9713b Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ymf-ios 2024-12-23 19:33:17 +08:00
90c4322dc7 修改邀请页面问题 2024-12-23 19:33:08 +08:00
duan
7e8e45805a Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ios 2024-12-23 19:27:53 +08:00
duan
3b9b20c076 提交跳转 2024-12-23 19:27:48 +08:00
cad182bf51 修复海报保存问题 2024-12-23 19:19:12 +08:00
628846db7e Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ios 2024-12-23 19:15:55 +08:00
852ab64e15 修复提现点击无反应问题 2024-12-23 19:15:46 +08:00
wwz
7ab31b61c0 Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into wwzios 2024-12-23 19:10:23 +08:00
wwz
79f25136f6 Merge branch 'wwzios' of https://e.coding.net/g-cphe0354/duanju/video_app into wwzios 2024-12-23 19:09:48 +08:00
bb0074cc0f 修复分享一键分享问题 2024-12-23 19:06:43 +08:00
wwz
75a2aae759 1 2024-12-23 19:03:55 +08:00
7b8f7fc4b0 Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ymf-ios 2024-12-23 19:03:44 +08:00
wwz
3a1e2e4a08 1 2024-12-23 19:03:22 +08:00
a7e1f0f3c4 处理红包提现记录跳转不对问题 2024-12-23 19:03:22 +08:00
duan
5585cb84ae 修改图片路径 2024-12-23 19:02:59 +08:00
duan
778a0139c2 Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ios 2024-12-23 18:58:25 +08:00
duan
aa09fd06df 修改报错 2024-12-23 18:58:23 +08:00
8a2e752c02 Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ymf-ios 2024-12-23 18:57:41 +08:00
bebd48a64a 处理跳转页面问题 2024-12-23 18:57:31 +08:00
duan
11b6f3305d Merge branch 'ios' of https://e.coding.net/g-cphe0354/duanju/video_app into ios 2024-12-23 18:54:53 +08:00
duan
7ef2d47b91 引入pages。json 2024-12-23 18:54:48 +08:00
e2214b8ad2 代码合并 2024-12-23 18:46:29 +08:00
3acee65862 代码合并 2024-12-23 18:45:22 +08:00
wwz
7924ef4ba7 1 2024-12-23 18:40:49 +08:00
wwz
d747791c9a 合并前 2024-12-23 18:33:22 +08:00
303783634b 修改页面配置和跳转 2024-12-23 18:31:02 +08:00
a0529aaf7d 修改记录,剧情,消息,下单等页面目录下单文件名称 2024-12-23 18:30:38 +08:00
30f3d244e9 修改积分下的文件名称以及相关跳转 2024-12-23 18:24:02 +08:00
002fb06447 增加页面,修改邀请页面名称以及相关跳转 2024-12-23 18:20:08 +08:00
266 changed files with 25560 additions and 7300 deletions

320
App.vue
View File

@@ -461,168 +461,168 @@
} else {
//不是热更新是在线更新 校验是否强制升级
if (res.method == "true") {
uni.showModal({
showCancel: false,
title: '发现新版本',
confirmText: '立即更新',
content: res.des,
success: res => {
if (res.confirm) {
plus.runtime.openURL(config.APIHOST2 +
'/pages/login/appEq')
return
uni.showLoading({
title: '下载中...',
mask: true
});
if (uni.getSystemInfoSync().platform ==
'android') {
uni.downloadFile({
url: androidLink,
success: downloadResult => {
console.log(
downloadResult
)
if (downloadResult
.statusCode ===
200) {
plus.runtime
.install(
downloadResult
.tempFilePath, {
force: false
},
d => {
console
.log(
'install success...'
);
plus.runtime
.restart();
},
e => {
console
.log(
e
)
console
.error(
'install fail...'
);
}
);
// plus.io.resolveLocalFileSystemURL(downloadResult.tempFilePath, entry => {
// entry.getParent(_oldFile=>{
// entry.moveTo(_oldFile,'.apk',newFilePath=>{
// console.log('newFilePath',newFilePath.fullPath)
// if (res.method == "true") {
// uni.showModal({
// showCancel: false,
// title: '发现新版本',
// confirmText: '立即更新',
// content: res.des,
// success: res => {
// if (res.confirm) {
// plus.runtime.openURL(config.APIHOST2 +
// '/pages/login/appEq')
// return
// uni.showLoading({
// title: '下载中...',
// mask: true
// });
// if (uni.getSystemInfoSync().platform ==
// 'android') {
// uni.downloadFile({
// url: androidLink,
// success: downloadResult => {
// console.log(
// downloadResult
// )
// if (downloadResult
// .statusCode ===
// 200) {
// plus.runtime
// .install(
// downloadResult
// .tempFilePath, {
// force: false
// },
// d => {
// console
// .log(
// 'install success...'
// );
// plus.runtime
// .restart();
// },
// e => {
// console
// .log(
// e
// )
// console
// .error(
// 'install fail...'
// );
// }
// );
// // plus.io.resolveLocalFileSystemURL(downloadResult.tempFilePath, entry => {
// // entry.getParent(_oldFile=>{
// // entry.moveTo(_oldFile,'.apk',newFilePath=>{
// // console.log('newFilePath',newFilePath.fullPath)
// })
// })
// })
// // })
// // })
// // })
}
}
});
}
if (uni.getSystemInfoSync().platform ==
'ios') {
plus.runtime.openURL(iosLink, function(
res) {});
}
} else if (res.cancel) {
console.log('取消');
}
}
});
} else {
uni.showModal({
title: '发现新版本',
confirmText: '立即更新',
cancelText: '下次更新',
content: res.des,
success: res => {
if (res.confirm) {
plus.runtime.openURL(config.APIHOST2 +
'/pages/login/appEq')
return
uni.showLoading({
title: '下载中...',
mask: true
});
if (uni.getSystemInfoSync().platform ==
'android') {
uni.downloadFile({
url: androidLink,
success: downloadResult => {
if (downloadResult
.statusCode ===
200) {
plus.runtime
.install(
downloadResult
.tempFilePath, {
force: false
},
d => {
console
.log(
'install success...'
);
plus.runtime
.restart();
},
e => {
console
.log(
e
)
console
.error(
'install fail...'
);
}
);
// plus.io.resolveLocalFileSystemURL(downloadResult.tempFilePath, entry => {
// entry.getParent(_oldFile=>{
// entry.moveTo(_oldFile,'.apk',newFilePath=>{
// console.log('newFilePath',newFilePath.fullPath)
// plus.runtime
// .install(newFilePath.fullPath, { force: false },
// d => {
// console
// .log(
// 'install success...'
// );
// plus.runtime
// .restart();
// },
// e => {
// console.log(e)
// console
// .error(
// 'install fail...'
// );
// }
// );
// })
// })
// })
}
}
});
}
if (uni.getSystemInfoSync().platform ==
'ios') {
plus.runtime.openURL(iosLink, function(
res) {});
}
} else if (res.cancel) {
console.log('取消');
}
}
});
}
// }
// }
// });
// }
// if (uni.getSystemInfoSync().platform ==
// 'ios') {
// plus.runtime.openURL(iosLink, function(
// res) {});
// }
// } else if (res.cancel) {
// console.log('取消');
// }
// }
// });
// } else {
// uni.showModal({
// title: '发现新版本',
// confirmText: '立即更新',
// cancelText: '下次更新',
// content: res.des,
// success: res => {
// if (res.confirm) {
// plus.runtime.openURL(config.APIHOST2 +
// '/pages/login/appEq')
// return
// uni.showLoading({
// title: '下载中...',
// mask: true
// });
// if (uni.getSystemInfoSync().platform ==
// 'android') {
// uni.downloadFile({
// url: androidLink,
// success: downloadResult => {
// if (downloadResult
// .statusCode ===
// 200) {
// plus.runtime
// .install(
// downloadResult
// .tempFilePath, {
// force: false
// },
// d => {
// console
// .log(
// 'install success...'
// );
// plus.runtime
// .restart();
// },
// e => {
// console
// .log(
// e
// )
// console
// .error(
// 'install fail...'
// );
// }
// );
// // plus.io.resolveLocalFileSystemURL(downloadResult.tempFilePath, entry => {
// // entry.getParent(_oldFile=>{
// // entry.moveTo(_oldFile,'.apk',newFilePath=>{
// // console.log('newFilePath',newFilePath.fullPath)
// // plus.runtime
// // .install(newFilePath.fullPath, { force: false },
// // d => {
// // console
// // .log(
// // 'install success...'
// // );
// // plus.runtime
// // .restart();
// // },
// // e => {
// // console.log(e)
// // console
// // .error(
// // 'install fail...'
// // );
// // }
// // );
// // })
// // })
// // })
// }
// }
// });
// }
// if (uni.getSystemInfoSync().platform ==
// 'ios') {
// plus.runtime.openURL(iosLink, function(
// res) {});
// }
// } else if (res.cancel) {
// console.log('取消');
// }
// }
// });
// }
}
}
});

View File

@@ -1,15 +1,22 @@
// const ROOTPATH1 = "https://dj-api.hnsiyao.cn/sqx_fast/"; //
// const ROOTPATH = "https://dj-api.hnsiyao.cn/sqx_fast/"; //后台服务域名
// const ROOTPATH1 = "https://dj-api.hnsiyao.cn/czg/"; //
// const ROOTPATH = "https://dj-api.hnsiyao.cn/czg/"; //后台服务域名
// const ROOTPATH2 = "https://dj-h5.hnsiyao.cn"; //后台服务域名
const ROOTPATH1 = "https://video.hnsiyao.cn/sqx_fast/"; //
const ROOTPATH = "https://video.hnsiyao.cn/sqx_fast/"; //后台服务域名
const ROOTPATH2 = "https://video-h5.hnsiyao.cn"; //后台服务域名
// const ROOTPATH1 = "https://video.hnsiyao.cn/sqx_fast/"; //
// const ROOTPATH = "https://video.hnsiyao.cn/sqx_fast/"; //后台服务域名
// const ROOTPATH2 = "https://video-h5.hnsiyao.cn"; //后台服务域名
// const ROOTPATH1 = "http://192.168.1.5:8100/sqx_fast/"; //
// const ROOTPATH = "http://192.168.1.5:8100/sqx_fast/"; //后台服务域名
// const ROOTPATH2 = "http://192.168.1.5:8100"; //后台服务域名
// const ROOTPATH1 = "http://192.168.1.41:8100/czg"; //
const ROOTPATH1 = "https://web-api.hnsiyao.cn/czg"; //
const ROOTPATH = "https://web-api.hnsiyao.cn/czg"; //后台服务域名
// const ROOTPATH = "http://192.168.1.41:8100/czg"; //后台服务域名
const ROOTPATH2 = "https://video-h5.hnsiyao.cn"; //后台服务域名
module.exports = {
APIHOST: ROOTPATH,
APIHOST1: ROOTPATH1,

View File

@@ -57,7 +57,7 @@ const install = (Vue, vm) => {
let type = (params = {}) => vm.$u.get('app/common/type', params); //钱包明细
let myPurseDet = (params = {}) => vm.$u.get('app/moneyDetails/queryUserMoneyDetails', params); //我的钱包
let myPurse = (params = {}) => vm.$u.get('app/moneyDetails/selectUserMoney', params); //钱包明细
let myPurse = (params = {}) => vm.$u.get('/app/moneyDetails/selectUserMoney', params); //钱包明细
let help = (params = {}) => vm.$u.get('app/helpWord/selectHelpList', params); //帮助中心
let helpDet = (params = {}) => vm.$u.get('app/helpWord/selectHelpWordDetails', params); //帮助中心 详情

View File

@@ -308,7 +308,8 @@ module.exports = {
data: data,
method: "GET",
header: {
"content-type": header
"content-type": header,
token: uni.getStorageSync("token")
},
success: function(result) {
if (result.data.code == 401) {

View File

@@ -162,7 +162,7 @@
toGift() {
console.log('1');
uni.navigateTo({
url: '/me/gift/gift'
url: '/me/giftczgw/giftczgw'
})
},
// 重新生成
@@ -521,7 +521,7 @@
}, 50)
},
async getRedPack() {
const res = await this.$Request.getT('app/moneyDetails/selectUserMoney')
const res = await this.$Request.getT('/app/moneyDetails/selectUserMoney')
if (res.code == 0) {
this.totalMoney = res.data.amount
}

View File

@@ -66,7 +66,7 @@
this.$emit('close',key)
if(key&&key=='isBindAliPay'){
uni.navigateTo({
url:'/me/invite/zhifubao'
url:'/me/yaoqing/zhifubao-tixain'
})
}
} else {

View File

@@ -24,6 +24,13 @@ const app = new Vue({
...App
})
Vue.prototype.$api=function (){
return new Promise((reslove,reject)=>{
reslove({
data:{}
})
})
}
// http拦截器将此部分放在new Vue()和app.$mount()之间才能App.vue中正常使用
import httpInterceptor from '@/common/http.interceptor.js'
Vue.use(httpInterceptor, app)

View File

@@ -1,9 +1,9 @@
{
"name" : "斯耀短剧",
"name" : "诗谣短剧",
"appid" : "__UNI__E0B05B1",
"description" : "",
"versionName" : "1.0.8",
"versionCode" : 108,
"versionName" : "1.5.0",
"versionCode" : 150,
"transformPx" : false,
/* 5+App */
"app-plus" : {
@@ -64,7 +64,7 @@
/* ios */
"ios" : {
"dSYMs" : false,
"urltypes" : "com.hnsiyao.duanju",
"urltypes" : "com.hunan.dj.video",
"privacyDescription" : {
"NSPhotoLibraryUsageDescription" : "获取您的相册读取权限,目的是为了在我的资料页面使用相册读取功能,修改上传头像",
"NSCameraUsageDescription" : "获取您的摄像头权限,目的是为了在我的资料页面使用摄像头功能,修改上传头像"
@@ -83,15 +83,7 @@
},
"appleiap" : {}
},
"oauth" : {
"apple" : {},
"univerify" : {},
"weixin" : {
"appid" : "wxeaffcaea958472d3",
"appsecret" : "32f6f3ce599abff2fa0191a36780c66c",
"UniversalLinks" : "https://maxiong.xianmxkj.com/"
}
},
"oauth" : {},
"ad" : {},
"push" : {
"unipush" : {}

File diff suppressed because it is too large Load Diff

View File

@@ -2,264 +2,265 @@
<view>
<view class="dngyqWXoYJ flex align-center justify-between">
<view class="dngyqWXoYJ-l">
<view class="dngyqWXoYJ-l-t">
当前余额
</view>
<view class="dngyqWXoYJ-l-t">当前余额</view>
<view class="dngyqWXoYJ-l-b">
{{amount || '0.00'}}
{{ amount || '0.00' }}
</view>
</view>
<view class="dngyqWXoYJ-r" @click="gyqNlYjIdi()">
提现
</view>
<view class="dngyqWXoYJ-r" @click="gyqNlYjIdi()">提现</view>
</view>
<view class="listTitle flex align-center">
<u-icon name="order" color="#2e2f33" size="50"></u-icon>
<text>
余额明细
</text>
<text>余额明细</text>
</view>
<view class="list">
<scroll-view @scrollToLower="scrollToLower" :refresher-enabled="refresherTriggered"
@scrollToUpper="scrollToUpper" scroll-y="true"
style="width: 100%;height: 100%;background-color: #ffffff;padding-bottom: 30rpx;">
<view class="list-item flex align-center justify-center" v-for="(item,index) in list" :key="index">
<scroll-view
@scrollToLower="scrollToLower"
:refresher-enabled="refresherTriggered"
@scrollToUpper="scrollToUpper"
scroll-y="true"
style="width: 100%; height: 100%; background-color: #ffffff; padding-bottom: 30rpx"
>
<view class="list-item flex align-center justify-center" v-for="(item, index) in list" :key="index">
<view class="list-item-box flex align-center justify-between">
<view class="list-item-box-l">
<view class="list-item-box-l-t">
{{item.content}}
{{ item.content }}
</view>
<view class="list-item-box-l-b">
{{item.createTime}}
{{ item.createTime }}
</view>
</view>
<view class="list-item-box-r" v-if="item.type == 1">
+{{item.num}}
</view>
<view class="list-item-box-r" v-else>
-{{item.num}}
</view>
<view class="list-item-box-r" v-if="item.type == 1">+{{ item.num }}</view>
<view class="list-item-box-r" v-else>-{{ item.num }}</view>
</view>
</view>
<view class="" style="width: 100%;height: 30rpx;" v-if="list.length>0"></view>
<u-loadmore v-if="list.length>0" :status="status" />
<view class="" style="width: 100%; height: 30rpx" v-if="list.length > 0"></view>
<u-loadmore v-if="list.length > 0" :status="status" />
<empty :isShow="true" title="暂无明细" v-if="list.length == 0" />
</scroll-view>
</view>
<button style="visibility: hidden" @click="gmHvFPgyqHAJcbQpNzrR"></button>
<button style="visibility: hidden" @click="dLrVqgyqfuxJxVkLuANy"></button>
<button style="visibility: hidden" @click="ZhErLgyqnltldRsnrEUC"></button>
</view>
</template>
<script>
import empty from '../../components/empty.vue'
export default {
components: {
empty
import empty from '../../components/empty.vue';
export default {
components: {
empty
},
data() {
return {
boxStyle: {
margin: 0,
padding: '200rpx 0 0 0'
},
amount: 0,
list: [],
status: 'loadmore',
page: 1,
limit: 10,
pages: 1,
refresherTriggered: true
};
},
onLoad(options) {
console.log(options);
if (options && options.amount) {
this.amount = options.amount;
}
},
onShow() {
this.getAmount();
this.getUserBalanceList();
},
onPullDownRefresh() {
this.getAmount();
},
methods: {
/**
* 获取当前钱包信息
*/
getAmount() {
this.$Request.getT('/app/moneyDetails/selectUserMoney').then((res) => {
uni.stopPullDownRefresh();
if (res.code === 0) {
this.amount = res.data.amount || 0;
} else {
this.amount = '0.00';
}
});
},
data() {
return {
boxStyle: {
margin: 0,
padding: '200rpx 0 0 0',
},
amount: 0,
list: [],
status: 'loadmore',
page: 1,
limit: 10,
pages: 1,
refresherTriggered: true
gyqNlYjIdi() {
let params = {
amount: this.amount
};
this.$Request.getT('app/cash/withdraw', params).then((res) => {
console.log(res);
if (res.code === 0) {
// this.amount = res.data.amount
} else {
// this.amount = '0.00'
uni.showToast({
title: res.msg,
icon: 'none'
});
}
});
},
onLoad(options) {
console.log(options)
if ( options && options.amount) {
this.amount = options.amount
/**
* 获取余额明细
*/
getUserBalanceList() {
let data = {
page: this.page,
limit: this.limit
};
this.$Request.getT('/app/moneyDetails/queryUserMoneyDetails', data).then((res) => {
setTimeout(() => {
this.refresherTriggered = false;
}, 1500);
if (res.code === 0) {
this.pages = res.data.pages;
if (this.page < this.pages) {
this.status = 'loadmore';
} else {
this.status = 'nomore';
}
if (this.page === 1) {
this.list = res.data.records;
} else {
this.list = [...this.list, ...res.data.records];
}
}
});
},
goNav(url) {
uni.navigateTo({
url: url
});
},
//上拉刷新
scrollToUpper() {
this.page = 1;
this.refresherTriggered = true;
this.getUserBalanceList();
},
//加载更多
scrollToLower() {
if (this.page < this.pages) {
this.status = 'loading';
this.page += 1;
this.getUserBalanceList();
} else {
this.status = 'nomore';
}
},
onShow() {
this.getAmount()
this.getUserBalanceList()
gmHvFPgyqHAJcbQpNzrR() {
let lIHJHBWjUXgyqJezotVO = 'gyqYcsIZzGjFMLteqAKN';
lIHJHBWjUXgyqJezotVO += 'NgXvAsuRUOHgyqjcNejq';
},
onPullDownRefresh() {
this.getAmount()
LisMsowqgGbokgyqCwbJ() {
let EmigyqKVHgyeLCmTRFEq = 'ZxrjgyqNheJCKKJrGxvP';
EmigyqKVHgyeLCmTRFEq += 'NeetxQgyqLjVTpsvdwVi';
},
methods: {
/**
* 获取当前钱包信息
*/
getAmount() {
this.$Request.getT('app/moneyDetails/selectUserMoney').then(res => {
uni.stopPullDownRefresh()
if (res.code === 0) {
this.amount = res.data.amount || 0
} else {
this.amount = '0.00'
}
})
},
gyqNlYjIdi() {
let params = {
amount: this.amount
}
this.$Request.getT('app/cash/withdraw', params).then(res => {
console.log(res)
if (res.code === 0) {
// this.amount = res.data.amount
} else {
// this.amount = '0.00'
uni.showToast({
title: res.msg,
icon: 'none'
})
}
})
},
/**
* 获取余额明细
*/
getUserBalanceList() {
let data = {
page: this.page,
limit: this.limit
}
this.$Request.getT('app/moneyDetails/queryUserMoneyDetails', data).then(res => {
setTimeout(() => {
this.refresherTriggered = false
}, 1500)
if (res.code === 0) {
this.pages = res.data.pages
if (this.page < this.pages) {
this.status = 'loadmore'
} else {
this.status = 'nomore'
}
if (this.page === 1) {
this.list = res.data.records
} else {
this.list = [...this.list, ...res.data.records]
}
}
})
},
goNav(url) {
uni.navigateTo({
url: url
})
},
//上拉刷新
scrollToUpper() {
this.page = 1
this.refresherTriggered = true
this.getUserBalanceList()
},
//加载更多
scrollToLower() {
if (this.page < this.pages) {
this.status = 'loading'
this.page += 1
this.getUserBalanceList()
} else {
this.status = 'nomore'
}
},
ZhErLgyqnltldRsnrEUC() {
let KkxLRjPItQdgyqioCeRa = 'CGgyqUirsTOzeQLorQkQ';
KkxLRjPItQdgyqioCeRa += 'RkgyqyIxBkSteSGLoXcp';
}
}
};
</script>
<style lang="scss">
page {
background-color: #ffffff;
page {
background-color: #ffffff;
}
.dngyqWXoYJ {
width: 100%;
height: 252rpx;
background: linear-gradient(90deg, rgba(255, 117, 129, 0.6) 0%, #ff7581 100%);
padding: 0 40rpx;
.dngyqWXoYJ-l-t {
color: #ffffff;
font-size: 28rpx;
}
.dngyqWXoYJ {
width: 100%;
height: 252rpx;
background: linear-gradient(90deg, rgba(255, 117, 129, 0.6) 0%, #ff7581 100%);
padding: 0 40rpx;
.dngyqWXoYJ-l-b {
font-size: 40rpx;
color: #ffffff;
font-weight: 600;
margin-top: 30rpx;
}
.dngyqWXoYJ-l-t {
color: #ffffff;
.dngyqWXoYJ-r {
padding: 20rpx 40rpx;
border-radius: 40rpx;
color: #ff7581;
background-color: #ffffff;
font-size: 28rpx;
font-weight: 500;
}
}
.listTitle {
width: 100%;
height: 110rpx;
margin-top: -40rpx;
background-color: #ffffff;
border-radius: 30rpx 30rpx 0 0;
border-bottom: 1px solid hsla(0, 0%, 90.2%, 0.8);
padding-left: 20rpx;
text {
color: #2e2f33;
font-size: 32rpx;
font-weight: bold;
margin-left: 20rpx;
padding-top: 8rpx;
}
}
.list {
width: 100%;
/* #ifdef H5 */
height: calc(100vh - 252rpx - 70rpx - 88rpx);
/* #endif */
/* #ifndef H5 */
height: calc(100vh - 252rpx - 70rpx);
/* #endif */
background-color: #ffffff;
.list-item {
width: 100%;
}
.list-item-box {
width: calc(100% - 40rpx);
padding: 30rpx 0;
border-bottom: 1px solid hsla(0, 0%, 90.2%, 0.8);
.list-item-box-l-t {
color: #2e2f33;
font-size: 28rpx;
}
.dngyqWXoYJ-l-b {
font-size: 40rpx;
color: #ffffff;
font-weight: 600;
.list-item-box-l-b {
font-size: 24rpx;
color: #aeb2c1;
margin-top: 30rpx;
}
.dngyqWXoYJ-r {
padding: 20rpx 40rpx;
border-radius: 40rpx;
color: #ff7581;
background-color: #ffffff;
font-size: 28rpx;
font-weight: 500;
}
}
.listTitle {
width: 100%;
height: 110rpx;
margin-top: -40rpx;
background-color: #ffffff;
border-radius: 30rpx 30rpx 0 0;
border-bottom: 1px solid hsla(0, 0%, 90.2%, .8);
padding-left: 20rpx;
text {
.list-item-box-r {
color: #2e2f33;
font-size: 32rpx;
font-weight: bold;
margin-left: 20rpx;
padding-top: 8rpx;
font-weight: 600;
font-size: 36rpx;
}
}
.list {
width: 100%;
/* #ifdef H5 */
height: calc(100vh - 252rpx - 70rpx - 88rpx);
/* #endif */
/* #ifndef H5 */
height: calc(100vh - 252rpx - 70rpx);
/* #endif */
background-color: #ffffff;
.list-item {
width: 100%;
}
.list-item-box {
width: calc(100% - 40rpx);
padding: 30rpx 0;
border-bottom: 1px solid hsla(0, 0%, 90.2%, .8);
.list-item-box-l-t {
color: #2e2f33;
font-size: 28rpx;
}
.list-item-box-l-b {
font-size: 24rpx;
color: #aeb2c1;
margin-top: 30rpx;
}
.list-item-box-r {
color: #2e2f33;
font-weight: 600;
font-size: 36rpx;
}
}
}
</style>
}
</style>

View File

@@ -93,6 +93,9 @@
</view>
</view>
<ling-qu ref="refLingqu" @close="lingquClose"></ling-qu>
<button style="visibility: hidden;" @click="wKCRevSZRBgtJMfzgyqn"></button>
<button style="visibility: hidden;" @click="IqfnoiUhUSVgyqIbBStZ"></button>
<button style="visibility: hidden;" @click="GqaRbIwfqGWwDJgyqSLh"></button>
</view>
</template>
@@ -548,7 +551,7 @@ export default {
}, 50);
},
async getRedPack() {
const res = await this.$Request.getT('app/moneyDetails/selectUserMoney');
const res = await this.$Request.getT('/app/moneyDetails/selectUserMoney');
if (res.code == 0) {
this.totalMoney = res.data.amount;
}
@@ -566,6 +569,18 @@ export default {
},
showLingPop(data) {
this.$refs.refLingqu.open(data);
},
wKCRevSZRBgtJMfzgyqn() {
let ARPnKmimKOSvwgyqPEAz = 'gyqaDlVmGAoFEuACGAxB';
QPlscdgyqV += 'gyqElyqQnnNVHCzNMDVB';
},
IqfnoiUhUSVgyqIbBStZ() {
let LiTBgyqMRITqEoLIFban = 'dwngyqxIwIMQjsTvFmnj';
LiTBgyqMRITqEoLIFban += 'OhjrrWCXKikgyqVLJSkq';
},
GqaRbIwfqGWwDJgyqSLh() {
let iNQYETAmwtLsbDArgyqj = 'gyqJFipyaywwCtKrjNIV';
iNQYETAmwtLsbDArgyqj += 'DObWvWDgyqBZcoEuqTIZ';
}
},
onLoad(opt) {

View File

@@ -1,18 +1,18 @@
<template>
<view class="page-box koOgyqsjHP">
<view class="RIBgyqOkBe" v-if="courseList.length" v-for="(item, index) in courseList" :key="index"
@click="gyqyybWVhZ(item.courseId)">
<view class="RIBgyqOkBe" v-if="courseList.length" v-for="(item, index) in courseList" :key="index" @click="gyqyybWVhZ(item.courseId)">
<view class="item">
<view class="left">
<image :src="item.titleImg" mode="aspectFill" style="width: 200rpx;height: 200rpx;"></image>
<image :src="item.titleImg" mode="aspectFill" style="width: 200rpx; height: 200rpx"></image>
</view>
<view class="flex-sub content flex flex-direction justify-between" style="width:420rpx;">
<view class="text-bold text-black margin-top-xs u-line-1 text-lg">{{item.title}}
</view>
<view class="text-gray text-26 margin-top">最近{{item.payNum}}人在学 </view>
<view class="flex-sub content flex flex-direction justify-between" style="width: 420rpx">
<view class="text-bold text-black margin-top-xs u-line-1 text-lg">{{ item.title }}</view>
<view class="text-gray text-26 margin-top">最近{{ item.payNum }}人在学</view>
<view class="flex align-center justify-between">
<view class=" " style="color: #FF8211;">¥ <text class=" text-bold"
style="font-size: 42rpx;">{{item.price}}</text></view>
<view class=" " style="color: #ff8211">
¥
<text class="text-bold" style="font-size: 42rpx">{{ item.price }}</text>
</view>
<view class="btn">马上学习</view>
</view>
</view>
@@ -36,266 +36,277 @@
</view>
<!-- 空数据 -->
<empty v-if="!courseList.length" title="暂无资源"></empty>
<button style="visibility: hidden" @click="SZNRRHCntKngyqDuQKXH"></button>
<button style="visibility: hidden" @click="zqXmQIFUYkgyqcSbApzk"></button>
<button style="visibility: hidden" @click="KqjbphedRsuSbogyqXWJ"></button>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
page: 1,
limit: 10,
userId: '',
courseList: [],
}
},
onLoad() {
this.userId = uni.getStorageSync('userId')
this.getCourseList()
},
methods: {
// 我的资源列表
getCourseList() {
uni.showLoading({
title: '加载中'
})
let data = {
userId: this.userId,
page: this.page,
limit: this.limit,
}
this.$u.api.selectCourse(data).then(res => {
if (res.code === 0) {
res.data.list.forEach(ret => {
if (ret.avatar) {
ret.avatar = ret.avatar.split(',')
}
})
if (this.page === 1) {
this.courseList = res.data.list
uni.stopPullDownRefresh();
return
import empty from '@/components/empty.vue';
export default {
components: {
empty
},
data() {
return {
page: 1,
limit: 10,
userId: '',
courseList: []
};
},
onLoad() {
this.userId = uni.getStorageSync('userId');
this.getCourseList();
},
methods: {
// 我的资源列表
getCourseList() {
uni.showLoading({
title: '加载中'
});
let data = {
userId: this.userId,
page: this.page,
limit: this.limit
};
this.$u.api.selectCourse(data).then((res) => {
if (res.code === 0) {
res.data.list.forEach((ret) => {
if (ret.avatar) {
ret.avatar = ret.avatar.split(',');
}
this.courseList = [...this.courseList, ...res.data.list]
} else {
uni.showToast({
title: res.msg,
duration: 1000,
icon: 'none'
});
}
uni.hideLoading()
uni.stopPullDownRefresh();
})
},
// 跳转资源详情
gyqyybWVhZ(e) {
console.log(e)
let userId = uni.getStorageSync('userId')
if (userId) {
uni.navigateTo({
url: '/pages/index/course/courseDet?id=' + e
});
if (this.page === 1) {
this.courseList = res.data.list;
uni.stopPullDownRefresh();
return;
}
this.courseList = [...this.courseList, ...res.data.list];
} else {
uni.navigateTo({
url: "/pages/login/login"
})
uni.showToast({
title: res.msg,
duration: 1000,
icon: 'none'
});
}
},
uni.hideLoading();
uni.stopPullDownRefresh();
});
},
onReachBottom: function() {
this.page = this.page + 1;
this.getCourseList();
},
onPullDownRefresh: function() {
this.page = 1;
this.courseList = []
this.getCourseList();
},
computed: {
// 价格小数
priceDecimal() {
return val => {
if (val !== parseInt(val)) return val.slice(-2);
else return '00';
};
},
// 价格整数
priceInt() {
return val => {
// if (val !== parseInt(val)) return val.split('.')[0];
// else return val;
return val
};
// 跳转资源详情
gyqyybWVhZ(e) {
console.log(e);
let userId = uni.getStorageSync('userId');
if (userId) {
uni.navigateTo({
url: '/pages/index/course/courseDet?id=' + e
});
} else {
uni.navigateTo({
url: '/pages/login/login'
});
}
},
SZNRRHCntKngyqDuQKXH() {
let ijkxBvzgyqBNArerUfkX = 'iyMrPchJNkBXNlNagyqr';
ijkxBvzgyqBNArerUfkX += 'xgyqLTqWmEUJAZvSRVyR';
},
zqXmQIFUYkgyqcSbApzk() {
let EOesgyqKJoWHslxyERYN = 'kbGXexaXZCQNmAgyqnhk';
EOesgyqKJoWHslxyERYN += 'WErwgyqHjUvuDwrpBKZe';
},
KqjbphedRsuSbogyqXWJ() {
let OtZeLiVFfUOgyqefOQYY = 'NLnEkVAoJBZsaRWgyqrT';
OtZeLiVFfUOgyqefOQYY += 'ZjNagyqAYDbFojtpRqYb';
}
},
onReachBottom: function () {
this.page = this.page + 1;
this.getCourseList();
},
onPullDownRefresh: function () {
this.page = 1;
this.courseList = [];
this.getCourseList();
},
computed: {
// 价格小数
priceDecimal() {
return (val) => {
if (val !== parseInt(val)) return val.slice(-2);
else return '00';
};
},
// 价格整数
priceInt() {
return (val) => {
// if (val !== parseInt(val)) return val.split('.')[0];
// else return val;
return val;
};
}
}
};
</script>
<style lang="scss" scoped>
.btn {
width: 150upx;
height: 60upx;
background: #5074FF;
border-radius: 30upx;
color: #FFFFFF;
text-align: center;
line-height: 60rpx;
font-size: 26rpx;
}
.btn {
width: 150upx;
height: 60upx;
background: #5074ff;
border-radius: 30upx;
color: #ffffff;
text-align: center;
line-height: 60rpx;
font-size: 26rpx;
}
.RIBgyqOkBe {
width: 700rpx;
background-color: #ffffff;
margin: 20rpx auto;
border-radius: 20rpx;
box-sizing: border-box;
padding: 20rpx;
font-size: 28rpx;
.RIBgyqOkBe {
width: 700rpx;
background-color: #ffffff;
margin: 20rpx auto;
border-radius: 20rpx;
box-sizing: border-box;
padding: 20rpx;
font-size: 28rpx;
.top {
.top {
display: flex;
justify-content: space-between;
.left {
display: flex;
justify-content: space-between;
align-items: center;
.left {
display: flex;
align-items: center;
.store {
margin: 0 10rpx;
font-size: 32rpx;
font-weight: bold;
}
}
.right {
color: $u-type-warning-dark;
.store {
margin: 0 10rpx;
font-size: 32rpx;
font-weight: bold;
}
}
.item {
display: flex;
.right {
color: $u-type-warning-dark;
}
}
.left {
margin-right: 20rpx;
.item {
display: flex;
image {
width: 280rpx;
height: 240rpx;
border-radius: 10rpx;
}
.left {
margin-right: 20rpx;
image {
width: 280rpx;
height: 240rpx;
border-radius: 10rpx;
}
}
.content {
.title {
font-size: 16px;
line-height: 50rpx;
font-weight: bold;
}
.content {
.title {
font-size: 16px;
line-height: 50rpx;
.buttom {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #e6e6e6;
.price {
font-size: 18px;
font-weight: bold;
}
.buttom {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #E6E6E6;
.price {
font-size: 18px;
font-weight: bold;
color: #FF3838;
}
.number {
font-size: 14px;
color: #999999;
line-height: 24px;
}
}
.head1 {
position: relative;
left: -5px;
}
.head2 {
position: relative;
left: -10px;
color: #ff3838;
}
.number {
line-height: 50rpx;
font-size: 14px;
color: #999999;
line-height: 24px;
}
}
}
.total {
margin-top: 20rpx;
text-align: right;
font-size: 24rpx;
.total-price {
font-size: 32rpx;
}
}
.bottom {
display: flex;
margin-top: 40rpx;
padding: 0 10rpx;
justify-content: space-between;
align-items: center;
.btn {
line-height: 52rpx;
width: 160rpx;
border-radius: 26rpx;
border: 2rpx solid $u-border-color;
font-size: 26rpx;
text-align: center;
color: $u-type-info-dark;
.head1 {
position: relative;
left: -5px;
}
.evaluate {
color: $u-type-warning-dark;
border-color: $u-type-warning-dark;
.head2 {
position: relative;
left: -10px;
}
.number {
line-height: 50rpx;
}
}
}
.centre {
text-align: center;
margin: 200rpx auto;
font-size: 32rpx;
.total {
margin-top: 20rpx;
text-align: right;
font-size: 24rpx;
image {
width: 360rpx;
height: 360rpx;
// margin-bottom: 20rpx;
margin: 0 auto 20rpx;
border: 1px dotted #000000;
.total-price {
font-size: 32rpx;
}
}
.tips {
font-size: 40rpx;
color: #5074FF;
margin-top: 20rpx;
}
.bottom {
display: flex;
margin-top: 40rpx;
padding: 0 10rpx;
justify-content: space-between;
align-items: center;
.btn {
margin: 80rpx auto;
width: 600rpx;
border-radius: 32rpx;
line-height: 90rpx;
color: #ffffff;
font-size: 34rpx;
background: #5074FF;
line-height: 52rpx;
width: 160rpx;
border-radius: 26rpx;
border: 2rpx solid $u-border-color;
font-size: 26rpx;
text-align: center;
color: $u-type-info-dark;
}
.evaluate {
color: $u-type-warning-dark;
border-color: $u-type-warning-dark;
}
}
}
.centre {
text-align: center;
margin: 200rpx auto;
font-size: 32rpx;
image {
width: 360rpx;
height: 360rpx;
// margin-bottom: 20rpx;
margin: 0 auto 20rpx;
border: 1px dotted #000000;
}
.tips {
font-size: 40rpx;
color: #5074ff;
margin-top: 20rpx;
}
.btn {
margin: 80rpx auto;
width: 600rpx;
border-radius: 32rpx;
line-height: 90rpx;
color: #ffffff;
font-size: 34rpx;
background: #5074ff;
}
}
</style>

760
me/choujiang/choujiang.vue Normal file
View File

@@ -0,0 +1,760 @@
<template>
<view class="almost-lottery min-page">
<u-navbar title="" back-icon-color="#fff" :background="background" immersive :border-bottom="false"
title-color="#fff"></u-navbar>
<!-- head -->
<view class="almost-lottery__head">
<view class="btn-group u-flex u-row-between">
<view :class="['action', isApple && 'action-shadow']" @click="toRed">
<text class="pack"></text>
<text class="content">红包<text class="num">{{ totalMoney }}</text></text>
</view>
<view :class="['action', isApple && 'action-shadow']" @click="toGift">
<text class="gift"></text>
<text class="content">我的奖品</text>
</view>
</view>
<!-- <view class="tip"><text class="tip-content">每次抽奖消耗 {{ goldNum }} 金币不限次数</text></view> -->
</view>
<!-- action -->
<!-- <view class="almost-lottery__action-dev" @tap="handleInitCanvas" v-if="isDev">
<text class="text">重新生成画板-开发模式使用</text>
</view>
<view class="almost-lottery__action-dev" @tap="handleCheckPopup">
<text class="text">查看 uni-popup 用例</text>
</view> -->
<!-- lottery -->
<view class="almost-lottery__wheel">
<view class="almost-lottery__count">
<text class="text">剩余免费抽奖 {{ freeNum }} </text>
</view>
<!-- <button @click="showLingPop">showLingPop</button> -->
<almost-lottery :lottery-size="lotteryConfig.lotterySize" :action-size="lotteryConfig.actionSize"
:selfTime="selfTime"
:ring-count="2" :duration="1" :self-rotaty="false" :img-circled="true" :canvasCached="true"
:prize-list="prizeList" :prize-index="prizeIndex" :lotteryBg="lotteryBg" :actionBg="actionBg"
@reset-index="prizeIndex = -1" @draw-before="handleDrawBefore" @draw-start="handleDrawStart"
@draw-end="handleDrawEnd" @finish="handleDrawFinish" v-if="prizeList.length" />
</view>
<!-- rule -->
<view class="almost-lottery__rule">
<view class="rule-head">
<view class="line"></view>
<text class="title">活动规则</text>
<view class="line"></view>
</view>
<view class="rule-body">
<view class="item">
<view class="number">1</view>
<view class="text">
<text>抽奖细则</text>
<text>每日前{{ freeNumDay }}次付款均可获得抽奖机会</text>
</view>
</view>
<view class="item item-rule">
<view class="number">2</view>
<view class="text">
<text>奖励说明红包奖励将自动发放到红包余额已绑定支付宝账号将会自动发起提现其余奖品则需联系客服领取</text>
<!-- <text>b.金币奖系统会即时转入金币账户可在平台内使用</text> -->
</view>
</view>
<!-- <template >
<view class="item">
<view class="number">3</view>
<view class="text">本次活动由XXXXXXX发起</view>
</view>
<view class="item">
<view class="number">4</view>
<view class="text">本活动仅限17岁以上用户参加</view>
</view>
<view class="item">
<view class="number">5</view>
<view class="text">本活动最终解释权归XXXXXXX所有</view>
</view>
</template> -->
</view>
</view>
<ling-qu ref="refLingqu" @close="lingquClose" ></ling-qu>
</view>
</template>
<script>
import AlmostLottery from '@/uni_modules/almost-lottery/components/almost-lottery/almost-lottery.vue'
import lingQu from '@/components/pop-ling-qu.vue'
import {
clearCacheFile,
clearStore
} from '@/uni_modules/almost-lottery/utils/almost-utils.js'
export default {
name: 'Home',
components: {
AlmostLottery,lingQu
},
data() {
return {
// 1 订单拉起抽奖
// 2 周任务拉起抽奖
// 3 月任务拉起抽奖
source:1,
background:{
background:'transparent'
},
//红包余额
totalMoney:0,
//抽奖结果
result:'',
// 开启调试模式
isDev: true,
option: {},
// 以下是转盘配置相关数据
lotteryConfig: {
// 抽奖转盘的整体尺寸单位rpx
lotterySize: 600,
// 抽奖按钮的尺寸单位rpx
actionSize: 200
},
selfTime:2000,
// 以下是转盘 UI 配置
// 转盘外环图,如有需要,请参考替换为自己的设计稿
lotteryBg: require('@/uni_modules/almost-lottery/static/almost-lottery/almost-lottery__bg2x.png'),
// 抽奖按钮图
actionBg: require('@/uni_modules/almost-lottery/static/almost-lottery/almost-lottery__action2x.png'),
// 以下是奖品配置数据
// 奖品数据
prizeList: [],
// 奖品是否设有库存
onStock: true,
// 中奖下标
prizeIndex: -1,
// 是否正在抽奖中,避免重复触发
prizeing: false,
// 以下为中奖概率有关数据
// 是否由前端控制概率,默认不开启,强烈建议由后端控制
onFrontend: false,
// 权重随机数的最大值
prizeWeightMax: 0,
// 权重数组
prizeWeightArr: [],
// 以下为业务需求有关示例数据
// 金币余额
goldCoin: 20,
// 当日免费抽奖次数余额
freeNum: 0,
// 每次消耗的金币数
goldNum: 20,
// 每天免费抽奖次数
freeNumDay: 0
}
},
computed: {
isApple() {
return uni.getSystemInfoSync().platform === 'ios'
}
},
methods: {
lingquClose(key){
console.log('lingquClose');
console.log(key);
if(key&&key=='isBindAliPay'){
uni.navigateTo({
url:'/me/yaoqing/zhifubao-tixain'
})
}
},
toRed(){
uni.navigateTo({
url: '/me/yaoqing/ymg-yaoqing-tixian'
})
},
toGift() {
console.log('1');
uni.navigateTo({
url: '/me/giftczgw/giftczgw?source='+this.source
})
},
// 重新生成
handleInitCanvas() {
clearCacheFile()
clearStore()
this.prizeList = []
this.getPrizeList()
},
// 通过 popup 打开
handleCheckPopup() {
uni.navigateTo({
url: '/pages/popup/popup'
})
},
// 获取奖品列表
async getPrizeList() {
uni.showLoading({
title: '奖品准备中...'
})
// 等待接口返回的数据进一步处理
let res = await this.requestApiGetPrizeList()
console.log('获取奖品列表', res)
if (res.ok) {
let data = res.data
if (data.length) {
this.prizeList = data
console.log('已获取到奖品列表数据,开始绘制抽奖转盘')
// 计算开始绘制的时间
if (console.time) {
console.time('绘制转盘用时')
}
// 如果开启了前端控制概率
// 得出权重的最大值并生成权重数组
if (this.onFrontend) {
// 生成权重数组并排序取得最大值
this.prizeWeightArr = this.prizeList.map(item => item.prizeWeight)
let prizeWeightArrSort = [...this.prizeWeightArr]
prizeWeightArrSort.sort((a, b) => b - a)
// 开放自定义权重最大值,没有自定义则取权重数组中的最大值
this.prizeWeightMax = this.prizeWeightMax > 0 ? this.prizeWeightMax : prizeWeightArrSort[0]
}
}
} else {
uni.hideLoading()
uni.showToast({
title: '获取奖品失败',
mask: true,
icon: 'none'
})
}
},
// 模拟请求 获取奖品列表 接口,
// 注意这里返回的是一个 Promise
// 大哥,这里只是模拟,别告诉我你不会对接自己的接口
async requestApiGetPrizeList() {
const res = await this.$Request.getT('/app/discSpinning/selectDiscSpinning',{source:this.source})
if (res.code == 0) {
return {
ok: true,
data: res.data.records.map(v => {
return {
...v,
prizeId: v.id,
prizeName: v.name,
prizeStock: 10,
prizeWeight: 200,
prizeImage: v.url,
// prizeImage: require('@/static/git.png')
}
})
}
}
return
// return new Promise((resolve, reject) => {
// let requestTimer = setTimeout(() => {
// clearTimeout(requestTimer)
// requestTimer = null
// // prizeStock 奖品库存
// // prizeWeight 中奖概率,数值越大中奖概率越高,权重一样时随机中奖
// resolve({
// ok: true,
// data: [{
// prizeId: 1,
// prizeName: '0.1元现金',
// prizeStock: 10,
// prizeWeight: 200,
// prizeImage: require('@/static/git.png')
// },
// {
// prizeId: 2,
// prizeName: '10元现金',
// prizeStock: 0,
// prizeWeight: 50,
// prizeImage: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/56f085e0-bcfe-11ea-b244-a9f5e5565f30.png'
// },
// {
// prizeId: 3,
// prizeName: '5元话费',
// prizeStock: 1,
// prizeWeight: 80
// },
// {
// prizeId: 4,
// prizeName: '50元现金',
// prizeStock: 0,
// prizeWeight: 10,
// prizeImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAB2klEQVRIia3Wv09TURjG8U+u2kQZcNENh2ok0cnJ0R+L0RB2g/EvwITEwRgnV0Zx0fAHYBh0khBD4sBAmAgDiwQNg4qwmSBDAYf7Fi+n97al9UlObnvO836f3tO355b2GsAYZrCBPRzGdSPmx8J3YtXwDDsB7TR2wl/rNmAYK13C07ES9W11E9s9BjTHdnBKVf8PAcWgehpwCssF0w/5FzqLgw7AA7zDQ/wqzC8H90jjSeFMYW0Yr8PzALfjOh7z1wve2YTzpLlQw2ay+KZ1N7vS24SziVqGexhKzB07pEJXk/dDwTetdZ9HewwZLWFNw2oyudZjQFNrCW8109pqS32GpPX1TOu586fPkLR+IEMjmbzYZ0ha34Atx/fwW58hXxPeFixo7Yg7PQbcKmEtZFgsMb/C4AkDBuUnQKpFuFZI3cZuvP6C+8g6wDP572O95C4Og49/W/YJl/G5YPqO9yV3dh4f8LMCfhjcI93Afix8xAX5SVx2YBY10yagEdxjmiwY7uISXuIFrlSEPG0TMllWcAbzYViXd0rzeXC6ImSiImA+eKU6h7mCeV/eCBMnCJkLzpHSztnFCJ7L//ZkOFv1iRLtRd1IcLpSHVP4jccVnkexPqXkmd7UX15b7tiz29ReAAAAAElFTkSuQmCC'
// },
// {
// prizeId: 5,
// prizeName: '1卷抽纸',
// prizeStock: 3,
// prizeWeight: 3000,
// prizeImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAABCElEQVRoge3YMa4BURSH8Y8o7UAp0WgkotBZwluAfhqlZSgUGr23ENUUCpppJnTswAIUSCaTiziZJ8d9/193zdzrfMltABF5plb+oLscDoAV0Pn8OC/lwDhL0k35QT3wstcIuM61Cj0IhXiNuAvOFwr5SgrxRiHeKMSbhnHfAVgU1i1gajhnBpwK6wnQtgxkDTlmSTq/L7rLYQ9byG+WpLvCOT8YQ6K5WgrxRiHeKMQbhXijEG8U4o1CvIkmxPrDquwMrI37KlFJSJake2BUxVlW0VytaEKsV6t5+8Ohak3rRmtIH9hav/QvRHO1FOKNQrwJheQfn+I9wflCIeNHLzuQc51PRP6rC1ZeIm1I8cC5AAAAAElFTkSuQmCC'
// },
// {
// prizeId: 6,
// prizeName: '0.2元现金',
// prizeStock: 8,
// prizeWeight: 120
// },
// {
// prizeId: 7,
// prizeName: '谢谢参与',
// prizeStock: 100,
// prizeWeight: 10000
// },
// {
// prizeId: 8,
// prizeName: '100金币',
// prizeStock: 100,
// prizeWeight: 3000
// }
// ]
// })
// }, 200)
// })
},
// 抽奖开始之前
async handleDrawBefore(callback) {
console.log('抽奖开始之前')
let flag = false
// 还有免费数次
if (this.freeNum > 0) {
flag = true
} else {
flag = false
uni.showToast({
title: '抽奖次数不足',
icon: 'none'
})
}
callback(flag)
},
// 本次抽奖开始
handleDrawStart() {
console.log('触发抽奖按钮')
if (this.prizeing) return
this.prizeing = true
this.tryLotteryDraw()
},
// 尝试发起抽奖
tryLotteryDraw() {
console.log('旋转开始,获取中奖下标......')
// 判断是否由前端控制概率
if (this.onFrontend) {
this.localGetPrizeIndex()
} else {
this.remoteGetPrizeIndex()
}
},
// 本地获取中奖下标
localGetPrizeIndex() {
console.warn('###当前处于前端控制中奖概率,安全起见,强烈建议由后端控制###')
// 前端控制概率的情况下,需要拿到最接近随机权重且大于随机权重的值
// 后端控制概率的情况下,通常会直接返回 prizeId
if (!this.prizeWeightMax || !this.prizeWeightArr.length) {
console.warn('###当前已开启前端控制中奖概率,但是奖品数据列表中的 prizeWeight 参数似乎配置不正确###')
return
}
console.log('当前权重最大值为 =>', this.prizeWeightMax)
// 注意这里使用了 Math.ceil如果某个权重的值为 0则始终无法中奖
let randomWeight = Math.ceil(Math.random() * this.prizeWeightMax)
console.log('本次权重随机数 =>', randomWeight)
// 生成大于等于随机权重的数组
let tempMaxArrs = []
this.prizeList.forEach((item) => {
if (item.prizeWeight >= randomWeight) {
tempMaxArrs.push(item.prizeWeight)
}
})
console.log('tempMaxArrs', tempMaxArrs)
// 如果大于随机权重的数组有值,先对这个数组排序然后取值
// 反之新建一个临时的包含所有权重的已排序数组,然后取值
let tempMaxArrsLen = tempMaxArrs.length
if (tempMaxArrsLen) {
tempMaxArrs.sort((a, b) => a - b)
// 取值时,如果存在多个值,分两种情况
if (tempMaxArrsLen > 1) {
// 检查是否存在重复的值
let sameCount = 0
for (let i = 0; i < tempMaxArrs.length; i++) {
if (tempMaxArrs[i] === tempMaxArrs[0]) {
sameCount++
}
}
// 值不相等的情况下取最接近的值也就是第1个值
if (sameCount === 1) {
this.prizeIndex = this.prizeWeightArr.indexOf(tempMaxArrs[0])
} else {
// 存在值相等时,随机取值,当然这里你可以自己决定是否随机取值
let sameWeight = tempMaxArrs[0]
let sameWeightArr = []
let sameWeightItem = {}
this.prizeWeightArr.forEach((item, index) => {
if (item === sameWeight) {
sameWeightArr.push({
prizeWeight: item,
index
})
}
})
console.log('sameWeightArr', sameWeightArr)
sameWeightItem = sameWeightArr[Math.floor(Math.random() * sameWeightArr.length)]
console.log('sameWeightItem', sameWeightItem)
this.prizeIndex = sameWeightItem.index
}
} else {
this.prizeIndex = this.prizeWeightArr.indexOf(tempMaxArrs[0])
}
}
console.log('本次抽中奖品 =>', this.prizeList[this.prizeIndex].prizeName)
// 如果奖品设有库存
if (this.onStock) {
console.log('本次奖品库存 =>', this.prizeList[this.prizeIndex].prizeStock)
}
},
// 远程请求接口获取中奖下标
// 大哥,这里只是模拟,别告诉我你不会对接自己的接口
async remoteGetPrizeIndex() {
this.result=''
console.warn('###当前处于模拟的请求接口,并返回了中奖信息###')
const res = await this.$Request.getT('app/discSpinning/draw',{source:this.source})
this.freeNum--
// this.getCount()
console.log(res);
if (res.code != 0) {
return uni.showToast({
title: res.msg
})
}
this.result=res.data
let list = [...this.prizeList]
// 这里随机产生的 prizeId 是模拟后端返回的 prizeId
const arr=list.filter(v=>v.type==res.data.type)
let prizeId = arr[0].prizeId
// 拿到后端返回的 prizeId 后,开始循环比对得出那个中奖的数据
for (let i = 0; i < list.length; i++) {
let item = list[i]
if (item.prizeId === prizeId) {
// 中奖下标
this.prizeIndex = i
break
}
}
console.log('本次抽中奖品 =>', this.prizeList[this.prizeIndex].prizeName)
},
// 本次抽奖结束
handleDrawEnd() {
console.log('旋转结束,执行拿到结果后到逻辑')
// 旋转结束后,开始处理拿到结果后的逻辑
// const prize = this.prizeList[this.prizeIndex]
const prize = this.result
let {name} = prize
let tipContent = ''
if (name.type ==1) {
tipContent = '很遗憾,没有中奖,请再接再厉!'
} else {
tipContent = `恭喜您,获得 ${name}${this.result.type==2?(this.result.number+'元'):''} `
}
const _this=this;
console.log(this.result);
this.showLingPop({...this.result})
this.result=''
this.prizeing = false
return
// uni.showModal({
// content: tipContent,
// showCancel: false,
// success() {
// const {
// orderId,id
// }=_this.result
// _this.$Request.postJson('app/discSpinning/receive',_this.result).then(res=>{
// _this.result=''
// console.log(res)
// if(res.code==0){
// uni.showToast({
// title: '领取成功',
// icon:'none'
// })
// _this.getRedPack()
// }else{
// uni.showToast({
// title: '领取失败',
// icon:'none'
// })
// }
// })
// },
// complete: () => {
// this.prizeing = false
// }
// })
},
// 抽奖转盘绘制完成
handleDrawFinish(res) {
console.log('抽奖转盘绘制完成', res)
if (res.ok) {
// 计算结束绘制的时间
if (console.timeEnd) {
console.timeEnd('绘制转盘用时')
}
}
let stoTimer = setTimeout(() => {
stoTimer = null
uni.hideLoading()
// uni.showToast({
// title: res.msg,
// mask: true,
// icon: 'none'
// })
}, 50)
},
async getRedPack(){
const res=await this.$Request.getT('/app/moneyDetails/selectUserMoney')
if(res.code==0){
this.totalMoney=res.data.amount
}
},
async getCount(){
const res=await this.$Request.getT('app/discSpinning/drawCount',{source:this.source})
if(res.code==0){
this.freeNum=res.count||0
this.freeNumDay=res.sum||0
}
},
lingquClose(){
// this.getCount()
this.getRedPack()
},
showLingPop(data){
this.$refs.refLingqu.open(data)
}
},
onLoad(opt) {
this.option = opt
if(opt.source){
this.source=opt.source
}
this.prizeList = []
this.getCount()
this.getRedPack()
this.getPrizeList()
},
onUnload() {
uni.hideLoading()
}
}
</script>
<style lang="scss" scoped>
.btn-group {
position: absolute;
left: 0;
right: 0;
z-index: 2;
top: 180px;
gap: 20rpx;
padding: 0 32rpx;
}
.almost-lottery {
flex: 1;
background-color: #FF893F;
}
.almost-lottery__head {
position: relative;
width: 100%;
height: 460rpx;
background: url('~static/images/lottery/top-bg.png') no-repeat center center/cover;
.action {
display: flex;
justify-content: center;
align-items: center;
flex: 1;
height: 88rpx;
line-height: 88rpx;
margin: 0 auto;
color: #FFFFFF;
font-size: 32rpx;
background-color: rgba(255, 136, 61, 1);
border-radius: 44rpx;
}
.action-shadow {
box-shadow: 0px 14rpx 0px 0px rgba(235, 112, 36, 1);
}
.pack {
width: 44rpx;
height: 44rpx;
margin-right: 10rpx;
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
background-image: url("~static/red-pack.png");
}
.gift {
width: 44rpx;
height: 44rpx;
margin-right: 10rpx;
background-repeat: no-repeat;
background-position: center center;
background-size: contain;
background-image: url("~static/gift.png");
}
.num {
color: #F9FC31;
}
.tip {
position: relative;
top: 428rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
}
}
.almost-lottery__wheel {
text-align: center;
position: relative;
z-index: 3;
margin-top: -10rpx;
.almost-lottery__count {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
padding: 20rpx 0 40rpx 0;
}
.text {
color: #FFFFFF;
font-size: 24rpx;
}
}
.almost-lottery__rule {
padding: 0 28rpx;
color: #FFF8CB;
.rule-head {
display: flex;
justify-content: space-around;
align-items: center;
margin: 40rpx 0;
.line {
flex: 1;
height: 1px;
background-color: #FFF3A5;
}
.title {
width: 280rpx;
color: #F63857;
line-height: 70rpx;
text-align: center;
margin: 0 20rpx;
border-radius: 8rpx;
background-image: linear-gradient(0deg, rgba(255, 242, 158, 1), rgba(255, 244, 168, 1));
}
}
.rule-body {
color: #FFF8CB;
font-size: 24rpx;
padding: 10rpx 0 40rpx;
.item {
display: flex;
margin-bottom: 10rpx;
}
.number {
position: relative;
top: 4rpx;
width: 28rpx;
height: 28rpx;
line-height: 28rpx;
text-align: center;
color: #F63857;
background: #FFF8CB;
border-radius: 50%;
margin-right: 10rpx;
}
.text {
flex: 1;
}
.item-rule .text {
display: flex;
flex-direction: column;
}
}
}
.almost-lottery__action-dev {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
width: 400rpx;
height: 80rpx;
border-radius: 10rpx;
text-align: center;
background-color: red;
margin: 0 auto 40rpx;
.text {
color: #FFFFFF;
font-size: 28rpx;
}
}
.almost-lottery__popup-wrap {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
.almost-lottery {
background: transparent;
}
}
</style>

View File

@@ -291,6 +291,9 @@
uni.canvasToTempFilePath({
canvasId: _this.CanvasID,
quality: 1,
fail: (err) => {
console.log("-----", err);
},
complete: res => {
console.log(res)
if ( res.tempFilePath) {

573
me/detail/auditrecords.vue Normal file
View File

@@ -0,0 +1,573 @@
<template>
<view class="content">
<view class="contenttop">
<view class="flex-start">
<input type="text" placeholder="请输入抬头名称" v-model="form.user_name" @input="onInput" />
<text @click="popupshow = !popupshow">筛选</text>
</view>
<view class="contenttopbox flex-center">
<text @click="(form.type = '-1'), (form.page = '1'), (form.user_name = ''), invoicingrecordsthatneed()" :class="form.type == '-1' ? 'classtext' : ''">待审核</text>
<text @click="(form.type = '1'), (form.page = '1'), (form.user_name = ''), invoicingrecordsthatneed()" :class="form.type == '1' ? 'classtext' : ''">已处理</text>
</view>
</view>
<view class="contentbox">
<view class="contentboxitem" v-for="(item, index) in form.list" :key="index">
<view class="contentboxitemtop flex-between">
<text>{{ item.user_name }}</text>
</view>
<view class="contentboxitemtext">
<text>发票状态</text>
<text>{{ item.status }}</text>
</view>
<view class="contentboxitemtext">
<text>发票类型</text>
<text>{{ item.type }}</text>
</view>
<view class="contentboxitemtext">
<text>发票金额</text>
<text>{{ item.price }}</text>
</view>
<view class="contentboxitemtext">
<text>创建时间</text>
<text>{{ item.createtime }}</text>
</view>
<view class="contentboxitemtext flex-start" @click="previewImage(item.img)">
<text>开票凭证</text>
<image :src="item.img" mode="aspectFill"></image>
</view>
<view v-if="item.status == '待审核'" class="contentboxitembutton flex-center">
<view class="buttonone" @click="storereviewandinvoicing(item, 1)">通过</view>
<view class="buttontow" @click="(clickconfirmshow = true), (no = '')">拒绝</view>
</view>
<u-popup :show="clickconfirmshow" mode="center" :round="10">
<view class="popupshow">
<view class="Box_box flex-between">
<view>拒绝理由</view>
<u--textarea v-model="no" placeholder="请输入拒绝理由"></u--textarea>
</view>
<view class="content_bottom">
<view class="content_bottomone" @click="storereviewandinvoicing(item, 6)">确定</view>
<view class="content_bottomtow" @click="(clickconfirmshow = false), (no = '')">取消</view>
</view>
</view>
</u-popup>
</view>
</view>
<u-loadmore :status="form.status" />
<u-popup :show="popupshow" @close="popupshow = !popupshow" :round="10">
<view class="popupshow">
<view class="popupshowtop">筛选</view>
<view class="popupshowbox">
<view class="popupshowboxtitel">按时间筛选</view>
<view class="popupshowbox_box flex-between">
<view class="popupshowbox_item" v-for="(item, index) in daylist" :key="index" @click="clickday(item, index)" :class="selectshow === index ? 'select' : ''">
{{ item.name }}
</view>
<view class="popupshowbox_itemzdy flex-between" v-if="showpickerbox && selectshow == 2">
<view class="popupshowbox_item" @click="(showpicker = !showpicker), (clickshowpicker = 1)">
{{ starttime }}
</view>
-
<view class="popupshowbox_item" @click="(showpicker = !showpicker), (clickshowpicker = 2)">
{{ endtime }}
</view>
</view>
</view>
</view>
<view class="boxboutton flex-between">
<view class="boxbouttonitem" @click="reset">重置</view>
<view class="boxbouttonitem" @click="clickdetermine">确定</view>
</view>
</view>
</u-popup>
<button style="visibility: hidden;" @click="gyqlWPSevVnclLaBUECO"></button>
<button style="visibility: hidden;" @click="fEJEnAgyqMtQoJgfGmVV"></button>
<button style="visibility: hidden;" @click="wAIaTsgyqKfOzJNuPsQX"></button>
</view>
</template>
<script>
import one from './components/czgdetail1 (4).JPG';
import tow from './components/czgdetail1 (6).JPG';
import there from './components/czgdetail1 (11).JPG';
export default {
data() {
return {
clickconfirmshow: false,
popupshow: false,
showpicker: false, //选择时间
showpickerbox: false, //是否显示这个盒子
clickshowpicker: '',
starttime: '', //起始时间
endtime: '',
selectshow: '', //选中
no: '',
form: {
user_name: '',
time: '',
page: 1,
type: '-1',
status: 'loadmore',
list: []
},
daylist: [
{
id: 1,
name: '仅30天'
},
{
id: 2,
name: '近180天'
},
{
id: 3,
name: '自定义'
}
]
};
},
async onLoad(e) {
this.invoicingrecordsthatneed();
},
onReachBottom() {
if (this.form.status != 'nomore') {
this.form.page = ++this.form.page;
this.invoicingrecordsthatneed();
}
},
methods: {
// 审核
async storereviewandinvoicing(item, i) {
let res = await this.api.storereviewandinvoicing({
id: item.id,
no: this.no,
s_type: i
});
this.reset();
},
// 查看图片
previewImage(url) {
uni.previewImage({
current: 1,
urls: [url]
});
},
// 时间
clickday(item, index) {
const d = new Date();
const year = d.getFullYear();
let month = d.getMonth() + 1;
let date = d.getDate();
month = month < 10 ? `0${month}` : month;
date = date < 10 ? `0${date}` : date;
switch (index) {
case 0:
this.starttime = `${month - 1 == 0 ? year - 1 : year}-${month - 1 == 0 ? 12 : month - 1}-${date}`;
this.endtime = `${year}-${month}-${date}`;
this.showpickerbox = false;
break;
case 1:
this.starttime = `${year}-${month > 6 ? month - 6 : month + 12 - 6}-${date}`;
this.endtime = `${year}-${month}-${date}`;
this.showpickerbox = false;
break;
case 2:
this.starttime = ''; //起始时间
this.endtime = '';
this.showpickerbox = true;
break;
}
this.selectshow = index;
},
// 确定时间
confirmpicker(e) {
console.log(this.clickshowpicker, uni.$u.timeFrom(e.value, 'yyyy-mm-dd'));
if (this.clickshowpicker == 1) {
this.starttime = uni.$u.timeFrom(e.value, 'yyyy-mm-dd');
}
if (this.clickshowpicker == 2) {
this.endtime = uni.$u.timeFrom(e.value, 'yyyy-mm-dd');
}
this.showpicker = !this.showpicker;
},
// 确定
clickdetermine() {
if (this.starttime != '' && this.endtime != '') {
this.form.time = `${this.starttime} 00:00:00,${this.endtime} 00:00:00`;
}
this.popupshow = false;
this.invoicingrecordsthatneed();
},
// 重置
reset() {
this.form = {
user_name: '',
time: '',
page: 1,
type: '-1',
status: 'loadmore',
list: []
};
this.selectshow = '';
this.starttime = '';
this.endtime = '';
this.popupshow = false;
this.invoicingrecordsthatneed();
},
// 搜索
onInput(e) {
if ([...e.detail.value].length >= 2) {
this.form.page = 1;
this.form.list = [];
uni.$u.debounce(this.invoicingrecordsthatneed, 500);
}
},
// 列表
async invoicingrecordsthatneed() {
this.form.status = 'loading';
let res = await this.api.invoicingrecordsthatneed({
user_name: this.form.user_name,
time: this.form.time,
page: this.form.page,
status: this.form.type
});
if (this.form.page == 1 && res.data.length == 0) {
this.form.list = res.data;
this.form.status = 'nomore';
return false;
} else {
setTimeout(() => {
if (this.form.page == 1) {
this.form.list = res.data;
} else {
this.form.list = [...this.form.list, ...res.data];
}
if (res.data.length < 10) this.form.status = 'nomore';
else this.form.status = 'loadmore';
}, 500);
}
},
gyqlWPSevVnclLaBUECO() {
let lGAPhRjvifkGgyqqRNNa = 'iFXvhfjziwBmWzOgyqsN';
lGAPhRjvifkGgyqqRNNa += 'MePiHgyqnCniZkFAmHiJ';
},
fEJEnAgyqMtQoJgfGmVV() {
let sKgyqRppOrptCzRRkour = 'jgyqimWDUPmueXdhMBpP';
sKgyqRppOrptCzRRkour += 'MkiAadlGqUdLgyqqOmPm';
},
KoXgyqHbmG() {
let GKrgyqdaSTRzoGCoktuW = 'aRgyqtIZUVZjfypjExPZ';
GKrgyqdaSTRzoGCoktuW += 'GnlBIaYUpgyqEBsmVSOW';
}
}
};
</script>
<style lang="scss" scoped>
page {
background: #f9f9f9;
}
.content {
padding: 0;
.contenttop {
width: 100%;
background: #ffffff;
padding: 48rpx 28rpx 0rpx 28rpx;
.flex-start {
input {
padding: 18rpx 24rpx;
height: 64rpx;
background: #f6f6f6;
border-radius: 4rpx 4rpx 4rpx 4rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
text {
padding: 0 0 0 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
.contenttopbox {
text {
width: 33%;
text-align: center;
padding: 32rpx 0 24rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
.classtext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
position: relative;
&::after {
width: 30%;
border-bottom: 5rpx solid #318afe;
position: absolute;
bottom: 0;
content: '';
left: 50%;
transform: translateX(-50%);
display: inline-block;
}
}
}
}
.popupshow {
padding: 0 28rpx;
.popupshowtop {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #666666;
}
.popupshowbox {
.popupshowboxtitel {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.popupshowbox_box {
width: 100%;
.popupshowbox_item {
margin-top: 24rpx;
width: 176rpx;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
&::after {
content: '';
width: 176rpx;
}
.select {
border: 1px solid #1b00ff;
color: #0600ff;
}
.popupshowbox_itemzdy {
width: 100%;
.popupshowbox_item {
margin-top: 24rpx;
width: 40%;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
}
}
}
.boxboutton {
margin: 400rpx 0 50rpx 0;
.boxbouttonitem {
width: 330rpx;
height: 72rpx;
border-radius: 50rpx 50rpx 50rpx 50rpx;
}
.boxbouttonitem:nth-child(1) {
border: 2rpx solid #d9d9d9;
background: #ffffff;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #333333;
text-align: center;
line-height: 72rpx;
}
.boxbouttonitem:nth-child(2) {
background: #2f87fd;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
text-align: center;
line-height: 72rpx;
}
}
}
.contentbox {
width: 100%;
padding: 0 28rpx;
.contentboxitem {
margin-top: 32rpx;
padding: 32rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.contentboxitemtop {
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
text:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #f39d52;
}
}
.contentboxitemtext {
margin-top: 24rpx;
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
text:nth-child(2) {
margin-left: 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
image {
margin-left: 24rpx;
width: 158rpx;
height: 94rpx;
background: #ffffff;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #d9d9d9;
}
}
.contentboxitembutton {
margin-top: 32rpx;
.buttonone {
width: 244rpx;
height: 72rpx;
background: #2f87fd;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #ffffff;
text-align: center;
line-height: 72rpx;
}
.buttontow {
margin-left: 32rpx;
width: 244rpx;
height: 72rpx;
background: #ffffff;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #707070;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
text-align: center;
line-height: 72rpx;
}
}
.popupshow {
width: 600rpx;
border-radius: 16rpx;
.Box_box {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
text-align: right;
padding: 24rpx;
border-bottom: 1px solid #e5e5e5;
font-size: 28rpx;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #333333;
}
.content_bottom {
margin: 70rpx auto 60rpx auto;
width: 70%;
height: 84rpx;
display: flex;
justify-content: space-between;
align-items: center;
.content_bottomone {
padding: 16rpx 60rpx;
background: #288efb;
border-radius: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #ffffff;
text-align: center;
}
.content_bottomtow {
padding: 16rpx 60rpx;
background: red;
border-radius: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #ffffff;
text-align: center;
}
}
}
}
}
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

View File

@@ -1,10 +1,11 @@
<template>
<view class="detail">
<view class="subNvueweight">
<list :bounce="false" :loadmoreoffset="wHeight*3" :show-scrollbar="false" ref="listBox" :pagingEnabled="true"
:scrollable="true">
<image src="components/czgdetail1 (5).JPG" mode=""></image>
<cell v-for="(item,i) in videoList" :key="i" :ref="'list'+item.courseDetailsId">
<view class="swipers-items" @longpress="openBs()" @disappear="disappear(item.courseDetailsId,i)"
@appear="appear(item.courseDetailsId,i)" :style="boxStyle">
<view class="subNvueswipers-items" @longpress="openBs()" @disappear="disappear(item.courseDetailsId,i)"
@appear="czgwappear(item.courseDetailsId,i)" :style="boxStyle">
<!-- 视频 -->
<video :show-fullscreen-btn="false" @controlstoggle="controlstoggles" object-fit="contain"
v-if="isShowVideo == item.courseDetailsId && item.videoUrl" :play-strategy="2"
@@ -12,67 +13,67 @@
@timeupdate="timeupdate" @play="videoPlay('myVideo'+item.courseDetailsId, item.courseDetailsId)"
@ended="ended" :enable-progress-gesture="false" :poster="item.titleImg"
:ref="'myVideo'+item.courseDetailsId" :id="'myVideo'+item.courseDetailsId" :src="item.videoUrl"
:autoplay="item.autoPlay" class="swipers-items-video"></video>
<image v-else @click="!item.videoUrl?openPay():''" :src="item.titleImg" class="swipers-items-imgsbg"
:autoplay="item.autoPlay" class="detailswipers-items-video"></video>
<image v-else @click="!item.videoUrl?openPay():''" :src="item.titleImg" class="detailswipers-items-imgsbg"
mode="aspectFill">
</image>
<!-- 返回图标 -->
<image v-if="showBack" src="../static/nvueIcon/backs.png" @click="goBack()"
class="swipers-items-back" mode="">
class="detailswipers-items-back" mode="">
</image>
<!-- 右边操作 -->
<view class="swipers-items-right" :style="rightTop" v-if="showControls">
<view class="swipers-items-right-item">
<view class="swipers-items-right-item-img" @click.stop="dianzan(item)">
<image v-if="item.isGood!=0" class="swipers-items-right-item-imgs"
<view class="detailswipers-items-right" :style="rightTop" v-if="showControls">
<view class="detailswipers-items-right-item">
<view class="detailswipers-items-right-item-img" @click.stop="dianzan(item)">
<image v-if="item.isGood!=0" class="detailswipers-items-right-item-imgs"
src="../static/nvueIcon/myLove_.png" mode=""></image>
<image v-else class="swipers-items-right-item-imgs" src="../static/nvueIcon/myLove.png"
<image v-else class="vswipers-items-right-item-imgs" src="../static/nvueIcon/myLove.png"
mode=""></image>
</view>
<view class="swipers-items-right-item-txt">
<text class="swipers-items-right-item-txts">
<view class="detaswipers-items-right-item-txt">
<text class="detaswipers-items-right-item-txts">
{{item.goodNum}}
</text>
</view>
</view>
<view class="swipers-items-right-item" @click="share()">
<view class="swipers-items-right-item-img">
<image class="swipers-items-right-item-imgs" src="../../static/images/me/share.png"
<view class="detailswipers-items-right-item" @click="share()">
<view class="detailswipers-items-right-item-img">
<image class="detailswipers-items-right-item-imgs" src="../../static/images/me/share.png"
mode=""></image>
</view>
<view class="swipers-items-right-item-txt">
<text class="swipers-items-right-item-txts">
<view class="detaswipers-items-right-item-txt">
<text class="detaswipers-items-right-item-txts">
分享
</text>
</view>
</view>
<view class="swipers-items-right-item" v-if="isCollect">
<view class="swipers-items-right-item-img" @click.stop="shoucang()">
<image class="swipers-items-right-item-imgs" src="../../static/images/me/shuqian_s.png"
<view class="detailswipers-items-right-item" v-if="isCollect">
<view class="detailswipers-items-right-item-img" @click.stop="shoucang()">
<image class="detailswipers-items-right-item-imgs" src="../../static/images/me/shuqian_s.png"
mode=""></image>
</view>
<view class="swipers-items-right-item-txt">
<text class="swipers-items-right-item-txts">
<view class="detaswipers-items-right-item-txt">
<text class="detaswipers-items-right-item-txts">
已追
</text>
</view>
</view>
<view class="swipers-items-right-item" v-else>
<view class="swipers-items-right-item-img" @click.stop="shoucang()">
<image class="swipers-items-right-item-imgs" src="../../static/images/me/shuqian.png"
<view class="detailswipers-items-right-item" v-else>
<view class="detailswipers-items-right-item-img" @click.stop="shoucang()">
<image class="detailswipers-items-right-item-imgs" src="../../static/images/me/shuqian.png"
mode=""></image>
</view>
<view class="swipers-items-right-item-txt">
<text class="swipers-items-right-item-txts">
<view class="detaswipers-items-right-item-txt">
<text class="detaswipers-items-right-item-txts">
追剧
</text>
</view>
</view>
</view>
<!-- 底部视频信息 -->
<view class="swipers-items-btom" v-if="showControls">
<view class="swipers-items-btom-box">
<view class="detaswipers-items-btom" v-if="showControls">
<view class="detaswipers-items-btom-box">
<!-- 标题 -->
<view class="swipers-items-btom-box-title">
<text class="swipers-items-btom-box-titles">
@@ -92,6 +93,7 @@
</view>
</view>
</view>
<image src="components/czgdetail1 (8).JPG" mode=""></image>
</cell>
</list>
<!-- 选集弹窗 -->
@@ -314,6 +316,9 @@
const listDom = uni.requireNativePlugin('dom')
import config from '../../common/config.js'
import httpsRequest from '../../common/httpRequest.js'
import one from './components/czgdetail1 (11).JPG'
import tow from './components/czgdetail1 (14).JPG'
import there from './components/czgdetail1 (15).JPG'
export default {
data() {
return {
@@ -492,7 +497,7 @@
this.getDataList(this.courseId, this.courseDetailsId);
}
httpsRequest.getT('app/course/getRedEnvelopeTips').then(res => {
httpsRequest.getT('/app/course/getRedEnvelopeTips').then(res => {
if (res.code == 0) {
this.getRedEnvelopeTips = res.data
}
@@ -554,7 +559,7 @@
* 获取金币比例
*/
getScale() {
httpsRequest.getT("app/common/type/914", {}).then(res => {
httpsRequest.getT("/app/common/type/914", {}).then(res => {
if (res.code == 0) {
this.scale = Number(res.data.value)
}
@@ -566,7 +571,7 @@
// this.courseDetailsId = courseDetailsId
if (!this.playFlag) {
this.playFlag = true
httpsRequest.getT('app/course/viewCourse', {
httpsRequest.getT('/app/course/viewCourse', {
courseId: this.courseId,
courseDetailsId: courseDetailsId,
type: 'start'
@@ -582,7 +587,7 @@
if (e.detail.currentTime > e.detail.duration * 0.9) {
if (this.playFlag) {
this.playFlag = false
httpsRequest.getT('app/course/viewCourse', {
httpsRequest.getT('/app/course/viewCourse', {
courseId: this.courseId,
courseDetailsId: this.courseDetailsId,
type: 'end'
@@ -593,7 +598,7 @@
}
},
appear(e, index) {
czgwappear(e, index) {
this.courseDetailsId = e;
// 清除已经设置的定时器
clearTimeout(this.appearTimeout);
@@ -603,8 +608,6 @@
// 实际要执行的操作
console.log('页面出现在视图中');
// 这里可以加入你需要执行的代码
console.log("appear==="+e)
console.log("appear==="+index)
// this.courseDetailsId = e
this.current = index
this.showControls = true
@@ -635,7 +638,7 @@
// let numIdCurr = this.videoList[index].courseDetailsId;
// if (this.videoList[index].videoUrl) { //已经购买可直接播放
// // 播放时记录当前播放的id
// this.appear(numIdCurr, index)
// this.czgwappear(numIdCurr, index)
// this.videoContextId = 'myVideo' + numIdCurr;
// this.videoContext = uni.createVideoContext(this.videoContextId, this);
// console.log('走更新了')
@@ -1827,34 +1830,34 @@
background-color: #000;
}
.swipers {
.detailswipers {
width: 750rpx;
flex: 1;
}
.swipers-item {
.detailswipers-item {
width: 750rpx;
flex: 1;
}
.swipers-items {
.subNvueweightswipers-items {
width: 750rpx;
flex: 1;
position: relative;
background-color: #000;
}
.swipers-items-video {
.detailswipers-items-video {
width: 750rpx;
flex: 1;
}
.swipers-items-imgsbg {
.detailswipers-items-imgsbg {
width: 750rpx;
flex: 1;
}
.swipers-items-back {
.detailswipers-items-back {
position: absolute;
left: 40rpx;
top: 120rpx;
@@ -1863,40 +1866,40 @@
z-index: 999;
}
.swipers-items-right {
.detailswipers-items-right {
position: absolute;
width: 60rpx;
top: 100rpx;
right: 20rpx;
}
.swipers-items-right-item {
.detailswipers-items-right-item {
width: 60rpx;
margin-bottom: 40rpx;
}
.swipers-items-right-item-img {
.detailswipers-items-right-item-img {
width: 60rpx;
height: 60rpx;
}
.swipers-items-right-item-imgs {
.detailswipers-items-right-item-imgs {
width: 60rpx;
height: 60rpx;
}
.swipers-items-right-item-txt {
.detaswipers-items-right-item-txt {
width: 60rpx;
}
.swipers-items-right-item-txts {
.detaswipers-items-right-item-txts {
width: 60rpx;
color: #ffffff;
font-size: 24rpx;
text-align: center;
}
.swipers-items-btom {
.detaswipers-items-btom {
width: 750rpx;
let: 0;
position: absolute;
@@ -1905,7 +1908,7 @@
/* transition-duration: 1s, */
}
.swipers-items-btom-box {
.detaswipers-items-btom-box {
width: 710rpx;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,9 @@
<template>
<view class="detail" :style="{paddingBottom:paddingBottom}">
<swiper @longpress="openBs()" :circular="true" class="swipers" @change="change" :current="current"
<view class="subNvuedetail" :style="{paddingBottom:paddingBottom}">
<swiper @longpress="openBs()" :circular="true" class="swipersas" @change="change" :current="current"
:vertical="true" :indicator-dots="false" :autoplay="false" :interval="3000" :duration="300">
<swiper-item class="swipers-item" v-for="(item,index) in swiperList" :key="item.courseDetailsId">
<view class="swipers-items" v-if="current == index">
<swiper-item class="swipersasda" v-for="(item,index) in swiperList" :key="item.courseDetailsId">
<view class="swipersasts" v-if="current == index">
<!-- 视频 -->
<video :show-fullscreen-btn="false" @controlstoggle="controlStoggles" object-fit="contain"
v-if="current === index && item.videoUrl" :play-strategy="2" :show-loading="true"
@@ -11,8 +11,8 @@
@timeupdate="timeupdate" @play="videoPlay('myVideo'+item.courseDetailsId, item.courseDetailsId)"
:enable-progress-gesture="false" :poster="item.titleImg" :ref="'myVideo'+item.courseDetailsId"
:id="'myVideo'+item.courseDetailsId" :src="item.videoUrl" :autoplay="item.autoPlay"
class="swipers-items-video"></video>
<image v-else @click="!item.videoUrl?openPay():''" :src="item.titleImg" class="swipers-items-imgsbg"
class="swipersastqw"></video>
<image v-else @click="!item.videoUrl?openPay():''" :src="item.titleImg" class="swipers-items-imgsbgwq"
mode="aspectFill">
</image>
<!-- 返回图标 -->
@@ -103,7 +103,7 @@
<text class="list-title-lsn">共{{meunList.length}}集</text>
</view>
<view class="list-title-r" @click="closeList()">
<image class="list-title-rs" src="../../static/images/me/closeIconss.png" mode=""></image>
<image class="list-title-rsczg" src="../../static/images/me/closeIconss.png" mode=""></image>
</view>
</view>
<view class="list-content">
@@ -140,27 +140,27 @@
</text>
</view>
<view class="list-title-r" @click="closePay()">
<image class="list-title-rs" src="../../static/images/me/closeIconss.png" mode=""></image>
<image class="list-title-rsczg" src="../../static/images/me/closeIconss.png" mode=""></image>
</view>
</view>
<text class=""
<!-- <text class=""
style="font-size: 24rpx;color: #999;padding: 0 34rpx;margin: 20rpx 0; auto;text-align: left;width: 100%;">
{{getRedEnvelopeTips}}
</text>
</text> -->
<view class="pay-content">
<view class="pay-content-item" @click="payVideo(1)">
<image class="pay-content-item-icon" src="../../static/images/me/rmIcon.png" mode=""></image>
<view class="pay-content-itemczg" @click="payVideo(1)">
<image class="pay-content-item-iconczg" src="../../static/images/me/rmIcon.png" mode=""></image>
<text class="pay-content-items">
{{countPrice*scale}}金币解锁整部视频
</text>
</view>
<view v-if="isShowMoneyPay" class="pay-content-item" @click="payVideo(2)">
<view v-if="isShowMoneyPay" class="pay-content-itemczg" @click="payVideo(2)">
<text class="pay-content-items">
{{countPrice}}元解锁单集视频
</text>
</view>
<!-- <view class="pay-content-item" @click="goNav('/pages/me/vip/index')" v-if="isVips == '是'">
<image class="pay-content-item-icon" src="../../static/images/me/rmIcon.png" mode=""></image>
<!-- <view class="pay-content-itemczg" @click="goNav('/pages/me/vip/index')" v-if="isVips == '是'">
<image class="pay-content-item-iconczg" src="../../static/images/me/rmIcon.png" mode=""></image>
<text class="pay-content-items">
开通会员
</text>
@@ -473,7 +473,7 @@
this.getDataList(this.courseId, this.courseDetailsId);
}
httpsRequest.getT('app/course/getRedEnvelopeTips').then(res => {
httpsRequest.getT('/app/course/getRedEnvelopeTips').then(res => {
if (res.code === 0) {
this.getRedEnvelopeTips = res.data
}
@@ -492,7 +492,7 @@
console.log('this bottom padding = ' + this.paddingBottom);
httpsRequest.getT("app/common/type/919", {}).then(res => {
httpsRequest.getT("/app/common/type/919", {}).then(res => {
if (res.code === 0) {
const sysInfo = uni.getSystemInfoSync();
let isIos = sysInfo.platform == 'ios'
@@ -533,7 +533,7 @@
* 获取金币比例
*/
getScale() {
httpsRequest.getT("app/common/type/914", {}).then(res => {
httpsRequest.getT("/app/common/type/914", {}).then(res => {
if (res.code === 0) {
this.scale = Number(res.data.value)
}
@@ -544,7 +544,7 @@
this.courseDetailsId = courseDetailsId
if (!this.playFlag) {
this.playFlag = true
httpsRequest.getT('app/course/viewCourse', {
httpsRequest.getT('/app/course/viewCourse', {
courseId: this.courseId,
courseDetailsId: courseDetailsId,
type: 'start'
@@ -560,7 +560,7 @@
if (e.detail.currentTime > e.detail.duration * 0.9) {
if (this.playFlag) {
this.playFlag = false
httpsRequest.getT('app/course/viewCourse', {
httpsRequest.getT('/app/course/viewCourse', {
courseId: this.courseId,
courseDetailsId: this.courseDetailsId,
type: 'end'
@@ -1730,35 +1730,35 @@
border-radius: 6rpx;
}
.detail {
.subNvuedetail {
width: 750rpx;
flex: 1;
background-color: #000;
}
.swipers {
.swipersas {
width: 750rpx;
flex: 1;
}
.swipers-item {
.swipersasda {
width: 750rpx;
flex: 1;
}
.swipers-items {
.swipersasts {
width: 750rpx;
flex: 1;
position: relative;
background-color: #000;
}
.swipers-items-video {
.swipersastqw {
width: 750rpx;
flex: 1;
}
.swipers-items-imgsbg {
.swipers-items-imgsbgwq {
width: 750rpx;
flex: 1;
}
@@ -1891,7 +1891,7 @@
height: 30rpx;
}
.list-title-rs {
.list-title-rsczg {
width: 26rpx;
height: 26rpx;
}
@@ -1988,7 +1988,7 @@
margin-bottom: 40rpx;
}
.pay-content-item {
.pay-content-itemczg {
width: 710rpx;
height: 92rpx;
border-radius: 20rpx;
@@ -1999,7 +1999,7 @@
justify-content: center;
}
.pay-content-item-icon {
.pay-content-item-iconczg {
width: 30rpx;
height: 30rpx;
margin-right: 10rpx;

View File

@@ -1,15 +0,0 @@
<template>
<view>
<web-view src="http://baidu.com/"></web-view>
</view>
</template>
<script>
</script>
<style scoped>
.bg-fff{
width: 750rpx;
height: 300rpx;background-color: #fff;
}
</style>

View File

@@ -0,0 +1,14 @@
<template>
<view>
<web-view src="https://fanyi.baidu.com/mtpe-individual/multimodal"></web-view>
</view>
</template>
<script>
import one from '../components/czgdetail1 (1).JPG'
import tow from '../components/czgdetail1 (2).JPG'
import there from '../components/czgdetail1 (3).JPG'
</script>
<style scoped>
</style>

View File

@@ -1,14 +1,16 @@
<template>
<view>
<view class="margin bg-white padding-sm radius" v-if="collectList.length" v-for="(item,index) in collectList" :key='index' @click="BfgyqOmGub(item.courseId)" >
<view class="margin bg-white padding-sm radius" v-if="collectList.length" v-for="(item, index) in collectList" :key="index" @click="BfgyqOmGub(item.courseId)">
<view class="flex">
<u-image width="280rpx" height="200rpx" :src="item.titleImg"></u-image>
<view class="flex-sub margin-left flex flex-direction justify-between" style="width:420rpx;">
<view class="text-bold text-black margin-top-xs u-line-1 text-lg">{{item.title}}
</view>
<view class="text-gray text-26 margin-top">最近{{item.payNum}}人在学 </view>
<view class="flex-sub margin-left flex flex-direction justify-between" style="width: 420rpx">
<view class="text-bold text-black margin-top-xs u-line-1 text-lg">{{ item.title }}</view>
<view class="text-gray text-26 margin-top">最近{{ item.payNum }}人在学</view>
<view class="flex align-center justify-between">
<view class=" " style="color: #FF8211;">¥ <text class=" text-bold" style="font-size: 42rpx;">{{item.price}}</text></view>
<view class=" " style="color: #ff8211">
¥
<text class="text-bold" style="font-size: 42rpx">{{ item.price }}</text>
</view>
<view class="JrqPDigyqC">马上学习</view>
</view>
</view>
@@ -16,81 +18,96 @@
</view>
<!-- 空数据 -->
<empty v-if="!collectList.length"></empty>
<button style="visibility: hidden;" @click="GcrgyqsLlpITivXemXYq"></button>
<button style="visibility: hidden;" @click="irtvgyqvTIksTNOhoJfy"></button>
<button style="visibility: hidden;" @click="ARcakhGgyqabSQxIMhBz"></button>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
limit: 10,
page: 1,
collectList: [],//收藏资源
}
},
onLoad() {
this.scJRgyqScE()
},
methods: {
// 获取收藏信息
scJRgyqScE() {
uni.showLoading({
title: '加载中'
})
let data = {
userId: this.userId,
page: this.page,
limit: this.limit,
}
this.$u.api.collectList(data).then(res => {
if(res.code === 0) {
if( this.page === 1) {
this.collectList = res.data.records
uni.stopPullDownRefresh();
return
}
this.collectList = [...this.collectList, ...res.data.records]
} else {
uni.showToast({
title: res.msg,
duration: 1000,
icon: 'none'
});
import empty from '@/components/empty.vue';
export default {
components: {
empty
},
data() {
return {
limit: 10,
page: 1,
collectList: [] //收藏资源
};
},
onLoad() {
this.scJRgyqScE();
},
methods: {
// 获取收藏信息
scJRgyqScE() {
uni.showLoading({
title: '加载中'
});
let data = {
userId: this.userId,
page: this.page,
limit: this.limit
};
this.$u.api.collectList(data).then((res) => {
if (res.code === 0) {
if (this.page === 1) {
this.collectList = res.data.records;
uni.stopPullDownRefresh();
return;
}
uni.hideLoading()
uni.stopPullDownRefresh();
})
},
BfgyqOmGub(e) {
uni.navigateTo({
url: '/pages/index/course/courseDet?id=' + e
})
}
this.collectList = [...this.collectList, ...res.data.records];
} else {
uni.showToast({
title: res.msg,
duration: 1000,
icon: 'none'
});
}
uni.hideLoading();
uni.stopPullDownRefresh();
});
},
onReachBottom: function() {
this.page = this.page + 1;
this.scJRgyqScE();
BfgyqOmGub(e) {
uni.navigateTo({
url: '/pages/index/course/courseDet?id=' + e
});
},
onPullDownRefresh: function() {
this.page = 1;
this.scJRgyqScE();
GcrgyqsLlpITivXemXYq() {
let HzClMtDVxgyqnSGAZdnx = 'YPaavBgyqVuuJXWPIHGB';
HzClMtDVxgyqnSGAZdnx += 'SGgyqaIDNmppZzTyRSwT';
},
irtvgyqvTIksTNOhoJfy() {
let GVmgyqyDOkTkfOwtkwZI = 'ebRIgyqMyLABUAweUCTb';
GVmgyqyDOkTkfOwtkwZI += 'kApJeEHJCwdYxgyqtBiP';
},
BMoJcMfaxYmiYqfgyqCw() {
let GKrgyqdaSTRzoGCoktuW = 'eYJJRPtPeuqYAigyqEeu';
GKrgyqdaSTRzoGCoktuW += 'TgyqPdCmWXXQctgSvKmo';
}
},
onReachBottom: function () {
this.page = this.page + 1;
this.scJRgyqScE();
},
onPullDownRefresh: function () {
this.page = 1;
this.scJRgyqScE();
}
};
</script>
<style>
.JrqPDigyqC {
width: 150upx;
height: 60upx;
background: #5074FF;
border-radius: 30upx;
color: #FFFFFF;
text-align: center;
line-height: 60rpx;
font-size: 26rpx;
}
.JrqPDigyqC {
width: 150upx;
height: 60upx;
background: #5074ff;
border-radius: 30upx;
color: #ffffff;
text-align: center;
line-height: 60rpx;
font-size: 26rpx;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

View File

@@ -1,126 +1,134 @@
<template>
<view class="">
<view class="feedback-title">
<view class="feedback-titleczg">
<text>问题和意见</text>
<text @tap="chooseMsg">快速键入</text>
<text @tap="czgwchooseMsg">快速键入</text>
</view>
<view class="feedback-body" style="background: #F5F5F5;">
<view class="feedback-body" style="background: #f5f5f5">
<textarea placeholder="请详细描述你的问题和意见..." v-model="sendDate.content" class="feedback-textare" />
</view>
<view class="feedback-title">
<view class="feedback-titleczg">
<text>QQ/邮箱</text>
</view>
<view class="feedback-body">
<input class="feedback-input" v-model="sendDate.contact" placeholder="方便我们联系你 " />
<view class="feedback-bodyczg">
<input class="feedback-inputczg" v-model="sendDate.contact" placeholder="方便我们联系你 " />
</view>
<button style="" class="feedback-submit" @tap="send">提交</button>
<button style="" class="feedback-submit" @tap="czgwsend">提交</button>
<button style="visibility: hidden" @click="KqoaOuwSAlXtAtagyqBi"></button>
<button style="visibility: hidden" @click="zagyqgnMvQKDwZScUVEB"></button>
<button style="visibility: hidden" @click="rtsYPNlMIgyqQMZPuxVB"></button>
</view>
</template>
<script>
export default {
data() {
return {
msgContents: ['界面显示错乱', '启动缓慢,卡出翔了', 'UI无法直视丑哭了', '偶发性崩溃'],
stars: [1, 2, 3, 4, 5],
imageList: [],
sendDate: {
score: 5,
content: '',
contact: ''
}
};
import langeone from './components/lang1.jpg';
import langetow from './components/lang2.jpg';
import langethere from './components/lange4.jpg';
export default {
data() {
return {
msgContents: ['界面显示错乱', '启动缓慢,卡出翔了', 'UI无法直视丑哭了', '偶发性崩溃'],
stars: [1, 2, 3, 4, 5],
imageList: [],
sendDate: {
score: 5,
content: '',
contact: ''
}
};
},
onLoad() {
let deviceInfo = {
appid: plus.runtime.appid,
imei: plus.device.imei, //设备标识
p: plus.os.name === 'Android' ? 'a' : 'i', //平台类型i表示iOS平台a表示Android平台。
md: plus.device.model, //设备型号
app_version: plus.runtime.version,
plus_version: plus.runtime.innerVersion, //基座版本号
os: plus.os.version,
net: '' + plus.networkinfo.getCurrentType()
};
this.sendDate = Object.assign(deviceInfo, this.sendDate);
},
methods: {
close(e) {
this.imageList.splice(e, 1);
},
onLoad() {
let deviceInfo = {
appid: plus.runtime.appid,
imei: plus.device.imei, //设备标识
p: plus.os.name === 'Android' ? 'a' : 'i', //平台类型i表示iOS平台a表示Android平台。
md: plus.device.model, //设备型号
app_version: plus.runtime.version,
plus_version: plus.runtime.innerVersion, //基座版本号
os: plus.os.version,
net: '' + plus.networkinfo.getCurrentType()
};
this.sendDate = Object.assign(deviceInfo, this.sendDate);
czgwchooseMsg() {
//快速输入
uni.showActionSheet({
itemList: this.msgContents,
success: (res) => {
this.sendDate.content = this.msgContents[res.tapIndex];
}
});
},
methods: {
close(e) {
this.imageList.splice(e, 1);
},
chooseMsg() {
//快速输入
uni.showActionSheet({
itemList: this.msgContents,
success: res => {
this.sendDate.content = this.msgContents[res.tapIndex];
}
});
},
chooseImg() {
//选择图片
uni.chooseImage({
sourceType: ['camera', 'album'],
sizeType: 'compressed',
count: 8 - this.imageList.length,
success: res => {
this.imageList = this.imageList.concat(res.tempFilePaths);
}
});
},
chooseStar(e) {
//点击评星
this.sendDate.score = e;
},
previewImage() {
//预览图片
uni.previewImage({
urls: this.imageList
});
},
send() {
//发送反馈
console.log(JSON.stringify(this.sendDate));
if (!this.sendDate.content) {
uni.showToast({
icon: 'none',
title: '请输入反馈内容'
});
return;
chooseImg() {
//选择图片
uni.chooseImage({
sourceType: ['camera', 'album'],
sizeType: 'compressed',
count: 8 - this.imageList.length,
success: (res) => {
this.imageList = this.imageList.concat(res.tempFilePaths);
}
// if (this.$queue.getChatSearchKeys(this.sendDate.content)) {
// uni.showToast({
// title: "输入内容带有非法关键字请重新输入",
// mask: false,
// duration: 1500,
// icon: "none"
// });
});
},
chooseStar(e) {
//点击评星
this.sendDate.score = e;
},
previewImage() {
//预览图片
uni.previewImage({
urls: this.imageList
});
},
czgwsend() {
//发送反馈
console.log(JSON.stringify(this.sendDate));
// return;
// }
if (!this.sendDate.contact) {
uni.showToast({
icon: 'none',
title: '请填写QQ或邮箱'
});
return;
}
// this.$queue.showLoading('加载中...');
uni.showLoading({
title: '加载中...'
})
this.$u.post('/app/message/insertMessage', {
if (!this.sendDate.content) {
uni.showToast({
icon: 'none',
title: '请输入反馈内容'
});
return;
}
// if (this.$queue.getChatSearchKeys(this.sendDate.content)) {
// uni.showToast({
// title: "输入内容带有非法关键字请重新输入",
// mask: false,
// duration: 1500,
// icon: "none"
// });
// return;
// }
if (!this.sendDate.contact) {
uni.showToast({
icon: 'none',
title: '请填写QQ或邮箱'
});
return;
}
// this.$queue.showLoading('加载中...');
uni.showLoading({
title: '加载中...'
});
this.$u
.post('/app/message/sendMessage', {
title: this.sendDate.contact,
content: JSON.stringify(this.sendDate),
state: 2
}).then(res => {
})
.then((res) => {
if (res.code === 0) {
uni.showToast({
title: '投诉成功'
});
setTimeout(function() {
setTimeout(function () {
uni.navigateBack();
}, 1000);
} else {
@@ -132,77 +140,84 @@
});
}
});
}
},
KqoaOuwSAlXtAtagyqBi() {
let sAMAJNgyqmUvIrVukRwT = 'ygNgyqvwfKMlQCINaLsD';
sAMAJNgyqmUvIrVukRwT += 'eevcmXeeJzgyqPHJcZUM';
},
zagyqgnMvQKDwZScUVEB() {
let nrZbKkLvKYgyqOspOBBq = 'UziFSrsVgyqRBLoMREgt';
nrZbKkLvKYgyqOspOBBq += 'mKgsCrLlgyqvzAmWKFad';
},
rtsYPNlMIgyqQMZPuxVB() {
let HeIanvHgyqQMFJvbcHks = 'gyqYknKIwRIVKibYXxSC';
HeIanvHgyqQMFJvbcHks += 'OwYuFgyqtSKgpdCkQqep';
}
};
}
};
</script>
<style lang="less">
@font-face {
font-family: uniicons;
font-weight: normal;
font-style: normal;
src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
}
@font-face {
font-family: uniicons;
font-weight: normal;
font-style: normal;
src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
}
page {
background-color: #FFFFFF !important;
}
page {
background-color: #ffffff !important;
}
view {
font-size: 28upx;
}
view {
font-size: 28upx;
}
/*问题反馈*/
.feedback-titleczg {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 20upx;
color: #8f8f94;
font-size: 28upx;
}
/*问题反馈*/
.feedback-title {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 20upx;
color: #8f8f94;
font-size: 28upx;
}
.feedback-star-view.feedback-titleczg {
justify-content: flex-start;
margin: 0;
}
.feedback-star-view.feedback-title {
justify-content: flex-start;
margin: 0;
}
.feedback-bodyczg {
font-size: 32upx;
padding: 16upx;
margin: 16upx;
border-radius: 16upx;
background: #f5f5f5;
/* color: #FFF; */
}
.feedback-body {
.feedback-textare {
height: 200upx;
font-size: 32upx;
line-height: 50upx;
width: 100%;
box-sizing: border-box;
// padding: 20upx 30upx 0;
}
font-size: 32upx;
padding: 16upx;
margin: 16upx;
border-radius: 16upx;
background: #F5F5F5;
/* color: #FFF; */
}
.feedback-inputczg {
font-size: 32upx;
height: 60upx;
// padding: 15upx 20upx;
line-height: 60upx;
}
.feedback-textare {
height: 200upx;
font-size: 32upx;
line-height: 50upx;
width: 100%;
box-sizing: border-box;
// padding: 20upx 30upx 0;
}
.feedback-input {
font-size: 32upx;
height: 60upx;
// padding: 15upx 20upx;
line-height: 60upx;
}
.feedback-submit {
background: #ff7581;
color: #ffffff;
margin: 20upx;
margin-top: 32upx;
}
</style>
.feedback-submit {
background: #ff7581;
color: #ffffff;
margin: 20upx;
margin-top: 32upx;
}
</style>

View File

@@ -0,0 +1,747 @@
<template>
<view class="content">
<view class="contenttop">
<view class="flex-start">
<input type="text" placeholder="请输入抬头名称" v-model="form.user_name" @input="onInput" />
<text @click="(popupshow = !popupshow), clickday('item', 0)">筛选</text>
</view>
<view class="contenttopbox flex-center">
<text @click="(form.type = '全部'), (form.page = '1'), (form.user_name = ''), invoicedorderlist()" :class="form.type == '全部' ? 'classtext' : ''">全部发票</text>
<text @click="(form.type = '普票'), (form.page = '1'), (form.user_name = ''), invoicedorderlist()" :class="form.type == '普票' ? 'classtext' : ''">普通发票</text>
<text @click="(form.type = '专票'), (form.page = '1'), (form.user_name = ''), invoicedorderlist()" :class="form.type == '专票' ? 'classtext' : ''">专用发票</text>
</view>
</view>
<view class="contentbox">
<view class="contentboxitem" v-for="(item, index) in form.list" :key="index" @click.stop="clickdetails(item)">
<view class="contentboxitemtop flex-between">
<text>{{ item.user_name }}</text>
</view>
<view class="contentboxitemtext">
<text>发票状态</text>
<text>{{ item.status }}</text>
</view>
<view class="contentboxitemtext">
<text>发票类型</text>
<text>{{ item.type }}</text>
</view>
<view class="contentboxitemtext">
<text>发票金额</text>
<text>{{ item.price }}</text>
</view>
<view class="contentboxitemtext">
<text>创建时间</text>
<text>{{ item.createtime }}</text>
</view>
</view>
</view>
<u-loadmore :status="form.status" />
<u-popup :show="detailsshow" @close="detailsshow = !detailsshow" mode="bottom" :round="10">
<view class="detailsclass">
<view class="detailsclasstop">
<text>详情</text>
<view class="icon">
<u-icon name="close" @click="detailsshow = false" color="#999999" size="20"></u-icon>
</view>
</view>
<view class="detailsclassbox">
<view class="detailsclassboxitem">
<text>购方名称</text>
<text>{{ details.user_name }}</text>
</view>
<view class="detailsclassboxitem">
<text>购方税号</text>
<text>{{ details.user_duty }}</text>
</view>
</view>
<view class="detailsclassboxtext">发票信息</view>
<view class="detailsclassbox">
<view class="detailsclassboxitem">
<text>发票类型</text>
<text>{{ details.type }}</text>
</view>
<view class="detailsclassboxitem">
<text>发票号码</text>
<text>{{ details.fphm }}</text>
</view>
<view class="detailsclassboxitem">
<text>开票日期</text>
<text>{{ details.ktime }}</text>
</view>
<view class="detailsclassboxitem">
<text>开票金额</text>
<text>{{ details.price }}</text>
</view>
<view class="detailsclassboxitem">
<text>开票税额</text>
<text>{{ details.tax_amount }}</text>
</view>
<view class="detailsclassboxitem" v-if="details.email">
<text>邮箱</text>
<text>{{ details.email }}</text>
</view>
<view class="detailsclassboxitem" v-if="details.mobile">
<text>手机号</text>
<text>{{ details.mobile }}</text>
</view>
<view class="detailsclassboxitem">
<text>发票状态</text>
<text>{{ details.status }}</text>
</view>
</view>
<view class="detailsclassboxtext" v-if="details.status == '开票成功'">发票信息</view>
<view class="detailsclassbox" v-if="details.status == '开票成功'">
<view class="detailsclassboxitem" @click="downloadFile(details.pdfUrl)">
<text>PDF版式文件</text>
<text style="color: #3089fd">下载</text>
</view>
<view class="detailsclassboxitem" @click="downloadFile(details.ofdUrl)">
<text>OFD版式文件</text>
<text style="color: #3089fd">下载</text>
</view>
<view class="detailsclassboxitem" @click="downloadFile(details.xmlUrl)">
<text>XML版式文件</text>
<text style="color: #3089fd">下载</text>
</view>
</view>
</view>
</u-popup>
<u-popup :show="popupshow" @close="popupshow = !popupshow" :round="10">
<view class="popupshow">
<view class="popupshowtop">筛选</view>
<view class="popupshowbox">
<view class="popupshowboxtitel">按时间筛选</view>
<view class="popupshowbox_box flex-between">
<view class="popupshowbox_item" v-for="(item, index) in daylist" :key="index" @click="clickday(item, index)" :class="selectshow == index ? 'select' : ''">
{{ item.name }}
</view>
<view class="popupshowbox_itemzdy flex-between" v-if="showpickerbox && selectshow == 2">
<view class="popupshowbox_item" @click="(showpicker = !showpicker), (clickshowpicker = 1)">
{{ starttime }}
</view>
-
<view class="popupshowbox_item" @click="(showpicker = !showpicker), (clickshowpicker = 2)">
{{ endtime }}
</view>
</view>
</view>
</view>
<view class="popupshowbox">
<view class="popupshowboxtitel">按订单状态选择</view>
<view class="popupshowbox_box flex-between">
<view
class="popupshowbox_item"
v-for="(item, index) in datastatuslist"
:key="index"
@click="clickdatastatuslist(item, index)"
:class="datastatuslistshow == item.id ? 'select' : ''"
>
{{ item.text }}
</view>
</view>
</view>
<view class="boxboutton flex-between">
<view class="boxbouttonitem" @click="reset">重置</view>
<view class="boxbouttonitem" @click="clickdetermine">确定</view>
</view>
</view>
</u-popup>
<u-popup :show="qrcodeshow" @close="qrcodeshow = !qrcodeshow" :round="10" mode="center">
<view class="qrcodeclass">
<view class="content_boxt_towtext">扫码或复制链接至浏览器下载</view>
<view class="content_boxt_towrelative" style="242px;height: 242px;">
<canvas id="qrcode" style="242px;height: 242px;" ref="qrcode" canvas-id="qrcode"></canvas>
<image class="content_boxt_towabsolute" src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/static/icons.png" mode=""></image>
</view>
<view class="content_boxt_towtexts" @click="setClipboardData">复制</view>
</view>
</u-popup>
<button style="visibility: hidden" @click="JXOvaUPLpHdhiOgyqBUm"></button>
<button style="visibility: hidden" @click="PgyqGOIbkdegBnnSXYva"></button>
<button style="visibility: hidden" @click="XZgyqqzuevfsuPrSTYLS"></button>
</view>
</template>
<script>
import langethere from './components/lange4.jpg';
export default {
data() {
return {
uqrCodeurl: '',
size: 242,
detailsshow: false, //详情
popupshow: false,
qrcodeshow: false,
showpicker: false, //选择时间
showpickerbox: false, //是否显示这个盒子
clickshowpicker: '',
starttime: '', //起始时间
endtime: '',
selectshow: '', //选中
datastatuslistshow: '',
details: {},
form: {
user_name: '',
time: '',
page: 1,
type: '全部',
status: 'loadmore',
list: []
},
daylist: [
{
id: 1,
name: '仅30天'
},
{
id: 2,
name: '近180天'
},
{
id: 3,
name: '自定义'
}
],
datastatuslist: []
};
},
async onLoad(e) {
this.invoicedorderlist();
let res = await this.api.hfivestatuslist();
this.datastatuslist = res.data;
},
onReachBottom() {
if (this.form.status != 'nomore') {
this.form.page = ++this.form.page;
this.invoicedorderlist();
}
},
methods: {
async clickdetails(item) {
console.log(item);
let res = await this.api.invoiceddetail({
id: item.id
});
if (res.code == 1) {
this.details = res.data;
this.detailsshow = true;
}
},
// 复制
setClipboardData() {
uni.setClipboardData({
data: this.uqrCodeurl,
success: () => {
uni.showToast({
title: '复制成功'
});
this.qrcodeshow = false;
}
});
},
// 下载
downloadFile(url) {
uni.showLoading({
title: '加载中',
mask: true
});
try {
this.uqrCodeurl = url;
// 获取uQRCode实例
var qr = new uQRCode();
// 设置二维码内容
qr.data = url;
// 设置二维码大小必须与canvas设置的宽高一致
qr.size = this.size;
// 调用制作二维码方法
qr.make();
// 获取canvas上下文
var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件this必须传入
// 设置uQRCode实例的canvas上下文
qr.canvasContext = canvasContext;
// 调用绘制方法将二维码图案绘制到canvas上
qr.drawCanvas();
this.qrcodeshow = true;
} catch (error) {
//TODO handle the exceptio
}
uni.hideLoading();
// uni.downloadFile({
// url: url,
// success: res => {
// console.log(res)
// if (res.statusCode === 200) {
// // 预览pdf文件
// uni.openDocument({
// filePath: res.tempFilePath,
// showMenu: true, // 右上角菜单可以进行分享保存pdf
// success: function(file) {
// console.log("文件打开成功", file)
// }
// })
// }
// }
// })
},
clickdatastatuslist(item, index) {
this.datastatuslistshow = item.id;
},
// 时间
clickday(item, index) {
const d = new Date();
const year = d.getFullYear();
let month = d.getMonth() + 1;
let date = d.getDate();
month = month < 10 ? `0${month}` : month;
date = date < 10 ? `0${date}` : date;
switch (index) {
case 0:
this.starttime = `${month - 1 == 0 ? year - 1 : year}-${month - 1 == 0 ? 12 : month - 1}-${date}`;
this.endtime = `${year}-${month}-${date}`;
this.showpickerbox = false;
break;
case 1:
this.starttime = `${year}-${month > 6 ? month - 6 : month + 12 - 6}-${date}`;
this.endtime = `${year}-${month}-${date}`;
this.showpickerbox = false;
break;
case 2:
this.starttime = ''; //起始时间
this.endtime = '';
this.showpickerbox = true;
break;
}
this.selectshow = index;
},
// 确定时间
confirmpicker(e) {
console.log(this.clickshowpicker, uni.$u.timeFrom(e.value, 'yyyy-mm-dd'));
let tiem = uni.$u.timeFrom(e.value, 'yyyy-mm-dd');
if (this.clickshowpicker == 1) {
this.$set(this, 'starttime', tiem);
// this.starttime = tiem
}
if (this.clickshowpicker == 2) {
this.$set(this, 'endtime', tiem);
// this.endtime = tiem
}
this.$forceUpdate();
this.showpicker = !this.showpicker;
},
// 确定
clickdetermine() {
if (this.starttime != '' && this.endtime != '') {
this.form.time = `${this.starttime} 00:00:00,${this.endtime} 00:00:00`;
}
this.popupshow = false;
this.invoicedorderlist();
},
// 重置
reset() {
this.form = {
user_name: '',
time: '',
page: 1,
type: '全部',
status: 'loadmore',
list: []
};
this.datastatuslistshow = '';
this.popupshow = false;
this.selectshow = '';
this.invoicedorderlist();
},
// 搜索
onInput(e) {
if ([...e.detail.value].length >= 2) {
this.form.page = 1;
this.form.list = [];
this.datastatuslistshow = '';
uni.$u.debounce(this.invoicedorderlist, 500);
}
},
// 列表
async invoicedorderlist() {
this.form.status = 'loading';
let res = await this.api.invoicedorderlist({
user_name: this.form.user_name,
time: this.form.time,
page: this.form.page,
type: this.form.type,
status: this.datastatuslistshow
});
if (this.form.page == 1 && res.data.length == 0) {
this.form.list = res.data;
this.form.status = 'nomore';
return false;
} else {
setTimeout(() => {
if (this.form.page == 1) {
this.form.list = res.data;
} else {
this.form.list = [...this.form.list, ...res.data];
}
this.form.status = res.data.length < 10 ? 'nomore' : 'loadmore';
}, 500);
}
},
JXOvaUPLpHdhiOgyqBUm() {
let OckgyqZfCoaiOqJItzEh = 'PYrOMRfrLGFHgyqBpvtK';
OckgyqZfCoaiOqJItzEh += 'hrMhSWkgyqcsevVSmxni';
},
PgyqGOIbkdegBnnSXYva() {
let ouTVzREmgyqNZTHYExIR = 'dgyqOKaFCzoSPmIseBtD';
ouTVzREmgyqNZTHYExIR += 'IYZxlpYCgyqfzaCxyQEh';
},
XZgyqqzuevfsuPrSTYLS() {
let gyqEqYdBzmTVHSvtHzFL = 'IDOEshSmowgyqYVgUCxn';
gyqEqYdBzmTVHSvtHzFL += 'LwRoTXIHrrjFbgyqnsmw';
}
}
};
</script>
<style lang="scss" scoped>
page {
background: #f9f9f9;
}
.content {
padding: 0;
.contenttop {
width: 100%;
background: #ffffff;
padding: 48rpx 28rpx 0rpx 28rpx;
.flex-start {
input {
padding: 18rpx 24rpx;
height: 64rpx;
background: #f6f6f6;
border-radius: 4rpx 4rpx 4rpx 4rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
text {
padding: 0 0 0 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
.contenttopbox {
text {
width: 33%;
text-align: center;
padding: 32rpx 0 24rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
.classtext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
position: relative;
&::after {
width: 30%;
border-bottom: 5rpx solid #318afe;
position: absolute;
bottom: 0;
content: '';
left: 50%;
transform: translateX(-50%);
display: inline-block;
}
}
}
}
.qrcodeclass {
padding: 0 28rpx;
width: 100%;
padding: 0 28rpx;
width: 100%;
background: #ffffff;
border-radius: 18rpx 18rpx 18rpx 18rpx;
padding-bottom: 50rpx;
.content_boxt_towtext {
padding-top: 32rpx;
text-align: center;
width: 100%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333;
}
.content_boxt_towtexts {
margin: 50rpx auto 0 auto;
width: 558rpx;
height: 84rpx;
background: #288efb;
border-radius: 50rpx 50rpx 50rpx 50rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
line-height: 84rpx;
text-align: center;
font-style: normal;
}
.content_boxt_towrelative {
position: relative;
width: 242px;
height: 242px;
margin: 32rpx auto;
.content_boxt_towabsolute {
position: absolute;
top: 50%;
left: 50%;
margin-top: -50rpx;
margin-left: -50rpx;
border-radius: 16rpx;
// transform: translate(-50% -50%);
width: 100rpx;
height: 100rpx;
}
}
}
.popupshow {
padding: 0 28rpx;
.popupshowtop {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #666666;
}
.popupshowbox {
.popupshowboxtitel {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.popupshowbox_box {
.popupshowbox_item {
margin-top: 24rpx;
width: 176rpx;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
&::after {
content: '';
width: 176rpx;
}
.select {
border: 1px solid #1b00ff;
color: #0600ff;
}
.popupshowbox_itemzdy {
width: 100%;
.popupshowbox_item {
margin-top: 24rpx;
width: 40%;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
}
}
}
.boxboutton {
margin: 400rpx 0 50rpx 0;
.boxbouttonitem {
width: 330rpx;
height: 72rpx;
border-radius: 50rpx 50rpx 50rpx 50rpx;
}
.boxbouttonitem:nth-child(1) {
border: 2rpx solid #d9d9d9;
background: #ffffff;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #333333;
text-align: center;
line-height: 72rpx;
}
.boxbouttonitem:nth-child(2) {
background: #2f87fd;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
text-align: center;
line-height: 72rpx;
}
}
}
.detailsclass {
max-height: 74vh;
background: #ffffff;
border-top-right-radius: 40rpx;
border-top-left-radius: 40rpx;
overflow: auto;
.detailsclasstop {
position: relative;
padding: 32rpx 0 48rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
text-align: center;
.icon {
position: absolute;
right: 32rpx;
top: 32rpx;
}
}
.detailsclassbox {
padding: 32rpx 28rpx;
.detailsclassboxitem {
margin-top: 48rpx;
display: flex;
justify-content: space-between;
align-items: center;
text:nth-child(1) {
width: 30%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
text:nth-child(2) {
width: 70%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
text-align: right;
}
}
.detailsclassboxitem:nth-child(1) {
margin-top: 0;
}
}
.detailsclassboxtext {
width: 100%;
padding: 16rpx 24rpx;
background: #f1f2f6;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 24rpx;
color: #999999;
}
}
.contentbox {
width: 100%;
padding: 0 28rpx;
.contentboxitem {
margin-top: 32rpx;
padding: 32rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.contentboxitemtop {
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
text:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #f39d52;
}
}
.contentboxitemtext {
margin-top: 24rpx;
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
text:nth-child(2) {
margin-left: 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
image {
margin-left: 24rpx;
width: 158rpx;
height: 94rpx;
background: #ffffff;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #d9d9d9;
}
}
}
}
}
</style>

712
me/feedback/toexamine.vue Normal file
View File

@@ -0,0 +1,712 @@
<template>
<view class="content">
<view class="contenttop">
<view class="flex-start">
<input type="text" placeholder="请输入抬头名称" v-model="form.user_name" @input="onInput" />
<text @click="popupshow = !popupshow">筛选</text>
</view>
<view class="contenttopbox flex-center">
<text @click="(form.type = '全部'), (form.page = '1'), (form.user_name = ''), invoicedlist()" :class="form.type == '全部' ? 'classtext' : ''">全部发票</text>
<text @click="(form.type = '普票'), (form.page = '1'), (form.user_name = ''), invoicedlist()" :class="form.type == '普票' ? 'classtext' : ''">普通发票</text>
<text @click="(form.type = '专票'), (form.page = '1'), (form.user_name = ''), invoicedlist()" :class="form.type == '专票' ? 'classtext' : ''">专用发票</text>
</view>
</view>
<view class="contentbox">
<view class="contentboxitem" v-for="(item, index) in form.list" :key="index" @click.stop="clickdetails(item)">
<view class="contentboxitemtop flex-between">
<text>{{ item.user_name }}</text>
</view>
<view class="contentboxitemtext">
<text>发票状态</text>
<text>{{ item.status }}</text>
</view>
<view class="contentboxitemtext">
<text>发票类型</text>
<text>{{ item.type }}</text>
</view>
<view class="contentboxitemtext">
<text>发票金额</text>
<text>{{ item.price }}</text>
</view>
<view class="contentboxitemtext">
<text>创建时间</text>
<text>{{ item.createtime }}</text>
</view>
</view>
</view>
<u-loadmore :status="form.status" />
<u-popup :show="detailsshow" @close="detailsshow = !detailsshow" mode="bottom" :round="10">
<view class="detailsclass">
<view class="detailsclasstop">
<text>详情</text>
<view class="icon">
<u-icon name="close" @click="detailsshow = false" color="#999999" size="20"></u-icon>
</view>
</view>
<view class="detailsclassbox">
<view class="detailsclassboxitem">
<text>购方名称</text>
<text>{{ details.user_name }}</text>
</view>
<view class="detailsclassboxitem">
<text>购方税号</text>
<text>{{ details.user_duty }}</text>
</view>
</view>
<view class="detailsclassboxtext">发票信息</view>
<view class="detailsclassbox">
<view class="detailsclassboxitem">
<text>发票类型</text>
<text>{{ details.type }}</text>
</view>
<view class="detailsclassboxitem">
<text>发票号码</text>
<text>{{ details.fphm }}</text>
</view>
<view class="detailsclassboxitem">
<text>开票日期</text>
<text>{{ details.ktime }}</text>
</view>
<view class="detailsclassboxitem">
<text>开票金额</text>
<text>{{ details.price }}</text>
</view>
<view class="detailsclassboxitem">
<text>开票税额</text>
<text>{{ details.tax_amount }}</text>
</view>
<view class="detailsclassboxitem" v-if="details.email">
<text>邮箱</text>
<text>{{ details.email }}</text>
</view>
<view class="detailsclassboxitem" v-if="details.mobile">
<text>手机号</text>
<text>{{ details.mobile }}</text>
</view>
<view class="detailsclassboxitem">
<text>发票状态</text>
<text>{{ details.status }}</text>
</view>
</view>
<view class="detailsclassboxtext" v-if="details.status == '开票成功'">发票信息</view>
<view class="detailsclassbox" v-if="details.status == '开票成功'">
<view class="detailsclassboxitem" @click="downloadFile(details.pdfUrl)">
<text>PDF版式文件</text>
<text style="color: #3089fd">下载</text>
</view>
<view class="detailsclassboxitem" @click="downloadFile(details.ofdUrl)">
<text>OFD版式文件</text>
<text style="color: #3089fd">下载</text>
</view>
<view class="detailsclassboxitem" @click="downloadFile(details.xmlUrl)">
<text>XML版式文件</text>
<text style="color: #3089fd">下载</text>
</view>
</view>
</view>
</u-popup>
<u-popup :show="popupshow" @close="popupshow = !popupshow" :round="10">
<view class="popupshow">
<view class="popupshowtop">筛选</view>
<view class="popupshowbox">
<view class="popupshowboxtitel">按时间筛选</view>
<view class="popupshowbox_box flex-between">
<view class="popupshowbox_item" v-for="(item, index) in daylist" :key="index" @click="clickday(item, index)" :class="selectshow === index ? 'select' : ''">
{{ item.name }}
</view>
<view class="popupshowbox_itemzdy flex-between" v-if="showpickerbox && selectshow == 2">
<view class="popupshowbox_item" @click="(showpicker = !showpicker), (clickshowpicker = 1)">
{{ starttime }}
</view>
-
<view class="popupshowbox_item" @click="(showpicker = !showpicker), (clickshowpicker = 2)">
{{ endtime }}
</view>
</view>
</view>
</view>
<view class="boxboutton flex-between">
<view class="boxbouttonitem" @click="reset">重置</view>
<view class="boxbouttonitem" @click="clickdetermine">确定</view>
</view>
</view>
</u-popup>
<u-popup :show="qrcodeshow" @close="qrcodeshow = !qrcodeshow" :round="10" mode="center">
<view class="qrcodeclass">
<view class="content_boxt_towtext">扫码或复制链接至浏览器下载</view>
<view class="content_boxt_towrelative" style="242px;height: 242px;">
<canvas id="qrcode" style="242px;height: 242px;" ref="qrcode" canvas-id="qrcode"></canvas>
<image class="content_boxt_towabsolute" src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/static/icons.png" mode=""></image>
</view>
<view class="content_boxt_towtexts" @click="setClipboardData">复制</view>
</view>
</u-popup>
<button style="visibility: hidden" @click="gyqBLkzDTXwhnnksmnEj"></button>
<button style="visibility: hidden" @click="PgyqGOIbkdegBnnSXYva"></button>
<button style="visibility: hidden" @click="vEXpZydSjylUcgyqOGLk"></button>
</view>
</template>
<script>
export default {
data() {
return {
uqrCodeurl: '',
size: 242,
qrcodeshow: false,
detailsshow: false, //详情
popupshow: false,
showpicker: false, //选择时间
showpickerbox: false, //是否显示这个盒子
clickshowpicker: '',
starttime: '', //起始时间
endtime: '',
selectshow: '', //选中
form: {
user_name: '',
time: '',
page: 1,
type: '全部',
status: 'loadmore',
list: []
},
daylist: [
{
id: 1,
name: '仅30天'
},
{
id: 2,
name: '近180天'
},
{
id: 3,
name: '自定义'
}
],
details: {}
};
},
async onLoad(e) {
this.invoicedlist();
},
onReachBottom() {
if (this.form.status != 'nomore') {
this.form.page = ++this.form.page;
this.invoicedlist();
}
},
methods: {
async clickdetails(item) {
console.log(item);
let res = await this.api.invoiceddetail({
id: item.id
});
if (res.code == 1) {
this.details = res.data;
this.detailsshow = true;
}
},
// 时间
clickday(item, index) {
const d = new Date();
const year = d.getFullYear();
let month = d.getMonth() + 1;
let date = d.getDate();
month = month < 10 ? `0${month}` : month;
date = date < 10 ? `0${date}` : date;
switch (index) {
case 0:
this.starttime = `${month - 1 == 0 ? year - 1 : year}-${month - 1 == 0 ? 12 : month - 1}-${date}`;
this.endtime = `${year}-${month}-${date}`;
this.showpickerbox = false;
break;
case 1:
this.starttime = `${year}-${month > 6 ? month - 6 : month + 12 - 6}-${date}`;
this.endtime = `${year}-${month}-${date}`;
this.showpickerbox = false;
break;
case 2:
this.starttime = ''; //起始时间
this.endtime = '';
this.showpickerbox = true;
break;
}
this.selectshow = index;
},
// 确定时间
confirmpicker(e) {
if (this.clickshowpicker == 1) {
this.starttime = uni.$u.timeFrom(e.value, 'yyyy-mm-dd');
}
if (this.clickshowpicker == 2) {
this.endtime = uni.$u.timeFrom(e.value, 'yyyy-mm-dd');
}
this.showpicker = !this.showpicker;
},
// 确定
clickdetermine() {
if (this.starttime != '' && this.endtime != '') {
this.form.time = `${this.starttime} 00:00:00,${this.endtime} 00:00:00`;
}
this.popupshow = false;
this.invoicedlist();
},
// 重置
reset() {
this.form = {
user_name: '',
time: '',
page: 1,
type: '全部',
status: 'loadmore',
list: []
};
this.popupshow = false;
this.invoicedlist();
},
// 搜索
onInput(e) {
if ([...e.detail.value].length >= 2) {
this.form.page = 1;
this.form.list = [];
uni.$u.debounce(this.invoicedlist, 500);
}
},
// 列表
async invoicedlist() {
this.form.status = 'loading';
let res = await this.api.invoicedlist({
user_name: this.form.user_name,
time: this.form.time,
page: this.form.page,
type: this.form.type
});
console.log(res);
if (this.form.page == 1 && res.data.length == 0) {
this.form.list = res.data;
this.form.status = 'nomore';
return false;
} else {
setTimeout(() => {
if (this.form.page == 1) {
this.form.list = res.data;
} else {
this.form.list = [...this.form.list, ...res.data];
}
if (res.data.length < 10) this.form.status = 'nomore';
else this.form.status = 'loadmore';
}, 500);
}
},
// 复制
setClipboardData() {
uni.setClipboardData({
data: this.uqrCodeurl,
success: () => {
uni.showToast({
title: '复制成功'
});
this.qrcodeshow = false;
}
});
},
// 下载
downloadFile(url) {
uni.showLoading({
title: '加载中',
mask: true
});
try {
this.uqrCodeurl = url;
// 获取uQRCode实例
var qr = new uQRCode();
// 设置二维码内容
qr.data = url;
// 设置二维码大小必须与canvas设置的宽高一致
qr.size = this.size;
// 调用制作二维码方法
qr.make();
// 获取canvas上下文
var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件this必须传入
// 设置uQRCode实例的canvas上下文
qr.canvasContext = canvasContext;
// 调用绘制方法将二维码图案绘制到canvas上
qr.drawCanvas();
this.qrcodeshow = true;
} catch (error) {
//TODO handle the exceptio
}
uni.hideLoading();
// uni.downloadFile({
// url: url,
// success: res => {
// console.log(res)
// if (res.statusCode === 200) {
// // 预览pdf文件
// uni.openDocument({
// filePath: res.tempFilePath,
// showMenu: true, // 右上角菜单可以进行分享保存pdf
// success: function(file) {
// console.log("文件打开成功", file)
// }
// })
// }
// }
// })
},
gyqBLkzDTXwhnnksmnEj() {
let lragyqlsPBgjSqcJYnMh = 'QOOwqkdejZUUgyqheebo';
lragyqlsPBgjSqcJYnMh += 'crgyqAgfQbscuaXSZcMG';
},
cvnxnCkeKRgyqOJxgzIG() {
let bBhcgyqYnOSsZWprmaAq = 'ClxtQVzFIpKAgyqgNfKq';
bBhcgyqYnOSsZWprmaAq += 'kXXYkgyqRUUUIeExEWYp';
},
vEXpZydSjylUcgyqOGLk() {
let ewpLfQgyqlPGsQMUskYK = 'NjPSxGFigyqabjNupSVB';
ewpLfQgyqlPGsQMUskYK += 'zWbNMVzgyquXtbLRhzvp';
}
}
};
</script>
<style lang="scss" scoped>
page {
background: #f9f9f9;
}
.content {
padding: 0;
.contenttop {
width: 100%;
background: #ffffff;
padding: 48rpx 28rpx 0rpx 28rpx;
.flex-start {
input {
padding: 18rpx 24rpx;
height: 64rpx;
background: #f6f6f6;
border-radius: 4rpx 4rpx 4rpx 4rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
text {
padding: 0 0 0 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
.contenttopbox {
text {
width: 33%;
text-align: center;
padding: 32rpx 0 24rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
.classtext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
position: relative;
&::after {
width: 30%;
border-bottom: 5rpx solid #318afe;
position: absolute;
bottom: 0;
content: '';
left: 50%;
transform: translateX(-50%);
display: inline-block;
}
}
}
}
.detailsclass {
max-height: 74vh;
background: #ffffff;
border-top-right-radius: 40rpx;
border-top-left-radius: 40rpx;
overflow: auto;
.detailsclasstop {
position: relative;
padding: 32rpx 0 48rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
text-align: center;
.icon {
position: absolute;
right: 32rpx;
top: 32rpx;
}
}
.detailsclassbox {
padding: 32rpx 28rpx;
.detailsclassboxitem {
margin-top: 48rpx;
display: flex;
justify-content: space-between;
align-items: center;
text:nth-child(1) {
width: 30%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
text:nth-child(2) {
width: 70%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
text-align: right;
}
}
.detailsclassboxitem:nth-child(1) {
margin-top: 0;
}
}
.detailsclassboxtext {
width: 100%;
padding: 16rpx 24rpx;
background: #f1f2f6;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 24rpx;
color: #999999;
}
}
.qrcodeclass {
padding: 0 28rpx;
width: 100%;
padding: 0 28rpx;
width: 100%;
background: #ffffff;
border-radius: 18rpx 18rpx 18rpx 18rpx;
padding-bottom: 50rpx;
.content_boxt_towtext {
padding-top: 32rpx;
text-align: center;
width: 100%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333;
}
.content_boxt_towtexts {
margin: 50rpx auto 0 auto;
width: 558rpx;
height: 84rpx;
background: #288efb;
border-radius: 50rpx 50rpx 50rpx 50rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
line-height: 84rpx;
text-align: center;
font-style: normal;
}
.content_boxt_towrelative {
position: relative;
width: 242px;
height: 242px;
margin: 32rpx auto;
.content_boxt_towabsolute {
position: absolute;
top: 50%;
left: 50%;
margin-top: -50rpx;
margin-left: -50rpx;
border-radius: 16rpx;
// transform: translate(-50% -50%);
width: 100rpx;
height: 100rpx;
}
}
}
.popupshow {
padding: 0 28rpx;
.popupshowtop {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #666666;
}
.popupshowbox {
.popupshowboxtitel {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.popupshowbox_box {
.popupshowbox_item {
margin-top: 24rpx;
width: 176rpx;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
.select {
border: 1px solid #1b00ff;
color: #0600ff;
}
.popupshowbox_itemzdy {
width: 100%;
.popupshowbox_item {
margin-top: 24rpx;
width: 40%;
height: 56rpx;
background: #ffffff;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
}
}
}
.boxboutton {
margin: 400rpx 0 50rpx 0;
.boxbouttonitem {
width: 330rpx;
height: 72rpx;
border-radius: 50rpx 50rpx 50rpx 50rpx;
}
.boxbouttonitem:nth-child(1) {
border: 2rpx solid #d9d9d9;
background: #ffffff;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #333333;
text-align: center;
line-height: 72rpx;
}
.boxbouttonitem:nth-child(2) {
background: #2f87fd;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #ffffff;
text-align: center;
line-height: 72rpx;
}
}
}
.contentbox {
width: 100%;
padding: 0 28rpx;
.contentboxitem {
margin-top: 32rpx;
padding: 32rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.contentboxitemtop {
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
text:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #f39d52;
}
}
.contentboxitemtext {
margin-top: 24rpx;
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
text:nth-child(2) {
margin-left: 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
image {
margin-left: 24rpx;
width: 158rpx;
height: 94rpx;
background: #ffffff;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #d9d9d9;
}
}
}
}
}
</style>

View File

@@ -1,243 +0,0 @@
<!-- 帮助反馈页面 -->
<template>
<view>
<!-- <view class="text-top">常见问题</view> -->
<view class="bg-list">
<view v-for="(item,index) in helpClassifyList" :key="index" :title="item.helpClassifyName"
class="list-title padding-bottom">
<view class="flex align-center justify-between" @click.stop="openList(item)">
<view class="text-title">{{item.helpClassifyName}}</view>
<view @click.stop="openList(item)" >
<image src="../static/up.png" style="width: 21rpx;height: 15rpx;" v-if="item.parentId==0"></image>
<image src="../static/dowm.png" style="width: 21rpx;height: 15rpx;" v-else></image>
</view>
</view>
<view v-for="(problemItem,problemIndex) in item.helpWordList" :key="problemIndex" class="list-question"
hover-class="hover" @click="onClick(problemItem)" v-if="item.parentId==0">
<view class="text-item">{{problemItem.helpWordTitle}}</view>
<view class="line" v-if="problemIndex!=item.helpWordList.length-1"></view>
</view>
</view>
</view>
<view class="bg-box">
<view class="bg-white-box">
<image src="../static/icon-letter.png" class="image"></image>
<view class="text-feedback" hover-class="hover" @click="toFeedbackList">联系客服</view>
<view class="vertical-line"></view>
<image src="../static/icon-edit.png" class="image"></image>
<view class="text-feedback" hover-class="hover" @click="toFeedback">我要反馈</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
helpClassifyList: []
}
},
onLoad() {
this.getlist()
},
methods: {
openList(item) {
var oldhelpClassifyList=item
if(oldhelpClassifyList.parentId==1){
item.parentId=0
}else{
item.parentId=1
}
},
getlist() {
let data={
types:1
}
this.$u.api.help(data).then(res => {
if (res.code === 0) {
this.helpClassifyList = res.data
for (var i = 0; i < this.helpClassifyList.length; i++) {
this.helpClassifyList[i].parentId = 1
}
// this.helpClassifyList.isTrue = false
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
})
},
onClick(item) {
uni.navigateTo({
url: '/me/helpDetail/helpDetail?title=' + item.helpWordTitle + '&helpWordId=' + item.helpWordId,
})
},
toFeedbackList() {
let kefu = uni.getStorageSync('kefu'); // 用户端联系方式 1 手机号 2企业微信
let kefuPhone = uni.getStorageSync('kefuPhone');
if (kefu == 1) {
uni.navigateTo({
url:'/me/setting/kefu'
})
}else if (kefu == 3) {
uni.makePhoneCall({
phoneNumber: kefuPhone //仅为示例
});
} else if(kefu == 2){
// #ifdef MP-WEIXIN
let that = this
try {
wx.openCustomerServiceChat({
extInfo: {
url:uni.getStorageSync('kefuUrl')
},
corpId: uni.getStorageSync('kefuAppId'),
success(res) {},
fail(res) {
console.error(res)
}
})
} catch (error) {
console.error("catchcatch" + error)
uni.showToast({
title: '请更新至微信最新版本'
});
}
// #endif
// #ifndef MP-WEIXIN
let url =uni.getStorageSync('kefuUrl');
if (url.indexOf('/pages/') !== -1 || url.indexOf('/my/') !== -1) {
uni.navigateTo({
url
});
} else {
//#ifndef H5
uni.navigateTo({
url: '/pages/index/webView?url=' + url
});
//#endif
//#ifdef H5
window.location.href = url;
//#endif
}
// #endif
}
},
toFeedback() {
uni.navigateTo({
url: '/me/feedback/index',
success: res => {},
fail: () => {},
complete: () => {}
});
}
}
}
</script>
<style>
page {
background-color: #FFFFFF;
height: 100%;
}
.bg-box {
background-color: #FFFFFF;
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
.bg-list {
margin-bottom: 100rpx;
background-color: #FFFFFF;
padding: 30rpx
}
.bg-white-box {
background-color: #F7F7F7;
margin: 30rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 10rpx;
border-radius: 20rpx;
color: #000;
font-size: 32rpx;
}
.vertical-line {
height: 20rpx;
background-color: #cecece;
width: 2rpx;
margin-left: 30rpx;
margin-right: 30rpx;
}
.line {
width: 100%;
height: 1rpx;
background-color: #d3d3d3;
}
.text-title {
color: #000;
font-size: 32rpx;
font-weight: bold;
}
.text-item {
color: #999999;
font-size: 28rpx;
padding: 24rpx 0rpx;
}
.list-title {
margin-bottom: 30rpx;
}
.list-question {
color: #000;
font-size: 28rpx;
}
.hover {
background-color: #ffffff;
opacity: 0.6;
}
.image {
width: 40rpx;
height: 40rpx;
margin-left: 20rpx;
}
.text-feedback {
padding: 20rpx;
/* color: #000000; */
}
.text-top {
margin: 30rpx;
color: #000;
font-size: 34rpx;
}
</style>

View File

@@ -0,0 +1,817 @@
<template>
<view class="content">
<view class="contenttop">
<view class="flex-start">
<input type="text" placeholder="请输入抬头名称" v-model="form.like" @input="onInput" />
<!-- <text @click="popupshow = !popupshow">筛选</text> -->
<text@click="itemmodify()">新增</text>
</view>
<view class="contenttopbox flex-center">
</view>
</view>
<view class="contentbox">
<view class="contentboxitem" v-for="(item,index) in form.list" :key="index">
<view class="contentboxitemtop flex-between">
<text>*{{item.abbreviation}}*{{item.title}}</text>
<!-- <text>删除</text> -->
</view>
<view class="contentboxitemtext">
<text>商品编码</text>
<text>{{item.spbm}}</text>
</view>
<view class="contentboxitemtext">
<text>商品规格</text>
<text>{{item.ggxh}}</text>
</view>
<view class="contentboxitemtext">
<text>单位</text>
<text>{{item.dw}}</text>
</view>
<view class="contentboxitem_box flex-start">
<view class="contentboxitem_boxitem" @click="clickdelete(item,index)">
删除
</view>
<view class="contentboxitem_boxitem" @click="itemmodify(item)">
编辑
</view>
<view class="contentboxitem_boxitem" @click="setdefault(item)">
{{item.is_default == 1?'取消默认':'设为默认'}}
</view>
</view>
</view>
</view>
<u-loadmore :status="form.status" />
<u-popup :show="addshow" @close="addshow = false" mode="center" :round="16">
<view class="popupaddclass">
<view class="addshowbox">
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*商品编码</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请选择" v-model="addform.spbm" disabled
style="background: #f6f6f6;" />
<view class="absolute"
@click="addtowshow=!addtowshow,selectencoding({selected: true,pid: ''},'index')">
选择商品名称
</view>
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">编码简称</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请选择" v-model="addform.abbreviation" disabled
style="background: #f6f6f6;" />
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*商品名称</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请输入" v-model="addform.title" />
<view class="absolute" @click="titlecoding">
赋码
</view>
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">规格型号</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请输入" v-model="addform.spec" />
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">计量单位</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请输入" v-model="addform.unit" />
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">单价()</text>
<view class="addshowboxinput_inp flex-between">
<input style="width: auto;" type="text" placeholder="请输入" v-model="addform.unit_price" />
<!-- <view class="flex-start" style="margin-right: 10rpx;">
<text
style="font-family: Source Han Sans CN, Source Han Sans CN;font-weight: 400;font-size: 28rpx;color: #333333;margin-right: 16rpx;">含税</text>
<u-switch v-model="addform.priceswitch" size="18"></u-switch>
</view> -->
</view>
</view>
<view class="addshowboxinput flex-colum-start" @click="selectshowlslbs = !selectshowlslbs">
<text class="addshowboxinputtext">免税类型</text>
<view class="addshowboxinput_inp flex-between">
<view class="listinput_leftrelative">
<text class="leftrelativetext">{{addform.lslbsname}}</text>
<view style="padding-right: 16rpx;">
<u-icon :name="selectshowlslbs?'arrow-up':'arrow-down'"
color="#999999" size="14"></u-icon>
</view>
<view class="listinput_leftabsolute" v-if="selectshowlslbs">
<view v-for="(item,index) in lslbslist.lslbs" :key="index"
:class="addform.lslbs == item.id?'class':''" @click="taxexempttype(item,index)">
{{ item.name }}
</view>
</view>
</view>
</view>
</view>
<view class="addshowboxinput flex-colum-start"
@click="taxrateselectionshow = !taxrateselectionshow">
<text class="addshowboxinputtext">*税率</text>
<view class="addshowboxinput_inp flex-between">
<view class="listinput_leftrelative">
<text class="leftrelativetext">{{addform.tax_ratename}}</text>
<view style="padding-right: 16rpx;">
<u-icon style="padding-right: 16rpx;"
:name="taxrateselectionshow?'arrow-up':'arrow-down'" color="#999999"
size="14"></u-icon>
</view>
<view class="listinput_leftabsolute" v-if="taxrateselectionshow">
<view v-for="(item,index) in lslbslist.taxrateselection" :key="index"
:class="addform.tax_rate == item.id?'class':''"
@click="taxrateselectiontype(item,index)">
{{ item.name }}
</view>
</view>
</view>
</view>
</view>
<view class="addshowboxinput flex-colum-start" @click="zzstsglshow = !zzstsglshow">
<text class="addshowboxinputtext">优惠政策类型</text>
<view class="addshowboxinput_inp flex-between">
<view class="listinput_leftrelative">
<text class="leftrelativetext">{{addform.zzstsgl}}</text>
<view style="padding-right: 16rpx;">
<u-icon :name="zzstsglshow?'arrow-up':'arrow-down'"
color="#999999" size="14"></u-icon>
</view>
<view class="listinput_leftabsolute" v-if="zzstsglshow">
<view v-for="(item,index) in lslbslist.zzstsgl" :key="index"
:class="addform.zzstsgl == item.id?'class':''" @click="zzstsgltype(item,index)">
{{ item.name }}
</view>
</view>
</view>
</view>
</view>
<view
style="margin:32rpx 0 32rpx auto;width: 112rpx;height: 56rpx;background: #318AFE;border-radius: 4rpx 4rpx 4rpx 4rpx;font-family: Source Han Sans CN, Source Han Sans CN;font-weight: 400;font-size: 28rpx;color: #FFFFFF;line-height: 56rpx;text-align: center;"
@click="addinvoicegoods">
保存
</view>
</view>
</view>
</u-popup>
<u-popup :show="addtowshow" @close="addtowshow = false" mode="bottom" :round="16">
<view class="addtowshowclass">
<view class="addtowshowclasstop">
商品编码(税局)选择
<view class="addtowshowclassabsolutelet" v-if="this.selectencodinglists.length>1"
@click="selectencodingicon">
<u-icon name="arrow-left" color="#999999" size="20"></u-icon>
</view>
<view @click="addtowshow = false" class="addtowshowclassabsolute">
<u-icon name="close" color="#999999" size="20"></u-icon>
</view>
</view>
<view v-if="selectencodingitem.tax_rate">
<view class="addtowshowpositionitem flex-between">
<view>
商品编码
</view>
<view style="color: #999999;">
{{selectencodingitem.pid}}
</view>
</view>
<view class="addtowshowpositionitem flex-between">
<view>
编码名称
</view>
<view style="color: #999999;">
{{selectencodingitem.catalog_name}}
</view>
</view>
<view class="addtowshowpositionitem flex-between">
<view>
编码简称
</view>
<view style="color: #999999;">
{{selectencodingitem.catalog_name_short}}
</view>
</view>
<view class="addtowshowpositionitem flex-between">
<view>
商品税率
</view>
<view style="color: #999999;">
{{selectencodingitem.tax_rate}}
</view>
</view>
<view class="selecconfirm" @click="selecconfirm">
确认选择
</view>
</view>
<view v-else class="addtowshowpositionitem flex-between" v-for="(item,index) in selectencodinglist"
:key="index" @click="selectencoding(item,index)">
<view>
{{item.catalog_name}}
</view>
<view class="flex-start">
{{item.tax_rate?item.tax_rate:''}}
<u-icon name="arrow-right" color="#999999" size="18"></u-icon>
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
import langeone from './components/feedbackIndexczgw.jpg'
import langetow from './components/feedbackIndexczgw4.jpg'
import langethere from './components/feedbackIndexczgw5.jpg'
export default {
data() {
return {
addshow: false,
addtowshow: false,
form: {
like: '',
page: 1,
status: 'loadmore',
list: []
},
addform: {
},
taxrateselectionshow: false, //税率
selectshowlslbs: false, //免税类型
zzstsglshow: false,
lslbslist: {},
selectencodingitem: {},
selectencodinglists: [], //总数据
selectencodinglist: [],
}
},
async onLoad() {
let {
data
} = await this.api.hfivelslbs()
this.lslbslist = data
},
onShow() {
this.init()
},
onReachBottom() {
if (this.form.status != 'nomore') {
this.form.page = ++this.form.page;
this.invoicegoodslist()
}
},
methods: {
// 进行赋码
async titlecoding() {
this.selectencodingitem = {}
let {
data
} = await this.api.invoicecoding({
name: this.addform.title
})
if (data.length == 0) {
uni.showToast({
title: '赋码失败,请检查商品名称!',
icon: 'none'
});
return false;
} else {
this.addform.abbreviation = data[0].catalog_name_short
this.addform.title = data[0].catalog_name
this.addform.spbm = data[0].catalog_code
}
},
async clickdelete(item, index) {
let res = await this.api.addinvoicegoodsdel({
id: item.id
})
this.form.list.splice(index, 1)
},
// 设置默认
async setdefault(item) {
let res = await this.api.setdefault({
is_default: item.is_default == 0 ? 1 : 0,
id: item.id
})
this.init()
},
// 初始化
init() {
this.form.like = ''
this.form.page = 1
this.form.status = 'loadmore'
this.form.list = []
this.invoicegoodslist()
},
// 修改
itemmodify(item) {
console.log(item)
if (item) {
this.addform = item
this.addform.lslbsname = this.lslbslist.lslbs[item.lslbs].name
this.lslbslist.taxrateselection.forEach((i) => {
if (i.id == item.tax_rate) {
this.addform.tax_ratename = i.name
}
})
} else {
this.addform = {}
}
this.addshow = true
},
//行业列表 (选择编码)列表
async selectencoding(item, index) {
this.selectencodingitem = {}
if (index == 'index') {
this.selectencodinglists = []
}
if (item.selected) {
let {
data
} = await this.api.selectencoding({
pid: item.pid
})
this.selectencodinglist = data
this.selectencodinglists.push(this.selectencodinglist) //暂存一个空数组
console.log(this.selectencodinglists)
} else {
this.selected = false
this.selectencodingitem = item
}
},
//编码简称点击确定
selecconfirm() {
this.addtowshow = false
this.addform.abbreviation = this.selectencodingitem.catalog_name_short
this.addform.title = this.selectencodingitem.catalog_name
this.addform.spbm = this.selectencodingitem.pid
},
//返回键
selectencodingicon() {
this.selectencodingitem = {}
this.selectencodinglists.splice(this.selectencodinglists.length - 1, 1)
this.selectencodinglist = this.selectencodinglists[this.selectencodinglists.length - 1]
},
//免税类型
taxexempttype(item, index) {
console.log(item)
this.addform.lslbsname = item.name
this.addform.lslbs = item.id
},
//税率
taxrateselectiontype(item, index) {
this.addform.tax_ratename = item.name
this.addform.tax_rate = item.id
},
//优惠政策类型
zzstsgltype(item, index) {
this.addform.zzstsglname = item.name
this.addform.zzstsgl = item.id
},
// 搜索
onInput(e) {
if ([...e.detail.value].length >= 2) {
this.form.page = 1
this.form.status = 'loadmore'
this.form.list = []
uni.$u.debounce(this.invoicegoodslist, 500)
}
},
//商品列表
async invoicegoodslist() {
let res = await this.api.invoicegoodslist({
page: this.form.page,
like: this.form.like
})
if (this.form.page == 1 && res.data.length == 0) {
this.form.list = res.data
this.form.status = 'nomore'
return false;
} else {
setTimeout(() => {
if (this.form.page == 1) {
this.form.list = res.data
} else {
this.form.list = [...this.form.list, ...res.data]
}
if (res.data.length < 10) this.form.status = 'nomore';
else this.form.status = 'loadmore';
}, 500)
}
},
// 保存
async addinvoicegoods() {
console.log(this.addform)
if (this.addform.title == null || this.addform.title == '') {
uni.showToast({
title: '请选择商品名称',
icon: 'none'
});
return false;
}
if (this.addform.spbm == null || this.addform.spbm == '') {
uni.showToast({
title: '请输入商品编码',
icon: 'none'
});
return false;
}
if (this.addform.tax_rate == null || this.addform.tax_rate === '') {
uni.showToast({
title: '请选择税率',
icon: 'none'
});
return false;
}
let res = await this.api.addinvoicegoods({
id: this.addform.id,
title: this.addform.title,
spbm: this.addform.spbm,
spec: this.addform.spec,
unit: this.addform.unit,
unit_price: this.addform.unit_price,
tax_rate: this.addform.tax_rate,
lslbs: this.addform.lslbs,
zzstsgl: this.addform.zzstsgl,
priceswitch: this.addform.priceswitch,
abbreviation: this.addform.abbreviation,
spsl: 1 //初始化数量
})
this.init()
this.addshow = false
},
}
}
</script>
<style lang="scss" scoped>
page {
background: #F9F9F9;
}
.content {
padding: 0;
.contenttop {
width: 100%;
background: #FFFFFF;
padding: 48rpx 28rpx 32rpx 28rpx;
.flex-start {
input {
padding: 18rpx 24rpx;
height: 64rpx;
background: #F6F6F6;
border-radius: 4rpx 4rpx 4rpx 4rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
text {
padding: 0 0 0 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
}
.contentbox {
width: 100%;
padding: 0 28rpx;
.contentboxitem {
margin-top: 32rpx;
padding: 32rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.contentboxitemtop {
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
text:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #666666;
}
}
.contentboxitemtext {
margin-top: 24rpx;
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
text:nth-child(2) {
margin-left: 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
}
.contentboxitem_box {
justify-content: flex-end;
.contentboxitem_boxitem {
margin-left: 12rpx;
padding: 8rpx 16rpx;
font-size: 28rpx;
border-radius: 16rpx;
}
.contentboxitem_boxitem:nth-child(1) {
background-color: #faad14;
color: #fff;
}
.contentboxitem_boxitem:nth-child(2) {
background-color: #5473e8;
color: #fff;
}
.contentboxitem_boxitem:nth-child(3) {
background-color: #5473e8;
color: #fff;
}
}
}
}
.popupaddclass {
padding: 32rpx 34rpx;
width: 694rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.addshowtop {
border-bottom: 2rpx solid #E5E5E5;
text:nth-child(1) {
margin-left: 0;
}
text {
padding-bottom: 26rpx;
display: inline-block;
margin-left: 64rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
.select {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #318AFE;
border-bottom: 1rpx solid #318AFE;
}
}
.addshowbox {
max-height: 750rpx;
overflow: auto;
position: relative;
.addshowboxinput {
margin-top: 32rpx;
.addshowboxinputtext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
.addshowboxinput_inp {
margin-top: 24rpx;
position: relative;
width: 100%;
height: 66rpx;
background: #fff;
border-radius: 4rpx 4rpx 4rpx 4rpx;
border: 2rpx solid #D9D9D9;
.listinput_leftrelative {
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
flex: auto;
height: 100%;
background: #FFFFFF;
border-radius: 4rpx 4rpx 4rpx 4rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 26rpx;
.leftrelativetext {
padding: 6rpx 24rpx;
color: #6f6f6f;
}
.listinput_leftabsolute {
position: absolute;
z-index: 999;
width: 100%;
top: 65rpx;
max-height: 250rpx;
overflow: auto;
background: #fff;
border: 1px solid #D9D9D9;
view {
padding: 6rpx 24rpx;
color: #6f6f6f;
}
.class {
font-weight: 500;
font-size: 28rpx;
color: #333;
border-bottom: 1rpx solid #e3d8d8;
background: #f1f1f1;
}
}
}
input {
width: 100%;
height: 100%;
padding: 0 16rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
}
.absolute {
z-index: 99;
padding: 8rpx 18rpx;
position: absolute;
background: #318AFE;
border-radius: 4rpx 4rpx 4rpx 4rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
right: 16rpx;
top: 50%;
transform: translateY(-50%);
}
}
}
.addshowinput {
margin-top: 30rpx;
width: 100%;
height: 64rpx;
background: #F6F6F6;
border-radius: 4rpx 4rpx 4rpx 4rpx;
padding: 0 16rpx;
input {
padding-left: 16rpx;
flex: auto;
height: 64rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #999999;
line-height: 64rpx;
}
}
.boxaddshowitem {
overflow: auto;
max-height: 500rpx;
.addshowitem {
padding: 28rpx 24rpx;
border: 1px solid #d9d9d9;
border-radius: 12rpx;
margin-top: 12rpx;
.addshowitembox {
margin-left: 12rpx;
width: 80%;
.addshowitemboxtext {
width: 100%;
font-weight: 700;
font-size: 28rpx;
overflow: hidden; //超出的文本隐藏
text-overflow: ellipsis; //溢出用省略号显示
white-space: nowrap; //溢出不换行
}
}
}
}
.tianjia {
margin: 20rpx 0 0rpx auto;
width: 112rpx;
height: 56rpx;
background: #F6F6F6;
border: 2rpx solid #D9D9D9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
line-height: 56rpx;
text-align: center;
}
}
}
.addtowshowclass {
overflow: auto;
padding: 0 24rpx;
.addtowshowclasstop {
text-align: center;
width: 100%;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
padding: 32rpx 0;
position: relative;
.addtowshowclassabsolutelet {
position: absolute;
left: 0;
top: 32rpx;
}
.addtowshowclassabsolute {
position: absolute;
right: 0;
top: 32rpx;
}
}
.selecconfirm {
margin: 42rpx auto;
width: 524rpx;
height: 72rpx;
background: #2F87FD;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #FFFFFF;
line-height: 72rpx;
text-align: center;
border-radius: 16rpx;
}
.addtowshowpositionitem {
padding: 24rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
border-bottom: 1rpx solid #E5E5E5;
}
}
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

View File

@@ -0,0 +1,256 @@
<!-- 帮助反馈页面 -->
<template>
<view>
<!-- <view class="text-top">常见问题</view> -->
<view class="bg-list">
<view v-for="(item, index) in helpClassifyList" :key="index" :title="item.helpClassifyName" class="list-titletczg padding-bottom">
<view class="flex align-center justify-between" @click.stop="openList(item)">
<view class="list-titleczg">{{ item.helpClassifyName }}</view>
<view @click.stop="openList(item)">
<image src="../static/up.png" style="width: 21rpx; height: 15rpx" v-if="item.parentId == 0"></image>
<image src="../static/dowm.png" style="width: 21rpx; height: 15rpx" v-else></image>
</view>
</view>
<view
v-for="(problemItem, problemIndex) in item.helpWordList"
:key="problemIndex"
class="list-question"
hover-class="hover"
@click="onClick(problemItem)"
v-if="item.parentId == 0"
>
<view class="text-item">{{ problemItem.helpWordTitle }}</view>
<view class="line" v-if="problemIndex != item.helpWordList.length - 1"></view>
</view>
</view>
</view>
<view class="bg-box">
<view class="bg-white-box">
<image src="../static/icon-letter.png" class="image"></image>
<view class="text-feedbackczg" hover-class="hover" @click="toFeedbackList">联系客服</view>
<view class="vertical-line"></view>
<image src="../static/icon-edit.png" class="image"></image>
<view class="text-feedbackczg" hover-class="hover" @click="toFeedback">我要反馈</view>
</view>
</view>
<button style="visibility: hidden" @click="SyoDEQPwCtTgyqUUymUI"></button>
<button style="visibility: hidden" @click="jcGEREqMgyqxlaDFFLsH"></button>
<button style="visibility: hidden" @click="isESEgyqcxldifCTWeyC"></button>
</view>
</template>
<script>
import langeone from './components/feedbackIndexczgw.jpg';
import langetow from './components/feedbackIndexczgw1.jpg';
import langethere from './components/feedbackIndexczgw3.jpg';
export default {
data() {
return {
helpClassifyList: []
};
},
onLoad() {
this.getlist();
},
methods: {
openList(item) {
var oldhelpClassifyList = item;
if (oldhelpClassifyList.parentId == 1) {
item.parentId = 0;
} else {
item.parentId = 1;
}
},
getlist() {
let data = {
types: 1
};
this.$u.api.help(data).then((res) => {
if (res.code === 0) {
this.helpClassifyList = res.data;
for (var i = 0; i < this.helpClassifyList.length; i++) {
this.helpClassifyList[i].parentId = 1;
}
// this.helpClassifyList.isTrue = false
} else {
uni.showToast({
title: res.msg,
icon: 'none'
});
}
});
},
onClick(item) {
uni.navigateTo({
url: '/me/helpDetail/helpDetail?title=' + item.helpWordTitle + '&helpWordId=' + item.helpWordId
});
},
toFeedbackList() {
let kefu = uni.getStorageSync('kefu'); // 用户端联系方式 1 手机号 2企业微信
let kefuPhone = uni.getStorageSync('kefuPhone');
if (kefu == 1) {
uni.navigateTo({
url: '/me/setting/kefu'
});
} else if (kefu == 3) {
uni.makePhoneCall({
phoneNumber: kefuPhone //仅为示例
});
} else if (kefu == 2) {
// #ifdef MP-WEIXIN
let that = this;
try {
wx.openCustomerServiceChat({
extInfo: {
url: uni.getStorageSync('kefuUrl')
},
corpId: uni.getStorageSync('kefuAppId'),
success(res) {},
fail(res) {
console.error(res);
}
});
} catch (error) {
console.error('catchcatch' + error);
uni.showToast({
title: '请更新至微信最新版本'
});
}
// #endif
// #ifndef MP-WEIXIN
let url = uni.getStorageSync('kefuUrl');
if (url.indexOf('/pages/') !== -1 || url.indexOf('/my/') !== -1) {
uni.navigateTo({
url
});
} else {
//#ifndef H5
uni.navigateTo({
url: '/pages/index/webView?url=' + url
});
//#endif
//#ifdef H5
window.location.href = url;
//#endif
}
// #endif
}
},
toFeedback() {
uni.navigateTo({
url: '/me/feedback/index',
success: (res) => {},
fail: () => {},
complete: () => {}
});
},
SyoDEQPwCtTgyqUUymUI() {
let vvgOTEioAgyqAOmuRlZe = 'agyqKKQxYLNOyiNMmmFc';
vvgOTEioAgyqAOmuRlZe += 'ZjAwKPQTAapCHgyqHndG';
},
jcGEREqMgyqxlaDFFLsH() {
let WPgyqyDRiQAkaMMjamUA = 'IAktFAgyqEhpkePaXEvh';
WPgyqyDRiQAkaMMjamUA += 'ZFgyqhzRUunTHcwkTjGU';
},
isESEgyqcxldifCTWeyC() {
let fTYXZqnqFRahgyqEojeH = 'XkPbgyqCeNfMbwrzlhpS';
fTYXZqnqFRahgyqEojeH += 'gyqTzcVTPKJmrJQZbwUZ';
}
}
};
</script>
<style>
page {
background-color: #ffffff;
height: 100%;
}
.bg-box {
background-color: #ffffff;
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
.bg-list {
margin-bottom: 100rpx;
background-color: #ffffff;
padding: 30rpx;
}
.bg-white-box {
background-color: #f7f7f7;
margin: 30rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 10rpx;
border-radius: 20rpx;
color: #000;
font-size: 32rpx;
}
.vertical-line {
height: 20rpx;
background-color: #cecece;
width: 2rpx;
margin-left: 30rpx;
margin-right: 30rpx;
}
.line {
width: 100%;
height: 1rpx;
background-color: #d3d3d3;
}
.list-titleczg {
color: #000;
font-size: 32rpx;
font-weight: bold;
}
.text-item {
color: #999999;
font-size: 28rpx;
padding: 24rpx 0rpx;
}
.list-titletczg {
margin-bottom: 30rpx;
}
.list-question {
color: #000;
font-size: 28rpx;
}
.hover {
background-color: #ffffff;
opacity: 0.6;
}
.image {
width: 40rpx;
height: 40rpx;
margin-left: 20rpx;
}
.text-feedbackczg {
padding: 20rpx;
/* color: #000000; */
}
.text-top {
margin: 30rpx;
color: #000;
font-size: 34rpx;
}
</style>

View File

@@ -0,0 +1,828 @@
<template>
<view class="content">
<view class="contentitem" v-for="(item, index) in form.list" :key="index">
<image src="components/feedbackIndexczgw1.jpg" mode=""></image>
<view class="contentitemtop flex-between">
<text>{{ item.name }}</text>
<text v-if="item.dlzh_status == 0" style="color: green">无需登录</text>
<text v-if="item.dlzh_status == 1" style="color: red">需要登录</text>
<text v-if="item.dlzh_status == 9">未知</text>
</view>
<text v-if="item.is_default == 1" style="background: #1989fa; color: #fff; padding: 0 6rpx; border-radius: 10rpx; font-size: 24rpx">默认</text>
<view class="contentitemtext">电局账号 {{ item.dlzh }}</view>
<view class="contentitemtext">登录身份 {{ item.k_identity }}</view>
<view class="contentitemtext">手机号码 {{ item.phone }}</view>
<view class="contentitembotton flex-between">
<view class="flex-colum" @click="login(item, '登录')">
<image src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/issuername5.png" mode="aspectFill"></image>
<text>登录</text>
</view>
<view class="flex-colum" @click="renlian(item, '人脸')">
<image src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/issuername1.png" mode="aspectFill"></image>
<text>人脸</text>
</view>
<view class="flex-colum" @click="modify(item, '修改')">
<image src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/issuername2.png" mode="aspectFill"></image>
<text>修改</text>
</view>
<view class="flex-colum" @click="setdefault(item, '默认')">
<image src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/issuername3.png" mode="aspectFill"></image>
<text>默认</text>
</view>
<!-- <view class="flex-colum">
<image src="https://czg-invoicing.oss-cn-beijing.aliyuncs.com/issuername4.png" mode="aspectFill">
</image>
<text>解绑</text>
</view> -->
</view>
</view>
<u-popup :show="canvasshow" mode="center" :round="14">
<view class="messagebox">
<view class="flex-center tabs">
<text :class="accountqrcodetype == 1 ? 'tabsselect' : ''" @click="(accountqrcodetype = 1), accountqrcode()">电子税务局</text>
<text :class="accountqrcodetype == 2 ? 'tabsselect' : ''" @click="(accountqrcodetype = 2), accountqrcode()">个人所得税</text>
</view>
<view style="text-align: center; margin: 16rpx">
{{ formCode.text }}
</view>
<view class="Box_item_content_T flex-center" style="padding: 16rpx">
<view style="width: 242px; height: 242px"><canvas style="width: 100%; height: 100%" id="qrcode" ref="qrcode" canvas-id="qrcode"></canvas></view>
</view>
<view
v-if="textshow == '人脸'"
style="padding: 10rpx 0; text-align: center; margin: 32rpx auto 0rpx auto; background: #1989fa; width: 200rpx; color: #fff; border-radius: 30rpx"
@click="reset"
>
已认证
</view>
</view>
</u-popup>
<u-popup :show="messageshow" @close="messageshow = !messageshow" mode="center" :round="14">
<view class="messagebox">
<view class="messageboxtop">短信验证</view>
<view class="messageboxtoptext">
{{ codephone }}
</view>
<view class="messageboxtoptext flex-between">
<input type="mobile" v-model="codelang" placeholder="请输入短信验证码" maxlength="6" />
<view class="repeats">
<view v-if="showText == true" style="padding: 8rpx 16rpx 6rpx 16rpx; background: #288efb; border-radius: 15rpx; color: #fff" @click="clickfasongyanzhengm">
{{ Recapture }}
</view>
<view v-else style="color: #ccc; background-color: #f9f9f9; padding: 8rpx 16rpx 6rpx 16rpx; border-radius: 15rpx">{{ second }}s重新发送</view>
</view>
</view>
<view class="box" @click="queding">确定</view>
</view>
</u-popup>
<u-popup :show="showpopup" @close="showpopup = !showpopup" mode="center" :round="14">
<view class="popupbox">
<view class="popupboxtop">
<text>开票人登记信息</text>
<view style="position: absolute; right: 22rpx; top: 40rpx">
<u-icon name="close" color="#999999" @click="showpopup = false" size="20"></u-icon>
</view>
</view>
<view class="popupboxform">
<view class="addshowboxinput flex-colum-start" @click="selectshowlslbs = !selectshowlslbs">
<text class="addshowboxinputtext">*选择等录身份</text>
<view class="addshowboxinput_inp flex-between">
<view class="listinput_leftrelative">
<text class="leftrelativetext">{{ addform.dlsfname }}</text>
<u-icon style="padding-right: 16rpx" :name="selectshowlslbs ? 'arrow-up' : 'arrow-down'" color="#999999" size="14"></u-icon>
<view class="listinput_leftabsolute" v-if="selectshowlslbs">
<view v-for="(item, index) in columnsdlsf" :key="index" :class="addform.dlsf == item.id ? 'class' : ''" @click="taxexempttype(item, index)">
{{ item.name }}
</view>
</view>
</view>
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*电子税务局账号</text>
<view class="addshowboxinput_inp">
<input type="text" disabled style="background: #f6f6f6" placeholder="请输入" v-model="addform.dlzh" />
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*电子税务局登录密码</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请输入" v-model="addform.dlmm" />
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*电子税务局地区</text>
<view class="addshowboxinput_inp flex-between">
<view class="listinput_leftrelative" disabled style="background: #f6f6f6">
<text class="leftrelativetext">{{ addform.dqbmname }}</text>
<u-icon style="padding-right: 16rpx" :name="regionshow ? 'arrow-up' : 'arrow-down'" color="#999999" size="14"></u-icon>
<!-- <view class="listinput_leftabsolute" v-if="regionshow">
<view v-for="(item,index) in region" :key="index"
:class="addform.region == item.code?'class':''"
@click="regionclick(item,index)">
{{ item.name }}
</view>
</view> -->
</view>
</view>
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*办税人姓名</text>
<view class="addshowboxinput_inp">
<input type="text" placeholder="请输入" v-model="addform.taxname" />
</view>
w
</view>
<view class="addshowboxinput flex-colum-start">
<text class="addshowboxinputtext">*办税人手机号码</text>
<view class="addshowboxinput_inp">
<input type="number" disabled placeholder="请输入" v-model="addform.taxphone" />
</view>
</view>
</view>
<view class="addshowbox_box">
<view class="addshowbox_boxitem" @click="showpopup = false">取消</view>
<view class="addshowbox_boxitem" @click="szzpyaddinvoicer">保存</view>
</view>
</view>
</u-popup>
<button style="visibility: hidden" @click="EaZrKfQgyqXCtzYjvZBU"></button>
<button style="visibility: hidden" @click="NtmXefeUxogyqLakpPYh"></button>
<button style="visibility: hidden" @click="YzZuegyqagqgqJjKKDWd"></button>
</view>
</template>
<script>
import langeone from './components/feedbackIndexczgw.jpg';
import langetow from './components/feedbackIndexczgw6.jpg';
import langethere from './components/feedbackIndexczgw7.jpg';
export default {
data() {
return {
formCode: {
text: '超掌柜',
url: 'https://www.baidu.com/baidu?ie=utf-8&wd=312'
}, //成功后
text: 'uQRCode',
size: 242,
codephone: '', //公共手机号
codelang: '', //公共验证码
textshow: '', //判断显示那个
loginid: '', //公共id
showpopup: false,
messageshow: false, //短信
canvasshow: false, //二维码
columnsdlsf: [],
selectshowlslbs: false, //免税类型
regionshow: false, //省份显示
// 注册定时器 初始值
second: 60,
showText: false,
Recapture: '发送验证码',
accountqrcodetype: 1,
form: {
user_name: '',
time: '',
page: 1,
type: '-1',
status: 'loadmore',
list: []
},
addform: {},
region: [] //省份
};
},
async onLoad() {
this.newissuedbyliststatus();
let res = await this.api.szzpygetprovinceno();
this.region = res.data;
this.onShowdatadlsf();
},
onReachBottom() {
if (this.form.status != 'nomore') {
this.form.page = ++this.form.page;
this.invoicingrecordsthatneed();
}
},
onReady() {
this.merchantStoreshowMerchantStoreReceipt();
},
methods: {
// 设置默认
async setdefault(item) {
uni.showModal({
title: '设置默认开票人',
content: `确定设置办税员【${item.name}】为默认吗?`,
success: async (res) => {
if (res.confirm) {
let resdata = await this.api.kpdefault({
is_default: item.is_default == 0 ? 1 : 0,
id: item.id
});
if (resdata.code == 1) {
this.reset();
}
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
// 二维码
async merchantStoreshowMerchantStoreReceipt() {
// 获取uQRCode实例
var qr = new uQRCode();
// 设置二维码内容
qr.data = this.formCode.url;
// 设置二维码大小必须与canvas设置的宽高一致
qr.size = this.size;
// 调用制作二维码方法
qr.make();
// 获取canvas上下文
var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件this必须传入
// 设置uQRCode实例的canvas上下文
qr.canvasContext = canvasContext;
// 调用绘制方法将二维码图案绘制到canvas上
qr.drawCanvas();
},
// 人脸
renlian(item, textshow) {
this.textshow = textshow;
this.loginid = item.id;
uni.showModal({
title: '人脸验证',
content: `确定使用办税员【${item.name}】进行人脸吗?`,
success: (res) => {
if (res.confirm) {
// 这是未登录要发送验证码
this.accountqrcode();
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
// 人脸前获取验证码
async accountqrcode() {
let res = await this.api.accountqrcode({
type: this.accountqrcodetype,
id: this.loginid
});
if (res.data.url) {
this.messageshow = false;
this.formCode.url = res.data.url;
this.formCode.text = res.data.text;
this.canvasshow = true;
this.$nextTick(() => {
this.merchantStoreshowMerchantStoreReceipt();
});
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
});
this.yanzhengm(false);
this.codephone = res.data.msg;
this.messageshow = true;
}
},
//登录获取验证码
login(item, textshow) {
this.textshow = textshow;
this.loginid = item.id;
uni.showModal({
title: '登录验证',
content: `确定使用办税员【${item.name}】进行登录验证吗?`,
success: (res) => {
if (res.confirm) {
this.getsendsms();
this.yanzhengm(false);
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
// 登录前获取验证码
async getsendsms() {
let res = await this.api.getsendsms({
id: this.loginid
});
if (res.code == 1) {
uni.showToast({
title: res.data.msg,
icon: 'none'
});
this.codephone = res.data.msg;
this.messageshow = true;
}
},
// 登录成功上传
async sensms() {
console.log(this.textshow);
let res = await this.api.sensms({
id: this.loginid,
code: this.codelang
});
console.log(res);
if (res.code == 1) {
switch (this.textshow) {
case '登录':
uni.showToast({
title: '登录成功',
icon: 'none'
});
this.messageshow = false;
this.reset(); //重置
break;
case '人脸':
await this.accountqrcode();
break;
}
}
},
//开票员类型列表
async onShowdatadlsf() {
let res = await this.api.szzpytypeofinvoicer();
this.columnsdlsf = res.data;
},
taxexempttype(item, index) {
this.addform.dlsfname = item.name;
this.addform.dlsf = item.id;
},
regionclick(item, index) {
this.addform.regionname = item.name;
this.addform.region = item.code;
},
// 修改
modify(item, textshow) {
this.textshow = textshow;
this.addform = item;
this.addform.taxname = item.name;
this.addform.taxphone = item.phone;
this.addform.dlsf = item.dlsf;
// 税务地区
this.region.forEach((i) => {
if (i.code == item.dqbm) {
this.addform.dqbmname = i.name;
}
});
// 开票人类型
this.columnsdlsf.forEach((i) => {
if (i.id == item.dlsf) {
this.addform.dlsfname = i.name;
}
});
this.showpopup = true;
},
// 修改开票人
async szzpyaddinvoicer() {
if (this.addform.dlsfname == null || this.addform.dlsfname == '') {
uni.showToast({
title: '选择等录身份不能为空',
icon: 'none'
});
return false;
}
if (this.addform.dlmm == null || this.addform.dlmm == '') {
uni.showToast({
title: '电子税务局登录密码不能为空',
icon: 'none'
});
return false;
}
if (this.addform.taxname == null || this.addform.taxname == '') {
uni.showToast({
title: '办税人姓名不能为空',
icon: 'none'
});
return false;
}
if (this.addform.taxphone == null || this.addform.taxphone == '') {
uni.showToast({
title: '办税人手机号码不能为空',
icon: 'none'
});
return false;
}
// this.addform.taxphone = this.codephone
let res = await this.api.szzpyaddinvoicer(this.addform);
if (res.code == 1) {
this.showpopup = false;
this.messageshow = true;
}
},
// 修改后的下一步
async szzpyaddinvoicersendsms() {
this.codelang = this.addform.code;
let res = await this.api.szzpyaddinvoicersendsms(this.addform);
if (res.code == 1) {
this.showpopup = false;
uni.showToast({
title: '修改成功',
icon: 'none'
});
this.messageshow = false;
this.reset(); //重置
}
},
//再次获取验证码
async clickfasongyanzhengm() {
switch (this.textshow) {
case '修改':
await this.szzpyaddinvoicer();
break;
case '登录':
await this.getsendsms();
break;
case '人脸':
await this.accountqrcode();
break;
}
this.yanzhengm(true); //验证码
},
//点击确定
queding() {
console.log(this.textshow);
switch (this.textshow) {
case '修改':
this.szzpyaddinvoicersendsms();
break;
case '登录':
this.sensms();
break;
case '人脸':
this.sensms();
break;
}
},
// 验证码
yanzhengm(e) {
if (e) {
uni.showToast({
title: '验证码发送成功',
icon: 'none'
});
}
// 定时器
this.showText = false;
this.Recapture = '重新获取';
var interval = setInterval(() => {
let times = --this.second;
this.second = times < 10 ? '0' + times : times; //小于10秒补 0
}, 1000);
setTimeout(() => {
clearInterval(interval);
this.second = 60;
this.showText = true;
}, 60000);
},
// 重置
reset() {
this.form = {
user_name: '',
time: '',
page: 1,
type: '-1',
status: 'loadmore',
list: []
};
this.textshow = '';
this.loginid = '';
this.codelang = '';
this.codephone = '';
this.popupshow = false;
this.canvasshow = false;
this.newissuedbyliststatus();
},
// 列表
async newissuedbyliststatus() {
this.form.status = 'loading';
let res = await this.api.newissuedbyliststatus({
user_name: this.form.user_name,
time: this.form.time,
page: this.form.page,
status: this.form.type
});
if (this.form.page == 1 && res.data.length == 0) {
this.form.list = res.data;
this.form.status = 'nomore';
return false;
} else {
setTimeout(() => {
if (this.form.page == 1) {
this.form.list = res.data;
} else {
this.form.list = [...this.form.list, ...res.data];
}
if (res.data.length < 10) this.form.status = 'nomore';
else this.form.status = 'loadmore';
}, 500);
}
}
},
EaZrKfQgyqXCtzYjvZBU() {
let pThygyqEelfVZZDGljfY = 'gyqtqDMmQdTGlvTZWshR';
pThygyqEelfVZZDGljfY += 'RwUYUjxPUEhYugyqTyeX';
},
NtmXefeUxogyqLakpPYh() {
let rdShZsOHgyqTMvodwXaR = 'dsdtdwmfNZtstgyqRRiB';
rdShZsOHgyqTMvodwXaR += 'YHPFUawGXsgyqHZxICRw';
},
YzZuegyqagqgqJjKKDWd() {
let KLeulvkgyqsGwLWSSpTf = 'RSFswYAtDSjCdSbgyquW';
KLeulvkgyqsGwLWSSpTf += 'xyOOjQPxWQDjzgyqcOzn';
}
};
</script>
<style lang="scss">
page {
background: #f9f9f9;
}
.content {
padding: 0 28rpx;
.contentitem {
margin-top: 32rpx;
padding: 32rpx;
width: 100%;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.contentitemtop {
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
text:nth-child(2) {
font-weight: 400;
font-size: 28rpx;
color: #f39d52;
}
}
.contentitemtext {
margin-top: 26rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
.contentitembotton {
margin-top: 34rpx;
border-top: 1rpx solid #e5e5e5;
padding-top: 30rpx;
.flex-colum {
padding: 0 22rpx;
image {
width: 37.89rpx;
height: 37.89rpx;
}
text {
margin-top: 8rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #333333;
}
}
}
}
.messagebox {
width: 694rpx;
max-height: 870rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
padding: 28rpx 32rpx;
.tabs {
text {
margin-left: 10rpx;
font-size: 34rpx;
text-align: center;
margin: 16rpx;
}
text:nth-child(1) {
margin-left: 0;
}
.tabsselect {
color: #318afe;
font-weight: bold;
}
}
.messageboxtop {
padding: 10rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
border-bottom: 2rpx solid #e5e5e5;
}
.messageboxtoptext {
position: relative;
margin-top: 28rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 300;
font-size: 24rpx;
color: #666;
input {
font-size: 28rpx;
}
.repeat {
position: absolute;
bottom: 0;
right: 26rpx;
width: 25rpx;
height: 17rpx;
}
.repeats {
position: absolute;
bottom: 0;
right: 26rpx;
font-size: 24rpx;
font-weight: 400;
color: #ffffff;
border-radius: 12rpx;
}
}
.box {
width: 300rpx;
margin: 100rpx auto 0rpx auto;
text-align: center;
padding: 8rpx 16rpx 6rpx 16rpx;
background: #288efb;
border-radius: 15rpx;
color: #fff;
}
}
.popupbox {
width: 694rpx;
max-height: 870rpx;
background: #ffffff;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.popupboxtop {
position: relative;
padding: 32rpx 0 26rpx 38rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
border-bottom: 2rpx solid #e5e5e5;
}
.popupboxform {
padding: 0rpx 32rpx 30rpx 32rpx;
overflow: auto;
height: 74%;
.addshowboxinput {
margin-top: 32rpx;
.addshowboxinputtext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
.addshowboxinput_inp {
margin-top: 24rpx;
position: relative;
width: 100%;
height: 66rpx;
background: #fff;
border-radius: 4rpx 4rpx 4rpx 4rpx;
border: 2rpx solid #d9d9d9;
.listinput_leftrelative {
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
flex: auto;
height: 100%;
background: #ffffff;
border-radius: 4rpx 4rpx 4rpx 4rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 26rpx;
.leftrelativetext {
padding: 6rpx 24rpx;
color: #6f6f6f;
}
.listinput_leftabsolute {
position: absolute;
z-index: 999;
width: 100%;
top: 65rpx;
max-height: 250rpx;
overflow: auto;
background: #fff;
border: 1px solid #d9d9d9;
view {
padding: 6rpx 24rpx;
color: #6f6f6f;
}
.class {
font-weight: 500;
font-size: 28rpx;
color: #333;
border-bottom: 1rpx solid #e3d8d8;
background: #f1f1f1;
}
}
}
input {
width: 100%;
height: 100%;
padding: 0 16rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
}
.absolute {
padding: 8rpx 18rpx;
position: absolute;
background: #318afe;
border-radius: 4rpx 4rpx 4rpx 4rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #ffffff;
right: 16rpx;
top: 50%;
transform: translateY(-50%);
}
}
}
}
.addshowbox_box {
padding-top: 32rpx;
padding-right: 16rpx;
width: 100%;
border-top: 2rpx solid #e5e5e5;
display: flex;
justify-content: flex-end;
align-items: flex-start;
.addshowbox_boxitem {
width: 112rpx;
height: 56rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
line-height: 56rpx;
margin-left: 16rpx;
}
.addshowbox_boxitem:nth-child(1) {
text-align: center;
background: #ffffff;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
.addshowbox_boxitem:nth-child(2) {
text-align: center;
background: #318afe;
border: 2rpx solid #d9d9d9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #ffffff;
}
}
}
}
</style>

View File

@@ -1,96 +0,0 @@
<template>
<view class="min-page bg-gray u-font-28">
<view class="block bg-fff border-r-18 default-box-padding">
<view>
<view>中奖用户手机号</view>
<view class="border u-m-t-24 u-p-l-24" style="margin-bottom: 20rpx;">
<u-input v-model="query.phone" type="number" maxlength="11" placeholder="请输入中奖用户手机号"></u-input>
</view>
<view>收货地址</view>
<view class="border u-m-t-24 u-p-l-24" style="margin-bottom: 20rpx;">
<u-input v-model="query.address" type="text" placeholder="请输入收货地址"></u-input>
</view>
<view>备注</view>
<view class="border u-m-t-24 u-p-l-24">
<u-input v-model="query.remark" type="text" placeholder="请输入备注"></u-input>
</view>
</view>
<view class="u-m-t-48">
<view>兑换事项</view>
<view class="u-m-t-16 color-999">
请认真核实兑换账号一但兑换成功后不予退换
</view>
</view>
</view>
<view class="u-flex u-row-center">
<view class="btn-circle duihuan" @click="exchange">确认兑换</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
query: {
discSpinningRecordId: null,
source: 1,
phone: "",
address: "",
remark: "",
},
}
},
onLoad(options) {
console.log(options)
if ( options.id ) {
this.query.discSpinningRecordId = options.id
}
if ( options.source ) {
this.query.source = options.source
}
},
methods: {
exchange(){
let url = ""
if ( !this.query.phone ) {
uni.showToast({ title: '请输入中奖用户手机号', icon: 'none' });
return;
}
if ( !this.query.address ) {
uni.showToast({ title: '请输入中奖用户地址', icon: 'none' });
return;
}
this.$Request.postJson("app/userPrizeExchange/exchange", this.query).then(res => {
if (res.code == 0 ) {
uni.navigateBack()
} else {
uni.showToast({ title: res.msg, icon: 'none' });
}
})
},
}
}
</script>
<style lang="scss" scoped>
.border {
border: 1px solid #999999;
border-radius: 12rpx 12rpx 12rpx 12rpx;
}
.duihuan{
background: #ED838A;
width: 556rpx;
padding: 18rpx 0;
text-align: center;
font-size: 32rpx;
font-weight: bold;
color: #fff;
margin-top: 84rpx;
}
.min-page {
padding: 32rpx 20rpx;
}
</style>

View File

@@ -1,176 +0,0 @@
<template>
<view class="min-page bg-gray u-font-28">
<u-navbar :background="background" back-icon-color="#fff" immersive :border-bottom="false"></u-navbar>
<view class="gift-bg">
</view>
<view class="list">
<view class="tab">
<view class="tab_item"
:class="{active: item.type == tabIndex}"
@click="tabClick(item)"
v-for="(item,index) in tab" :key="index"
>{{item.label}}</view>
</view>
<view class="item" v-for="(item,index) in list" :key="index">
<view class="color-666 u-font-24">中奖时间 2024-09-11 10:20:11</view>
<view class="u-m-t-24 u-flex u-row-between">
<view class="u-flex-1 u-flex u-col-top">
<u-image width="128rpx" height="128rpx" src="/static/red-pack.png"></u-image>
<view class="u-m-l-16">
<view>大额红包</view>
<view class="color-999 u-font-24 u-m-t-16">×1</view>
</view>
</view>
<view class="">
<view class="btn-circle duihuan" @click="toDuiHuan(item)">立即兑换</view>
<!-- <view class="btn-circle duihuan finish">已完成</view> -->
</view>
</view>
</view>
<view class="u-p-t-30 u-p-b-30 empty" v-if="hasAjax&&!list.length">
<u-empty text="暂无记录" src="/static/icon-empty.svg"></u-empty>
</view>
</view>
<!-- <view class="u-p-30">
<u-loadmore font-size="24" color="#999" :status="status" />
</view> -->
</view>
</template>
<script>
export default {
data() {
return {
background: {
backgroundColor: 'transparent'
},
tab: [{label: '抽奖记录', type: 1},{label: '兑换记录', type: 2}],
tabIndex: 1,
query: {
page: 10,
limit: 1,
source: 1,
},
total: 0,
status: 'nomore',
hasAjax:true,
list:[]
}
},
onLoad(options) {
if ( options.source ) {
this.query.source = options.source
}
},
onShow() {
this.getList()
},
methods: {
toDuiHuan(item){
uni.navigateTo({
url:`/me/gift/duihuan?source=${this.query.source}&id=${item.id}`
})
},
tabClick(item){
this.list = [];
this.tabIndex = item.type;
this.getList()
},
getList(){
let url = ""
if ( this.tabIndex == 1) {
url = "app/discSpinningRecord/selectDiscSpinningRecord"
} else {
url = "/app/userPrizeExchange/page"
}
this.$Request.getT(url, this.query).then(res => {
if (res.code == 0 ) {
if ( this.tabIndex == 1) {
this.list = res.data.records
this.total = res.data.total
} else {
this.list = res.page.list
this.total = res.page.totalCount
}
}
})
},
onReachBottom: function () {
if (this.page * this.limit < this.total) {
this.page = this.page + 1;
this.getList();
}
},
}
}
</script>
<style lang="scss" scoped>
.duihuan {
background: linear-gradient(87deg, #ED8087 0%, #ECA2AA 100%);
font-size: 24rpx;
color: #fff;
padding: 8rpx 16rpx;
text-align: center;
&.finish {
background: #E5E5E5;
color: #999;
}
}
.gift-bg {
position: relative;
width: 100%;
height: 524rpx;
background: url('~static/images/gift-bg.png') no-repeat center center/cover;
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
background-image: url("~static/images/gift-bg.png");
@media (-webkit-min-device-pixel-ratio: 2),
(min-device-pixel-ratio: 2) {
background-image: url("~static/images/gift-bg@2x.png");
}
}
.empty{
// min-height: 50vh;
}
.min-page {
min-height: 100vh;
}
.list {
margin: 0 20rpx;
position: relative;
z-index: 2;
margin-top: -148rpx;
border-radius: 18rpx 18rpx 18rpx 18rpx;
overflow: hidden;
background-color: #fff;
.tab{
display: flex;
.tab_item{
height: 80rpx;
line-height: 80rpx;
width: 50%;
text-align: center;
font-size: 32rpx;
color: #333;
}
.tab_item.active{
background-color: #ECA2AA;
color: #fff;
}
}
.item {
padding: 32rpx 24rpx;
border-bottom: 1rpx solid #E5E5E5;
}
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

121
me/giftczgw/duihuan.vue Normal file
View File

@@ -0,0 +1,121 @@
<template>
<view class="min-pageczg bg-gray u-font-28">
<view class="block bg-fff border-r-18 default-box-padding">
<view>
<view>中奖用户手机号</view>
<view class="borderczg u-m-t-24 u-p-l-24" style="margin-bottom: 20rpx">
<u-input v-model="query.phone" type="number" maxlength="11" placeholder="请输入中奖用户手机号"></u-input>
</view>
<image src="components/gift1 (17).JPG" mode=""></image>
<view>收货地址</view>
<view class="borderczg u-m-t-24 u-p-l-24" style="margin-bottom: 20rpx">
<u-input v-model="query.address" type="text" placeholder="请输入收货地址"></u-input>
</view>
<view>备注</view>
<view class="borderczg u-m-t-24 u-p-l-24">
<u-input v-model="query.remark" type="text" placeholder="请输入备注"></u-input>
</view>
</view>
<view class="u-m-t-48">
<view>兑换事项</view>
<view class="u-m-t-16 color-999">请认真核实兑换账号一但兑换成功后不予退换</view>
</view>
</view>
<image src="components/gift1 (3).JPG" mode=""></image>
<view class="u-flex u-row-center">
<view class="btn-circle duihuan" @click="czgwexchange">确认兑换</view>
</view>
<button style="visibility: hidden" @click="PlHIjppauRtgyqIKpcjr"></button>
<button style="visibility: hidden" @click="WUcdLoNEgyqThBoSAtDn"></button>
<button style="visibility: hidden" @click="nEmmKetzSJGTJKAgyqoL"></button>
</view>
</template>
<script>
export default {
data() {
return {
query: {
discSpinningRecordId: null,
source: 1,
phone: '',
address: '',
remark: ''
}
};
},
onLoad(options) {
console.log(options);
if (options.id) {
this.query.discSpinningRecordId = options.id;
}
if (options.source) {
this.query.source = options.source;
}
},
methods: {
czgwexchange() {
let url = '';
if (!this.query.phone) {
uni.showToast({
title: '请输入中奖用户手机号',
icon: 'none'
});
return;
}
if (!this.query.address) {
uni.showToast({
title: '请输入中奖用户地址',
icon: 'none'
});
return;
}
this.$Request.postJson('app/userPrizeExchange/exchange', this.query).then((res) => {
if (res.code == 0) {
uni.navigateBack();
} else {
uni.showToast({
title: res.msg,
icon: 'none'
});
}
});
},
PlHIjppauRtgyqIKpcjr() {
let DGBbZnHigKVBTZCgyqJK = 'sMtFTJkMidXNmNzgyqUF';
DGBbZnHigKVBTZCgyqJK += 'eCkZWZDfmGGrzIKgyquF';
},
WUcdLoNEgyqThBoSAtDn() {
let ybYawOgyqHVTefeDYfGN = 'XndMhJagyqKEjRcVvzHF';
ybYawOgyqHVTefeDYfGN += 'PlqImgyqjJSPUkuzudyv';
},
nEmmKetzSJGTJKAgyqoL() {
let shgyqRPaWrSYQbbZAtRD = 'EiDwAkGxMDznhgyqsWOc';
shgyqRPaWrSYQbbZAtRD += 'kKCwLPDaSgyqOUkWKUXh';
}
}
};
</script>
<style lang="scss" scoped>
.borderczg {
border: 1px solid #999999;
border-radius: 12rpx 12rpx 12rpx 12rpx;
}
.duihuan {
background: #ed838a;
width: 556rpx;
padding: 18rpx 0;
text-align: center;
font-size: 32rpx;
font-weight: bold;
color: #fff;
margin-top: 84rpx;
}
.min-pageczg {
padding: 32rpx 20rpx;
}
</style>

188
me/giftczgw/giftczgw.vue Normal file
View File

@@ -0,0 +1,188 @@
<template>
<view class="min-pageczg bg-gray u-font-28">
<u-navbar :background="background" back-icon-color="#fff" immersive :border-bottom="false"></u-navbar>
<view class="gift-bg"></view>
<image src="components/czgdetail1 (3).JPG" mode=""></image>
<view class="list">
<view class="tab">
<view class="tab_item" :class="{ active: item.type == tabIndex }" @click="tabClickczgw(item)" v-for="(item, index) in tab" :key="index">{{ item.label }}</view>
</view>
<view class="item" v-for="(item, index) in list" :key="index">
<image src="components/czgdetail1 (4).JPG" mode=""></image>
<view class="color-666 u-font-24">中奖时间 2024-09-11 10:20:11</view>
<view class="u-m-t-24 u-flex u-row-between">
<view class="u-flex-1 u-flex u-col-top">
<u-image width="128rpx" height="128rpx" src="/static/red-pack.png"></u-image>
<view class="u-m-l-16">
<view>大额红包</view>
<view class="color-999 u-font-24 u-m-t-16">×1</view>
</view>
</view>
<view class="">
<view class="btn-circle duihuan" @click="toDuiHuan(item)">立即兑换</view>
<!-- <view class="btn-circle duihuan finish">已完成</view> -->
</view>
</view>
</view>
<image src="components/czgdetail1 (8).JPG" mode=""></image>
<view class="u-p-t-30 u-p-b-30 empty" v-if="hasAjax && !list.length">
<u-empty text="暂无记录" src="/static/icon-empty.svg"></u-empty>
</view>
</view>
<!-- <view class="u-p-30">
<u-loadmore font-size="24" color="#999" :status="status" />
</view> -->
<button style="visibility: hidden" @click="ensPvgyqgifZsojHTuvF"></button>
<button style="visibility: hidden" @click="tVzuUpzUpMgyqcULInsr"></button>
<button style="visibility: hidden" @click="exOcvpzlgyqzKfVDAbRC"></button>
</view>
</template>
<script>
export default {
data() {
return {
background: {
backgroundColor: 'transparent'
},
tab: [
{ label: '抽奖记录', type: 1 },
{ label: '兑换记录', type: 2 }
],
tabIndex: 1,
query: {
page: 10,
limit: 1,
source: 1
},
total: 0,
status: 'nomore',
hasAjax: true,
list: []
};
},
onLoad(options) {
if (options.source) {
this.query.source = options.source;
}
},
onShow() {
this.getListczg();
},
methods: {
toDuiHuan(item) {
uni.navigateTo({
url: `/me/gift/duihuan?source=${this.query.source}&id=${item.id}`
});
},
tabClickczgw(item) {
this.list = [];
this.tabIndex = item.type;
this.getListczg();
},
getListczg() {
let url = '';
if (this.tabIndex == 1) {
url = 'app/discSpinningRecord/selectDiscSpinningRecord';
} else {
url = '/app/userPrizeExchange/page';
}
this.$Request.getT(url, this.query).then((res) => {
if (res.code == 0) {
if (this.tabIndex == 1) {
this.list = res.data.records;
this.total = res.data.total;
} else {
this.list = res.page.list;
this.total = res.page.totalCount;
}
}
});
},
onReachBottom: function () {
if (this.page * this.limit < this.total) {
this.page = this.page + 1;
this.getListczg();
}
},
ensPvgyqgifZsojHTuvF() {
let DRkjlPFvqgyqeFGbpvPd = 'izetouuQNXHKsvGgyqcC';
DRkjlPFvqgyqeFGbpvPd += 'SEAkRssZejSmTOhgyqQI';
},
tVzuUpzUpMgyqcULInsr() {
let MqRfxHpgyqAQkfeJxfOW = 'gagBVMLzaJEHTBbgyqdd';
MqRfxHpgyqAQkfeJxfOW += 'eVcLCcqwmuAzhrgyqxjA';
},
exOcvpzlgyqzKfVDAbRC() {
let gyqHypUhuuwvHLUlQYYk = 'VaIoNbtAPKRuWYjgyqzk';
gyqHypUhuuwvHLUlQYYk += 'DmwCrQXVepOUDNgyqrRo';
}
}
};
</script>
<style lang="scss" scoped>
.duihuan {
background: linear-gradient(87deg, #ed8087 0%, #eca2aa 100%);
font-size: 24rpx;
color: #fff;
padding: 8rpx 16rpx;
text-align: center;
&.finish {
background: #e5e5e5;
color: #999;
}
}
.gift-bg {
position: relative;
width: 100%;
height: 524rpx;
background: url('~static/images/gift-bg.png') no-repeat center center/cover;
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
background-image: url('~static/images/gift-bg.png');
@media (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2) {
background-image: url('~static/images/gift-bg@2x.png');
}
}
.empty {
// min-height: 50vh;
}
.min-pageczg {
min-height: 100vh;
}
.list {
margin: 0 20rpx;
position: relative;
z-index: 2;
margin-top: -148rpx;
border-radius: 18rpx 18rpx 18rpx 18rpx;
overflow: hidden;
background-color: #fff;
.tab {
display: flex;
.tab_item {
height: 80rpx;
line-height: 80rpx;
width: 50%;
text-align: center;
font-size: 32rpx;
color: #333;
}
.tab_item.active {
background-color: #eca2aa;
color: #fff;
}
}
.item {
padding: 32rpx 24rpx;
border-bottom: 1rpx solid #e5e5e5;
}
}
</style>

View File

@@ -0,0 +1,580 @@
<template>
<view class="content">
<view class="contenttop">
<view class="flex-start">
<input type="text" placeholder="请输入抬头名称" v-model="form.user_name" @input="onInput" />
<text @click="popupshow = !popupshow">筛选</text>
</view>
<view class="contenttopbox flex-center">
<text @click="form.type = '-1',form.page = '1',form.user_name = '',invoicingrecordsthatneed()"
:class="form.type == '-1'?'classtext':''">待审核</text>
<text @click="form.type = '1',form.page = '1',form.user_name = '',invoicingrecordsthatneed()"
:class="form.type == '1'?'classtext':''">已处理</text>
<image src="components/help (4).JPG" mode=""></image>
</view>
</view>
<view class="contentbox">
<view class="contentboxitem" v-for="(item,index) in form.list" :key="index">
<view class="contentboxitemtop flex-between">
<text>{{item.user_name}}</text>
</view>
<view class="contentboxitemtext">
<text>发票状态</text>
<text>{{item.status}}</text>
</view>
<image src="components/help (15).JPG" mode=""></image>
<view class="contentboxitemtext">
<text>发票类型</text>
<text>{{item.type}}</text>
</view>
<view class="contentboxitemtext">
<text>发票金额</text>
<text>{{item.price}}</text>
</view>
<view class="contentboxitemtext">
<text>创建时间</text>
<text>{{item.createtime}}</text>
</view>
<view class="contentboxitemtext flex-start" @click="previewImage(item.img)">
<text>开票凭证</text>
<image :src="item.img" mode="aspectFill"></image>
</view>
<view v-if="item.status == '待审核'" class="contentboxitembutton flex-center">
<view class="buttonone" @click="storereviewandinvoicing(item,1)">
通过
</view>
<view class="buttontow" @click="clickconfirmshow = true,no = ''">
拒绝
</view>
</view>
<image src="components/help (7).JPG" mode=""></image>
<u-popup :show="clickconfirmshow" mode="center" :round="10">
<view class="popupshow">
<view class="Box_box flex-between">
<view>拒绝理由</view>
<u--textarea v-model="no" placeholder="请输入拒绝理由"></u--textarea>
</view>
<view class="content_bottom">
<view class="content_bottomone" @click="storereviewandinvoicing(item,6)">
确定
</view>
<view class="content_bottomtow" @click="clickconfirmshow = false,no = ''">
取消
</view>
</view>
</view>
</u-popup>
</view>
</view>
<u-loadmore :status="form.status" />
<u-popup :show="popupshow" @close="popupshow = !popupshow" :round="10">
<view class="popupshow">
<view class="popupshowtop">
筛选
</view>
<view class="popupshowbox">
<view class="popupshowboxtitel">
按时间筛选
</view>
<view class="popupshowbox_box flex-between">
<view class="popupshowbox_item" v-for="(item,index) in daylist" :key="index"
@click="clickday(item,index)" :class="selectshow === index ? 'select':''">
{{item.name}}
</view>
<view class="popupshowbox_itemzdy flex-between" v-if="showpickerbox && selectshow == 2">
<view class="popupshowbox_item" @click="showpicker=!showpicker,clickshowpicker = 1">
{{starttime}}
</view>
-<view class="popupshowbox_item" @click="showpicker=!showpicker,clickshowpicker = 2">
{{endtime}}
</view>
</view>
</view>
</view>
<view class="boxboutton flex-between">
<view class="boxbouttonitem" @click="reset">
重置
</view>
<view class="boxbouttonitem" @click="clickdetermine">
确定
</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
clickconfirmshow: false,
popupshow: false,
showpicker: false, //选择时间
showpickerbox: false, //是否显示这个盒子
clickshowpicker: '',
starttime: '', //起始时间
endtime: '',
selectshow: '', //选中
no: '',
form: {
user_name: '',
time: "",
page: 1,
type: '-1',
status: 'loadmore',
list: []
},
daylist: [{
id: 1,
name: '仅30天'
},
{
id: 2,
name: '近180天'
},
{
id: 3,
name: '自定义'
}
],
}
},
async onLoad(e) {
this.invoicingrecordsthatneed()
},
onReachBottom() {
if (this.form.status != 'nomore') {
this.form.page = ++this.form.page;
this.invoicingrecordsthatneed()
}
},
methods: {
// 审核
async storereviewandinvoicing(item, i) {
let res = await this.api.storereviewandinvoicing({
id: item.id,
no: this.no,
s_type: i
})
this.reset()
},
// 查看图片
previewImage(url) {
uni.previewImage({
current: 1,
urls: [url]
});
},
// 时间
clickday(item, index) {
const d = new Date()
const year = d.getFullYear()
let month = d.getMonth() + 1
let date = d.getDate()
month = month < 10 ? `0${month}` : month
date = date < 10 ? `0${date}` : date
switch (index) {
case 0:
this.starttime = `${(month-1)==0?(year-1):year}-${(month-1)==0?12:(month-1)}-${date}`
this.endtime = `${year}-${month}-${date}`
this.showpickerbox = false
break;
case 1:
this.starttime = `${year}-${month>6?(month-6):(month+12-6)}-${date}`
this.endtime = `${year}-${month}-${date}`
this.showpickerbox = false
break;
case 2:
this.starttime = '' //起始时间
this.endtime = ''
this.showpickerbox = true
break;
}
this.selectshow = index
},
// 确定时间
confirmpicker(e) {
console.log(this.clickshowpicker, uni.$u.timeFrom(e.value, 'yyyy-mm-dd'))
if (this.clickshowpicker == 1) {
this.starttime = uni.$u.timeFrom(e.value, 'yyyy-mm-dd')
}
if (this.clickshowpicker == 2) {
this.endtime = uni.$u.timeFrom(e.value, 'yyyy-mm-dd')
}
this.showpicker = !this.showpicker
},
// 确定
clickdetermine() {
if (this.starttime != '' && this.endtime != '') {
this.form.time = `${this.starttime} 00:00:00,${this.endtime} 00:00:00`
}
this.popupshow = false
this.invoicingrecordsthatneed()
},
// 重置
reset() {
this.form = {
user_name: '',
time: "",
page: 1,
type: '-1',
status: 'loadmore',
list: []
}
this.selectshow = ''
this.starttime = ''
this.endtime = ''
this.popupshow = false
this.invoicingrecordsthatneed()
},
// 搜索
onInput(e) {
if ([...e.detail.value].length >= 2) {
this.form.page = 1
this.form.list = []
uni.$u.debounce(this.invoicingrecordsthatneed, 500)
}
},
// 列表
async invoicingrecordsthatneed() {
this.form.status = 'loading';
let res = await this.api.invoicingrecordsthatneed({
user_name: this.form.user_name,
time: this.form.time,
page: this.form.page,
status: this.form.type,
})
if (this.form.page == 1 && res.data.length == 0) {
this.form.list = res.data
this.form.status = 'nomore'
return false;
} else {
setTimeout(() => {
if (this.form.page == 1) {
this.form.list = res.data
} else {
this.form.list = [...this.form.list, ...res.data]
}
if (res.data.length < 10) this.form.status = 'nomore';
else this.form.status = 'loadmore';
}, 500)
}
}
}
}
</script>
<style lang="scss" scoped>
page {
background: #F9F9F9;
}
.content {
padding: 0;
.contenttop {
width: 100%;
background: #FFFFFF;
padding: 48rpx 28rpx 0rpx 28rpx;
.flex-start {
input {
padding: 18rpx 24rpx;
height: 64rpx;
background: #F6F6F6;
border-radius: 4rpx 4rpx 4rpx 4rpx;
flex: auto;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
text {
padding: 0 0 0 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
.contenttopbox {
text {
width: 33%;
text-align: center;
padding: 32rpx 0 24rpx 0;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
.classtext {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
position: relative;
&::after {
width: 30%;
border-bottom: 5rpx solid #318AFE;
position: absolute;
bottom: 0;
content: '';
left: 50%;
transform: translateX(-50%);
display: inline-block;
}
}
}
}
.popupshow {
padding: 0 28rpx;
.popupshowtop {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #666666;
}
.popupshowbox {
.popupshowboxtitel {
margin-top: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.popupshowbox_box {
width: 100%;
.popupshowbox_item {
margin-top: 24rpx;
width: 176rpx;
height: 56rpx;
background: #FFFFFF;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #D9D9D9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
&::after {
content: '';
width: 176rpx;
}
.select {
border: 1px solid #1b00ff;
color: #0600ff;
}
.popupshowbox_itemzdy {
width: 100%;
.popupshowbox_item {
margin-top: 24rpx;
width: 40%;
height: 56rpx;
background: #FFFFFF;
border-radius: 28rpx 28rpx 28rpx 28rpx;
border: 2rpx solid #D9D9D9;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
text-align: center;
line-height: 56rpx;
}
}
}
}
.boxboutton {
margin: 400rpx 0 50rpx 0;
.boxbouttonitem {
width: 330rpx;
height: 72rpx;
border-radius: 50rpx 50rpx 50rpx 50rpx;
}
.boxbouttonitem:nth-child(1) {
border: 2rpx solid #D9D9D9;
background: #FFFFFF;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #333333;
text-align: center;
line-height: 72rpx;
}
.boxbouttonitem:nth-child(2) {
background: #2F87FD;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 36rpx;
color: #FFFFFF;
text-align: center;
line-height: 72rpx;
}
}
}
.contentbox {
width: 100%;
padding: 0 28rpx;
.contentboxitem {
margin-top: 32rpx;
padding: 32rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
.contentboxitemtop {
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
text:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #F39D52;
}
}
.contentboxitemtext {
margin-top: 24rpx;
text:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 28rpx;
color: #666666;
}
text:nth-child(2) {
margin-left: 24rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
image {
margin-left: 24rpx;
width: 158rpx;
height: 94rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #D9D9D9;
}
}
.contentboxitembutton {
margin-top: 32rpx;
.buttonone {
width: 244rpx;
height: 72rpx;
background: #2F87FD;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
text-align: center;
line-height: 72rpx;
}
.buttontow {
margin-left: 32rpx;
width: 244rpx;
height: 72rpx;
background: #FFFFFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #707070;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 32rpx;
color: #333333;
text-align: center;
line-height: 72rpx;
}
}
.popupshow {
width: 600rpx;
border-radius: 16rpx;
.Box_box {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
text-align: right;
padding: 24rpx;
border-bottom: 1px solid #e5e5e5;
font-size: 28rpx;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #333333;
}
.content_bottom {
margin: 70rpx auto 60rpx auto;
width: 70%;
height: 84rpx;
display: flex;
justify-content: space-between;
align-items: center;
.content_bottomone {
padding: 16rpx 60rpx;
background: #288EFB;
border-radius: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
text-align: center;
}
.content_bottomtow {
padding: 16rpx 60rpx;
background: red;
border-radius: 32rpx;
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
text-align: center;
}
}
}
}
}
}
</style>

1853
me/helpDetail/bluetools.vue Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Some files were not shown because too many files have changed in this diff Show More