页面适配,消息功能

This commit is contained in:
itgaojian163 2025-05-15 16:54:07 +08:00
parent 2f262acff4
commit 986f7be29b
27 changed files with 1994 additions and 1074 deletions

348
App.vue
View File

@ -12,92 +12,57 @@
}
</script>
<style>
<style lang="scss">
/*每个页面公共css */
@import "./common/style/icons.css";
/* 每个页面公共css */
/* 解决小程序和app滚动条的问题 */
/* #ifdef MP-WEIXIN || APP-PLUS */
::-webkit-scrollbar {
display: none;
width: 0 !important;
height: 0 !important;
-webkit-appearance: none;
background: transparent;
color: transparent;
}
/* #endif */
/* 解决H5的问题 */
/*#ifdef H5*/
uni-scroll-view .uni-scroll-view::-webkit-scrollbar {
display: none;
width: 0 !important;
height: 0 !important;
-webkit-appearance: none;
background: transparent;
color: transparent;
}
/*#endif*/
@import "./uni.scss";
page {
background: linear-gradient(to bottom, #F0F0F0, #FFFFFF);
background-size: 100vw 100vh;
background: linear-gradient(to bottom, $bg-top-color, $bg-bottom-color);
background-size: 100% 100vh;
background-repeat: no-repeat;
}
.page-container {
display: flex;
flex-direction: column;
padding: 30rpx;
}
::-webkit-scrollbar {
width: 0;
height: 0;
color: transparent;
}
/* 自定义导航栏容器 */
.custom-navbar {
display: flex;
align-items: center;
background-color: transparent;
}
/* 标题 */
.navbar-title {
font-size: 22px;
font-weight: bold;
}
/***End***/
// Checkbox
checkbox.round .wx-checkbox-input,
checkbox.round .uni-checkbox-input {
border-radius: 100rpx;
width: 36rpx !important;
height: 36rpx !important;
}
//
checkbox.yellow[checked] .wx-checkbox-input,
checkbox.yellow.checked .uni-checkbox-input {
background-color: #ff9944 !important;
border-color: #ff9944 !important;
color: #ffffff !important;
background-color: $primary-color !important;
border-color: $primary-color !important;
color: $white-color !important;
}
:global(.body-container) {
display: flex;
flex-direction: column;
padding: 30rpx !important;
}
.divider-v {
margin-top: 5rpx;
width: 90%;
height: 3rpx;
background-color: #F0F0F0;
align-self: center;
}
.divider-h {
width: 1px;
height: 10px;
background-color: #e7e4e4;
padding: 0px 1px;
margin-left: 10px;
align-self: center;
}
.divider-v-100 {
height: 1rpx;
background-color: #F0F0F0;
width: 100%;
}
.single-line {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.mt-10 {
margin-top: 10rpx;
@ -111,6 +76,74 @@
margin-right: 10rpx;
}
.ml-5 {
margin-left: 5rpx;
}
.star::after {
content: "*";
color: $red-color;
margin-left: 6rpx;
}
.gray-star::after {
content: '*';
color: $text-gray-hint-color;
margin-left: 6rpx;
}
.bottom-footer {
position: fixed;
bottom: 0rpx;
left: 0rpx;
display: flex;
flex-direction: column;
background-color: white;
padding-bottom: 40rpx;
align-items: center;
width: 100%;
}
.bottom-fixed-footer {
position: fixed;
bottom: 0rpx;
left: 0rpx;
background-color: $white-color;
display: flex;
flex-direction: column;
padding: $page-padding $page-padding 50rpx;
width: 100%;
box-sizing: border-box;
}
.bottom-btn-green {
background-color: $btn-green-color;
color: white;
font-size: 28rpx;
height: 80rpx;
line-height: 80rpx;
border-radius: 5px;
text-align: center;
}
.bottom-btn-green:active {
background-color: $btn-green-color-active;
}
.bottom-btn-primary {
background-color: $primary-color;
color: white;
font-size: 28rpx;
height: 70rpx;
line-height: 70rpx;
border-radius: 5px;
text-align: center;
}
.bottom-btn-primary:active {
background-color: $primary-color-active;
}
.ml-10 {
margin-left: 10rpx;
}
@ -131,6 +164,10 @@
margin-top: 40rpx;
}
.mr-20 {
margin-right: 20rpx;
}
.mr-40 {
margin-right: 40rpx;
}
@ -167,35 +204,139 @@
padding: 40rpx;
}
.bottom-dialog-box {
display: flex;
flex-direction: column;
justify-content: center;
border-top-right-radius: 15rpx;
border-top-left-radius: 15rpx;
padding: 30rpx;
.border-left {
border-top-left-radius: 5rpx;
border-bottom-left-radius: 5rpx;
}
.bottom-title-box {
display: flex;
flex-direction: row;
align-items: center;
position: relative;
.border-right {
border-top-right-radius: 5rpx;
border-bottom-right-radius: 5rpx;
}
.close-icon {
.divider-v {
width: 95%;
height: 1rpx;
background-color: $divider-color;
align-self: center;
}
.divider-h {
width: 1px;
height: 10px;
background-color: $divider-color;
padding: 0px 1px;
margin-left: 10px;
align-self: center;
}
.divider-h-white {
width: 1rpx;
height: 20rpx;
background-color: $primary-color-active;
padding: 0rpx 1rpx;
align-self: center;
margin-left: 20rpx;
}
.divider-v-100 {
height: 1rpx;
background-color: $divider-color;
width: 100%;
}
.single-line {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.single-line-front {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
direction: rtl;
text-align: left;
}
.multiple-3-ellipsis {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}
.multiple-2-ellipsis {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.size-16 {
height: 16rpx;
height: 16rpx;
}
.size-32 {
width: 32rpx;
height: 32rpx;
}
.size-48 {
width: 48rpx;
height: 48rpx;
}
.bottom-title-txt {
font-size: 30rpx;
font-weight: bold;
color: black;
text-align: center;
position: absolute;
left: 50%;
transform: translateX(-50%);
.size-48-128 {
width: 128rpx;
height: 48rpx;
}
.size-64 {
width: 64rpx;
height: 64rpx;
}
.size-128 {
width: 128rpx;
height: 128rpx;
}
.icon-arrow-solid::after {
content: '';
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ1ODA2NDUxMTAzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE0MDQ5IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik0xMDA0Ljk5MTg5NCAyNDIuOTkzNDRjLTEyLjY1ODA2MS0xMi42Njg1NjgtMjcuNjYyODAyLTE4Ljk5NzU5OS00NS4wMDAyMTItMTguOTk3NTk5SDY0LjAwNDgxNmMtMTcuMzQ0NDE1IDAtMzIuMzM4NjQ5IDYuMzI5MDMtNDUuMDA3MjE3IDE4Ljk5NzU5OUM2LjMyOTAzIDI1NS42NzYwMTggMCAyNzAuNjcwMjUxIDAgMjg4LjAwNDE1OWMwIDE3LjMzMDQwNSA2LjMyOTAzIDMyLjMyNDYzOSAxOC45OTc1OTkgNDQuOTk2NzFsNDQ3Ljk5NTE4NCA0NDcuOTk1MTg0YzEyLjY4MjU3OCAxMi42Njg1NjggMjcuNjc2ODEyIDE5LjAxMTYwOSA0NS4wMDcyMTcgMTkuMDExNjA5czMyLjMzODY0OS02LjM0MzA0IDQ0Ljk5NjcxLTE5LjAxMTYwOUwxMDA0Ljk5MTg5NCAzMzIuOTk3MzY2YzEyLjY1NDU1OC0xMi42Njg1NjggMTkuMDA4MTA2LTI3LjY2MjgwMiAxOS4wMDgxMDYtNDQuOTk2NzA5IDAtMTcuMzMwNDA1LTYuMzUzNTQ4LTMyLjMyNDYzOS0xOS4wMDgxMDYtNDUuMDA3MjE3eiIgcC1pZD0iMTQwNTAiIGZpbGw9IiNkYmRiZGIiPjwvcGF0aD48L3N2Zz4=');
display: block;
background-size: cover;
width: 20rpx;
height: 20rpx;
margin-left: 10rpx;
}
.no-more {
display: flex;
align-items: center;
width: 80%;
margin: 40rpx 0rpx 0rpx 0rpx;
align-self: center;
}
.no-more::before,
.no-more::after {
content: "";
flex: 1;
height: 1px;
background-color: var(--divider-color);
}
.no-more-dot {
width: 8rpx;
height: 8rpx;
border-radius: 50%;
background-color: var(--divider-color);
margin: 0 20rpx;
}
.uni-popup-message__box {
@ -205,4 +346,29 @@
.uni-popup {
z-index: 9999;
}
.bottom-dialog-container {
display: flex;
flex-direction: column;
justify-content: center;
padding: 30rpx;
}
.dialog-title-box {
display: flex;
flex-direction: row;
align-items: center;
}
.dialog-title-txt {
align-self: center;
flex: 1;
text-align: center;
font-size: 32rpx;
font-weight: bold;
}
.has-icon {
margin-left: -48rpx;
}
</style>

View File

@ -3,21 +3,38 @@ const isEmpty = function(obj) {
if (typeof obj !== 'object') return false;
return JSON.stringify(obj) === '{}';
};
const status = function(value) {
var status = '排队中...'
switch (value) {
case 'NONE':
status = '排队中...'
break
case 'GENERATING':
status = '生成中...'
break
case 'SUCCESS':
status = '生成成功'
break
case 'FAILED':
status = '生成失败'
break
const status = function(value, state) {
var status = '未生成'
if (state == 'SUCCESS') {
switch (value) {
case 'NONE':
status = '未生成'
break
case 'PENDING':
status = '等待'
break
case 'GENERATING':
status = '生成中...'
break
case 'SUCCESS':
status = '生成成功'
break
case 'FAILED':
status = '生成失败'
break
}
} else {
switch (state) {
case 'FAILED':
status = '生成失败'
break
case 'GENERATING':
status = '生成中...'
break
case 'NONE':
status = '未生成'
break
}
}
return status
};
@ -108,6 +125,19 @@ const objIsEmpty = function(obj) {
}
return Object.keys(obj).length === 0;
}
var moneyTxt = function(size, fontSize, price) {
const formattedStr =
'<span style="font-size:' + size + 'px;">¥</span><span style="font-size:' + fontSize + 'px;">' + price +
'</span>';
return formattedStr
}
var phoneNum = function(str, startLength, endLength, replaceStr) {
if (str == null || str == '') return ''
if (str.length <= startLength + endLength) {
return str;
}
return str.slice(0, startLength) + replaceStr + str.slice(str.length - endLength);
}
export {
isEmpty,
status,
@ -116,5 +146,7 @@ export {
boderStyle,
fontColor,
timeSplit,
objIsEmpty
objIsEmpty,
moneyTxt,
phoneNum
}

63
common/js/data.js Normal file
View File

@ -0,0 +1,63 @@
const kindList = [{
"value": "CODE",
"title": "代码"
}, {
"title": "操作手册",
"value": "MANUAL"
}, {
"title": "全部",
"value": "ALL"
}]
const typeList = [{
"title": "一次补正",
"value": "CORRECTION1"
}, {
"title": "二次补正",
"value": "CORRECTION2"
}]
const stateList = [{
"title": "待审核",
"value": "PENDING"
}, {
"title": "已通过",
"value": "APPROVED"
}, {
"title": "未通过",
"value": "REJECTED"
}, {
"title": "已取消",
"value": "CANCELED"
}]
const homeTypeList = [{
value: 'FREE',
label: '免费试用'
},
{
value: 'MATERIAL',
label: '写材料'
},
{
value: 'ALL',
label: '全托管'
}
]
const expandList = [{
value: 'PKG',
label: '安装包'
},
{
value: 'VIDEO_DEMO',
label: '演示视频'
},
{
value: 'URGENT',
label: '加急'
}
]
export {
stateList,
kindList,
typeList,
homeTypeList,
expandList
}

View File

@ -3,80 +3,104 @@ import {
} from "./http.js";
// 公共API
const apiPath = {
loginUrl: '/api/user/wx/login', //登录
registerUrl: '/api/user/wx/register', //注册,
updateUserInfo: '/api/user-info/update-self',
csaNo: '/api/csa/get', //获取客服编号
createContact: '/api/proj-contact/save', //创建联系人
mineAccount: '/api/user-info/get-user-self', //获取我的账户余额
minePackageCount: '/api/proj/servicepkg/packageorder/count/self', //我的套餐包剩余
uploadImg: '/api/file/v2/upload-image', //上传图片
userInfo: '/api/user-info/get-self', //获取我的个人信息
mineOrder: '/api/order/listpage/self', //我的订单
mineContact: '/api/proj-contact/listpage/self', //联系人列表
updateContact: '/api/proj-contact/update/{projContactId}', //更新联系人
delContact: '/api/proj-contact/remove/{ids}', //删除联系人
canClaimsCoupons: '/api/coupon/list-can-claim', //获取可以申领的优惠卷
saveCoupons: '/api/coupon/user/save', //领取优惠卷
loginUrl: '/api/user-wx/login', //登录
registerUrl: '/api/user-wx/register', //注册,
unbindWx: '/api/user-wx/unlock-phone', //解绑微信
updateUserInfo: '/api/user-info/update-self',
csaNo: '/api/csa/get', //获取客服编号
createContact: '/api/proj-contact/save', //创建联系人
mineAccount: '/api/user-info/get-user-self', //获取我的账户余额
minePackageCount: '/api/proj/servicepkg/packageorder/count/self', //我的套餐包剩余
uploadImg: '/api/file/v2/upload-image', //上传图片
userInfo: '/api/user-info/get-self', //获取我的个人信息
mineOrder: '/api/order/listpage/self', //我的订单
mineContact: '/api/proj-contact/listpage/self', //联系人列表
updateContact: '/api/proj-contact/update/{projContactId}', //更新联系人
delContact: '/api/proj-contact/remove/{ids}', //删除联系人
canClaimsCoupons: '/api/coupon/list-can-claim', //获取可以申领的优惠卷
saveCoupons: '/api/coupon/user/save', //领取优惠卷
minePayRecord: '/api/account/listpage-item/self',
mineMsgNotice: '/api/user-msg/listpage-simple/self', //获取消息通知
readMsgNotice: '/api/user-msg/update-read/self', //标记读取消息
deleteMsgNotice: '/api/user-msg/remove/self/{ids}', //删除消息通知
}
class UserApi {
static doLogin(data) {
return request(apiPath.loginUrl, "POST", data, null, 'operator', false)
}
static doRegister(data) {
return request(apiPath.registerUrl, "POST", data, null, 'operator', false)
}
static doUpdateUserInfo(data) {
return request(apiPath.updateUserInfo, "PUT", data)
}
static doGetCsaNo() {
return request(apiPath.csaNo, "GET")
}
static doCreateContact(data) {
return request(apiPath.createContact, "POST", data)
}
//获取我的账户余额
static doGetMineAccount() {
return request(apiPath.mineAccount, "GET")
}
//获取我的套餐包
static doGetMinePackageCount() {
return request(apiPath.minePackageCount, "GET")
}
//上传图片
static doUploadImg(data) {
return request(apiPath.uploadImg, "POST", data)
}
//获取个人信息
static doGetUserInfo() {
return request(apiPath.userInfo, "GET")
}
//获取我的订单
static doGetMineOrder(data) {
return request(apiPath.mineOrder, "GET", data)
}
//获取项目联系人列表
static doGetMineContactList(data) {
return request(apiPath.mineContact, "GET", data)
}
//更新联系人
static doUpdateContactList(id, data) {
const path = apiPath.updateContact.replace('{projContactId}', id)
return request(path, "PUT", data)
}
//删除联系人
static doDelContact(id) {
const path = apiPath.delContact.replace('{ids}', id)
return request(path, "DELETE")
}
//获取可以申领的优惠卷
static doGetClaimsCouponsList() {
return request(apiPath.canClaimsCoupons, "GET")
}
//领取优惠卷
static doSaveCoupons(data) {
return request(apiPath.saveCoupons, "POST", data)
}
static doLogin(data) {
return request(apiPath.loginUrl, "POST", data, null, 'operator', false)
}
static doRegister(data) {
return request(apiPath.registerUrl, "POST", data, null, 'operator', false)
}
static doUnbindWx() {
return request(apiPath.unbindWx, "GET", null, null, 'operator', true)
}
static doUpdateUserInfo(data) {
return request(apiPath.updateUserInfo, "PUT", data)
}
static doGetCsaNo() {
return request(apiPath.csaNo, "GET")
}
static doCreateContact(data) {
return request(apiPath.createContact, "POST", data)
}
static doGetMinePayRecord(data) {
return request(apiPath.minePayRecord, 'GET', data)
}
//获取我的账户余额
static doGetMineAccount() {
return request(apiPath.mineAccount, "GET")
}
//获取我的套餐包
static doGetMinePackageCount() {
return request(apiPath.minePackageCount, "GET")
}
//上传图片
static doUploadImg(data) {
return request(apiPath.uploadImg, "POST", data)
}
//获取个人信息
static doGetUserInfo() {
return request(apiPath.userInfo, "GET")
}
//获取我的订单
static doGetMineOrder(data) {
return request(apiPath.mineOrder, "GET", data)
}
//获取项目联系人列表
static doGetMineContactList(data) {
return request(apiPath.mineContact, "GET", data)
}
//更新联系人
static doUpdateContactList(id, data) {
const path = apiPath.updateContact.replace('{projContactId}', id)
return request(path, "PUT", data)
}
//删除联系人
static doDelContact(id) {
const path = apiPath.delContact.replace('{ids}', id)
return request(path, "DELETE")
}
//获取可以申领的优惠卷
static doGetClaimsCouponsList() {
return request(apiPath.canClaimsCoupons, "GET")
}
//领取优惠卷
static doSaveCoupons(data) {
return request(apiPath.saveCoupons, "POST", data)
}
//获取消息通知
static doGetMineMsgNotice(data) {
return request(apiPath.mineMsgNotice, "GET", data)
}
//标记读取状态
static doReadMineMsgNotice(data) {
return request(apiPath.readMsgNotice, 'PUT', data)
}
//删除消息通知
static doDeleteMineMsgNotice(id) {
const path = apiPath.deleteMsgNotice.replace('{ids}', id)
return request(path, 'DELETE')
}
}
export default UserApi;

View File

@ -2,13 +2,16 @@ import {
set,
get
} from '../cache/storage.js';
// 定义api服务地址
// const baseUrl = 'https://www.xzszwhy.cn/daqi/app';
const operatorUrl = 'http://192.168.0.15:8091/operator';
// const operatorUrl = 'https://www.aimzhu.com/operator';
const copyrightUrl = 'http://192.168.0.15:7025/copyright';
const uploadImgUrl = copyrightUrl + '/api/file/v2/upload-image'
const previewUrl = copyrightUrl + '/route/file/v2/download/true/'
import {
operatorUrl,
operatorPlug,
uploadImgUrl,
previewUrl,
copyrightUrl,
imgAssets,
appUrl
} from '../net/mainUrl'
/**
* 传入请求参数返回Promise支持链试调用
* @param url 请求地址
@ -18,13 +21,12 @@ const previewUrl = copyrightUrl + '/route/file/v2/download/true/'
*/
function request(url, method = "GET", data = {}, params = {}, project = "copyright", needToken = true) {
const header = {
"Content-Type": "application/json"
"content-type": "application/json"
// 有其他content-type需求加点逻辑判断处理即可
}
//是否需要token
if (needToken) {
//TODO const token = get('token')
const token =
'NjBIOFRORDcraDc4U1RsUTI4a3B5em50VVVzclp2QjdFWDV2dVJJc0VLL3Fhazd0bjZPaU9Tc3E1cHc2cmYyZTc0Y2FITTdRR0pMTk1xaVRHM0I1d0NiTnJ4b1BVSVNtUFl4SlFtR1g2M0tCQTc2TXM4L3d4ZVhwM09VREN0bDMrTXNoa0trWDR1eG5PdG84OXZ4UVE0dDhRUDdQRk1Qd2N0ZWVLSzJaZzBjcC82NXdueGQvUkZNSm1vZ2doQmFncnRQN0pFQ240enZHaEdFcGpVTDZqY3VpdHRUZERUS2Y5RG5BdXZmeE1kNVVyM29icTZTV054RzNYdURDa2lvR3dIbi9nNmJLOHduNUl4Snp3Qm1qTDRkYXFXZ2plaGNQRmw3ZXBZTlgxV3cwZkVuaGxHZlhRb0ZZMlEveEJhQS9zeWE5NnpxRlUxTmJWYkRmMitvMTZXRnExVytHNEhEb1JPZkE4TG5UVzc0PQ=='
const token = get('token')
if (token) {
header.Auth = `Bearer ${token}`;
}
@ -35,17 +37,17 @@ function request(url, method = "GET", data = {}, params = {}, project = "copyrig
baseUrl = operatorUrl
} else if (project == 'copyright') {
baseUrl = copyrightUrl
} else if (project == 'online') {
baseUrl = 'https://www.aimzhu.com/operator'
} else if (project == 'plug') {
baseUrl = operatorPlug
}
return new Promise(function(resolve, reject) {
uni.request({
url: baseUrl + url,
timeout: 8000,
method: method,
data: data,
dataType: 'json',
header: header,
method,
data,
dataType: "json", // 微信官方文档中介绍会对数据进行一次JSON.parse
header,
success(res) {
if (res.statusCode === 200) {
resolve(res.data)
@ -71,5 +73,7 @@ export {
request,
uploadImgUrl,
previewUrl,
copyrightUrl
copyrightUrl,
imgAssets,
appUrl
}

18
common/js/net/mainUrl.js Normal file
View File

@ -0,0 +1,18 @@
// 定义api服务地址
const operatorUrl = 'https://www.aimzhu.com/operator';
const operatorPlug = 'https://www.aimzhu.com/operator-plugin'
const copyrightUrl = 'https://www.aimzhu.com/copyright';
const uploadImgUrl = copyrightUrl + '/api/file/v2/upload-image'
const previewUrl = copyrightUrl + '/route/file/v2/download/true/'
const imgAssets = 'https://www.aimzhu.com/miniapp-assets'
const appUrl = 'https://www.aimzhu.com'
export {
operatorUrl,
operatorPlug,
uploadImgUrl,
previewUrl,
copyrightUrl,
imgAssets,
appUrl
}

View File

@ -12,6 +12,7 @@ const apiPath = {
getPackageList: '/api/proj/servicepkg/packageorder/listpage/self', //获取套餐包
getCommendProjectName: '/api/proj/recommend/list-proj-name/ai', //推荐项目名称
createProject: '/api/proj/create-quick', //快速创建项目
buildProject: '/api/proj/create-quick/proj-id/{projId}', //生成项目
reCreate: '/api/proj/generate/proj-id/${projId}', //重新生成
proLangList: '/api/env/custom/list-active-lang', //项目语言
ruleData: '/app/agreementportal/getrelease/{id}', //使用规则 project="operator"
@ -53,6 +54,11 @@ class ProApi {
static doCreateProject(data) {
return request(apiPath.createProject, "POST", data)
}
//生成项目
static doBuildProject(id) {
const path = apiPath.buildProject.replace('{projId}', id)
return request(path, "GET")
}
//重新生成
static doReCreate(url) {
const path = apiPath.reCreate.replace('${projId}', url)

View File

@ -67,6 +67,10 @@ const pxToRpx = (pxValue, screenWidth) => {
// return pxValue * (750 / screenWidth);
const rpx = (750 / screenWidth) * Number(pxValue)
return Math.floor(rpx);
}
const rpxToPx = (rpxValue, screenWidth) => {
return rpxValue * screenWidth / 750;
}
@ -201,5 +205,6 @@ export {
removeImgStyleFromRichText,
dateTimePicker,
pxToRpx,
random32Str
random32Str,
rpxToPx
}

View File

@ -1,6 +1,16 @@
// 手机号验证
const isValidPhone = (phone) => {
return /^1[3-9]\d{9}$/.test(phone);
// 手机号码正则
const mobilePattern = /^1[3-9]\d{9}$/;
// 固定电话正则
const landlinePattern = /^(0\d{2,3})[- ]?\d{7,8}$/;
if (mobilePattern.test(phone)) {
return true
} else if (landlinePattern.test(phone)) {
return true
} else {
return false
}
};
// 邮箱验证

View File

@ -90,4 +90,33 @@
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ0ODc0NTc3NTYwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ0MzYiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTU3Mi4xNiA1MTJsMTgzLjQ2NjY2Ny0xODMuMDRhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDEgMC02MC41ODY2NjctNjAuNTg2NjY3TDUxMiA0NTEuODRsLTE4My4wNC0xODMuNDY2NjY3YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAtNjAuNTg2NjY3IDYwLjU4NjY2N2wxODMuNDY2NjY3IDE4My4wNC0xODMuNDY2NjY3IDE4My4wNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDAgNjAuNTg2NjY3IDQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAgNjAuNTg2NjY3IDBsMTgzLjA0LTE4My40NjY2NjcgMTgzLjA0IDE4My40NjY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMCA2MC41ODY2NjcgMCA0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDAtNjAuNTg2NjY3eiIgcC1pZD0iNDQzNyIgZmlsbD0iIzhhOGE4YSI+PC9wYXRoPjwvc3ZnPg==');
background-size: contain;
background-repeat: no-repeat;
z-index: 2;
}
.icon-arrow-solid::after {
content: '';
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ1ODA2NDUxMTAzIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE0MDQ5IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik0xMDA0Ljk5MTg5NCAyNDIuOTkzNDRjLTEyLjY1ODA2MS0xMi42Njg1NjgtMjcuNjYyODAyLTE4Ljk5NzU5OS00NS4wMDAyMTItMTguOTk3NTk5SDY0LjAwNDgxNmMtMTcuMzQ0NDE1IDAtMzIuMzM4NjQ5IDYuMzI5MDMtNDUuMDA3MjE3IDE4Ljk5NzU5OUM2LjMyOTAzIDI1NS42NzYwMTggMCAyNzAuNjcwMjUxIDAgMjg4LjAwNDE1OWMwIDE3LjMzMDQwNSA2LjMyOTAzIDMyLjMyNDYzOSAxOC45OTc1OTkgNDQuOTk2NzFsNDQ3Ljk5NTE4NCA0NDcuOTk1MTg0YzEyLjY4MjU3OCAxMi42Njg1NjggMjcuNjc2ODEyIDE5LjAxMTYwOSA0NS4wMDcyMTcgMTkuMDExNjA5czMyLjMzODY0OS02LjM0MzA0IDQ0Ljk5NjcxLTE5LjAxMTYwOUwxMDA0Ljk5MTg5NCAzMzIuOTk3MzY2YzEyLjY1NDU1OC0xMi42Njg1NjggMTkuMDA4MTA2LTI3LjY2MjgwMiAxOS4wMDgxMDYtNDQuOTk2NzA5IDAtMTcuMzMwNDA1LTYuMzUzNTQ4LTMyLjMyNDYzOS0xOS4wMDgxMDYtNDUuMDA3MjE3eiIgcC1pZD0iMTQwNTAiIGZpbGw9IiNkYmRiZGIiPjwvcGF0aD48L3N2Zz4=');
display: block;
background-size: cover;
width: 20rpx;
height: 20rpx;
margin-left: 10rpx;
}
.icon-user-default-blue {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQzOTg4MzkwNjkwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM0MDkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiAxMDI0QzIyOS4yMDUzMzMgMTAyNCAwIDc5NC43OTQ2NjcgMCA1MTJTMjI5LjIwNTMzMyAwIDUxMiAwczUxMiAyMjkuMjA1MzMzIDUxMiA1MTItMjI5LjIwNTMzMyA1MTItNTEyIDUxMnogbTAtNDk2LjQ2OTMzM2ExNzAuNjY2NjY3IDE3MC42NjY2NjcgMCAxIDAgMC0zNDEuMzMzMzM0IDE3MC42NjY2NjcgMTcwLjY2NjY2NyAwIDAgMCAwIDM0MS4zMzMzMzR6IG0yNjMuNzY1MzMzIDI2My43MjI2NjZhMjYzLjc2NTMzMyAyNjMuNzY1MzMzIDAgMSAwLTUyNy41MzA2NjYgMGg1MjcuNTMwNjY2eiIgcC1pZD0iMzQxMCIgZmlsbD0iIzEyOTZkYiI+PC9wYXRoPjwvc3ZnPg==');
background-size: cover;
background-repeat: no-repeat;
}
.icon-add-circle-blue {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ3MDM1NjY4ODU4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE2NDIiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiA5MzYuOTE1NjE5Yy0yMzQuNjcyNzY0IDAtNDI0LjkxNTYxOS0xOTAuMjQzODc5LTQyNC45MTU2MTktNDI0LjkxNTYxOVMyNzcuMzI3MjM2IDg3LjA4MzM1NyA1MTIgODcuMDgzMzU3YzIzNC42NzY4NTcgMCA0MjQuOTE2NjQzIDE5MC4yNDM4NzkgNDI0LjkxNjY0MyA0MjQuOTE1NjE5Uzc0Ni42NzY4NTcgOTM2LjkxNTYxOSA1MTIgOTM2LjkxNTYxOXpNNzI0LjQ1NzgxIDQ2OS41MDQxNCA1NTQuNDkxNzY3IDQ2OS41MDQxNCA1NTQuNDkxNzY3IDI5OS41NDYyODRsLTg0Ljk4MzUzMyAwIDAgMTY5Ljk1Nzg1N0wyOTkuNTQyMTkgNDY5LjUwNDE0bDAgODQuOTkxNzIgMTY5Ljk2NjA0MyAwIDAgMTY5Ljk2NjA0MyA4NC45ODM1MzMgMEw1NTQuNDkxNzY3IDU1NC40OTU4NmwxNjkuOTY2MDQzIDBMNzI0LjQ1NzgxIDQ2OS41MDQxNHoiIHAtaWQ9IjE2NDMiIGZpbGw9IiMzMjcwRkYiPjwvcGF0aD48L3N2Zz4=');
background-size: cover;
background-repeat: no-repeat;
}
.icon-del-red {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ3Mjk4NjU3MTUxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2MjEiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTc2NS41MDU2OTEgMTkxLjk0MjU2NyA2MzkuNjI3NzcyIDE5MS45NDI1NjdjMC0zNS4zMjQ1My0yOC42MzYyMDEtNjMuOTYwNzMxLTYzLjk2MDczMS02My45NjA3MzFMNDQ3Ljc0NTU4IDEyNy45ODE4MzZjLTM1LjMyNDUzIDAtNjMuOTYwNzMxIDI4LjYzNjIwMS02My45NjA3MzEgNjMuOTYwNzMxTDI1Ny45MDU5MDggMTkxLjk0MjU2N2MtMzYuNDUyMjEzIDAtNjYuMDAzMjUgMjkuNTUxMDM2LTY2LjAwMzI1IDY2LjAwMzI1bDAgNTkuODc1NjkyYzAgMzYuNDUyMjEzIDI5LjU1MTAzNiA2Ni4wMDMyNSA2Ni4wMDMyNSA2Ni4wMDMyNWwtMi4wNDI1MTkgMCAwIDQ0NS42ODE1NzJjMCAzNi40NTIyMTMgMjkuNTUxMDM2IDY2LjAwMzI1IDY2LjAwMzI1IDY2LjAwMzI1bDYxLjkxODIxMSAwIDYzLjk2MDczMSAwIDEyNy45MjE0NjEgMCA2My45NjA3MzEgMCA2MS45MTgyMTEgMGMzNi40NTIyMTMgMCA2Ni4wMDMyNS0yOS41NTEwMzYgNjYuMDAzMjUtNjYuMDAzMjVMNzY3LjU0OTIzNCAzODMuODIzNzM2bC0yLjA0MjUxOSAwYzM2LjQ1MjIxMyAwIDY2LjAwMzI1LTI5LjU1MTAzNiA2Ni4wMDMyNS02Ni4wMDMyNWwwLTU5Ljg3NTY5MkM4MzEuNTA4OTQxIDIyMS40OTI1OCA4MDEuOTU4OTI4IDE5MS45NDI1NjcgNzY1LjUwNTY5MSAxOTEuOTQyNTY3ek03MDMuNTg3NDggODAzLjQxMzA0NmMtMC4xMDEzMDcgMy4xMjMxMzEtMS43NDM3MTQgMjcuODEzNDYyLTI3Ljk2MTg0MiAyOC4xMzQ3ODFsLTM1Ljk5ODg4OSAwLTYzLjk2MDczMSAwTDQ0Ny43NDU1OCA4MzEuNTQ3ODI3IDM4My43ODQ4NSA4MzEuNTQ3ODI3bC0zNS44NzkxNjIgMGMtMjcuOTg4NDQ4LTAuMzQzODMxLTI3Ljk2OTAwNS0yOC40NTkxNjktMjcuOTY5MDA1LTI4LjQ1OTE2OWwtMC4xMTI1NjQgMC4wMzE3MjJMMzE5LjgyNDExOSAzODMuODIzNzM2bDM4My43NjMzNiAwTDcwMy41ODc0OCA4MDMuNDEzMDQ2ek03MzUuNTY3ODQ1IDMxOS44NjMwMDUgMjg3Ljg0Mzc1NCAzMTkuODYzMDA1Yy0xNy42NjIyNjUgMC0zMS45ODAzNjUtMTQuMzE4MS0zMS45ODAzNjUtMzEuOTgwMzY1IDAtMTcuNjYyMjY1IDE0LjMxODEtMzEuOTgwMzY1IDMxLjk4MDM2NS0zMS45ODAzNjVsMTU5LjkwMTgyNyAwIDEyNy45MjE0NjEgMCAxNTkuOTAxODI3IDBjMTcuNjYyMjY1IDAgMzEuOTgwMzY1IDE0LjMxODEgMzEuOTgwMzY1IDMxLjk4MDM2NUM3NjcuNTQ4MjEgMzA1LjU0NDkwNSA3NTMuMjMwMTEgMzE5Ljg2MzAwNSA3MzUuNTY3ODQ1IDMxOS44NjMwMDV6IiBwLWlkPSIyNjIyIiBmaWxsPSIjZTQ3YzZlIj48L3BhdGg+PHBhdGggZD0iTTQ0Ny43NDU1OCA3NjcuNTg4MTE5YzE3LjY2MjI2NSAwIDMxLjk4MDM2NS0xNC4zMTgxIDMxLjk4MDM2NS0zMS45ODAzNjVMNDc5LjcyNTk0NiA0NzkuNzY0ODMxYzAtMTcuNjYyMjY1LTE0LjMxODEtMzEuOTgwMzY1LTMxLjk4MDM2NS0zMS45ODAzNjUtMTcuNjYyMjY1IDAtMzEuOTgwMzY1IDE0LjMxODEtMzEuOTgwMzY1IDMxLjk4MDM2NWwwIDI1NS44NDI5MjJDNDE1Ljc2NTIxNSA3NTMuMjcwMDE5IDQzMC4wODMzMTYgNzY3LjU4ODExOSA0NDcuNzQ1NTggNzY3LjU4ODExOXoiIHAtaWQ9IjI2MjMiIGZpbGw9IiNlNDdjNmUiPjwvcGF0aD48cGF0aCBkPSJNNTc1LjY2NzA0MiA3NjcuNTg4MTE5YzE3LjY2MjI2NSAwIDMxLjk4MDM2NS0xNC4zMTgxIDMxLjk4MDM2NS0zMS45ODAzNjVMNjA3LjY0NzQwNyA0NzkuNzY0ODMxYzAtMTcuNjYyMjY1LTE0LjMxODEtMzEuOTgwMzY1LTMxLjk4MDM2NS0zMS45ODAzNjUtMTcuNjYyMjY1IDAtMzEuOTgwMzY1IDE0LjMxODEtMzEuOTgwMzY1IDMxLjk4MDM2NWwwIDI1NS44NDI5MjJDNTQzLjY4NjY3NiA3NTMuMjcwMDE5IDU1OC4wMDQ3NzcgNzY3LjU4ODExOSA1NzUuNjY3MDQyIDc2Ny41ODgxMTl6IiBwLWlkPSIyNjI0IiBmaWxsPSIjZTQ3YzZlIj48L3BhdGg+PC9zdmc+');
background-size: cover;
background-repeat: no-repeat;
}

17
main.js
View File

@ -1,5 +1,8 @@
import App from './App'
import {
imgAssets,
appUrl
} from './common/js/net/mainUrl'
// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
@ -17,6 +20,18 @@ import {
} from 'vue'
export function createApp() {
const app = createSSRApp(App)
// app.provide('globalData', {
// appTitle: '测试'
// })
app.provide('globalData', {
imgAssetsUrl: imgAssets,
locImg: "/static/images",
slideBtns: [],
appTitle: 'AI喵著',
appUrl: appUrl,
onlyDelBtns: [],
cancelEditBtns: []
})
return {
app
}

View File

@ -61,7 +61,7 @@
},
"mp-baidu" : {
"usingComponents" : true,
"appid" : "testid"
"appid" : "118838711"
},
"mp-toutiao" : {
"usingComponents" : true,

View File

@ -8,98 +8,98 @@
{
"path": "pages/index/home",
"style": {
"navigationStyle": "custom"
"navigationStyle": "custom",
"enablePullDownRefresh": true
}
},
{
"path": "pages/mine/mineIndex/mineIndex",
"style": {
"navigationStyle": "custom"
"navigationStyle": "custom",
"enablePullDownRefresh": true
}
},
{
"path": "pages/common/readTxt/readTxt",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/mine/mineAccount/mineInfo/mineInfo",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/mine/mineAccount/mineOrder/mineOrder",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true
}
},
{
"path": "pages/mine/mineAccount/mineContact/mineContact",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true
}
},
{
"path": "pages/mine/mineAccount/mineCoupons/mineCoupons",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true
}
},
{
"path": "pages/pay/payment/payment",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/pay/publicPay/publicPay",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/pay/payState/payState",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/copyright/createBuy/createBuy",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/copyright/createProjectInfo/createProjectInfo",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/common/rule/rule",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "components/ad-popup",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/mine/mineAccount/mineMsgNotice/mineMsgNotice",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true
}
},
{
"path" : "pages/common/readTxt/readTxt",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/mine/mineAccount/mineInfo/mineInfo",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/mine/mineAccount/mineOrder/mineOrder",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/mine/mineAccount/mineContact/mineContact",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/mine/mineAccount/mineCoupons/mineCoupons",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/pay/payment/payment",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/pay/publicPay/publicPay",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/pay/payState/payState",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/copyright/createBuy/createBuy",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/copyright/createProjectInfo/createProjectInfo",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "pages/common/rule/rule",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "components/ad-popup",
"style" :
{
"navigationBarTitleText" : ""
}
}
],
"globalStyle": {

View File

@ -1,154 +1,144 @@
<template>
<view class="buy-container">
<view class="page-container">
<swiper indicator-dots style="height: 120rpx;" autoplay indicator-active-color="#fff">
<swiper-item>
<image src="/static/images/banner_1.png" style="width: 100vw;height: 120rpx;"></image>
<image :src="globalData.locImg+'/banner_1.png'" style="width: 100vw;height: 120rpx;"></image>
</swiper-item>
<swiper-item>
<image src="/static/images/banner_2.png" style="width: 100vw;height: 120rpx;"></image>
<image :src="globalData.locImg+'/banner_2.png'" style="width: 100vw;height: 120rpx;"></image>
</swiper-item>
</swiper>
<!-- 全托管 -->
<view class="buy-all-container">
<view class="buy-all-box">
<view class="pd-20">
<view class="buy-all-title">
<view class="buy-all-txt">
<text class="txt">全托管</text>
<text class="money">¥{{allPrice/100}}-{{(allPrice+urgent)/100}}</text>
</view>
<view class="buy-all-btn" @click="doBuy" data-type="ALL">购买</view>
</view>
<view class="buy-desc-box mt-10">
<view class="buy-desc-txt">从下单到取证,仅需提供基本信息,我们为您提供一站式管家服务.</view>
<view class="mt-10" style="font-size: 12px;">提供的服务</view>
<view class="buy-desc-item mt-10">
<view class="buy-desc-row">
<image src="../../../static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">包可运行软件开发与搭建</text>
</view>
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">包鉴别材料撰写</text>
</view>
</view>
<view class="buy-desc-item mt-10">
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">包代办,包下证,包开发票提</text>
</view>
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">供可运行软件安装包</text>
</view>
</view>
<view class="buy-desc-item mt-10">
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">提供可运行软件云服务900天</text>
</view>
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">提供可运行软件演示视频</text>
</view>
</view>
<view class="buy-desc-item mt-10">
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">客服一对一服务</text>
</view>
</view>
<view class="mt-10">
<text style="font-size:12px;">使用流程</text>
<view class="buy-desc-column mt-10 list">
<view class="buy-desc-row-no-margin list-item">
<text class="txt">填写系统名称</text>
</view>
<view class="buy-desc-row-no-margin list-item">
<text class="txt">填写基本信息</text>
</view>
<view class="buy-desc-row-no-margin list-item">
<text class="txt">接收证书</text>
</view>
</view>
</view>
</view>
<view class="container-box">
<view class="title-box">
<view class="title-content">
<text class="title-txt mr-10">全托管</text>
<rich-text
:nodes="moneyTxt(10,14,allPrice/100)+'-'+moneyTxt(10,14,(allPrice+urgent)/100)"></rich-text>
</view>
<text class="btn" @click="doBuy" data-type="ALL">购买</text>
</view>
<text class="desc">从下单到取证,仅需提供基本信息,我们为您提供一站式管家服务.</text>
<text class="desc-title">提供的服务</text>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon">
</image>
<text>包可运行软件开发与搭建</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon">
</image>
<text>包鉴别材料撰写</text>
</view>
</view>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">包代办,包下证,包开发票提</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">供可运行软件安装包</text>
</view>
</view>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">提供可运行软件云服务900天</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">提供可运行软件演示视频</text>
</view>
</view>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">客服一对一服务</text>
</view>
</view>
<view class="desc-title">使用流程</view>
<view class="list">
<view class="buy-desc-row-no-margin list-item">
<text class="txt">填写系统名称</text>
</view>
<view class="buy-desc-row-no-margin list-item">
<text class="txt">填写基本信息</text>
</view>
<view class="buy-desc-row-no-margin list-item">
<text class="txt">接收证书</text>
</view>
</view>
</view>
<!-- 写材料 -->
<view class="buy-all-box">
<view class="pd-20">
<view class="buy-all-title">
<view class="buy-all-txt">
<text class="txt">写材料</text>
<text class="money">¥{{materialPrice/100}}</text>
</view>
<view class="buy-all-btn" @click="doBuy" data-type="MATERIAL">购买</view>
<view class="container-box">
<view class="title-box">
<view class="title-content">
<text class="title-txt mr-10">写材料</text>
<rich-text :nodes="moneyTxt(10,14,materialPrice/100)"></rich-text>
</view>
<view class="buy-desc-box">
<view class="buy-desc-txt mt-10">通过平台自己搭建可运行软件后由平台自动生成相关鉴别材料,下载鉴别材料后可自行申报或找相关代理机构申报.</view>
<view class="mt-10" style="font-size: 12px;">提供的服务</view>
<view class="buy-desc-item mt-10">
<view class="buy-desc-row">
<image src="../../../static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">通过平台自己搭建可运行软件</text>
</view>
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">平台自动撰写鉴别材料</text>
</view>
</view>
<view class="buy-desc-item">
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">包补正材料撰写一直到下证</text>
</view>
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">两次补正不通过平台退款</text>
</view>
</view>
<view class="buy-desc-item">
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">包开发票</text>
</view>
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">提供可运行软件云服务300天</text>
</view>
</view>
<view class="buy-desc-item">
<view class="buy-desc-row">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text class="txt">客服一对一服务</text>
</view>
</view>
<view class="mt-20">
<text>使用流程</text>
<view style="display: flex;flex-direction: column;">
<view class="buy-desc-row-no-margin mt-10">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text>按系统操作流程执行</text>
</view>
<view class="buy-desc-row-no-margin mt-10">
<image src="/static/images/ic_check_fit.png" class="buy-desc-row-icon"></image>
<text>如需视频文件和安装包请在下证后购买下载</text>
</view>
</view>
</view>
<view class="btn" @click="doBuy" data-type="MATERIAL">购买</view>
</view>
<text class="desc">通过平台自己搭建可运行软件后由平台自动生成相关鉴别材料,下载鉴别材料后可自行申报或找相关代理机构申报.</text>
<text class="desc-title">提供的服务</text>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon">
</image>
<text>通过平台自己搭建可运行软件</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon">
</image>
<text>平台自动撰写鉴别材料</text>
</view>
</view>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">包补正材料撰写一直到下证</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">两次补正不通过平台退款</text>
</view>
</view>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">包开发票</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">提供可运行软件云服务300天</text>
</view>
</view>
<view class="item">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text class="txt">客服一对一服务</text>
</view>
</view>
<text class="desc-title">使用流程</text>
<view class="item-column">
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text>按系统操作流程执行</text>
</view>
<view class="row-item">
<image :src="globalData.locImg+'/ic_check_fit.png'" class="check-icon"></image>
<text>如需视频文件和安装包请在下证后购买下载</text>
</view>
</view>
</view>
<!-- 提示免费版 -->
<view class="hint-box pd-20" bind:tap="copyLink">
<view class="icon icon-computer-ind"></view>
<view class="content">
<text class="hint-content">免费试用请使用电脑端登录</text>
<text class="hint-link">https://www.aimzhu.com</text>
<view class="container-box-row" bind:tap="copyLink">
<view class="icon-computer-ind size-64"></view>
<view class="free-content">
<text>免费试用请使用电脑端登录</text>
<text class="hint-link">{{globalData.appUrl}}</text>
</view>
</view>
</view>
<uni-popup type="message" ref="msg">
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
@ -157,7 +147,20 @@
<script>
import ProApi from '@/common/js/net/projectApi.js'
import {
inject
} from 'vue'
import {
moneyTxt
} from '@/common/js/conver.js'
export default {
setup() {
const globalData = inject('globalData')
console.log(globalData)
return {
globalData
}
},
data() {
return {
msgType: 'info',
@ -184,6 +187,7 @@
this.doGetPrice()
},
methods: {
moneyTxt,
//
doUrgent(e) {
const _self = this
@ -251,112 +255,124 @@
}
</script>
<style>
.buy-container {
<style lang="scss" scoped>
.container-box {
display: flex;
flex-direction: column;
padding: 30rpx;
}
.buy-title {
height: 100rpx;
background-color: blanchedalmond;
}
.buy-all-container {
display: flex;
flex-direction: column;
border-radius: 10rpx;
}
.buy-all-box {
background-color: $white-color;
border-radius: 15rpx;
margin-top: 20rpx;
display: flex;
flex-direction: column;
border-radius: 20rpx;
background-color: white;
/* box-shadow: 0rpx 0rpx 10rpx 10rpx #e9e8e88f; */
padding: 30rpx 30rpx;
box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.08);
}
.buy-all-title {
.container-box-row {
display: flex;
flex-direction: row;
background-color: $white-color;
border-radius: 15rpx;
margin-top: 20rpx;
padding: 30rpx 30rpx;
align-items: center;
justify-content: center;
box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.08);
}
.free-content {
display: flex;
flex-direction: column;
font-size: 28rpx;
margin-left: 20rpx;
}
.hint-link {
color: $text-blue-color;
text-align: center;
font-size: 24rpx;
}
.title-box {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.title-content {
display: flex;
flex-direction: row;
color: $text-brown-color;
align-items: center;
}
.buy-all-txt {
font-size: 20px;
color: black;
}
.buy-all-txt .money {
margin-left: 20rpx;
font-size: 16px;
color: #532A00;
font-weight: 500;
}
.buy-all-btn {
padding: 5rpx 35rpx;
.title-txt {
font-size: 36rpx;
font-weight: 500;
}
.btn {
font-size: 28rpx;
background-color: $primary-color;
color: $white-color;
text-align: center;
line-height: 32rpx;
height: 32rpx;
padding: 8rpx 25rpx;
border-radius: 10rpx;
background-color: #FFA900;
color: white;
font-size: 16px;
}
.buy-all-btn:active {
background-color: #FFA900C0;
color: white;
.btn:active {
background-color: $primary-color-active;
}
.buy-desc-box {
.desc {
margin-top: 10rpx;
font-size: 24rpx;
color: $text-gray-desc-color;
}
.desc-title {
font-size: 28rpx;
margin-top: 10rpx;
color: $text-color;
}
.item {
display: flex;
flex-direction: row;
margin-top: 10rpx;
color: $text-gray-desc-color;
}
.item-column {
display: flex;
flex-direction: column;
font-size: 12px;
margin-top: 10rpx;
color: $text-gray-desc-color;
}
.buy-desc-txt {
color: #3b3b3b;
}
.buy-desc-title {
color: #3b3b3b;
}
.buy-desc-item {
.row-item {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.buy-desc-row {
display: flex;
flex-direction: row;
flex: 1;
font-size: 20rpx;
color: $text-color;
align-items: center;
justify-content: flex-start;
flex: 1;
}
.buy-desc-row-no-margin {
display: flex;
flex-direction: row;
flex: 1;
align-items: center;
}
.buy-desc-column {
display: flex;
flex-direction: row;
flex: 1;
align-items: center;
.check-icon {
width: 32rpx;
height: 32rpx;
}
.list {
counter-reset: my-counter;
padding: 0;
display: flex;
flex-direction: row;
font-size: 20rpx;
margin-top: 10rpx;
color: $text-gray-desc-color;
}
/* 每个列表项递增计数器 */
@ -368,78 +384,22 @@
text-align: center;
}
.list-item:nth-of-type(n+2) {
margin-left: 20rpx;
}
/* 使用 ::before 伪元素显示计数器值并设置圆形背景 */
.list-item::before {
content: counter(my-counter);
background-color: #F4CE98;
color: black;
background-color: $primary-color-active;
color: var(--black-color);
border-radius: 50%;
width: 18px;
height: 18px;
line-height: 18px;
width: 28rpx;
height: 28rpx;
line-height: 28rpx;
display: flex;
justify-content: center;
align-items: center;
margin-right: 10rpx;
}
.txt {
line-height: 14px;
}
.buy-desc-row-icon {
width: 40rpx;
height: 40rpx;
}
.box-bottom-options {
justify-content: center;
background-color: #FCF3E5;
padding: 20rpx;
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
.box-bottom-options .txt {
color: #532A00;
padding-left: 10rpx;
font-weight: 400;
line-height: 24px;
}
.hint-box {
margin-top: 20rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
border-radius: 20rpx;
background-color: white;
box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.08);
}
.hint-box .icon {
width: 32px;
height: 32px;
}
.hint-box .content {
margin-left: 10px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.hint-content {
color: #532A00;
font-size: 14px;
font-weight: 500;
}
.hint-link {
color: #0a86fa;
text-align: center;
font-size: 12px;
}
</style>

View File

@ -1,56 +1,62 @@
<template>
<view class="create-container">
<view class="page-container">
<view class="container-box">
<swiper indicator-dots style="height: 120rpx;" autoplay indicator-active-color="#fff">
<swiper-item>
<image src="/static/images/banner_1.png" style="width: 100vw;height: 120rpx;"></image>
<image :src="globalData.locImg+'/banner_1.png'" style="width: 100vw;height: 120rpx;"></image>
</swiper-item>
<swiper-item>
<image src="/static/images/banner_2.png" style="width: 100vw;height: 120rpx;"></image>
<image :src="globalData.locImg+'/banner_2.png'" style="width: 100vw;height: 120rpx;"></image>
</swiper-item>
</swiper>
<view class="info-box">
<view class="info-title">项目信息</view>
<rich-text
nodes="<span style='font-size:16px;font-weight:bold;'>系统全称</span><span style='font-size:12px;'> (软著名称)</span>"></rich-text>
<textarea :value="projectName" @input="inputProjectName" class="info-value"
placeholder="请输入系统全称(注:建议以'软件''平台''系统'等字眼结尾)" placeholder-style="font-size:14px;"></textarea>
<view class="info-btn" @click="doCommendProjectName">推荐</view>
</view>
<view class="content-box">
<!-- 第一部分 -->
<view class="section">
<view class="item">
<text class="label">产权联系人</text>
<text style="box-title">基本信息</text>
<view class="item">
<text class="item-title star">产权联系人</text>
<view class="item-content">
<picker style="flex:1;" mode="selector" :range="contactList" range-key="name"
@change="doChangeContact">
<view style="display: flex;align-items: center;">
<view style="font-size: 14px;text-align: center;flex:1;color: #000000;">
{{selectContact.name}}
<view style="display: flex;flex-direction: row;align-items: center;">
<view class="icon-user-default-blue size-48"></view>
<view style="display: flex;flex-direction: column;margin-left: 15rpx;flex:1;">
<text style="font-size: 24rpx;color:$text-color;">{{selectContact.name}}</text>
<text
style="font-size: 22rpx;margin-top: 5rpx;">{{phoneNum(selectContact.phone,3,4,'****')}}</text>
</view>
<view class="icon-arrow-down-line"
style="width: 24rpx;height: 24rpx;margin-right: 20px;"></view>
<view class="icon-arrow-solid mr-20"></view>
</view>
</picker>
<view class="link" @click="doCreateContact">新建</view>
</view>
<view class="item">
<view class="flex-1">
<text class="label" style="flex: 1;">系统版本</text>
<input class="value" :class="version != '' ? 'v-select':''" placeholder="v1.0"
style="flex:1;" :value="version" @input="inputVersion" />
</view>
<view class="flex-1">
<text class="label">系统语言</text>
<view class="value selection-box ml-20">
<view style="display: flex;align-items: center;">
<view class="language-sel" :class="selectLang != ''? 'v-select':''"
@click="doShowLang">{{selectLang}}</view>
<view class="icon-arrow-down-line" style="width: 28rpx;height: 28rpx;"></view>
</view>
</view>
<view style="display: flex;flex-direction: row;align-items: center;" @click="doCreateContact">
<view class="icon-add-circle-blue size-32"></view>
<view class="link ml-10">新建</view>
</view>
</view>
<view class="item">
<view class="label">开发完成时间</view>
</view>
<view class="item">
<text class="item-title star">系统版本</text>
<input class="item-content" :class="version != '' ? 'v-select':''" placeholder="v1.0"
style="flex:1;" :value="version" @input="inputVersion" />
</view>
<view class="item">
<text class="item-title star">系统语言</text>
<view class="item-content">
<view class="language-sel" :class="selectLang != ''? 'v-select':''" @click="doShowLang">
{{selectLang}}
</view>
<view class="icon-arrow-solid"></view>
</view>
</view>
<view class="item">
<text class="item-title">开发完成时间</text>
<view class="item-content">
<picker mode="date" style="flex:1;" :value="completeDate" start="2010-01-01" end="2050-01-01"
@change="bindDateChange">
<view class="select-time" :class="completeDate ==''? 'value-hint':''">
@ -67,46 +73,50 @@
</view>
</view>
</view>
<!-- 第二部分 -->
<view class="section">
<view v-if="canSelPackage" class="item" style="justify-content: space-between;">
<text class="label">套餐包</text>
<text class="value" :class="!isEmpty(selectPackage) ? 'v-select':''"
style="flex: 1;text-align: right;"
</view>
<view class="content-box">
<text class="box-title">套餐与优惠</text>
<view class="item" v-if="canSelPackage">
<text class="item-title">套餐包</text>
<view class="item-content">
<text :class="!isEmpty(selectPackage) ? 'v-select':'v-normal'" style="flex: 1;"
@click="doShowPackage">{{selectPackage.packageName?selectPackage.packageName:'请选择套餐包'}}</text>
<view class="icon-arrow-solid mr-20"></view>
<text v-if="!isEmpty(selectPackage)" class="link" @click="clearSelectPackageOrCoupons">取消</text>
</view>
<view v-if="canSelCoupons" class="item">
<text class="label">优惠券</text>
<text @click="doShowCoupons" class="value"
:class="!isEmpty(selectCoupons)? 'v-select':''">{{selectCoupons.couponId? selectCoupons.coupon.title : '请选择优惠券'}}</text>
</view>
<view class="item" v-if="canSelCoupons">
<text class="item-title">优惠券</text>
<view class="item-content">
<text @click="doShowCoupons" style="flex: 1;"
:class="!isEmpty(selectCoupons)? 'v-select':'v-normal'">{{selectCoupons.couponId? selectCoupons.coupon.title : '请选择优惠券'}}</text>
<view class="icon-arrow-solid mr-20"></view>
<text class="link" v-if="!isEmpty(selectCoupons)" @click="clearSelectPackageOrCoupons">取消</text>
<text class="link" @click="doShowCoupons" v-if="isEmpty(selectCoupons)">选择</text>
</view>
</view>
</view>
</view>
<view class="bottom-box">
<view class="bottom-fixed-footer">
<view class="money">
<view>金额:<text class="price">{{price/100}}</text></view>
<checkbox-group @change="doUrgent" v-if="isShowUrgent">
<checkbox :checked="isUrgent" color="#FFA900"
<checkbox :checked="isUrgent" color="#FFA900" class="round yellow"
style="transform: scale(0.7);transform-origin: left center;margin-left: 8rpx;"
:disabled="isUrgentDisable">
<text style="color: #532A00;padding-left: 8rpx;font-weight: 400;">加急办理{{urgent/100}}</text>
<text
style="color: $text-brown-color;padding-left: 8rpx;font-size:30rpx;">加急办理{{urgent/100}}</text>
</checkbox>
</checkbox-group>
</view>
<view class="btn" @click="doCreateProject">保存并付款</view>
<view class="bottom-btn-green" @click="doCreateProject">保存并付款</view>
</view>
<view>
<!-- 推荐项目名称 -->
<uni-popup ref="commendDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
<view class="bottom-dialog-box">
<view class="bottom-title-box">
<view class="icon-close close-icon" @click="closeCommendDialog"></view>
<view class="bottom-title-txt">项目名称</view>
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeCommendDialog"></view>
<view class="dialog-title-txt has-icon">项目名称</view>
</view>
<textarea @input="inputProjectName" placeholder="请简单介绍您想创建的系统,我们会根据您的描述为您推荐系统全称"
class="commend-text-area"></textarea>
@ -118,138 +128,146 @@
</block>
</view>
</scroll-view>
<view class="confirm-btn" @click="doCreateFullName">生成</view>
<view class="bottom-btn-green" @click="doCreateFullName">生成</view>
</view>
</uni-popup>
<!-- 新建联系人 -->
<uni-popup ref="createContactDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
<view class="bottom-dialog-box">
<view class="bottom-title-box">
<view class="icon-close close-icon" @click="closeCreateContact"></view>
<view class="bottom-title-txt">新建联系人</view>
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeCreateContact"></view>
<view class="dialog-title-txt has-icon">新建联系人</view>
</view>
<view class="form-box">
<view class="form-item">
<view class="form-item-title"></view>
<view class="form-item-title star">&emsp;&emsp;</view>
<input :adjust-position="true" :cursor-spacing="50" :value="contactName" placeholder="请输入姓名"
class="form-item-content" @input="inputContactName" />
</view>
<view class="form-item">
<view class="form-item-title">联系电话</view>
<view class="form-item-title star">联系电话</view>
<input :adjust-position="true" :cursor-spacing="50" :value="contactPhone"
placeholder="请输入联系电话" class="form-item-content" @input="inputContactPhone" />
</view>
<view class="form-item">
<view class="form-item-title no-after" style="padding-left: 16rpx;">联系邮箱</view>
<view class="form-item-title">联系邮箱</view>
<input :adjust-position="true" :cursor-spacing="50" :value="contactEmail"
placeholder="请输入联系邮箱" class="form-item-content" @input="inputContactEmail" />
</view>
<view class="form-item">
<view class="form-item-title no-after" style="padding-left: 16rpx;"></view>
<view class="form-item-title">&emsp;&emsp;</view>
<input :adjust-position="true" :cursor-spacing="50" :value="contactCompany"
placeholder="请输入公司名称" class="form-item-content" @input="inputContactCompany" />
</view>
</view>
<view class="confirm-btn" @click="doCreateFullName">生成</view>
<view class="bottom-btn-green" @click="doSaveContact">保存</view>
</view>
</uni-popup>
<!-- 语言选择 -->
<uni-popup ref="selectLangDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
<view class="bottom-dialog-box">
<view class="bottom-title-box">
<view class="icon-close close-icon" @click="closeLangDialog"></view>
<view class="bottom-title-txt">系统语言</view>
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeLangDialog"></view>
<view class="dialog-title-txt has-icon">系统语言</view>
</view>
<view class="coupons-list-box">
<radio-group style="display: flex;flex-direction: column;width: 100vw;" @change="changeLang">
<block v-for="(item,index) in langList" :key="index">
<radio color="#FFA900" style="transform:scale(0.9);" :checked="selectLang==item"
:value="item">
<view style="margin-left: 20rpx;text-align: center;">{{item}}</view>
</radio>
</block>
</radio-group>
<scroll-view scroll-y style="height: 400rpx;">
<radio-group style="display: flex;flex-direction: column;width: 100vw;"
@change="changeLang">
<block v-for="(item,index) in langList" :key="index">
<radio color="#FFA900" style="transform:scale(0.9);margin-top: 10rpx;"
:checked="selectLang==item" :value="item">
<view style="margin-left: 20rpx;text-align: center;">{{item}}</view>
</radio>
</block>
</radio-group>
</scroll-view>
</view>
<view class="confirm-btn" @click="doConfirmLang">确定</view>
<view class="bottom-btn-green" @click="doConfirmLang">确定</view>
</view>
</uni-popup>
<!-- 套餐包弹窗 -->
<uni-popup ref="selPackageDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
<view class="bottom-dialog-box">
<view class="bottom-title-box">
<view class="icon-close close-icon" @click="closePackage"></view>
<view class="bottom-title-txt">套餐包</view>
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closePackage"></view>
<view class="dialog-title-txt has-icon">套餐包</view>
</view>
<scroll-view scroll-y style="height: 500rpx;">
<view class="coupons-list-box">
<radio-group @change="radioSelPackage">
<block v-for="(item,index) in packageList" :key="index">
<view class="tickets" @click="choosePackage" :data-value="item">
<view class="l-tickets">
<view class="ticket-title">
<view>套餐包</view>
<view>剩余{{item.packageTotalSurplusCount}}</view>
<view style="display: flex;flex-direction: column;padding: 20rpx;">
<scroll-view scroll-y style="height: 500rpx;">
<view class="coupons-list-box">
<radio-group @change="radioSelPackage">
<block v-for="(item,index) in packageList" :key="index">
<view class="tickets" @click="choosePackage" :data-value="item">
<view class="l-tickets">
<view class="ticket-title">
<view>套餐包</view>
<view>剩余{{item.packageTotalSurplusCount}}</view>
</view>
<view class="ticket-content">{{item.packageInfoAppDTO.packageName}}
</view>
<view class="ticket-desc">{{item.packageInfoAppDTO.packageDescription}}
</view>
</view>
<view class="ticket-content">{{item.packageInfoAppDTO.packageName}}</view>
<view class="ticket-desc">{{item.packageInfoAppDTO.packageDescription}}
<view class="r-tickets">
<radio color="#FFA900" style="margin-left: 5px;transform:scale(0.8)"
:value="index+''"
:checked="tempPackage.packageInfoId==item.packageInfoId">
</radio>
</view>
</view>
<view class="r-tickets">
<radio color="#FFA900" style="margin-left: 5px;transform:scale(0.8)"
:value="index+''"
:checked="tempPackage.packageInfoId==item.packageInfoId">
</radio>
</view>
</view>
</block>
</radio-group>
</view>
</scroll-view>
<view class="confirm-btn" @click="doConfirmPackage">确定</view>
</block>
</radio-group>
</view>
</scroll-view>
</view>
<view class="bottom-btn-green" @click="doConfirmPackage">确定</view>
</view>
</uni-popup>
<!-- 优惠卷弹窗 -->
<uni-popup ref="selCouponsDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
<view class="bottom-dialog-box">
<view class="bottom-title-box">
<view class="icon-close close-icon" @click="closeCoupons"></view>
<view class="bottom-title-txt">优惠卷</view>
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeCoupons"></view>
<view class="dialog-title-txt has-icon">优惠卷</view>
</view>
<scroll-view scroll-y style="height: 500rpx;">
<view class="coupons-list-box">
<radio-group @change="radioSelCoupons">
<block v-for="(item,index) in couponsList" :key="index">
<view class="tickets" @click="chooseCoupons" :data-value="item">
<view class="l-tickets">
<view class="ticket-title">
<view
style="display: flex;flex-direction: row;justify-content: center;align-items: center;">
<view class="coupons-icon" style="width: 24px;height: 24px;">
<view style="display: flex;flex-direction: column;padding: 20rpx;">
<scroll-view scroll-y style="height: 500rpx;">
<view class="coupons-list-box">
<radio-group @change="radioSelCoupons">
<block v-for="(item,index) in couponsList" :key="index">
<view class="tickets" @click="chooseCoupons" :data-value="item">
<view class="l-tickets">
<view class="ticket-title">
<view
style="display: flex;flex-direction: row;justify-content: center;align-items: center;">
<view class="coupons-icon" style="width: 24px;height: 24px;">
</view>
<text>优惠卷</text>
</view>
<text>优惠卷</text>
<view>{{item.coupon.amount/100}}</view>
</view>
<view>{{item.coupon.amount/100}}</view>
<view class="ticket-content">{{item.coupon.title}}</view>
<view class="ticket-desc">
有效期:{{item.coupon.useGmtStart}}{{item.coupon.useGmtEnd}}</view>
</view>
<view class="r-tickets">
<radio color="#FFA900" style="margin-left: 5px;transform: scale(0.8);"
:value="index+''" :checked="tempCoupons.couponId==item.couponId">
</radio>
</view>
<view class="ticket-content">{{item.coupon.title}}</view>
<view class="ticket-desc">
有效期:{{item.coupon.useGmtStart}}{{item.coupon.useGmtEnd}}</view>
</view>
<view class="r-tickets">
<radio color="#FFA900" style="margin-left: 5px;transform: scale(0.8);"
:value="index+''" :checked="tempCoupons.couponId==item.couponId">
</radio>
</view>
</view>
</block>
</radio-group>
</view>
</scroll-view>
<view class="confirm-btn" @click="doConfirmCoupons">确定</view>
</block>
</radio-group>
</view>
</scroll-view>
</view>
<view class="bottom-btn-green" @click="doConfirmCoupons">确定</view>
</view>
</uni-popup>
<uni-popup type="message" ref="msg">
@ -267,10 +285,23 @@
} from '@/common/js/util.js'
import {
isEmpty,
objIsEmpty
objIsEmpty,
phoneNum
} from '@/common/js/conver.js'
import {
isValidPhone,
isValidEmail
} from '@/common/js/validator.js'
import {
inject
} from 'vue'
export default {
setup() {
const globalData = inject('globalData')
return {
globalData
}
},
data() {
return {
msgType: 'info',
@ -292,6 +323,7 @@
contactPhone: '', //
contactName: '', //
contactEmail: '', //
contactCompany: '', //
csaNo: '', //NO
projectName: '',
projectNameList: [],
@ -302,7 +334,6 @@
showLang: false, //
tempLang: '', //
selectLang: '',
contactCompany: '', //
isShowUrgent: true, //
urgent: 0, //
isUrgentDisable: false, //
@ -364,6 +395,9 @@
methods: {
//
isEmpty,
phoneNum,
isValidPhone,
isValidEmail,
// dialog
closeCommendDialog() {
this.$refs.commendDialog.close()
@ -617,7 +651,13 @@
},
//
doShowCoupons() {
this.$refs.selCouponsDialog.open()
if (this.couponsList.length <= 0) {
this.msgType = 'error'
this.msgTxt = '您暂时没有可以使用的优惠卷'
this.$refs.msg.open()
} else {
this.$refs.selCouponsDialog.open()
}
},
//
closeCoupons() {
@ -648,6 +688,79 @@
_self.isUrgent = !_self.isUrgent
_self.countPrice()
},
//
inputContactName(e) {
this.contactName = e.detail.value
},
//
inputContactPhone(e) {
console.log(e)
this.contactPhone = e.detail.value
},
//
inputContactCompany(e) {
this.contactCompany = e.detail.value
},
//
inputContactEmail(e) {
this.contactEmail = e.detail.value
},
//
doSaveContact() {
const _self = this
if (_self.contactName == '') {
_self.msgTxt = '请输入联系人姓名'
_self.msgType = 'error'
_self.$refs.msg.open()
return
}
if (_self.contactPhone == '' || !isValidPhone(_self.contactPhone)) {
_self.msgTxt = '请输入正确的联系电话'
_self.msgType = 'error'
_self.$refs.msg.open()
return
}
if (_self.contactEmail != '') {
if (!isValidEmail(_self.contactEmail)) {
_self.msgTxt = '请输入正确的邮箱'
_self.msgType = 'error'
_self.$refs.msg.open()
return
}
}
const data = {
company: _self.contactCompany,
csaNo: _self.csaNo,
name: _self.contactName,
phone: _self.contactPhone,
email: _self.contactEmail
}
uni.showLoading({
title: '创建中...'
})
UserApi.doCreateContact(data)
.then(res => {
uni.hideLoading()
_self.msgTxt = '新建成功'
_self.msgType = 'success'
_self.$refs.msg.open()
_self.$refs.createContactDialog.close()
_self.contactEmail = ''
_self.contactPhone = ''
_self.contactName = ''
_self.contactCompany = ''
//
_self.doGetContactList()
})
.catch(err => {
console.log(err)
uni.hideLoading()
_self.msgTxt = err.msg ? err.msg : '新建失败,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
// _self.$refs.crateContactDialog.close()
})
},
//
countPrice() {
const _self = this;
@ -696,8 +809,8 @@
})
//
var list = []
if (_self.isUrgent != '') {
list = [_self.isUrgent]
if (_self.isUrgent != '' && _self.isUrgent) {
list = ['URGENT']
}
const data = {
applyContactCsaNo: _self.selectContact.csaNo, //
@ -739,38 +852,6 @@
</script>
<style lang="scss">
.custom-checkbox {
font-size: 14px;
margin-left: 14px;
}
.custom-wx-checkbox .wx-checkbox-input.wx-checkbox-input-checked {
color: #fff !important;
background-color: #FFA900;
border: 1px solid #FFA900;
}
.custom-wx-checkbox .wx-checkbox-input {
-webkit-appearance: none;
appearance: none;
margin-bottom: 3px;
outline: 0;
text-indent: 0;
width: 32rpx;
height: 32rpx;
background-color: transparent;
position: relative;
border: 1rpx solid #FFA900;
box-sizing: border-box;
text-align: center;
}
/*钩大小*/
.custom-wx-checkbox .wx-checkbox-input.wx-checkbox-input-checked:before {
font-size: 32rpx;
text-align: center;
}
.create-container {
display: flex;
flex-direction: column;
@ -781,7 +862,7 @@
display: flex;
flex-direction: column;
justify-content: flex-start;
padding: 15px;
padding-bottom: 200rpx;
}
.create-title {
@ -790,19 +871,23 @@
}
.commend-text-area {
border: 1px solid #f2f2f2;
padding: 10px;
height: 50px;
align-self: center;
width: 85vw;
margin-top: 20rpx;
font-size: 28rpx;
background-color: $bg-gray-input-color;
border-radius: 15rpx;
}
.info-box {
display: flex;
flex-direction: column;
margin-top: 20rpx;
background-color: $white-color;
border-radius: 15rpx;
padding: 20rpx;
}
.info-title {
@ -812,13 +897,13 @@
.info-value {
margin-top: 20rpx;
border: 1rpx solid #f2f2f2;
font-size: 14px;
font-size: 24rpx;
line-height: 16px;
background-color: white;
background-color: $bg-gray-input-color;
height: 65rpx;
width: auto;
padding: 15px;
border-radius: 15rpx;
}
.info-btn {
@ -832,23 +917,42 @@
}
.content-box {
display: flex;
flex-direction: column;
padding: 20rpx;
background-color: $white-color;
border-radius: 15rpx;
margin-top: 20rpx;
}
.section {
border: 1px solid #f4f4f4;
border-radius: 5rpx;
padding: 15rpx;
margin-bottom: 15rpx;
background-color: white;
.box-title {
font-size: 32rpx;
font-weight: $black-color;
color: $text-color;
}
.item {
display: flex;
align-items: center;
margin-bottom: 10rpx;
padding: 20rpx 10rpx;
flex-direction: column;
margin-top: 15rpx;
margin-left: 15rpx;
}
.item-title {
font-size: 28rpx;
color: $text-color;
}
.item-content {
display: flex;
flex-direction: row;
align-items: center;
background-color: $bg-gray-input-color;
margin-top: 10rpx;
padding: 15rpx;
border-radius: 15rpx;
}
.label {
@ -873,7 +977,6 @@
flex: 1;
font-size: 14px;
text-align: left;
padding-left: 40rpx;
}
.clear-icon {
@ -889,31 +992,33 @@
.value {
color: #9A9A9A;
padding-right: 10px;
flex: 1;
text-align: right;
padding-right: 10px;
font-size: 14px;
}
.value-hint {
color: #9A9A9A;
color: $text-gray-hint-color;
}
.v-select {
color: #000000;
font-size: 28rpx;
color: $text-color;
}
.v-normal {
font-size: 28rpx;
color: $text-gray-hint-color;
}
.language-sel {
font-size: 14px;
flex: 1;
text-align: center;
}
.link {
font-size: 28rpx;
color: #007AFF;
}
@ -967,19 +1072,8 @@
align-items: center;
}
.bottom-box .btn {
background-color: #37AD46;
color: white;
text-align: center;
height: 40px;
width: 94vw;
line-height: 40px;
border-radius: 20rpx;
margin-bottom: 20px;
}
.bottom-box .money {
color: #532A00;
.money {
color: $text-brown-color;
font-size: 20px;
display: flex;
flex-direction: row;
@ -995,39 +1089,33 @@
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-start;
font-size: 14px;
width: 100vw;
font-size: 28rpx;
padding: 40rpx 0rpx;
}
.form-item {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
width: 80vw;
padding: 10px;
}
.form-item:nth-of-type(n+2) {
margin-top: 15rpx;
}
.form-item-title {
flex: .3;
font-size: 14px;
color: black;
font-weight: 500;
text-align: left;
}
.form-item-title:not(.no-after)::before {
content: "*";
color: red;
font-size: 14px;
margin-left: 1px;
text-align: center;
}
.form-item-content {
flex: 1;
flex: .7;
text-align: right;
padding: 15rpx;
border-radius: 15rpx;
background-color: $bg-gray-input-color;
}
.project-box {
@ -1071,15 +1159,11 @@
.coupons-list-box {
display: flex;
flex-direction: column;
align-items: center;
min-height: 400rpx;
margin-top: 30rpx;
}
.tickets {
display: flex;
padding: 5px;
width: 88vw;
box-sizing: border-box;
height: 210rpx;
}

View File

@ -68,11 +68,10 @@
</view>
<!-- 列表 -->
<view class="content-box">
<ContainerLoading :loadingVisible="listLoading" :style="{'height':contentHeight+'px'}"
<ContainerLoading :loadingVisible="listLoading" :style="{'height':contentHeight+'rpx'}"
@doRefresh="doRefreshList">
<scroll-view scroll-y="true" :style="{'height':contentHeight+'px'}" refresher-enabled="true"
:refresher-triggered="listRefreshTrig" :refresher-threshold="100" :lower-threshold="100"
refresher-background="#FFFFFF00" @refresherrefresh="doRefreshList" @scrolltolower="doLoadMore">
<scroll-view scroll-y="true" :style="{'height':contentHeight+'rpx'}" :lower-threshold="100"
refresher-background="#FFFFFF00" @scrolltolower="doLoadMore">
<view class="list-content">
<block v-for="(item,index) in projectList" :key="index">
<view class="list-item">
@ -86,38 +85,49 @@
</block>
</swiper>
<view class="item-img-status">
<text>{{status(item.generate.generateStatus)}}</text>
<text>{{status(item.generate.generateStatus,item.aiSetting.settingStatus)}}</text>
</view>
</view>
<view class="item-content">
<view class="item-content-title">
<view class="project-name single-line">{{item.projName}}</view>
<view class="project-status">
{{item.pay.servicePackageId != '' ? '套餐包':item.pay.charge}}
<view class="list-item-content">
<view class="project-name">{{item.projName}}</view>
<view class="project-aff">
<view class="icon icon-user-ind"></view>
<text class="txt">{{item.apply.applyContactName}}</text>
</view>
</view>
<view class="project-aff">
<view class="icon icon-user-ind"></view>
<text class="txt">{{item.apply.applyContactName}}</text>
</view>
<view class="project-btns">
<view class="project-create-time">{{item.gmtCreate}}</view>
<view v-if="item.generate.generateStatus=='SUCCESS'" class="project-btn"
@click="doShowDownload(item)">下载</view>
<view v-if="item.generate.generateStatus=='FAILED'" class="project-re-btn"
@click="doReCreate(item)">重新生成</view>
</view>
<view class="list-item-btns">
<view v-if="item.pay.servicePackageId != ''" class="project-status">套餐包
</view>
<rich-text wx:else class="project-status single-line"
:nodes="moneyTxt(8,12,(item.pay.payment/100))"></rich-text>
<view v-if="item.isShowCreate" class="project-btn"
@click="doCreatePro(item)">生成</view>
<block v-else>
<view v-if="item.generate.generateStatus=='SUCCESS'" class="project-btn"
@click="doShowDownload(item)">下载
</view>
<view v-else-if="item.generate.generateStatus=='FAILED'"
class="project-re-btn" @click="doReCreate(item)">重新生成
</view>
<view v-else-if="item.generate.generateStatus=='NONE'"
class="project-btn" @click="doCreatePro(item)">生成</view>
</block>
</view>
</view>
</view>
</block>
<uni-load-more :status="loadMore"></uni-load-more>
<uni-load-more :status="loadMore" color="var(--divider-color)"></uni-load-more>
</view>
</scroll-view>
</ContainerLoading>
</view>
</view>
<!-- 下载弹窗 -->
<uni-popup ref="downloadPopup" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
<view class="bottom-dialog-box">
<view class="bottom-dialog-container">
<view style="font-size: 16px;font-weight: bold;align-self: center;">资料下载</view>
<view style="margin-top: 10px;padding-bottom: 80rpx;">
<view class="download-desc">
@ -198,12 +208,20 @@
} from '@/common/js/net/http.js'
import {
status
status,
moneyTxt
} from '@/common/js/conver.js'
import {
get,
set
} from '@/common/js/cache/storage.js';
import {
pxToRpx
} from '@/common/js/util.js'
import {
homeTypeList,
expandList
} from '@/common/js/data.js'
export default {
components: {
ContainerLoading,
@ -227,33 +245,9 @@
page: 1,
rows: 10
},
typeList: [{
value: 'FREE',
label: '免费试用'
},
{
value: 'MATERIAL',
label: '写材料'
},
{
value: 'ALL',
label: '全托管'
},
],
typeList: homeTypeList,
currentType: '',
expandList: [{
value: 'PKG',
label: '安装包'
},
{
value: 'VIDEO_DEMO',
label: '演示视频'
},
{
value: 'URGENT',
label: '加急'
},
],
expandList: expandList,
currentExpand: '',
tagList: [],
currentTag: '',
@ -290,8 +284,13 @@
onReady() {
this.calculateRemainingHeight()
},
onPullDownRefresh() {
this.doRefreshList()
uni.stopPullDownRefresh()
},
methods: {
status,
moneyTxt,
//
countBarHeight() {
//#ifdef MP-WEIXIN || H5
@ -433,7 +432,7 @@
},
//
doRefreshList() {
console.log('正在刷新...')
console.log('页面刷新...')
const _self = this
_self.listRefreshTrig = true
_self.listLoading = 'loading'
@ -460,6 +459,8 @@
//
const systemInfo = uni.getSystemInfoSync();
const windowHeight = systemInfo.windowHeight;
const screenHeight = systemInfo.screenHeight;
const screenWidth = systemInfo.screenWidth
// bg-title container-title
//
const query = uni.createSelectorQuery().in(this);
@ -467,11 +468,14 @@
if (data) {
const occupiedHeight = data.height;
//
this.contentHeight = windowHeight - occupiedHeight - this.totalHeight - this
.statusBarHeight;
console.log('窗口高度', windowHeight);
console.log('内容高度', this.contentHeight)
console.log('头布局高度', occupiedHeight);
let tabbarHeight = screenHeight - windowHeight
this.contentHeight = windowHeight - occupiedHeight - tabbarHeight - 20;
let coverHeight = pxToRpx(this.contentHeight, screenWidth)
this.contentHeight = coverHeight
console.log('头布局高度', occupiedHeight)
console.log('屏幕高度', screenHeight)
console.log('窗口高度', windowHeight)
console.log('计算内容高度', this.contentHeight)
} else {
console.log('未获取到高度');
}
@ -481,6 +485,12 @@
addPrefixToPreviewImgs(data) {
const prefix = this.imgUrl;
return data.map(item => {
const values = Object.values(item.aiSetting);
const isSuccess = values.every(value => value === "SUCCESS");
const isCreate = values.every(value => value === "NONE");
const isFailed = values.some(value => value === "FAILED");
const isShow = !isSuccess && (isCreate || isFailed);
item.isShowCreate = isShow
if (item.codeTypePage && item.codeTypePage.previewImgs) {
const imgIds = item.codeTypePage.previewImgs.split(',');
item.codeTypePage.previewImgs = imgIds.map(id => prefix + id);
@ -649,6 +659,54 @@
_self.$refs.msg.open()
})
},
//
doCreatePro(e) {
uni.showLoading({
title: '生成中...',
})
const _self = this
const item = e.currentTarget.dataset.value
ProApi.doBuildProject(item.projId)
.then(res => {
//
uni.hideLoading()
console.log(res)
_self.msgTxt = '正在生成中,请耐心等待'
_self.msgType = 'success'
_self.$refs.msg.open()
_self.doRefreshList()
})
.catch(err => {
console.log(err)
uni.hideLoading()
_self.msgType = 'error'
_self.msgTxt = err.msg ? err.msg : '生成失败,请稍后重试'
_self.$refs.msg.open()
})
},
//
doReCreate(e) {
console.log(e)
const item = e.currentTarget.dataset.value
const _self = this
uni.showLoading({
title: '提交中...',
})
ProApi.doReCreate(item.projId)
.then(res => {
uni.hideLoading()
_self.msgType = 'success'
_self.msgTxt = '提交成功,正在生成中,请耐心等待'
_self.$refs.msg.open()
_self.doRefreshList()
})
.catch(err => {
uni.hideLoading()
_self.msgTxt = err.msg ? err.msg : '提交失败,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
})
},
}
}
</script>
@ -688,7 +746,7 @@
position: absolute;
top: 0rpx;
left: 0rpx;
padding: 30rpx;
padding: 0rpx 30rpx 30rpx 30rpx;
width: 100vw;
box-sizing: border-box;
}
@ -699,7 +757,7 @@
background-repeat: no-repeat;
background-position: center;
width: 100vw;
height: 480rpx;
height: 520rpx;
}
.content-up {
@ -740,14 +798,14 @@
justify-content: center;
align-items: center;
flex: 2.5;
background-color: #FFE5BC;
background-color: $btn-primary-color;
color: #550101;
border-radius: 10rpx;
text-align: center;
}
.create-btn:active {
background-color: #ffe5bc79;
background-color: $btn-primary-color-active;
}
.buy-btn {
@ -756,19 +814,19 @@
width: 80px;
height: 78px;
border-radius: 4px;
background-color: rgba(78, 175, 121, 1);
color: rgba(255, 255, 255, 1);
background-color: $btn-green-color;
color: $white-color;
font-size: 18px;
text-align: center;
font-family: PingFangSC-regular;
}
.buy-btn:active {
background-color: rgba(78, 175, 121, .3);
background-color: $btn-green-color-active;
}
.notice-box {
background-color: #FFE5BC;
background-color: $btn-primary-color;
margin-top: 20rpx;
border-radius: 3px;
display: flex;
@ -786,7 +844,7 @@
.notice-box .txt {
height: 20px;
line-height: 17px;
color: rgba(85, 0, 0, 1);
color: $text-brown-color;
font-size: 12px;
text-align: left;
line-height: 20px;
@ -809,7 +867,7 @@
.list-title-txt {
line-height: 23px;
color: rgba(16, 16, 16, 1);
color: $text-color;
font-size: 16px;
font-family: TaipeiHei-bold;
font-weight: bold;
@ -825,7 +883,7 @@
.list-title-line {
width: 10rpx;
background-color: #FE9944;
background-color: $primary-color;
border-radius: 5rpx;
height: 30rpx;
}
@ -841,21 +899,21 @@
.btn-select {
line-height: 20px;
background-color: rgba(244, 206, 152, 0.18);
color: rgba(233, 157, 66, 1);
background-color: $bg-primary-shallow-color;
color: $primary-color;
font-size: 14px;
text-align: center;
padding: 5px;
border: 1px solid rgba(244, 206, 152, 0.18);
border: 1px solid $bg-primary-shallow-color;
}
.btn-normal {
line-height: 20px;
background-color: rgba(255, 255, 255, 1);
color: rgba(16, 16, 16, 1);
background-color: $white-color;
color: $text-color;
font-size: 14px;
text-align: center;
border: 1px solid rgba(248, 248, 248, 1);
border: 1px solid $divider-color;
padding: 5px;
}
@ -870,8 +928,8 @@
white-space: nowrap;
line-height: 17px;
border-radius: 2px;
background-color: rgba(255, 226, 168, 0.57);
color: rgba(93, 57, 0, 1);
background-color: $primary-color-active;
color: $text-brown-color;
font-size: 12px;
text-align: center;
flex-wrap: nowrap;
@ -881,8 +939,8 @@
.tab-normal {
line-height: 17px;
border-radius: 2px;
background-color: rgba(248, 248, 248, 1);
color: rgba(154, 154, 154, 1);
background-color: $bg-gray-color;
color: $text-gray-hint-color;
font-size: 12px;
text-align: center;
flex-wrap: nowrap;
@ -912,10 +970,11 @@
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
background-color: #F7F7F7;
background-color: $gray-bg-color;
border-radius: 2px;
padding: 5px;
align-items: center;
width: 100%;
}
.list-item:nth-of-type(n+2) {
@ -927,6 +986,8 @@
flex-direction: column;
justify-content: center;
position: relative;
width: 200rpx;
height: 132rpx;
}
.item-img .cover {
@ -936,7 +997,7 @@
}
.item-img-status {
background-color: #AFE5C7;
background-color: $bg-green-status-light-color;
text-align: center;
position: absolute;
bottom: 0;
@ -949,11 +1010,30 @@
.item-content {
display: flex;
flex-direction: column;
flex-direction: row;
justify-content: space-between;
box-sizing: border-box;
flex: 1;
height: 72px;
padding-left: 16px;
width: 69%;
max-width: 69%;
padding-left: 15rpx;
padding-right: 15rpx;
}
.list-item-content {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 80%;
}
.list-item-btns {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 20%;
max-width: 20%;
}
.item-content-title {
@ -965,31 +1045,29 @@
.project-name {
color: rgba(16, 16, 16, 1);
font-size: 14px;
color: $text-color;
font-size: 28rpx;
text-align: left;
font-weight: bold;
flex: 1;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.project-status {
font-size: 12px;
color: rgba(16, 16, 16, 1);
font-weight: 400;
flex: .3;
text-align: right;
font-size: 24rpx;
line-height: 40rpx;
color: $text-color;
font-weight: bold;
text-align: center;
white-space: nowrap;
}
.item-content-title {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.project-aff {
color: #4f4f4f;
margin-top: 2px;
font-size: 13px;
color: $text-gray-desc-color;
font-size: 24rpx;
display: flex;
flex-direction: row;
justify-content: flex-start;
@ -1014,20 +1092,21 @@
}
.project-create-time {
font-size: 26rpx;
color: #4f4f4f;
font-size: 24rpx;
color: $text-gray-desc-color;
}
.project-btn {
font-size: 20rpx;
background-color: #FE9944;
color: white;
padding: 2rpx 15rpx;
border-radius: 3rpx;
background-color: $primary-color;
color: $white-color;
padding: 5rpx 15rpx;
border-radius: 5rpx;
text-align: center;
}
.project-btn:active {
background-color: #fe9844d5;
background-color: $primary-color-active;
}
.project-re-btn {
@ -1059,21 +1138,19 @@
.marquee-text {
display: inline-block;
color: rgba(85, 0, 0, 1);
font-size: 14px;
animation: marquee 25s linear infinite;
color: $text-brown-color;
font-size: 24rpx;
margin-left: 15px;
white-space: nowrap;
transform: translateX(100%);
animation: marquee 10s linear infinite;
}
@keyframes marquee {
0% {
transform: translateX(100%);
transform: translateX(0%);
}
100% {
/* 滚动到容器左侧外部 */
transform: translateX(-100%);
}
}
@ -1181,14 +1258,14 @@
justify-content: center;
align-items: center;
width: 100vw;
background-color: #fe9844c9;
background-color: $primary-color;
color: white;
padding: 5px 0px;
border-radius: 5px;
}
.download-all:active {
background-color: #fe9844;
background-color: $primary-color;
}

View File

@ -45,8 +45,9 @@
// #endif
// #ifdef H5 || MP-BAIDU
set('token',
'NjBIOFRORDcraDc4U1RsUTI4a3B5em50VVVzclp2QjdFWDV2dVJJc0VLL3Fhazd0bjZPaU9Tc3E1cHc2cmYyZTc0Y2FITTdRR0pMTk1xaVRHM0I1d0NiTnJ4b1BVSVNtUFl4SlFtR1g2M0tCQTc2TXM4L3d4ZVhwM09VREN0bDMrTXNoa0trWDR1eG5PdG84OXZ4UVE0dDhRUDdQRk1Qd2N0ZWVLSzJaZzBjcC82NXdueGQvUkZNSm1vZ2doQmFncnRQN0pFQ240enZHaEdFcGpVTDZqY3VpdHRUZERUS2Y5RG5BdXZmeE1kNVVyM29icTZTV054RzNYdURDa2lvR3dIbi9nNmJLOHduNUl4Snp3Qm1qTDRkYXFXZ2plaGNQRmw3ZXBZTlgxV3cwZkVuaGxHZlhRb0ZZMlEveEJhQS9zeWE5NnpxRlUxTmJWYkRmMitvMTZXRnExVytHNEhEb1JPZkE4TG5UVzc0PQ=='
'WWZRMmsySWJib2hKQUZVVzdYdjFBS3RGRko5UzVVb1dWdm1SZUVxVnUycVhTeDFtN0Q2aHcyTXlwVFRXUTJZM2I5eWRjc2VXK0lLd2d2Z1pCSndydFZQYjZ6ejIyakd6czV4UVF2V3hSRUxsNWZlOStITjhTU1JWdXNWWExIeTloNHNsVkdPMWQ3Q0JGamNhSnpSNXhVVXN5Wnk1NmpnOGNsckxueHNiZFBVdlU3NGpkZDRHMTQrc1pYTGlyZ1c3MnprdFRvTUhWODhJR2M1THhObkN4NGpKZk9sUmVJcTJqYTBZalp0YkNxRU5aNjA3WklLQnRTMVdEdXg0NW1tMEV5V3RSSEEvV0M2ZmFoRWtzRGRoZkd0ZUcyZ2pKRFYwa3YxYThDZm53ZGE5bTBYKzgrVm8yV1h1aTdVU2FQbVAwbFZ6TnhobkxvNGswMWlsMGtiSVNBPT0='
)
set('userId', 'c2438eb8-2685-49a9-bf02-5111a5192d96')
setTimeout(() => {
uni.switchTab({
url: '/pages/index/home'

View File

@ -12,10 +12,9 @@
</view>
<ContainerLoading :loadingVisible="loadingState" style="height: 83vh;margin-top: 30rpx;"
@doRefresh="doRefreshList">
<scroll-view scroll-y style="height: 83vh;" refresher-enabled :refresher-triggered="listRefreshTrig"
:refresher-threshold="100" :lower-threshold="100" refresher-background="#FFFFFF00"
@refresherrefresh="doRefreshList" @scrolltolower="doLoadMore">
<view class="order-box">
<scroll-view scroll-y style="height: 83vh;" :lower-threshold="100" refresher-background="#FFFFFF00"
@scrolltolower="doLoadMore">
<view class="contact-order-box">
<block v-for="(item,index) in contactList" :key="index">
<view class="order-item">
<view class="contact-desc">
@ -145,6 +144,10 @@
this.doGetCsaNo()
this.doGetMineContactList()
},
onPullDownRefresh() {
this.doRefreshList()
uni.stopPullDownRefresh()
},
methods: {
inputKeywords(e) {
this.keywords = e.detail.value
@ -465,11 +468,10 @@
}
.order-box {
.contact-order-box {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.order-item {

View File

@ -1,5 +1,5 @@
<template>
<view class="body-container">
<view class="page-container">
<view class="list-title-btns">
<view @click="doChangeStatus" data-value="1" :class="currentStatus==1? 'btn-select':'btn-normal'"
class="border-left">
@ -23,11 +23,10 @@
</view>
</view>
</view>
<view style="margin-top: 100rpx;">
<view style="margin-top: 10rpx;">
<ContainerLoading :loadingVisible="loadingState">
<scroll-view scroll-y style="height: 85vh;" refresher-enabled :refresher-triggered="listRefreshTrig"
:refresher-threshold="100" :lower-threshold="100" @refresherrefresh="doRefreshList" refresher-background="#FFFFFF00"
@scrolltolower="doLoadMore">
<scroll-view scroll-y style="height: 80vh;" :lower-threshold="100" refresher-background="#FFFFFF00"
@scrolltolower="doLoadMore">
<view class="coupons-list-box">
<block v-for="(item,index) in couponsList" :key="index">
<view class="tickets" :class="boderStyle(currentStatus)">
@ -101,6 +100,10 @@
//
this.doRefreshList()
},
onPullDownRefresh() {
this.doRefreshList()
uni.stopPullDownRefresh()
},
methods: {
boderStyle,
fontColor,
@ -190,7 +193,7 @@
showRule() {
const id = '89c4ca41-a44e-4ae2-bad3-6fa6536dd453'
wx.navigateTo({
url: '/pages/treaty/rule/rule?id=' + id,
url: '/pages/common/rule/rule?id=' + id,
})
}
}
@ -199,15 +202,11 @@
<style lang="scss">
.list-title-btns {
position: fixed;
top: 45px;
left: 0;
display: flex;
flex-direction: row;
justify-content: space-between;
font-size: 16px;
text-align: center;
width: 100vw;
background-color: #F0F0F0;
}

View File

@ -1,8 +1,8 @@
<template>
<view class="body-container">
<view class="page-container">
<view class="user-info-container">
<view class="user-item">
<view class="user-item-title"></view>
<view class="user-item-title">&emsp;&emsp;</view>
<view class="user-item-content">
<input :value="userInfo.userInfoName" @input="inputName" placeholder="请输入姓名" />
</view>
@ -14,8 +14,8 @@
</view>
</view>
</view>
<view class="user-bottom-box">
<view class="user-green-bottom-btn" @click="doUpdateInfo">保存</view>
<view class="bottom-fixed-footer">
<view class="bottom-btn-green" @click="doUpdateInfo">保存</view>
</view>
</view>
<uni-popup ref="msg" type="message">
@ -136,12 +136,12 @@
}
</script>
<style scoped>
<style lang="scss" scoped>
.user-info-container {
height: 100vh;
background-color: white;
border-radius: 10px;
padding: 20px;
padding: 15rpx;
}
.user-item {
@ -159,6 +159,9 @@
.user-item-content {
flex: .7;
text-align: right;
padding: 15rpx;
border-radius: 15rpx;
background-color: $bg-gray-input-color;
}
.user-bottom-box {

View File

@ -0,0 +1,334 @@
<template>
<view class="page-container">
<view class="list-title-btns">
<view @click="doChangeStatus" data-value="" :class="currentStatus==''? 'btn-select':'btn-normal'"
class="border-left">
<view class="tab">
<text>全部</text>
<view :class="currentStatus==''?'border-select':'border-normal'"></view>
</view>
</view>
<view @click="doChangeStatus" data-value="0" :class="currentStatus=='0'? 'btn-select':'btn-normal'"
class="border-right">
<view class="tab">
<text>未读</text>
<view :class="currentStatus=='0'?'border-select':'border-normal'"></view>
</view>
</view>
<view @click="doChangeStatus" data-value="1" :class="currentStatus=='1'? 'btn-select':'btn-normal'"
class="border-right">
<view class="tab">
<text>已读</text>
<view :class="currentStatus=='1'?'border-select':'border-normal'"></view>
</view>
</view>
</view>
<view style="margin-top: 10rpx;">
<ContainerLoading :loadingVisible="loadingState">
<scroll-view scroll-y style="height: 80vh;" :lower-threshold="100" refresher-background="#FFFFFF00"
@scrolltolower="doLoadMore">
<view class="coupons-list-box">
<block v-for="(item,index) in msgList" :key="index">
<view class="msg-item-container">
<view class="msg-item-box">
<view class="msg-title-box" @click="readItem" :data-value="item">
<view class="title-type" :class="item.isRead==0? 'text-noread':'text-read'">
{{item.title}}
</view>
<view class="title-time">{{item.gmtCreate}}</view>
</view>
<view class="divider-v mt-10"></view>
<view class="msg-content-box" @click="readItem" :data-value="item">
<view :class="item.isRead==0? 'text-noread':'text-read'"
class="msg-content-content">{{item.content}}</view>
</view>
<view @click="deleteItem" :data-value="item" class="icon-del-red size-48"
style="align-self: flex-end;"></view>
</view>
</view>
</block>
<uni-load-more :status="hasMore"></uni-load-more>
</view>
</scroll-view>
</ContainerLoading>
</view>
<uni-popup type="message" ref="msg">
<uni-popup-message :type="msgType" :message="msgHint" :duration="2000"></uni-popup-message>
</uni-popup>
</view>
</template>
<script>
import ContainerLoading from '@/components/container-loading.vue'
import UserApi from '@/common/js/net/UserApi.js'
export default {
components: {
ContainerLoading
},
setup() {
},
data() {
return {
currentStatus: '',
msgList: [], //
pageData: {
page: 1,
rows: 10,
isRead: '', //
}, //
loadingState: 'loading', //
listRefreshTrig: false, //list
isLoadMore: false, //
hasMore: 'more', //
keywords: '', //
msgType: 'info',
msgHint: '',
}
},
onLoad(options) {
uni.setNavigationBarTitle({
title: '消息通知',
})
uni.setNavigationBarColor({
frontColor: '#000000', // #ffffff#000000
backgroundColor: '#F0F0F0', //
animation: { //
duration: 500,
timingFunc: 'easeIn'
}
})
this.doRefreshList()
},
methods: {
doChangeStatus(e) {
this.currentStatus = e.currentTarget.dataset.value
//
this.doRefreshList()
},
doGetMineMsgList(isRefresh) {
const _self = this
_self.msgList = isRefresh ? [] : _self.msgList
_self.loadingState = isRefresh ? 'loading' : ''
UserApi.doGetMineMsgNotice(_self.pageData)
.then(res => {
var status = 'success'
status = res.rows && res.rows.length > 0 ? 'success' : 'empty'
_self.loadingState = isRefresh ? status : ''
_self.msgList = _self.msgList.concat(res.rows)
_self.isLoadMore = false
_self.hasMore = _self.msgList.length < res.total ? 'more' : 'noMore'
})
.catch(err => {
_self.loadingState = 'error'
_self.isLoadMore = false
_self.hasMore = 'more'
})
},
//
doRefreshList() {
const _self = this
_self.loadingState = 'loading'
_self.hasMore = 'more'
_self.pageData.page = 1
_self.pageData.isRead = _self.currentStatus
_self.isLoadMore = false
_self.doGetMineMsgList(true)
},
//
doLoadMore() {
//
const _self = this
if (_self.isLoadMore || !_self.hasMore) {
return
}
_self.isLoadMore = true
_self.pageData.page = ++_self.pageData.page
_self.pageData.isRead = _self.currentStatus
_self.doGetMineMsgList(false)
},
readItem(e) {
const item = e.currentTarget.dataset.value
if (item.isRead == 1) {
return
}
uni.showLoading({
title: '加载中...',
})
const _self = this
const ids = {
ids: [item.userMsgId]
}
UserApi.doReadMineMsgNotice(ids)
.then(res => {
uni.hideLoading()
_self.doRefreshList()
})
.catch(err => {
uni.hideLoading()
_self.msgHint = err.msg ? err.msg : '操作失败,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
})
},
deleteItem(e) {
const item = e.currentTarget.dataset.value
const _self = this
uni.showModal({
title: '警告',
content: '您确定要删除该消息吗?',
success: res => {
if (res.confirm) {
_self.doDeleteItem(item)
}
}
})
},
//
doDeleteItem(item) {
const _self = this
uni.showLoading({
title: '删除中...',
})
UserApi.doDeleteMineMsgNotice(item.userMsgId)
.then(res => {
uni.hideLoading()
_self.msgHint = '删除成功'
_self.msgType = 'success'
_self.$refs.msg.open()
_self.doRefreshList()
})
.catch(err => {
uni.hideLoading()
_self.msgHint = err.msg ? err.msg : '删除失败,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
})
}
},
onPullDownRefresh() {
this.doRefreshList()
uni.stopPullDownRefresh()
}
}
</script>
<style lang="scss" scoped>
.list-title-btns {
display: flex;
flex-direction: row;
justify-content: space-between;
font-size: 16px;
text-align: center;
background-color: #F0F0F0;
}
.btn-select {
line-height: 20px;
font-size: 16px;
text-align: center;
flex: 1;
padding: 10px;
color: $bg-green-status-deep-color;
font-weight: bold;
}
.btn-normal {
line-height: 20px;
color: $text-color;
flex: 1;
font-size: 16px;
text-align: center;
padding: 10px;
font-weight: bold;
}
.border-select {
width: 20px;
height: 4px;
background-color: $bg-green-status-deep-color;
margin-top: 10px;
border-radius: 2px;
}
.tab {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.border-normal {
width: 20px;
height: 4px;
margin-top: 10px;
border-radius: 2px;
background-color: $bg-top-color;
}
.coupons-list-box {
display: flex;
flex-direction: column;
}
.msg-item-container {
background-color: transparent;
}
.msg-item-container:nth-of-type(n+2) {
margin-top: 20rpx;
}
.msg-item-box {
display: flex;
flex-direction: column;
padding: 20rpx;
background-color: $white-color;
border-radius: 5rpx;
}
.msg-title-box {
display: flex;
flex-direction: row;
justify-content: space-between;
position: relative;
}
.text-read {
color: $text-gray-hint-color;
}
.text-noread {
color: $text-color;
}
.title-type {
font-size: 28rpx;
font-weight: bold;
}
.title-time {
font-size: 24rpx;
color: $text-gray-hint-color;
}
.msg-content-box {
margin-top: 15rpx;
}
.msg-content-notice-point {
width: 15rpx;
height: 15rpx;
border-radius: 15rpx;
background-color: $primary-color-active;
position: absolute;
right: -10rpx;
top: -10rpx;
}
.msg-content-content {
font-size: 28rpx;
}
</style>

View File

@ -9,9 +9,8 @@
</view>
<ContainerLoading :loadingVisible="loadingState" style="height: 85vh;margin-top: 30rpx;"
@doRefresh="doRefreshList">
<scroll-view scroll-y style="height: 85vh;" refresher-enabled :refresher-triggered="listRefreshTrig"
:refresher-threshold="100" :lower-threshold="100" @refresherrefresh="doRefreshList"
refresher-background="#FFFFFF00" @scrolltolower="doLoadMore">
<scroll-view scroll-y style="height: 85vh;" :lower-threshold="100" refresher-background="#FFFFFF00"
@scrolltolower="doLoadMore">
<view class="order-box">
<block v-for="(item,index) in orderList" :key="index">
<view class="order-item">
@ -88,6 +87,10 @@
})
this.doRefreshList()
},
onPullDownRefresh() {
this.doRefreshList()
uni.stopPullDownRefresh()
},
methods: {
orderStatus,
proType,

View File

@ -2,7 +2,7 @@
<view class="bg-container">
<image class="bg-image" src="/static/images/bg_mine.png"></image>
<view class="content-container">
<view id="func-box" style="padding: 0rpx 30rpx;">
<view id="func-box" style="padding: 30rpx 30rpx 0rpx 30rpx;">
<view class="custom-navbar"
:style="{'height':totalHeight+'px','padding-top':statusBarHeight+'px','justify-content':'center','color':'#532A00'}">
<view class="navbar-title">AI喵著</view>
@ -19,7 +19,7 @@
</view>
</view>
<view class="box-down">
<view>套餐包余额</view>
<view class="mt-10">套餐包余额</view>
<view class="package-bag">
<view class="package-bag-item" @click="openCreate" data-type="ALL">
<text class="title">全托管</text>
@ -81,21 +81,41 @@
animation: null,
alertMsg: '', //alertDialog
menuList: [{
"icon": "ic-user",
"title": "个人信息",
"path": "/pages/mine/mineAccount/mineInfo/mineInfo"
icon: "ic-user",
title: "个人信息",
path: "/pages/mine/mineAccount/mineInfo/mineInfo"
}, {
"icon": "ic-order",
"title": "我的订单",
"path": "/pages/mine/mineAccount/mineOrder/mineOrder"
icon: 'ic-msg',
title: '消息通知',
path: '/pages/mine/mineAccount/mineMsgNotice/mineMsgNotice'
}, {
"icon": "ic-invoice",
"title": "发票管理",
"path": ""
icon: 'ic-refund',
title: '退款项目',
path: '/pages/copyright/refund/refund'
}, {
"icon": "ic-contact",
"title": "产权联系人",
"path": "/pages/mine/mineAccount/mineContact/mineContact"
icon: 'ic-repair',
title: '补正项目',
path: '/pages/copyright/repair/repair'
}, {
icon: 'ic-invoice-info',
title: '发票抬头',
path: '/pages/mine/mineAccount/invoiceInfo/invoiceInfo'
}, {
icon: "ic-pay-record",
title: "资金流水",
path: "/pages/mine/mineAccount/minePayRecord/minePayRecord"
}, {
icon: "ic-order",
title: "我的订单",
path: "/pages/mine/mineAccount/mineOrder/mineOrder"
}, {
icon: "ic-invoice",
title: "发票管理",
path: "/pages/mine/mineAccount/mineInvoiceManage/mineInvoiceManage"
}, {
icon: "ic-contact",
title: "产权联系人",
path: "/pages/mine/mineAccount/mineContact/mineContact"
}],
msgType: 'info',
msgTxt: '',
@ -121,6 +141,11 @@
this.getMineAccount()
this.getMinePackageCount()
},
onPullDownRefresh() {
this.getMineAccount()
this.getMinePackageCount()
uni.stopPullDownRefresh()
},
methods: {
//
countBarHeight() {
@ -197,15 +222,10 @@
//
itemClick(e) {
const path = e.currentTarget.dataset.path
const _self = this
if (path == '') {
_self.alertMsg = `鉴于功能特性,需在电脑端完成操作。请打开浏览器,登录网址${copyrightUrl},进行后续操作。`
_self.$refs.alertDialog.open()
} else {
uni.navigateTo({
url: path
})
}
const title = e.currentTarget.dataset.title
uni.navigateTo({
url: path
})
},
//
doGetPrice() {
@ -228,10 +248,9 @@
})
.catch(err => {
uni.hideLoading()
uni.showToast({
title: '数据有误,请刷新页面',
icon: 'error'
})
_self.msgTxt = '网络错误,请刷新页面'
_self.msgType = 'error'
_self.$refs.msg.open()
})
},
//
@ -572,6 +591,67 @@
height: 18px;
}
.ic-pay-record {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ1MzkyMTQyNzY1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ3ODEiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZD0iTTYyNC4zNjA3MjcgODUxLjc4MTgxOGMwIDk1LjE4NTQ1NS0xMzkuNjM2MzY0IDE3Mi4yMTgxODItMzEyLjE4MDM2MyAxNzIuMjE4MTgyUzAgOTQ2LjgyNzYzNiAwIDg1MS43ODE4MTh2LTY3LjkwOTgxOGMwLjc0NDcyNyA5NC44MTMwOTEgMTQwLjE0ODM2NCAxNzEuNDczNDU1IDMxMS44NTQ1NDUgMTcxLjQ3MzQ1NXMzMTIuMTgwMzY0LTc3LjA3OTI3MyAzMTIuMTgwMzY0LTE3Mi4yMTgxODJWODUxLjc4MTgxOHogbTAtMTE5LjkwMTA5MWMwIDk1LjIzMi0xMzkuNjM2MzY0IDE3Mi4yMTgxODItMzEyLjE4MDM2MyAxNzIuMjE4MTgyUzAgODI2LjkyNjU0NSAwIDczMS43NDEwOTF2LTY3LjkwOTgxOGMwLjc0NDcyNyA5NC44MTMwOTEgMTQwLjE0ODM2NCAxNzEuNTIgMzExLjg1NDU0NSAxNzEuNTJzMzEyLjE4MDM2NC03Ny4wNzkyNzMgMzEyLjE4MDM2NC0xNzIuMjE4MTgydjY4LjY1NDU0NXogbS0zMTIuMTgwMzYzIDUyLjQ1NjcyOGMtMTcyLjIxODE4MiAwLTMxMi4xODAzNjQtNzcuMTI1ODE4LTMxMi4xODAzNjQtMTcyLjIxODE4MnMxMzkuNjM2MzY0LTE3Mi4yMTgxODIgMzEyLjE4MDM2NC0xNzIuMjE4MTgyIDMxMi4xODAzNjQgNzcuMTI1ODE4IDMxMi4xODAzNjMgMTcyLjIxODE4Mi0xMzkuNjgyOTA5IDE3Mi4wNzg1NDUtMzEyLjE4MDM2MyAxNzIuMDc4NTQ1ek0xMDI0IDY1MS42MzYzNjRjMCA5NS4xODU0NTUtMTM5LjYzNjM2NCAxNzIuMjE4MTgyLTMxMi4xODAzNjQgMTcyLjIxODE4MS05LjMwOTA5MSAwLTE4LjYxODE4Mi0wLjMyNTgxOC0yNy40NjE4MTgtMC43OTEyNzJ2LTQwLjQwMTQ1NWE2MC41MDkwOTEgNjAuNTA5MDkxIDAgMCAwLTMuMTE4NTQ1LTE5LjMxNjM2M2MwLjU1ODU0NS0yLjkzMjM2NCAwLjQ2NTQ1NS02LjAwNDM2NCAwLjgzNzgxOC04Ljk4MzI3M3ExNC43NTQ5MDkgMC43NDQ3MjcgMjkuNzQyNTQ1IDAuNzkxMjczYzE3Mi40OTc0NTUgMCAzMTIuMTgwMzY0LTc3LjA3OTI3MyAzMTIuMTgwMzY0LTE3Mi4yMTgxODJWNjUxLjYzNjM2NHogbTAtMTE5Ljg1NDU0NmMwIDk1LjE4NTQ1NS0xMzkuNjM2MzY0IDE3Mi4yMTgxODItMzEyLjE4MDM2NCAxNzIuMjE4MTgyLTkuMzA5MDkxIDAtMTguNjE4MTgyLTAuMjc5MjczLTI3LjQ2MTgxOC0wLjc5MTI3M3YtNDAuNDAxNDU0YTYwLjUwOTA5MSA2MC41MDkwOTEgMCAwIDAtMy4xMTg1NDUtMTkuMjY5ODE4YzAuNTU4NTQ1LTIuOTc4OTA5IDAuNDY1NDU1LTYuMDUwOTA5IDAuODM3ODE4LTkuMDI5ODE5cTE0Ljc1NDkwOSAwLjc5MTI3MyAyOS43NDI1NDUgMC43OTEyNzNDODg0LjM2MzYzNiA2MzUuNTMxNjM2IDEwMjQgNTU4LjU0NTQ1NSAxMDI0IDQ2My4yNjY5MDl2NjguNzAxMDkxeiBtMC0xMTkuOTQ3NjM2YzAgOTUuMjc4NTQ1LTEzOS42MzYzNjQgMTcyLjIxODE4Mi0zMTIuMTgwMzY0IDE3Mi4yMTgxODJxLTE1LjA4MDcyNyAwLTMwLjIwOC0wLjg4NDM2NEExNzIuNzMwMTgyIDE3Mi43MzAxODIgMCAwIDAgNjUwLjUxOTI3MyA1MTJhNTUwLjAyNzYzNiA1NTAuMDI3NjM2IDAgMCAwIDYxLjI1MzgxOCAzLjM5NzgxOGMxNzIuNDk3NDU1IDAgMzEyLjE4MDM2NC03Ny4xMjU4MTggMzEyLjE4MDM2NC0xNzIuMjE4MTgydjY4LjY1NDU0NnogbTAtMTE5Ljg1NDU0NmMwIDk1LjIzMi0xMzkuNjM2MzY0IDE3Mi4yMTgxODItMzEyLjE4MDM2NCAxNzIuMjE4MTgyYTUzMy4yNzEyNzMgNTMzLjI3MTI3MyAwIDAgMS0xMzAuMzI3MjcyLTE1LjgyNTQ1NCA0MDcuNTUyIDQwNy41NTIgMCAwIDAtMTEzLjUyNDM2NC00OS4wMTIzNjQgMTM1LjgxOTYzNiAxMzUuODE5NjM2IDAgMCAxLTY4LjMyODcyNy0xMDcuNDczNDU1VjIyMy45NzY3MjdjMC43OTEyNzMgOTQuODEzMDkxIDE0MC4xOTQ5MDkgMTcxLjU2NjU0NSAzMTIuMTMzODE4IDE3MS41NjY1NDZTMTAyNCAzMTguNzQzMjczIDEwMjQgMjIzLjQxODE4MnY2OC43MDEwOTF6TTcxMS43NzMwOTEgMzQ0LjQzNjM2NGMtMTcyLjIxODE4MiAwLTMxMi4xODAzNjQtNzcuMDc5MjczLTMxMi4xODAzNjQtMTcyLjIxODE4MnMxMzkuNjM2MzY0LTE3Mi4yMTgxODIgMzEyLjE4MDM2NC0xNzIuMjE4MTgyUzEwMjQgNzcuMDc5MjczIDEwMjQgMTcyLjIxODE4MnMtMTM5LjYzNjM2NCAxNzIuMjE4MTgyLTMxMi4yMjY5MDkgMTcyLjIxODE4MnoiIGZpbGw9IiNGRkJBMzQiIHAtaWQ9IjQ3ODIiPjwvcGF0aD48L3N2Zz4=');
background-repeat: no-repeat;
background-size: cover;
width: 24px;
height: 24px;
}
.ic-invoice-info {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ1NzM3NDQ3MTAwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ0MTMiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiA1MTJtLTQ3NS40Mjg1NzEgMGE0NzUuNDI4NTcxIDQ3NS40Mjg1NzEgMCAxIDAgOTUwLjg1NzE0MiAwIDQ3NS40Mjg1NzEgNDc1LjQyODU3MSAwIDEgMC05NTAuODU3MTQyIDBaIiBmaWxsPSIjN0U0RkZGIiBwLWlkPSI0NDE0Ij48L3BhdGg+PHBhdGggZD0iTTY1Ni4wOTE0MjkgNDIyLjc2NTcxNGExNi43NDk3MTQgMTYuNzQ5NzE0IDAgMCAxIDE3LjE4ODU3MSAxNS43OTg4NTd2MzA0LjM0NzQyOWE2LjU4Mjg1NyA2LjU4Mjg1NyAwIDAgMS0zLjUxMDg1NyA1LjQ4NTcxNCA3LjE2OCA3LjE2OCAwIDAgMS02LjcyOTE0MyAwYy0zLjgwMzQyOS0yLjQxMzcxNC02NC4yMTk0MjktMzcuODE0ODU3LTY0LjIxOTQyOS0zNy44MTQ4NTdhMTQuNDA5MTQzIDE0LjQwOTE0MyAwIDAgMC0xNC4xMTY1NzEgMGwtNjUuMTcwMjg2IDM3LjUyMjI4NmExNy41NTQyODYgMTcuNTU0Mjg2IDAgMCAxLTcuNjggMS4yNDM0MjggMjAuMjYwNTcxIDIwLjI2MDU3MSAwIDAgMS04LjA0NTcxNC0xLjI0MzQyOGwtNjEuOTUyLTM2Ljg2NGExNC40MDkxNDMgMTQuNDA5MTQzIDAgMCAwLTE0LjExNjU3MSAwbC0yMy40MDU3MTUgMTMuNDU4Mjg2LTE1Ljc5ODg1NyA5LjA2OTcxNC0yNi42MjQgMTUuMjg2ODU3YTguMjY1MTQzIDguMjY1MTQzIDAgMCAxLTcuMzE0Mjg2LTAuMzY1NzE0IDcuNjA2ODU3IDcuNjA2ODU3IDAgMCAxLTMuODc2NTcxLTUuNzc4Mjg2VjQzOS4wNzY1NzFhMTYuMDkxNDI5IDE2LjA5MTQyOSAwIDAgMSA1LjEyLTExLjYyOTcxNCAxNy42Mjc0MjkgMTcuNjI3NDI5IDAgMCAxIDEyLjE0MTcxNC00Ljc1NDI4NnogbS00Ny4wMzA4NTggMTQ4LjE4NzQyOUg0MTQuOTM5NDI5YTE1Ljk0NTE0MyAxNS45NDUxNDMgMCAwIDAtMTYuMDkxNDI5IDE1LjUwNjI4NmMwIDguNTU3NzE0IDcuMjQxMTQzIDE1LjQzMzE0MyAxNi4wOTE0MjkgMTUuNTc5NDI4aDE5NC4xMjExNDJjNS44NTE0MjkgMC4wNzMxNDMgMTEuMzM3MTQzLTIuODUyNTcxIDE0LjMzNi03LjY4YTE0LjkyMTE0MyAxNC45MjExNDMgMCAwIDAgMC0xNS43MjU3MTQgMTYuNDU3MTQzIDE2LjQ1NzE0MyAwIDAgMC0xNC4zMzYtNy42OHogbTAtNzAuNDM2NTcySDQxNC45Mzk0MjlhMTYuNDU3MTQzIDE2LjQ1NzE0MyAwIDAgMC0xNC4zMzYgNy42OCAxNC45MjExNDMgMTQuOTIxMTQzIDAgMCAwIDAgMTUuNzI1NzE1YzIuOTk4ODU3IDQuODI3NDI5IDguNDg0NTcxIDcuNzUzMTQzIDE0LjMzNiA3LjY4aDE5NC4xMjExNDJjNS44NTE0MjkgMC4wNzMxNDMgMTEuMzM3MTQzLTIuOTI1NzE0IDE0LjMzNi03LjY4YTE0LjkyMTE0MyAxNC45MjExNDMgMCAwIDAgMC0xNS43MjU3MTUgMTYuNDU3MTQzIDE2LjQ1NzE0MyAwIDAgMC0xNC4zMzYtNy42OHpNNzI0LjExNDI4NiAzNDIuMjM1NDI5YzE0LjExNjU3MSAwIDI1LjYgMTAuOTcxNDI5IDI1LjYgMjQuMzU2NTcxdjExMS45MDg1NzFhMjUuNTI2ODU3IDI1LjUyNjg1NyAwIDAgMS0yNS42IDI0LjQyOTcxNWgtMzMuNTcyNTcyVjQ0Mi41MTQyODZoMS45NzQ4NTdhMjAuMzMzNzE0IDIwLjMzMzcxNCAwIDAgMCAyMC40OC0xOS43NDg1NzIgMjAuMzMzNzE0IDIwLjMzMzcxNCAwIDAgMC0yMC40OC0xOS44OTQ4NTdIMzMxLjQ4MzQyOWEyMC45OTIgMjAuOTkyIDAgMCAwLTE4LjIxMjU3MiA5Ljg3NDI4NiAxOS4wMTcxNDMgMTkuMDE3MTQzIDAgMCAwIDAgMTkuOTY4IDIwLjk5MiAyMC45OTIgMCAwIDAgMTguMjg1NzE0IDkuODAxMTQzaDEuOTAxNzE1djYwLjQxNmgtMzMuNjQ1NzE1YTI1LjA4OCAyNS4wODggMCAwIDEtMjUuNTI2ODU3LTI0LjQyOTcxNXYtMTExLjkwODU3MWMwLTEzLjQ1ODI4NiAxMS40ODM0MjktMjQuMzU2NTcxIDI1LjYtMjQuMzU2NTcxeiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iNDQxNSI+PC9wYXRoPjwvc3ZnPg==');
background-repeat: no-repeat;
background-size: cover;
width: 24px;
height: 24px;
}
.ic-unbind {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ1NDAwMzc2MjkxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYwMTgiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZD0iTTUxMiA5ODRDMjUxLjc1IDk4NCAzOS45OSA3NzIuMjYgMzkuOTkgNTEyUzI1MS43NSA0MCA1MTIgNDBzNDcyLjAxIDIxMS43NCA0NzIuMDEgNDcyUzc3Mi4yNSA5ODQgNTEyIDk4NHoiIGZpbGw9IiNGRkY4RUYiIHAtaWQ9IjYwMTkiPjwvcGF0aD48cGF0aCBkPSJNNTEyIDgwQzI3My44MiA4MCA3OS45NyAyNzMuNzkgNzkuOTcgNTEyczE5My44NCA0MzIgNDMyLjAyIDQzMiA0MzIuMDMtMTkzLjc5IDQzMi4wMy00MzJDOTQ0LjAzIDI3My43OSA3NTAuMTggODAgNTEyIDgweiBtMC04MGMyODIuNzggMCA1MTIgMjI5LjIzIDUxMiA1MTJzLTIyOS4yMiA1MTItNTEyIDUxMlMwIDc5NC43NyAwIDUxMiAyMjkuMjIgMCA1MTIgMHoiIGZpbGw9IiNGRkE3MzgiIHAtaWQ9IjYwMjAiPjwvcGF0aD48cGF0aCBkPSJNMjc4LjYzIDI3OC42NmMyNy4zNC0yNy4yOSA3MS43My0yNy4yOSA5OS4wMiAwbDM2Ny43MiAzNjcuNjljMjcuMjkgMjcuMjkgMjcuMjkgNzEuNyAwIDk5LTI3LjM0IDI3LjI5LTcxLjczIDI3LjI5LTk5LjAyIDBsLTM2Ny43Mi0zNjcuN2MtMjcuMjktMjcuMjktMjcuMjktNzEuNyAwLTk4Ljk5eiIgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iNjAyMSI+PC9wYXRoPjxwYXRoIGQ9Ik03MTcuMDYgNzE3LjA2YzExLjcyLTExLjY5IDExLjcyLTMwLjczIDAtNDIuNDJsLTM2Ny42Ny0zNjcuN2MtMTEuNzMtMTEuNy0zMC43Ny0xMS43LTQyLjQ1IDAtMTEuNjcgMTEuNy0xMS43MyAzMC43MyAwIDQyLjQzbDM2Ny42NyAzNjcuNjljMTEuNzMgMTEuNyAzMC43NyAxMS43IDQyLjQ1IDB6IG01Ni41NyA1Ni41N2MtNDIuOTYgNDIuOTYtMTEyLjU5IDQyLjk2LTE1NS41NSAwbC0zNjcuNzItMzY3LjdjLTQyLjk2LTQyLjk2LTQyLjk2LTExMi42MSAwLTE1NS41NiA0Mi45Ni00Mi45NiAxMTIuNTktNDIuOTYgMTU1LjU1IDBsMzY3LjcyIDM2Ny42OWM0Mi45NiA0Mi45NyA0Mi45NiAxMTIuNjIgMCAxNTUuNTd6IiBmaWxsPSIjRkZBNzM4IiBwLWlkPSI2MDIyIj48L3BhdGg+PHBhdGggZD0iTTczMC41MiAzOTguNzZsLTMzOS40IDMzOS40MWMtNy41MyA3LjUtMTcuNjYgMTEuNzEtMjguMzEgMTEuNzEtMTAuNiAwLTIwLjc5LTQuMjEtMjguMjYtMTEuNzFsLTQyLjQ1LTQyLjQyYy0zLjY5LTMuNzEtNi42Ni04LjEzLTguNjUtMTIuOTgtMi00Ljg1LTMuMDctMTAuMDUtMy4wNy0xNS4zczEuMDgtMTAuNDYgMy4wNy0xNS4zMWMyLTQuODUgNC45Ny05LjI2IDguNjUtMTIuOThsMzM5LjQtMzM5LjQxYzMuNzQtMy43MSA4LjE0LTYuNjYgMTMtOC42N2EzOS45NzQgMzkuOTc0IDAgMCAxIDE1LjMxLTMuMDRjNS4yMiAwIDEwLjQ0IDEuMDMgMTUuMzEgMy4wNCA0Ljg2IDIuMDEgOS4yNyA0Ljk2IDEyLjk1IDguNjdsNDIuNDUgNDIuNDNjNy40OCA3LjUgMTEuNzMgMTcuNjggMTEuNzMgMjguMjggMCAxMC42MS00LjI1IDIwLjc4LTExLjczIDI4LjI4eiIgZmlsbD0iI0ZGRjhFRiIgcC1pZD0iNjAyMyI+PC9wYXRoPjxwYXRoIGQ9Ik03MTMuMTYgMzcxLjQxbC0zMzkuNCAzMzkuNDFjLTcuNTMgNy41MS0xNy42NiAxMS43Mi0yOC4zMSAxMS43Mi0xMC42IDAtMjAuNzktNC4yMi0yOC4yNi0xMS43MmEzOS44OCAzOS44OCAwIDAgMS0xMS43My0yOC4yOGMwLTEwLjYxIDQuMi0yMC43OCAxMS43My0yOC4yOGwzMzkuNC0zMzkuNDFjNy41My03LjQ1IDE3LjY2LTExLjYyIDI4LjI2LTExLjU5IDEwLjU1IDAuMDIgMjAuNjggNC4yNCAyOC4yMSAxMS43MmEzOS45MDUgMzkuOTA1IDAgMCAxIDExLjY3IDI4LjJjMC4wNiAxMC41Ni00LjE0IDIwLjcyLTExLjU3IDI4LjIzeiIgZmlsbD0iI0ZGQTczOCIgcC1pZD0iNjAyNCI+PC9wYXRoPjwvc3ZnPg==');
background-repeat: no-repeat;
background-size: cover;
width: 24px;
height: 24px;
}
.ic-msg {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ2NTE1Mjg3MDE2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2MzIiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTkzNC42Mjc1NTYgODI3LjczMzMzM2EyNzMuMDA5Nzc4IDI3My4wMDk3NzggMCAwIDAtMTA2LjMyNTMzNC0yMDQuNTcyNDQ0VjM5Ny40MjU3NzhjMC0xMzAuMzg5MzMzLTkyLjEwMzExMS0yNDAuMDcxMTExLTIxMy45MDIyMjItMjY2LjA2OTMzNHYtNS4xMkExMDcuOTc1MTExIDEwNy45NzUxMTEgMCAwIDAgNTA3LjE2NDQ0NCAxNy45NzY4ODljLTU4LjgyMzExMSAwLTEwNy4wMDggNDguNjk2ODg5LTEwNy4wMDggMTA4LjE0NTc3OHY1LjE3Njg4OWMtMTIxLjc0MjIyMiAyNS45OTgyMjItMjEzLjkwMjIyMiAxMzUuNjgtMjEzLjkwMjIyMiAyNjYuMDY5MzMzdjIyNS44NDg4ODlhMjczLjAwOTc3OCAyNzMuMDA5Nzc4IDAgMCAwLTEwNi4zODIyMjIgMjA0LjYyOTMzM2gxMDYuMzgyMjIydjAuNjgyNjY3SDgyOC4zMDIyMjJ2LTAuNjgyNjY3aDEwNi4zMjUzMzR2LTAuMTEzNzc4eiBtLTQ0OS45OTExMTIgMTgyLjk1NDY2N2gyNi41NjcxMTJjNjkuNzQ1Nzc4IDAgMTI3LjY1ODY2Ny01My4yNDggMTM2LjAyMTMzMy0xMjEuNDAwODg5SDM2Ny41MDIyMjJjOC40MTk1NTYgNjguMTUyODg5IDY2LjM4OTMzMyAxMjEuNDAwODg5IDEzNi4wNzgyMjIgMTIxLjQwMDg4OUg0ODQuNjkzMzMzeiIgZmlsbD0iI0ZGQjgwMCIgcC1pZD0iMjYzMyI+PC9wYXRoPjwvc3ZnPg==');
background-repeat: no-repeat;
background-size: cover;
width: 24px;
height: 24px;
}
.custom-tips {
margin-top: 82px;
}
.ic-refund {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ2NTgyMTEwOTk2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1NzYiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZD0iTTU1MC4wMjc2MzYgMjI3Ljc0NjkwOWEyNzkuMjcyNzI3IDI3OS4yNzI3MjcgMCAxIDEgMCA1NTguNTQ1NDU1IDI3OS4yNzI3MjcgMjc5LjI3MjcyNyAwIDAgMSAwLTU1OC41NDU0NTV6IG0tNTQuNDU4MTgxIDE0Mi4xNDk4MThhMjIuMDYyNTQ1IDIyLjA2MjU0NSAwIDAgMC0zMS4xODU0NTUgMzEuMTg1NDU1bDQ3LjEwNCA0Ny4xMDRoLTQyLjM1NjM2NGEyMi4wNjI1NDUgMjIuMDYyNTQ1IDAgMSAwIDAgNDQuMTI1MDkxaDU4LjgzMzQ1NXYyOS4zNzAxODJINDY5LjE3ODE4MmEyMi4wNjI1NDUgMjIuMDYyNTQ1IDAgMSAwIDAgNDQuMTI1MDloNTguNzg2OTA5djczLjU0MTgxOWEyMi4wNjI1NDUgMjIuMDYyNTQ1IDAgMCAwIDQ0LjEyNTA5MSAwdi03My41NDE4MTloNTguNzg2OTA5YTIyLjA2MjU0NSAyMi4wNjI1NDUgMCAxIDAgMC00NC4wNzg1NDVINTcyLjA0MzYzNnYtMjkuNDE2NzI3aDU4LjgzMzQ1NWEyMi4wNjI1NDUgMjIuMDYyNTQ1IDAgMSAwIDAtNDQuMDc4NTQ2aC00Mi4zNTYzNjRsNDcuMTk3MDkxLTQ3LjE1MDU0NSAxLjU4MjU0Ni0xLjgxNTI3M2EyMi4wNjI1NDUgMjIuMDYyNTQ1IDAgMCAwLTMyLjc2OC0yOS4zNzAxODJMNTUyLjQ5NDU0NSA0MjEuODQxNDU1bC0xLjU4MjU0NSAxLjgxNTI3Mi0wLjkzMDkwOSAxLjI1NjcyOGEyMi4xNTU2MzYgMjIuMTU1NjM2IDAgMCAwLTIuNTEzNDU1LTMuMDcybC01MS45OTEyNzItNTEuOTQ0NzI4eiIgZmlsbD0iIzNCOERGRiIgcC1pZD0iMzU3NyI+PC9wYXRoPjxwYXRoIGQ9Ik05NzcuNDU0NTQ1IDUxMmMwLTIzMS4zMzA5MDktMTg4LjUwOTA5MS00MTguOTA5MDkxLTQyMS4wMDM2MzYtNDE4LjkwOTA5MS0yMzIuNTQxMDkxIDAtNDIxLjA1MDE4MiAxODcuNTc4MTgyLTQyMS4wNTAxODIgNDE4LjkwOTA5MWEzMC4wMjE4MTggMzAuMDIxODE4IDAgMCAwIDMwLjA2ODM2NCAyOS4xODRjMTYuMzM3NDU1IDAgMjkuNjk2LTEyLjkzOTYzNiAzMC4xMTQ5MDktMjkuMTg0IDAtMTk4LjI4MzYzNiAxNjEuNTEyNzI3LTM1OS4wNTE2MzYgMzYwLjg2NjkwOS0zNTkuMDUxNjM2IDE5OS4zMDc2MzYgMCAzNjAuODY2OTA5IDE2MC43MjE0NTUgMzYwLjg2NjkwOSAzNTkuMDUxNjM2IDAgMTk4LjI4MzYzNi0xNjEuNTU5MjczIDM1OS4wNTE2MzYtMzYwLjg2NjkwOSAzNTkuMDUxNjM2YTM2MC42MzQxODIgMzYwLjYzNDE4MiAwIDAgMS0xNjguMjYxODE4LTQxLjI4NTgxOCAzMC4xNjE0NTUgMzAuMTYxNDU1IDAgMCAwLTQwLjAyOTA5MSAxMi44IDI5LjgzNTYzNiAyOS44MzU2MzYgMCAwIDAgMTEuOTYyMTgyIDQwLjEyMjE4MkE0MjAuOTU3MDkxIDQyMC45NTcwOTEgMCAwIDAgNTU2LjQ1MDkwOSA5MzAuOTA5MDkxQzc4OC45NDU0NTUgOTMwLjkwOTA5MSA5NzcuNDU0NTQ1IDc0My4zMzA5MDkgOTc3LjQ1NDU0NSA1MTJ6TTE3OS43NTg1NDUgNTk3LjgyOTgxOGw1NC41NTEyNzMtNzIuNDI0NzI3YTE3LjY4NzI3MyAxNy42ODcyNzMgMCAwIDAtMTQuMjQyOTA5LTI4LjM5MjcyN0gxMTAuOTE3ODE4YTE3LjY4NzI3MyAxNy42ODcyNzMgMCAxIDAtMTQuMjQyOTA5IDI4LjM5MjcyN2w1NC41NTEyNzMgNzIuNDI0NzI3YTE3Ljg3MzQ1NSAxNy44NzM0NTUgMCAwIDAgMjguNTMyMzYzIDB6IiBmaWxsPSIjM0I4REZGIiBwLWlkPSIzNTc4Ij48L3BhdGg+PC9zdmc+');
background-repeat: no-repeat;
background-size: cover;
width: 24px;
height: 24px;
}
.ic-repair {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ2NTgyMjU3MDY5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNjg2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik04NjEuMTg0IDk1Mi4zMmMzMy4yOCAwIDYwLjQxNi0yNy42NDggNjAuNDE2LTYxLjQ0VjEzMy4xMmMwLTMzLjc5Mi0yNy4xMzYtNjEuNDQtNjAuNDE2LTYxLjQ0SDE2Mi44MTZDMTI5LjUzNiA3MS42OCAxMDIuNCA5OS4zMjggMTAyLjQgMTMzLjEydjc1Ny43NmMwIDMzLjc5MiAyNy4xMzYgNjEuNDQgNjAuNDE2IDYxLjQ0aDY5OC4zNjh6IG0tMTYuODk2LTgwMy44NHY3MjcuMDRIMTc5LjJWMTQ4LjQ4aDY2NS4wODh6IiBwLWlkPSIxMjY4NyIgZmlsbD0iIzEyOTZkYiI+PC9wYXRoPjxwYXRoIGQ9Ik03MTEuNjggMjE1LjU1MkgzMTIuMzJjLTIwLjk5MiAwLTM4LjQgMTcuNDA4LTM4LjQgMzguNHMxNy40MDggMzguNCAzOC40IDM4LjRoMzk5LjM2YzIwLjk5MiAwIDM4LjQtMTcuNDA4IDM4LjQtMzguNHMtMTcuNDA4LTM4LjQtMzguNC0zOC40eiBtMCAxMjhIMzEyLjMyYy0yMC45OTIgMC0zOC40IDE3LjQwOC0zOC40IDM4LjRzMTcuNDA4IDM4LjQgMzguNCAzOC40aDM5OS4zNmMyMC45OTIgMCAzOC40LTE3LjQwOCAzOC40LTM4LjRzLTE3LjQwOC0zOC40LTM4LjQtMzguNHpNNTMxLjk2OCA2NDIuMDQ4Yy0xNC4zMzYgMTMuODI0LTI5LjE4NCAyOS42OTYtNDEuNDcyIDQxLjk4NCAxMy44MjQgMTMuODI0IDI3LjY0OCAyNy4xMzYgMzIuNzY4IDMyLjc2OGwtMjguNjcyIDM3LjM3NmMtMTEuMjY0LTE2LjM4NC0zMy4yOC00MS40NzItNTIuMjI0LTYyLjQ2NHYxNTUuMTM2aC00OS4xNTJWNzA2LjU2Yy0xNy40MDggMTUuODcyLTMzLjc5MiAzMC4yMDgtNTEuMiA0MS45ODQtNC42MDgtMTMuMzEyLTE3LjQwOC0zNy4zNzYtMjUuNi00Ni41OTIgNDYuMDgtMjcuMTM2IDkzLjY5Ni03NS4yNjQgMTIzLjM5Mi0xMjQuOTI4SDMyOS4yMTZ2LTQ0LjAzMmg3Mi43MDRjLTkuMjE2LTEzLjgyNC0yMy41NTItMzAuNzItMzYuMzUyLTQ0LjAzMmwzNS4zMjgtMjUuMDg4YzE2Ljg5NiAxNC44NDggMzUuODQgMzUuODQgNDQuNTQ0IDUwLjE3NmwtMjQuNTc2IDE4Ljk0NGg0Ni4wOGw4LjcwNC0yLjA0OCAyOC4xNiAxOS45NjhjLTEzLjgyNCAzMi43NjgtMzMuNzkyIDY0LjUxMi01NS44MDggOTQuMjA4IDQuNjA4IDMuNTg0IDkuNzI4IDguMTkyIDE1LjM2IDEzLjMxMiAxMS43NzYtMTUuMzYgMjUuMDg4LTMyLjc2OCAzMi4yNTYtNDYuNTkybDM2LjM1MiAzMC4yMDh6IG04MC4zODQtNTYuODMyYzI5LjY5NiAyNS4wODggNzMuNzI4IDYxLjQ0IDk1LjIzMiA4NC45OTJsLTM5LjkzNiAzNS44NGMtMTUuMzYtMTkuNDU2LTQ2LjA4LTQ3LjYxNi03Mi43MDQtNzEuNjh2MjEwLjk0NGgtNTMuMjQ4VjQ2NC44OTZoNTMuMjQ4VjU5OS4wNGwxNy40MDgtMTMuODI0eiIgcC1pZD0iMTI2ODgiIGZpbGw9IiMxMjk2ZGIiPjwvcGF0aD48L3N2Zz4=');
background-repeat: no-repeat;
background-size: cover;
width: 24px;
height: 24px;
}
.icon-refresh {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ0MTY2MTkyNTg5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjU2MDkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTkzNi41OTQyODYgNjAzLjQyODU3MXEwIDIuODUyNTcxLTAuNTg1MTQzIDQuMDIyODU3LTM2LjU3MTQyOSAxNTMuMTYxMTQzLTE1My4xNjExNDMgMjQ4LjMydC0yNzMuMTE1NDI5IDk1LjE1ODg1N3EtODMuNDU2IDAtMTYxLjQyNjI4Ni0zMS40NTE0Mjl0LTEzOS4xMTc3MTQtODkuNzQ2Mjg2bC03My43MjggNzMuNzI4cS0xMC44MjUxNDMgMTAuODI1MTQzLTI1Ljc0NjI4NiAxMC44MjUxNDN0LTI1Ljc0NjI4Ni0xMC44MjUxNDMtMTAuODI1MTQzLTI1Ljc0NjI4NmwwLTI1NnEwLTE0Ljg0OCAxMC44MjUxNDMtMjUuNzQ2Mjg2dDI1Ljc0NjI4Ni0xMC44MjUxNDNsMjU2IDBxMTQuODQ4IDAgMjUuNzQ2Mjg2IDEwLjgyNTE0M3QxMC44MjUxNDMgMjUuNzQ2Mjg2LTEwLjgyNTE0MyAyNS43NDYyODZsLTc4LjI2Mjg1NyA3OC4yNjI4NTdxNDAuNTk0Mjg2IDM3Ljc0MTcxNCA5Mi4wMTM3MTQgNTguMjk0ODU3dDEwNi44NjE3MTQgMjAuNTUzMTQzcTc2LjU4MDU3MSAwIDE0Mi44NDgtMzcuMTU2NTcxdDEwNi4yNzY1NzEtMTAyLjI1MzcxNHE2LjI5MDI4Ni05LjcyOCAzMC4yODExNDMtNjYuODUyNTcxIDQuNTM0ODU3LTEzLjE2NTcxNCAxNy4xMTU0MjktMTMuMTY1NzE0bDEwOS43MTQyODYgMHE3LjQ2MDU3MSAwIDEyLjg3MzE0MyA1LjQxMjU3MXQ1LjQxMjU3MSAxMi44NzMxNDN6TTk1MC44NTcxNDMgMTQ2LjI4NTcxNGwwIDI1NnEwIDE0Ljg0OC0xMC44MjUxNDMgMjUuNzQ2Mjg2dC0yNS43NDYyODYgMTAuODI1MTQzbC0yNTYgMHEtMTQuODQ4IDAtMjUuNzQ2Mjg2LTEwLjgyNTE0M3QtMTAuODI1MTQzLTI1Ljc0NjI4NiAxMC44MjUxNDMtMjUuNzQ2Mjg2bDc4Ljg0OC03OC44NDhxLTg0LjU1MzE0My03OC4yNjI4NTctMTk5LjQ2MDU3MS03OC4yNjI4NTctNzYuNTgwNTcxIDAtMTQyLjg0OCAzNy4xNTY1NzF0LTEwNi4yNzY1NzEgMTAyLjI1MzcxNHEtNi4yOTAyODYgOS43MjgtMzAuMjgxMTQzIDY2Ljg1MjU3MS00LjUzNDg1NyAxMy4xNjU3MTQtMTcuMTE1NDI5IDEzLjE2NTcxNGwtMTEzLjczNzE0MyAwcS03LjQ2MDU3MSAwLTEyLjg3MzE0My01LjQxMjU3MXQtNS40MTI1NzEtMTIuODczMTQzbDAtNC4wMjI4NTdxMzcuMTU2NTcxLTE1My4xNjExNDMgMTU0LjI1ODI4Ni0yNDguMzJ0Mjc0LjI4NTcxNC05NS4xNTg4NTdxODMuNDU2IDAgMTYyLjMwNCAzMS43NDR0MTM5Ljk5NTQyOSA4OS40NTM3MTRsNzQuMzEzMTQzLTczLjcyOHExMC44MjUxNDMtMTAuODI1MTQzIDI1Ljc0NjI4Ni0xMC44MjUxNDN0MjUuNzQ2Mjg2IDEwLjgyNTE0MyAxMC44MjUxNDMgMjUuNzQ2Mjg2eiIgZmlsbD0iIzUzMkEwMCIgcC1pZD0iNTYxMCI+PC9wYXRoPjwvc3ZnPg==');
background-size: cover;
background-repeat: no-repeat;
margin-left: 5px;
width: 18px;
height: 18px;
}
.custom-tips {
margin-top: 82px;
}

View File

@ -1,5 +1,5 @@
<template>
<view class="body-container">
<view class="page-container">
<view class="contaienr">
<view class="icon" style="width: 96px;height: 96px;"></view>
<view class="title">交易成功</view>

View File

@ -1,5 +1,5 @@
<template>
<view class="body-container">
<view class="page-container">
<swiper indicator-dots style="height: 120rpx;" autoplay indicator-active-color="#fff">
<swiper-item>
<image src="/static/images/banner_1.png" style="width: 100vw;height: 120rpx;"></image>
@ -73,8 +73,8 @@
</view>
</ContainerLoading>
</view>
<view class="bottom-btn-box">
<view class="green-bottom-btn" @click="doPay">确认充值</view>
<view class="bottom-fixed-footer">
<view class="bottom-btn-green" @click="doPay">确认充值</view>
</view>
</view>
<view>

View File

@ -1,5 +1,5 @@
<template>
<view class="body-container">
<view class="page-container">
<!-- 轮播图 -->
<swiper indicator-dots style="height: 120rpx;" autoplay indicator-active-color="#fff">
<swiper-item>
@ -31,10 +31,9 @@
<view class="item center">
<view class="title star">打款时间</view>
<view class="content">
<view class="time-picker-box">
<uni-datetime-picker :style="{'color':selectTime==''? '' :'#000000 !important'}" type="datetime"
:border="false" v-model="selectTime" @change="changeDateTime" />
</view>
<uni-datetime-picker
:style="{'color':selectTime==''? '$text-gray-hint-color' :'$text-color !important'}"
type="datetime" :border="false" v-model="selectTime" @change="changeDateTime" />
</view>
</view>
<view class="item">
@ -42,7 +41,7 @@
<view class="content">
<view class="file-picker-container">
<uni-file-picker ref="imgPicker" :del-icon="false" limit="1" fileMediatype="image"
:auto-upload="false" :image-styles="imageStyles" @select="uploadFile"></uni-file-picker>
:auto-upload="false" :image-styles="imageStyles" @select="uploadImgToNet"></uni-file-picker>
<view v-if="files.length>0" class="icon-delete" @click="delImgs"></view>
</view>
</view>
@ -75,17 +74,17 @@
<view class="content" style="color: red;">请打款时必须按照以上备注填写</view>
</view>
</view>
</view>
<view class="bottom-btn-box">
<view class="money">金额:
<text class="price">{{payMoney}}</text>
<text style="font-size:12px;" v-if="packageId">({{packageName}})</text>
<view class="bottom-fixed-footer">
<view class="money">金额:
<text class="price">{{payMoney}}</text>
<text style="font-size:12px;" v-if="packageId">({{packageName}})</text>
</view>
<view class="bottom-btn-green" @click="completePay">完成充值</view>
</view>
<view class="green-bottom-btn" @click="completePay">完成充值</view>
<uni-popup type="message" ref="msg">
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
</uni-popup>
</view>
<uni-popup type="message" ref="msg">
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
</uni-popup>
</template>
<script>
@ -230,7 +229,10 @@
this.$refs.imgPicker.clearFiles()
},
//
uploadFile(e) {
uploadImgToNet(e) {
uni.showLoading({
title: '上传中...'
})
const tempFilePaths = e.tempFilePaths;
const token = get('token')
const header = {}
@ -245,10 +247,19 @@
filePath: tempFilePaths[i],
name: 'image',
success(res) {
uni.hideLoading()
console.log(res)
if (res.statusCode == 200) {
let result = JSON.parse(res.data)
that.files.push(result.data)
let result = res.data
if (typeof res.data == 'string') {
result = JSON.parse(res.data)
} else {
result = res.data
}
// let result = JSON.parse(res.data)
console.log(result);
that.files = that.files.concat(result.data)
// that.files.push(result.data)
} else {
that.msgTxt = '凭证上传失败,请稍后重试'
that.msgType = 'error'
@ -257,6 +268,7 @@
}
},
fail(err) {
uni.hideLoading()
console.log("错误", err);
that.$refs.imgPicker.clearFiles()
}
@ -386,19 +398,10 @@
.time-picker-box {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.star::after {
content: "*";
color: red;
margin-left: 3px;
}
.time-icon {
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQzNDE0Mzc3MjcwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ2MjgiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTE5MiA1MTJoMTI4di0xMjhIMTkyeiBtMCAxOTJoMTI4di0xMjhIMTkyeiBtNzY4LTE5Mi4wMzJWMTYwYTk2IDk2IDAgMCAwLTk2LTk2aC05NnYtMzEuMTA0YzAtMTcuMjE2LTEzLjI0OC0zMi4wNjQtMzAuNDY0LTMyLjg2NEw3MzYgMGEzMiAzMiAwIDAgMC0zMiAzMnYzMkgzMjB2LTMxLjEwNEMzMjAgMTUuNjggMzA2Ljc1MiAwLjgzMiAyODkuNTM2IDAuMDMyTDI4OCAwYTMyIDMyIDAgMCAwLTMyIDMydjMySDE2MGE5NiA5NiAwIDAgMC05NiA5NnY2NDBhOTYgOTYgMCAwIDAgOTYgOTZoMjg4YzU4LjkxMiA3OC4wOCAxNTEuNDg4IDEyOCAyNTUuNzQ0IDEyOGgyLjg0OC0wLjE2YzE3NS45NjgtMS4zMTIgMzE4LjgxNi0xNDYuNDMyIDMxNy41MzYtMzIyLjRhMzE3LjEyIDMxNy4xMiAwIDAgMC02NC41NzYtMTkwLjRsMC41NzYgMC44ek0xMjggMTc2QTQ4IDQ4IDAgMCAxIDE3NiAxMjhIMjU2djMxLjEwNGMwIDE3LjIxNiAxMy4yNDggMzIuMDY0IDMwLjQ2NCAzMi44NjRMMjg4IDE5MmEzMiAzMiAwIDAgMCAzMi0zMlYxMjhoMzg0djMxLjEwNGMwIDE3LjIxNiAxMy4yNDggMzIuMDY0IDMwLjQ2NCAzMi44NjRMNzM2IDE5MmEzMiAzMiAwIDAgMCAzMi0zMlYxMjhoODBBNDggNDggMCAwIDEgODk2IDE3NlYyNTZIMTI4ek0zODQgNzA0djAuMzg0YTMxOC4wOCAzMTguMDggMCAwIDAgMjcuNDU2IDEyOS42NjRsLTAuOC0yLjAxNkgxNzZhNDggNDggMCAwIDEtNDgtNDh2LTQ2NGg3Njh2MTI4Yy01Mi44MzItMzkuOTM2LTExOS42MTYtNjQtMTkyLTY0cy0xMzkuMTY4IDI0LjAzMi0xOTIuOCA2NC41NzZsMC44LTAuNTc2di02NGgtMTI4djEyOGg2NGEzMTYuMzg0IDMxNi4zODQgMCAwIDAtNjQgMTkxLjUydjAuNTEyLTAuMDMyeiBtNTc1Ljk2OCAzLjQyNGEyNTYgMjU2IDAgMSAxLTc3LjM0NC0xODYuNzg0bC0wLjA2NC0wLjA2NGEyNTUuNTg0IDI1NS41ODQgMCAwIDEgNzcuNDA4IDE4My41NTJsLTAuMDMyIDMuNDg4di0wLjE5MnpNODAwIDcwNGgtOTZ2LTE2MGEzMiAzMiAwIDAgMC02NCAwdjE5MmEzMiAzMiAwIDAgMCAzMiAzMmgxMjhhMzIgMzIgMCAwIDAgMC02NHoiIHAtaWQ9IjQ2MjkiIGZpbGw9IiMyYzJjMmMiPjwvcGF0aD48L3N2Zz4=');
background-size: contain;
@ -407,12 +410,11 @@
.input-box {
flex: 1;
background-color: #FAFAFA;
border-radius: 2rpx;
padding: 3px 8px;
background-color: $bg-gray-input-color;
border-radius: 10rpx;
padding: 15rpx;
text-align: left;
font-size: 12px;
border: 1px solid #F0F0F0;
font-size: 28rpx;
line-height: 40rpx;
height: 40rpx;
}
@ -451,12 +453,14 @@
}
.money {
color: #532A00;
font-size: 20px;
color: $text-brown-color;
font-size: 32rpx;
text-align: center;
padding-bottom: 15rpx;
}
.price {
color: rgb(250, 0, 0);
color: $red-color;
}
@ -483,40 +487,42 @@
height: 4rpx !important;
}
:deep(.uni-datetime-picker--btn) {
background-color: rgba(255, 169, 0, 0.3) !important;
.uni-datetime-picker--btn {
background-color: $btn-green-color !important;
color: white !important;
}
.uni-datetime-picker--btn:active {
background-color: $btn-green-color-active !important;
}
.green-bottom-btn:active {
background-color: rgba(255, 169, 0, 0.3);
color: white;
}
:deep(.uniui-calendar) {
.icon-calendar {
display: none !important;
}
:deep(.uni-date-editor--x) {
.uni-date-editor--x {
flex: 1 !important;
background-color: #FAFAFA !important;
border-radius: 2rpx !important;
background-color: $bg-gray-input-color !important;
border-radius: 15rpx !important;
text-align: left !important;
font-size: 12px !important;
border: 1px solid #F0F0F0 !important;
font-size: 28rpx !important;
border: none !important;
line-height: 40rpx !important;
padding: 15rpx;
}
:deep(.uni-date__x-input) {
.uni-date__x-input {
flex: 1 !important;
background-color: #FAFAFA !important;
border-radius: 2rpx !important;
padding: 3px 8px !important;
text-align: left !important;
font-size: 12px !important;
background-color: $bg-gray-input-color !important;
font-size: 28rpx !important;
line-height: 40rpx !important;
height: auto !important;
/* color: black; */
color: $text-color !important;
}
:deep(.icon-del-box) {

143
uni.scss
View File

@ -1,76 +1,75 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
$uni-color-primary: #007aff;
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;
/* 文字基本颜色 */
$uni-text-color:#333;//基本色
$uni-text-color-inverse:#fff;//反色
$uni-text-color-grey:#999;//辅助灰色如加载更多的提示信息
$uni-text-color-placeholder: #808080;
$uni-text-color-disable:#c0c0c0;
/* 背景颜色 */
$uni-bg-color:#ffffff;
$uni-bg-color-grey:#f8f8f8;
$uni-bg-color-hover:#f1f1f1;//点击状态颜色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
/* 边框颜色 */
$uni-border-color:#c8c7cc;
/* 尺寸变量 */
/* 文字尺寸 */
$uni-font-size-sm:12px;
$uni-font-size-base:14px;
$uni-font-size-lg:16px;
/* 图片尺寸 */
$uni-img-size-sm:20px;
$uni-img-size-base:26px;
$uni-img-size-lg:40px;
/* Border Radius */
$uni-border-radius-sm: 2px;
$uni-border-radius-base: 3px;
$uni-border-radius-lg: 6px;
$uni-border-radius-circle: 50%;
/* 水平间距 */
$uni-spacing-row-sm: 5px;
$uni-spacing-row-base: 10px;
$uni-spacing-row-lg: 15px;
/* 垂直间距 */
$uni-spacing-col-sm: 4px;
$uni-spacing-col-base: 8px;
$uni-spacing-col-lg: 12px;
/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title: #2C405A; // 文章标题颜色
$uni-font-size-title:20px;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle:26px;
$uni-color-paragraph: #3F536E; // 文章段落颜色
$uni-font-size-paragraph:15px;
/* 颜色变量 */
/* 底部tabbar */
$tabbar-normal-color: #515151;
$tabbar-select-color: #FE9944;
/* 我的页面账户信息背景 */
$mine-page-upbox-color: #FFDBB4;
$mine-page-upbox-color-light: #FFEDD2;
$mine-page-downbox-color: #FFF0DE;
$mine-page-downbox-color-light: #FEEBD0;
/* 主题色 */
$primary-color: #FFA900;
$primary-color-active: #ffaa008e;
$primary-color-light: #FFFAF1;
/* 页面背景色 */
$bg-top-color: #F0F0F0;
$bg-bottom-color: #FFFFFF;
/* 文字颜色 */
$text-color: #333333;
$text-brown-color: #42210B;
$text-gray-hint-color: #9A9A9A;
$text-gray-desc-color: #5c5c5c;
$text-blue-color: #3270FF;
/* 背景棕色 */
$bg-brown-color: #42210B;
$bg-gray-color: #FAFAFA;
$bg-primary-deep-color: #FFA900;
$bg-primary-shallow-color: #ffaa0017;
$bg-red-color: #F7312A6B;
$bg-green-color: #78e2846b;
$bg-green-deep-color: #39C7C1;
$bg-gray-deep-color: #CCCCCC;
$bg-gray-status-light-color: #D5D5D5;
$bg-green-status-deep-color: #4EAF79;
$bg-green-status-light-color: #AFE5C7;
$bg-red-deep-color: #F7312A;
$bg-gray-shade-color: #00000025;
$bg-gray-input-color: #F9FAFB;
/* 按钮颜色 */
$btn-cyan-color: #39C7C1;
$btn-cyan-active: #39c7c08f;
$btn-primary-color: #FFE5BC;
$btn-primary-color-active: #FFE5BC79;
$btn-green-color: #4EAF79;
$btn-green-color-active: #4EAF7979;
$btn-blue-color: #3270FF;
$btn-blue-color-active: #3270FF79;
$btn-red-color: #F7312A;
$btn-red-color-active: #F7312A6B;
$red-color: #FF0000;
$red-color-light: #FF000079;
$white-color: #FFFFFF;
$black-color: #000000;
$blue-color: #3270FF;
$gray-color: #9c9c9c;
$gray-bg-color: #efefef79;
$green-color: #4EAF79;
$green-color-light: #4EAF7979;
$gray-color-light: #eeeeee;
$divider-color: #F0F0F0;
$page-padding: 30rpx;