Compare commits

...

19 Commits

Author SHA1 Message Date
唐明明
ea4949e588 .. 2024-04-29 10:24:46 +08:00
唐明明
70c5d15d44 增加VIP会员 2024-04-09 17:29:23 +08:00
e520ff11d2 同步代码 2024-03-29 15:13:27 +08:00
7c70de5fe0 Merge branch 'master' of https://git.yuzhankeji.cn/zhangjing/douhuo-h5 2023-09-28 14:34:28 +08:00
8af51c5bb6 [抖火客户端H5] 2023-09-28 14:34:21 +08:00
唐明明
ed9de4abbb merge 2023-09-08 11:23:48 +08:00
唐明明
9ea40b74e7 同步 2023-09-08 11:22:13 +08:00
aaf1fafe8e Merge branch 'master' of https://git.yuzhankeji.cn/zhangjing/douhuo-h5 2023-07-28 16:56:40 +08:00
9c284ac715 修改抖火预估方案 2023-07-28 16:56:29 +08:00
唐明明
688e7f523c 移出待确认方案 2023-07-17 17:31:30 +08:00
唐明明
6277a1c29f 优化购买 2023-07-17 11:50:55 +08:00
唐明明
ad19d17644 正式环境 2023-07-12 14:05:18 +08:00
唐明明
4f9f3ae142 调整支付环境 2023-07-12 13:48:15 +08:00
唐明明
04fd83c21e 调整支付功能 2023-07-12 13:47:37 +08:00
唐明明
51297be16e Merge branch 'master' of https://git.yuzhankeji.cn/zhangjing/douhuo-h5 2023-07-12 10:38:57 +08:00
唐明明
a1e1e1d67e 调试支付 2023-07-12 10:38:55 +08:00
4422d72901 Merge branch 'master' of https://git.yuzhankeji.cn/zhangjing/douhuo-h5 2023-07-12 10:30:58 +08:00
9d6ba3efe0 最新代码,测试环境 2023-07-12 10:30:37 +08:00
850df0c9e6 测试环境 2023-07-11 14:53:48 +08:00
52 changed files with 12545 additions and 10011 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -1,16 +1,20 @@
{ // launch.json 配置了启动调试时相关设置configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ {
// launchtype项可配置值为local或remote, local代表前端连本地云函数remote代表前端连云端云函数 // launch.json 配置了启动调试时相关设置configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
"version": "0.0", // launchtype项可配置值为local或remote, local代表前端连本地云函数remote代表前端连云端云函数
"configurations": [{ "version" : "0.0",
"app-plus" : "configurations" : [
{ {
"launchtype" : "local" "app-plus" : {
}, "launchtype" : "local"
"default" : },
{ "default" : {
"launchtype" : "local" "launchtype" : "local"
}, },
"type" : "uniCloud" "type" : "uniCloud"
} },
{
"playground" : "standard",
"type" : "uni-app:app-android"
}
] ]
} }

View File

@@ -8,9 +8,9 @@ import store from '@/store'
import { router } from '@/router/index.js' import { router } from '@/router/index.js'
// 基础配置 // 基础配置
const config = { const config = {
apiUrl : 'https://api.douhuotest.douhuofalv.com/api/', // 测试环境 apiUrl : 'https://douhuo.douhuofalv.com/api/',
// apiUrl : 'https://douhuo.douhuofalv.com/api/', // 正式环境 // apiUrl : 'https://douhuo.demos.uzchain.tech/api/', //测试环境
timeout : 60000 timeout : 60000
} }
@@ -34,7 +34,7 @@ const request = (parameter, hideLoding) => {
// 加载提示 // 加载提示
if(!hideLoding) uni.showLoading({ if(!hideLoding) uni.showLoading({
title: '加载中', title: '加载中...',
mask : true mask : true
}); });
@@ -47,11 +47,11 @@ const request = (parameter, hideLoding) => {
data : parameter.data || {}, data : parameter.data || {},
method : parameter.method || 'GET', method : parameter.method || 'GET',
success : res => { success : res => {
uni.hideLoading()
if (res.header.Authorization){ if (res.header.Authorization){
updateToken('token', res.header.Authorization) updateToken('token', res.header.Authorization)
} }
if(res.statusCode === 200){ if(res.statusCode === 200){
uni.hideLoading()
const resolveData = res.data const resolveData = res.data
if(resolveData.status_code === 200) { if(resolveData.status_code === 200) {
resolve(resolveData.data) resolve(resolveData.data)

View File

@@ -1,11 +1,11 @@
/** /**
* 手太欠 * 手太欠
* 愿这世界都如故事里一样 美好而动人~ * 愿这世界都如故事里一样 美好而动人~
*/ */
import { request } from '../index'
import { request } from '../index'
// 用户注册 // 用户注册
const Register = (data) =>{ const Register = (data) =>{
return request({ return request({
@@ -14,65 +14,74 @@ const Register = (data) =>{
data: data data: data
}) })
} }
// 获取短信前图形验证码 // 获取短信前图形验证码
const Captcha = (data) =>{ const Captcha = (data) =>{
return request({ return request({
url: "user/auth/captcha", url: "user/auth/captcha",
method: 'POST', method: 'POST',
data: data data: data
}) })
} }
// 需校验图形验证码 // 需校验图形验证码
const smsAuth = (data) =>{ const smsAuth = (data) =>{
return request({ return request({
url: "user/auth/verify_captcha", url: "user/auth/verify_captcha",
method: 'POST', method: 'POST',
data: data data: data
}) })
} }
// 用户账号密码登录 // 用户账号密码登录
const Login = (data) =>{ const Login = (data) =>{
return request({ return request({
url: "user/auth/login", url: "user/auth/login",
method: 'POST', method: 'POST',
data: data data: data
}) })
} }
// 重置密码 // 重置密码
const resetPassword = (data) =>{ const resetPassword = (data) =>{
return request({ return request({
url: "user/auth/reset_password", url: "user/auth/reset_password",
method: 'POST', method: 'POST',
data: data data: data
}) })
} }
// 修改密码 // 修改密码
const modifyPassword = (data) =>{ const modifyPassword = (data) =>{
return request({ return request({
url: "user/setting/reset_password", url: "user/setting/reset_password",
method: 'POST', method: 'POST',
data: data data: data
}) })
} }
// 隐私+协议 // 隐私+协议
const registeragree = (website) =>{ const registeragree = (website) =>{
return request({ return request({
url: "cms/pages/" + website url: "cms/pages/" + website
}) })
}
// 验证码登录
const authSms = (data) =>{
return request({
url: "user/auth/sms",
method: 'POST',
data: data
})
} }
export {
export { Register,
Register, Captcha,
Captcha, smsAuth,
smsAuth, Login,
Login, resetPassword,
resetPassword,
modifyPassword, modifyPassword,
registeragree registeragree,
authSms
} }

View File

@@ -1,238 +1,312 @@
/** /**
* 手太欠 * 手太欠
* 愿这世界都如故事里一样 美好而动人~ * 愿这世界都如故事里一样 美好而动人~
*/ */
import { request } from '../index'
import { request } from '../index'
// 首页数据 // 首页数据
const home = () =>{ const home = () =>{
return request({ return request({
url: "business/home" url: "business/home"
}) })
} }
// 文章分类 // 文章分类
const articleSort = () =>{ const articleSort = () =>{
return request({ return request({
url: "cms/categories" url: "cms/categories"
}) })
} }
// 文章列表 // 文章列表
const articleList = (data) =>{ const articleList = (data) =>{
return request({ return request({
url: "cms/articles", url: "cms/articles",
data: data data: data
}) })
} }
// 文章详情 // 文章详情
const articleBrief = (article_id) =>{ const articleBrief = (article_id) =>{
return request({ return request({
url: "cms/articles/" + article_id url: "cms/articles/" + article_id
}) })
} }
// 文章收藏 // 文章收藏
const collect = (article_id) =>{ const collect = (article_id) =>{
return request({ return request({
url: "cms/articles/favorite/" + article_id url: "cms/articles/favorite/" + article_id
}) })
} }
// 我的文章收藏 // 我的文章收藏
const myCollect = (data) =>{ const myCollect = (data) =>{
return request({ return request({
url: "user/favorites", url: "user/favorites",
data: data data: data
}) })
} }
// 精选律师列表 // 精选律师列表
const lawyers = (data) =>{ const lawyers = (data) =>{
return request({ return request({
url: "lawyers", url: "lawyers",
data: data data: data
}) })
} }
// 精选律师详情 // 精选律师详情
const lawyersdet = (lawyer_id) =>{ const lawyersdet = (lawyer_id) =>{
return request({ return request({
url: "lawyers/" + lawyer_id url: "lawyers/" + lawyer_id
}) })
} }
//律师业务 //律师业务
const lawyersBusiness = () =>{ const lawyersBusiness = () =>{
return request({ return request({
url: "lawyers/businesses" url: "lawyers/businesses"
}) })
} }
//律师业务详情 //律师业务详情
const businessDet = (lawyer_business_id) =>{ const businessDet = (lawyer_business_id) =>{
return request({ return request({
url: "lawyers/businesses/" + lawyer_business_id url: "lawyers/businesses/" + lawyer_business_id
}) })
} }
//律师订单金额 //律师订单金额
const lawyerOrder = (lawyer_id) =>{ const lawyerOrder = (lawyer_id) =>{
return request({ return request({
url: "lawyers/" + lawyer_id + "/order" url: "lawyers/" + lawyer_id + "/order"
}) })
} }
//律师业务-创建订单 //律师业务-创建订单
const businessOrder = (lawyer_business_id) =>{ const businessOrder = (lawyer_business_id) =>{
return request({ return request({
url: "lawyers/businesses/" + lawyer_business_id + "/order" url: "lawyers/businesses/" + lawyer_business_id + "/order"
}) })
} }
// 获取主业务 // 获取主业务
const workIndex = () =>{ const workIndex = () =>{
return request({ return request({
url: "business/index" url: "business/index"
}) })
} }
// 获取主业务机构 // 获取主业务机构
const workOne = (business_id) =>{ const workOne = (business_id) =>{
return request({ return request({
url: "business/" + business_id + "/institution" url: "business/" + business_id + "/institution"
}) })
} }
// 获取二级业务类型 // 获取二级业务类型
const workLevel = (business_id) =>{ const workLevel = (business_id) =>{
return request({ return request({
url: "business/institution/" + business_id + "/type" url: "business/institution/" + business_id + "/type"
}) })
} }
// 提交基础信息 // 提交基础信息
const workStore = (data) =>{ const workStore = (data) =>{
return request({ return request({
url: "business/store", url: "business/store",
method: 'POST', method: 'POST',
data: data data: data
}) })
} }
// 9.9预约 // 9.9预约
const Apply = (business_order_id) =>{ const Apply = (business_order_id) =>{
return request({ return request({
url: "business/apply/" + business_order_id + "/info" url: "business/apply/" + business_order_id + "/info"
}) })
} }
// 9.9预约--微信支付 // 9.9预约--微信支付
const Wechat = (apply_order_no, data) =>{ const Wechat = (apply_order_no, data) =>{
return request({ return request({
url: "pay/apply/" + apply_order_no + "/wechat", url: "pay/apply/" + apply_order_no + "/wechat",
data: data data: data
}) })
} }
// 咨询服务费--微信支付 // 咨询服务费--微信支付
const applyPay = (business_order_id, data) =>{ const applyPay = (business_order_id, data) =>{
return request({ return request({
url: "pay/order/" + business_order_id + "/wechat", url: "pay/order/" + business_order_id + "/wechat",
data: data data: data
}) })
} }
// 补差价--微信支付 // 补差价--微信支付
const diffPay = (business_order_diff_price_id, data) =>{ const diffPay = (business_order_diff_price_id, data) =>{
return request({ return request({
url: "pay/diff/" + business_order_diff_price_id + "/wechat", url: "pay/diff/" + business_order_diff_price_id + "/wechat",
data: data data: data
}) })
} }
// 获取公众号openid // 获取公众号openid
const Openid = (data) =>{ const Openid = (data) =>{
return request({ return request({
url: "user/auth/official/openid", url: "user/auth/official/openid",
data: data data: data
}) })
}
// 获取授权页面
const authFollow = (data) => {
return request({
url : 'user/auth/official/url',
data: data
})
} }
// 获取授权页面
const authFollow = (data) => {
return request({
url : 'user/auth/official/url',
data: data
})
}
// 获取方案 // 获取方案
const Schemes = (business_order_id) =>{ const Schemes = (business_order_id) =>{
return request({ return request({
url: "business/" + business_order_id + "/schemes" url: "business/" + business_order_id + "/schemes"
})
}
// h5入库用户数据
const wechatCode = (data) => {
return request({
url : 'user/auth/login/wechat/add',
method: 'POST',
data: data
})
}
// 校验分享用户
const Verify = (data) => {
return request({
url : 'user/relations/verify',
data: data
})
}
// 绑定分享用户
const Bind = (data) => {
return request({
url : 'user/relations/bind',
method: 'POST',
data: data
})
}
// 账户管理类
const accountManagement = () => {
return request({
url: "account_management/index"
}) })
} }
// h5入库用户数据 // 账户管理类 - 办理
const wechatCode = (data) => { const accountFrom = (data, id) => {
return request({ return request({
url : 'user/auth/login/wechat/add', url : "account_management/" + id + "/store",
method: 'POST', method : "POST",
data: data data
}) })
} }
// 校验分享用户 // 账户管理类 - 订单
const Verify = (data) => { const accountOrder = data => {
return request({ return request({
url : 'user/relations/verify', url : "account_management/order/lists",
data: data data
}) })
} }
// 绑定分享用户 // 账户管理类 - 取消订单
const Bind = (data) => { const accountCancel = id => {
return request({ return request({
url : 'user/relations/bind', url : "account_management/order/" + id + "/cancel",
method: 'POST', method : "DELETE"
data: data })
})
} }
export { // 委托管理类
home, const delegation = () => {
articleSort, return request({
articleList, url: "delegation/index"
articleBrief, })
collect, }
myCollect,
lawyers, // 委托管理类 - 办理
lawyersdet, const delegationFrom = (data, id) => {
lawyersBusiness, return request({
businessDet, url : "delegation/" + id + "/store",
lawyerOrder, method : "POST",
businessOrder, data
workIndex, })
workOne, }
workLevel,
workStore, // 委托管理类 - 订单
Apply, const delegationOrder = data => {
Wechat, return request({
applyPay, url : "delegation/order/lists",
diffPay, method : "POST",
Openid, data
authFollow, })
Schemes, }
wechatCode,
Verify, // 委托管理类 - 取消订单
Bind const delegationCancel = id => {
return request({
url : "delegation/order/" + id + "/cancel",
method : "DELETE"
})
}
export {
home,
articleSort,
articleList,
articleBrief,
collect,
myCollect,
lawyers,
lawyersdet,
lawyersBusiness,
businessDet,
lawyerOrder,
businessOrder,
workIndex,
workOne,
workLevel,
workStore,
Apply,
Wechat,
applyPay,
diffPay,
Openid,
authFollow,
Schemes,
wechatCode,
Verify,
Bind,
accountManagement,
accountFrom,
accountOrder,
accountCancel,
delegation,
delegationFrom,
delegationOrder,
delegationCancel
} }

View File

@@ -34,7 +34,7 @@ const umsDiff = (diffPriceId, data) =>{
const umsState = (trade_id) => { const umsState = (trade_id) => {
return request({ return request({
url : 'payments/query/' + trade_id, url : 'payments/query/' + trade_id,
}) }, false)
} }
// 斗拱支付 - 咨询单 // 斗拱支付 - 咨询单

View File

@@ -359,6 +359,37 @@ const userSubscribe = () => {
}) })
} }
// 会员信息
const identity = () => {
return request({
url: 'identity'
})
}
// 开通会员
const vip = data => {
return request({
url: 'identity/open',
method: 'POST',
data
})
}
// 团队列表
const team = data => {
return request({
url: 'user/relations/wechat',
data
})
}
// 获取二维码
const userQrcode = () => {
return request({
url: 'user/client/qrcode'
})
}
export { export {
userIndex, userIndex,
realName, realName,
@@ -404,5 +435,9 @@ export {
cacheBankPut, cacheBankPut,
getSignLogs, getSignLogs,
getFlows, getFlows,
userSubscribe userSubscribe,
identity,
vip,
team,
userQrcode
} }

445
package-lock.json generated
View File

@@ -1,190 +1,443 @@
{ {
"name": "douhuo-h5",
"lockfileVersion": 3,
"requires": true, "requires": true,
"lockfileVersion": 1, "packages": {
"dependencies": { "": {
"@babel/parser": { "dependencies": {
"version": "7.21.8", "html2canvas": "^1.4.1",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.8.tgz", "jweixin-module": "^1.6.0",
"integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==" "uni-read-pages": "^1.0.5",
"uni-simple-router": "2.0.7",
"uview-ui": "^2.0.31",
"vconsole": "^3.15.0",
"vue-canvas-poster": "^1.2.1",
"vuex": "^4.1.0"
}
}, },
"@babel/runtime": { "node_modules/@babel/parser": {
"version": "7.24.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz",
"integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==",
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/runtime": {
"version": "7.20.13", "version": "7.20.13",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.13.tgz", "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.13.tgz",
"integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
"requires": { "dependencies": {
"regenerator-runtime": "^0.13.11" "regenerator-runtime": "^0.13.11"
},
"engines": {
"node": ">=6.9.0"
} }
}, },
"@vue/compiler-sfc": { "node_modules/@jridgewell/sourcemap-codec": {
"version": "2.7.14", "version": "1.4.15",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"requires": { "peer": true
"@babel/parser": "^7.18.4", },
"postcss": "^8.4.14", "node_modules/@vue/compiler-core": {
"source-map": "^0.6.1" "version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.25.tgz",
"integrity": "sha512-Y2pLLopaElgWnMNolgG8w3C5nNUVev80L7hdQ5iIKPtMJvhVpG0zhnBG/g3UajJmZdvW0fktyZTotEHD1Srhbg==",
"peer": true,
"dependencies": {
"@babel/parser": "^7.24.4",
"@vue/shared": "3.4.25",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
} }
}, },
"@vue/devtools-api": { "node_modules/@vue/compiler-dom": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.25.tgz",
"integrity": "sha512-Ugz5DusW57+HjllAugLci19NsDK+VyjGvmbB2TXaTcSlQxwL++2PETHx/+Qv6qFwNLzSt7HKepPe4DcTE3pBWg==",
"peer": true,
"dependencies": {
"@vue/compiler-core": "3.4.25",
"@vue/shared": "3.4.25"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.25.tgz",
"integrity": "sha512-m7rryuqzIoQpOBZ18wKyq05IwL6qEpZxFZfRxlNYuIPDqywrXQxgUwLXIvoU72gs6cRdY6wHD0WVZIFE4OEaAQ==",
"peer": true,
"dependencies": {
"@babel/parser": "^7.24.4",
"@vue/compiler-core": "3.4.25",
"@vue/compiler-dom": "3.4.25",
"@vue/compiler-ssr": "3.4.25",
"@vue/shared": "3.4.25",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.10",
"postcss": "^8.4.38",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.25.tgz",
"integrity": "sha512-H2ohvM/Pf6LelGxDBnfbbXFPyM4NE3hrw0e/EpwuSiYu8c819wx+SVGdJ65p/sFrYDd6OnSDxN1MB2mN07hRSQ==",
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.4.25",
"@vue/shared": "3.4.25"
}
},
"node_modules/@vue/devtools-api": {
"version": "6.4.5", "version": "6.4.5",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz",
"integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==" "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
}, },
"base64-arraybuffer": { "node_modules/@vue/reactivity": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.25.tgz",
"integrity": "sha512-mKbEtKr1iTxZkAG3vm3BtKHAOhuI4zzsVcN0epDldU/THsrvfXRKzq+lZnjczZGnTdh3ojd86/WrP+u9M51pWQ==",
"peer": true,
"dependencies": {
"@vue/shared": "3.4.25"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.25.tgz",
"integrity": "sha512-3qhsTqbEh8BMH3pXf009epCI5E7bKu28fJLi9O6W+ZGt/6xgSfMuGPqa5HRbUxLoehTNp5uWvzCr60KuiRIL0Q==",
"peer": true,
"dependencies": {
"@vue/reactivity": "3.4.25",
"@vue/shared": "3.4.25"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.25.tgz",
"integrity": "sha512-ode0sj77kuwXwSc+2Yhk8JMHZh1sZp9F/51wdBiz3KGaWltbKtdihlJFhQG4H6AY+A06zzeMLkq6qu8uDSsaoA==",
"peer": true,
"dependencies": {
"@vue/runtime-core": "3.4.25",
"@vue/shared": "3.4.25",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.25.tgz",
"integrity": "sha512-8VTwq0Zcu3K4dWV0jOwIVINESE/gha3ifYCOKEhxOj6MEl5K5y8J8clQncTcDhKF+9U765nRw4UdUEXvrGhyVQ==",
"peer": true,
"dependencies": {
"@vue/compiler-ssr": "3.4.25",
"@vue/shared": "3.4.25"
},
"peerDependencies": {
"vue": "3.4.25"
}
},
"node_modules/@vue/shared": {
"version": "3.4.25",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.25.tgz",
"integrity": "sha512-k0yappJ77g2+KNrIaF0FFnzwLvUBLUYr8VOwz+/6vLsmItFp51AcxLL7Ey3iPd7BIRyWPOcqUjMnm7OkahXllA==",
"peer": true
},
"node_modules/base64-arraybuffer": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
"engines": {
"node": ">= 0.6.0"
}
}, },
"copy-text-to-clipboard": { "node_modules/copy-text-to-clipboard": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz",
"integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
}, },
"core-js": { "node_modules/core-js": {
"version": "3.27.2", "version": "3.27.2",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.27.2.tgz", "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.27.2.tgz",
"integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==" "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
}, },
"css-line-break": { "node_modules/css-line-break": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz", "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"requires": { "dependencies": {
"utrie": "^1.0.2" "utrie": "^1.0.2"
} }
}, },
"csstype": { "node_modules/csstype": {
"version": "3.1.2", "version": "3.1.3",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
}, },
"html2canvas": { "node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"peer": true,
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"peer": true
},
"node_modules/html2canvas": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz", "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"requires": { "dependencies": {
"css-line-break": "^2.1.0", "css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3" "text-segmentation": "^1.0.3"
},
"engines": {
"node": ">=8.0.0"
} }
}, },
"jweixin-module": { "node_modules/jweixin-module": {
"version": "1.6.0", "version": "1.6.0",
"resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz", "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==" "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
}, },
"mutation-observer": { "node_modules/magic-string": {
"version": "0.30.10",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
"integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
"peer": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
}
},
"node_modules/mutation-observer": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz", "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==" "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
}, },
"nanoid": { "node_modules/nanoid": {
"version": "3.3.6", "version": "3.3.7",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
}, "funding": [
"picocolors": { {
"version": "1.0.0", "type": "github",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", "url": "https://github.com/sponsors/ai"
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }
}, ],
"postcss": { "bin": {
"version": "8.4.23", "nanoid": "bin/nanoid.cjs"
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.23.tgz", },
"integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "engines": {
"requires": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
} }
}, },
"regenerator-runtime": { "node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
"node_modules/postcss": {
"version": "8.4.38",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
"integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"optional": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/regenerator-runtime": {
"version": "0.13.11", "version": "0.13.11",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
}, },
"source-map": { "node_modules/source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"engines": {
"node": ">=0.10.0"
}
}, },
"source-map-js": { "node_modules/source-map-js": {
"version": "1.0.2", "version": "1.2.0",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
}, },
"text-segmentation": { "node_modules/text-segmentation": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz", "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"requires": { "dependencies": {
"utrie": "^1.0.2" "utrie": "^1.0.2"
} }
}, },
"uni-read-pages": { "node_modules/uni-read-pages": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz", "resolved": "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz",
"integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==" "integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==",
"hasInstallScript": true
}, },
"uni-simple-router": { "node_modules/uni-simple-router": {
"version": "2.0.8-beta.4", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.8-beta.4.tgz", "resolved": "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz",
"integrity": "sha512-ipTHhOaRvjV8qrt3HosX5pNMhwFYBnFOuKyV5joH0evfXubjrGI5tjdwpmwzfW5h3VBth3iAqScv+pW/QmIJXw==" "integrity": "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
}, },
"utrie": { "node_modules/utrie": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"requires": { "dependencies": {
"base64-arraybuffer": "^1.0.2" "base64-arraybuffer": "^1.0.2"
} }
}, },
"uview-ui": { "node_modules/uview-ui": {
"version": "2.0.31", "version": "2.0.31",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz", "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
"integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==" "integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==",
"engines": {
"HBuilderX": "^3.1.0"
}
}, },
"vconsole": { "node_modules/vconsole": {
"version": "3.15.0", "version": "3.15.0",
"resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.0.tgz", "resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.0.tgz",
"integrity": "sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==", "integrity": "sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==",
"requires": { "dependencies": {
"@babel/runtime": "^7.17.2", "@babel/runtime": "^7.17.2",
"copy-text-to-clipboard": "^3.0.1", "copy-text-to-clipboard": "^3.0.1",
"core-js": "^3.11.0", "core-js": "^3.11.0",
"mutation-observer": "^1.0.3" "mutation-observer": "^1.0.3"
} }
}, },
"vue": { "node_modules/vue": {
"version": "2.7.14", "version": "3.4.25",
"resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.25.tgz",
"integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "integrity": "sha512-HWyDqoBHMgav/OKiYA2ZQg+kjfMgLt/T0vg4cbIF7JbXAjDexRf5JRg+PWAfrAkSmTd2I8aPSXtooBFWHB98cg==",
"requires": { "peer": true,
"@vue/compiler-sfc": "2.7.14",
"csstype": "^3.1.0"
}
},
"vue-canvas-poster": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz",
"integrity": "sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw==",
"requires": {
"core-js": "^2.6.5",
"vue": "^2.6.10"
},
"dependencies": { "dependencies": {
"core-js": { "@vue/compiler-dom": "3.4.25",
"version": "2.6.12", "@vue/compiler-sfc": "3.4.25",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", "@vue/runtime-dom": "3.4.25",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" "@vue/server-renderer": "3.4.25",
"@vue/shared": "3.4.25"
},
"peerDependencies": {
"typescript": "*"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
} }
} }
}, },
"vuex": { "node_modules/vue-canvas-poster": {
"version": "1.2.1",
"resolved": "https://registry.npmmirror.com/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz",
"integrity": "sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw==",
"dependencies": {
"core-js": "^2.6.5",
"vue": "^2.6.10"
}
},
"node_modules/vue-canvas-poster/node_modules/@vue/compiler-sfc": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz",
"integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==",
"dependencies": {
"@babel/parser": "^7.23.5",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
},
"optionalDependencies": {
"prettier": "^1.18.2 || ^2.0.0"
}
},
"node_modules/vue-canvas-poster/node_modules/core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
"deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
"hasInstallScript": true
},
"node_modules/vue-canvas-poster/node_modules/vue": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz",
"integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==",
"deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.",
"dependencies": {
"@vue/compiler-sfc": "2.7.16",
"csstype": "^3.1.0"
}
},
"node_modules/vuex": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
"integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
"requires": { "dependencies": {
"@vue/devtools-api": "^6.0.0-beta.11" "@vue/devtools-api": "^6.0.0-beta.11"
},
"peerDependencies": {
"vue": "^3.2.0"
} }
} }
} }

View File

@@ -84,7 +84,16 @@
"aliasPath": "/login/login", "aliasPath": "/login/login",
"name": "Login", "name": "Login",
"style": { "style": {
"navigationBarTitleText": "抖火法律-登录" "navigationBarTitleText": "抖火法律-验证码登录",
"navigationStyle": "custom"
}
}, {
"path": "pages/login/passwordLogin",
"aliasPath": "/login/passwordLogin",
"name": "PasswordLogin",
"style": {
"navigationBarTitleText": "抖火法律-密码登录",
"navigationStyle": "custom"
} }
}, { }, {
"path": "pages/login/agreement", "path": "pages/login/agreement",
@@ -656,6 +665,69 @@
"enablePullDownRefresh": false, "enablePullDownRefresh": false,
"navigationStyle": "custom" "navigationStyle": "custom"
} }
},{
"path" : "pages/management/account",
"aliasPath": "/management/account",
"name" : "MagAccount",
"style" : {
"navigationBarTitleText" : "账户咨询办理",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/management/delegation",
"name" : "MagDelegation",
"aliasPath": "/management/delegation",
"style" : {
"navigationBarTitleText" : "委托管理办理",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/work/account",
"name" : "AccountWork",
"aliasPath": "/work/account",
"style" : {
"navigationBarTitleText" : "账户管理咨询类",
"enablePullDownRefresh" : false,
"navigationBarBackgroundColor": "#FFFFFF"
}
},{
"path" : "pages/work/delegation",
"name" : "DelegationWork",
"aliasPath": "/work/delegation",
"style" : {
"navigationBarTitleText" : "委托管理类",
"enablePullDownRefresh" : false,
"navigationBarBackgroundColor": "#FFFFFF"
}
},
{
"path" : "pages/user/vip",
"aliasPath": "/vip",
"name": "vip",
"style" : {
"navigationBarTitleText" : "会员中心",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/user/team",
"aliasPath": "/team",
"name": "Tema",
"style" : {
"navigationBarTitleText" : "团队",
"enablePullDownRefresh" : false
}
},
{
"path" : "pages/index/lawyers",
"aliasPath": "/lawyers",
"name": "Lawyers",
"style" : {
"navigationBarTitleText" : "金牌律师",
"enablePullDownRefresh" : false
}
} }
], ],
"globalStyle": { "globalStyle": {

View File

@@ -116,8 +116,7 @@
params: { params: {
orderId : order_id, orderId : order_id,
orderType : order_type, orderType : order_type,
price : this.allPrice },
}
}) })
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({

View File

@@ -31,7 +31,7 @@
<rich-text :nodes="content"></rich-text> <rich-text :nodes="content"></rich-text>
<!-- 报名信息 --> <!-- 报名信息 -->
<view class="footer"> <view class="footer">
<view class="footer-btn" @click="onBuy">立即购买</view> <view :class="['footer-btn', count.ing <= 0 ? 'in' : '']" @click="onBuy">立即购买</view>
</view> </view>
</view> </view>
</template> </template>
@@ -72,6 +72,13 @@
}, },
methods: { methods: {
onBuy(){ onBuy(){
if(this.count.ing <= 0){
uni.showToast({
title: '暂无可报名学期',
icon : 'none'
})
return
}
this.$Router.push({ this.$Router.push({
name : 'EmpowerBuy', name : 'EmpowerBuy',
params : { id: this.id } params : { id: this.id }
@@ -131,5 +138,6 @@
background-color: white; background-color: white;
box-shadow: 0 0 10rpx 10rpx rgba(0, 0, 0, .04); box-shadow: 0 0 10rpx 10rpx rgba(0, 0, 0, .04);
.footer-btn{ background: $mian-color; color: white; line-height: 100rpx; border-radius: 50rpx; flex: 1; text-align: center; font-weight: bold; font-size: 36rpx; } .footer-btn{ background: $mian-color; color: white; line-height: 100rpx; border-radius: 50rpx; flex: 1; text-align: center; font-weight: bold; font-size: 36rpx; }
.footer-btn.in{ opacity: .6; }
} }
</style> </style>

View File

@@ -7,11 +7,12 @@
<!-- logo --> <!-- logo -->
<view class="topCont-logo"> <view class="topCont-logo">
<image class="topCont-logo-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/fbd7ddba29e4ac81467b3d218233bb02.png" mode="widthFix"></image> <image class="topCont-logo-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/fbd7ddba29e4ac81467b3d218233bb02.png" mode="widthFix"></image>
<view class="topCont-logo-go" @click="seekClick"> <view>
立即咨询 <view class="topCont-logo-btn" @click="seekClick">
立即咨询
</view>
</view> </view>
</view> </view>
<!-- 专业优质在线法律平台 --> <!-- 专业优质在线法律平台 -->
<view class="topCont-text"> <view class="topCont-text">
<view class="topCont-text-name"> <view class="topCont-text-name">
@@ -46,10 +47,16 @@
</block> </block>
</swiper> </swiper>
</view> </view>
</view> </view>
<!-- 开通会员 -->
<image
style="width: 100%; vertical-align: top;"
src="/static/vip.png"
mode="widthFix"
@click="$Router.push({name: 'vip'})" v-if="vip.name != ''"
></image>
<!-- 新增改版 - 协商调解类 --> <!-- 新增改版 - 协商调解类 -->
<view class="module"> <view class="module" style="display: none;">
<view class="module-title"> <view class="module-title">
协商调解类 协商调解类
</view> </view>
@@ -76,13 +83,53 @@
</view> </view>
</view> </view>
<!-- 账户管理咨询类 -->
<view class="module" v-if="accountData.length > 0" style="display: none;">
<view class="module-title">
账户管理咨询类
</view>
<scroll-view class="law" scroll-x="true" show-scrollbar="false">
<view class="law-label" v-for="(item, index) in accountData" :key="index" @click="onMagInfo('Account', item.id)">
<image class="law-label-img" :src="item.cover" mode="widthFix"></image>
<view class="law-label-cont">
<view class="nowrap law-label-name">
{{item.title}}
</view>
<view class="law-label-price">
{{item.price}}
</view>
</view>
</view>
</scroll-view>
</view>
<!-- 委托管理类 -->
<view class="module" v-if="delegation.length > 0" style="display: none;">
<view class="module-title">
委托管理类
</view>
<scroll-view class="law" scroll-x="true" show-scrollbar="false">
<view class="law-label" v-for="(item, index) in delegation" :key="index" @click="onMagInfo('Delegation', item.id)">
<image class="law-label-img" :src="item.cover" mode="widthFix"></image>
<view class="law-label-cont">
<view class="nowrap law-label-name">
{{item.title}}
</view>
<view class="law-label-price">
{{item.price}}
</view>
</view>
</view>
</scroll-view>
</view>
<!-- 新增改版 - 法律资讯类 --> <!-- 新增改版 - 法律资讯类 -->
<view class="module"> <view class="module">
<view class="module-title"> <view class="module-title">
法律咨询类 企业法律顾问
</view> </view>
<scroll-view class="law" scroll-x="true" show-scrollbar="false"> <scroll-view class="law" scroll-x="true" show-scrollbar="false">
<view class="law-label" @click="clickBrief"> <!-- <view class="law-label" @click="clickBrief">
<image class="law-label-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/18/f3db072ac405edf2a3dc3fd6c3aae206.png" mode="widthFix"></image> <image class="law-label-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/18/f3db072ac405edf2a3dc3fd6c3aae206.png" mode="widthFix"></image>
<view class="law-label-cont"> <view class="law-label-cont">
<view class="law-label-name"> <view class="law-label-name">
@@ -95,7 +142,7 @@
365.00/ 365.00/
</view> </view>
</view> </view>
</view> </view> -->
<view class="law-label" @click="$Router.push({name: 'StandBrief', params: {type: 2}})"> <view class="law-label" @click="$Router.push({name: 'StandBrief', params: {type: 2}})">
<image class="law-label-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/18/d813f30a393e6d50df8cc59a36e557c8.png" mode="widthFix"></image> <image class="law-label-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/18/d813f30a393e6d50df8cc59a36e557c8.png" mode="widthFix"></image>
<view class="law-label-cont"> <view class="law-label-cont">
@@ -158,7 +205,7 @@
<!-- 新增改版 - 诉讼委托类 --> <!-- 新增改版 - 诉讼委托类 -->
<view class="module"> <view class="module">
<view class="module-title"> <view class="module-title">
诉讼委托 案件诉讼委托
</view> </view>
<view class="topCont-tool"> <view class="topCont-tool">
<view class="topCont-tool-label redBlock" @click="$Router.push({name: 'EntrustBrief'})"> <view class="topCont-tool-label redBlock" @click="$Router.push({name: 'EntrustBrief'})">
@@ -187,7 +234,7 @@
</view> </view>
<!-- 新增改版 - 增收赋能类 --> <!-- 新增改版 - 增收赋能类 -->
<view class="module"> <view class="module" style="display: none;">
<view class="module-title"> <view class="module-title">
增收赋能类 增收赋能类
</view> </view>
@@ -232,7 +279,8 @@
<!-- 金牌律师 --> <!-- 金牌律师 -->
<view class="list"> <view class="list">
<view class="list-title"> <view class="list-title">
金牌律师 金牌律师
<view class="list-title-sm" @click="$Router.push({ name: 'Lawyers' })">全部</view>
</view> </view>
<view class="lawyer"> <view class="lawyer">
<view class="lawyer-item" v-for="(item, index) in lawyersArr" :key="index" @click="$Router.push({name: 'lawyerDetails', params: {id: item.lawyer_id}})"> <view class="lawyer-item" v-for="(item, index) in lawyersArr" :key="index" @click="$Router.push({name: 'lawyerDetails', params: {id: item.lawyer_id}})">
@@ -349,7 +397,7 @@
</template> </template>
<script> <script>
import { workIndex, home, articleSort, articleList } from '@/apis/interfaces/index' import { workIndex, home, articleSort, articleList, accountManagement, delegation } from '@/apis/interfaces/index'
import { judgeReal, userIndex, authFollow } from '@/apis/interfaces/user' import { judgeReal, userIndex, authFollow } from '@/apis/interfaces/user'
import { lists } from '@/apis/interfaces/empower.js' import { lists } from '@/apis/interfaces/empower.js'
export default { export default {
@@ -357,7 +405,11 @@
return { return {
businessArr : [], // 协商调解数组 businessArr : [], // 协商调解数组
canBuy : '', // 是否有免费个人咨询 canBuy : '', // 是否有免费个人咨询
officialShow : false, // 公众号 officialShow : false, // 公众号
vip : {
name: ""
},
autoplay : true, autoplay : true,
interval : 3000, interval : 3000,
@@ -377,9 +429,14 @@
first : 1, first : 1,
layadState : '', layadState : '',
layadImg : '', layadImg : '',
haveimg : '', haveimg : '',
// 增收赋能列表 // 增收赋能列表
empowerArr : [] empowerArr : [],
// 账户管理类
accountData : [],
// 委托管理类
delegation : []
} }
}, },
onShow() { onShow() {
@@ -403,7 +460,13 @@
this.articleItem(); this.articleItem();
// 增收赋能 // 增收赋能
this.getEmpower() this.getEmpower();
// 账户管理类
this.getManagement();
// 委托管理类
this.getDelegation();
if(this.$store.getters.getToken) { if(this.$store.getters.getToken) {
userIndex().then(res => { userIndex().then(res => {
@@ -417,7 +480,40 @@
} }
}, },
methods: { methods: {
// 获取账户管理类
getManagement(){
accountManagement().then(res => {
let accountData = res
this.accountData = accountData
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 获取委托管理类
getDelegation(){
delegation().then(res => {
let delegationData = res
this.delegation = delegationData
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 查看管理类业务
onMagInfo(type, id){
this.$Router.push({
name : 'Mag' + type,
params : { id }
})
},
// 增收赋能接口 // 增收赋能接口
getEmpower(){ getEmpower(){
lists().then(res => { lists().then(res => {
@@ -431,11 +527,10 @@
}, },
// 首页数据 // 首页数据
homeInfo() { homeInfo() {
home().then(res => { home().then(res => {
if(res.layad.is_lay_ad) { if(res.layad.is_lay_ad) {
this.layadImg = res.layad.lay_ad_img this.layadImg = res.layad.lay_ad_img
} }
let times = Number(res.layad.times.padEnd(4, 0)) let times = Number(res.layad.times.padEnd(4, 0))
if(this.first === 1 && res.layad.is_lay_ad) { if(this.first === 1 && res.layad.is_lay_ad) {
this.haveimg = true this.haveimg = true
@@ -445,7 +540,8 @@
this.haveimg = false this.haveimg = false
},times); },times);
} }
this.vip = res.vip
this.homeList = res.categories this.homeList = res.categories
this.lawyersArr = res.lawyers this.lawyersArr = res.lawyers
this.noticesArr = res.notices this.noticesArr = res.notices
@@ -716,7 +812,9 @@
position: relative; position: relative;
.topCont-logo { .topCont-logo {
display: flex; display: flex;
line-height: 58rpx; line-height: 58rpx;
justify-content: space-between;
align-items: center;
.topCont-logo-img { .topCont-logo-img {
margin-right: 15rpx; margin-right: 15rpx;
width: 190rpx; width: 190rpx;
@@ -725,19 +823,17 @@
font-weight: 600; font-weight: 600;
} }
.topCont-logo-go { .topCont-logo-btn {
background-color: #ffffff; background-color: #ffffff;
border-radius: $radius*5; border-radius: $radius*5;
text-align: center; text-align: center;
color: $mian-color; color: $mian-color;
font-size: $title-size; font-size: $title-size;
line-height: 72rpx; line-height: 68rpx;
font-weight: 600; font-weight: 600;
display: inline-block; display: inline-block;
position: absolute; padding: 0 $padding;
right: $margin; &:last-child{ margin-left: 20rpx; }
top: $margin + 10;
padding: 0 $padding + 10;
} }
} }
.topCont-text { .topCont-text {
@@ -883,7 +979,11 @@
.list-title { .list-title {
font-weight: 600; font-weight: 600;
margin-bottom: 10rpx; margin-bottom: 10rpx;
color: $text-color; color: $text-color;
display: flex;
align-items: center;
justify-content: space-between;
&-sm{ font-size: 30rpx; color: gray; font-weight: normal; }
} }
.lawyer { .lawyer {
overflow: hidden; overflow: hidden;

View File

@@ -1,232 +1,232 @@
<template> <template>
<view class="content"> <view class="content">
<image @click="sheetClick" class="introduce-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/18/8110e4f3606a37358b60f39e026cc24f.jpg" mode="widthFix"></image> <image @click="sheetClick" class="introduce-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/18/8110e4f3606a37358b60f39e026cc24f.jpg" mode="widthFix"></image>
<!-- <view class="introduce-number"> <!-- <view class="introduce-number">
你有新的预约单 你有新的预约单
<view class="number"> <view class="number">
3 3
</view> </view>
</view> </view>
<view class="introduce-btn" @click="$Router.push({name: 'sheetIdcard'})"> <view class="introduce-btn" @click="$Router.push({name: 'sheetIdcard'})">
<view class="btn"> <view class="btn">
立即咨询 9.9 立即咨询 9.9
</view> </view>
</view> --> </view> -->
<view class="tipsBack" v-if="generalShow"></view> <view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow"> <view class="tipsCont" v-if="generalShow">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image> <image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image>
<view class="tipsWhite-top"> <view class="tipsWhite-top">
<view class="tipsWhite-name"> <view class="tipsWhite-name">
请您先关注抖火法律咨询公众号 请您先关注抖火法律咨询公众号
</view> </view>
<view class="tipsWhite-text"> <view class="tipsWhite-text">
关注后可立即下单 关注后可立即下单
</view> </view>
</view> </view>
<view class="tipsWhite-btn"> <view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false"> <view class="tipsWhite-btn-go" @click="generalShow = false">
稍后关注 稍后关注
</view> </view>
<view class="tipsWhite-btn-go" @click="judgeGeneral"> <view class="tipsWhite-btn-go" @click="judgeGeneral">
马上关注 马上关注
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { judgeReal } from '@/apis/interfaces/user' import { judgeReal } from '@/apis/interfaces/user'
import { authFollow } from '@/apis/interfaces/index' import { authFollow } from '@/apis/interfaces/index'
export default { export default {
data() { data() {
return { return {
generalShow: false // 公众号 generalShow: false // 公众号
} }
}, },
onLoad() { onLoad() {
}, },
methods: { methods: {
// 判断是否认证 // 判断是否认证
sheetClick() { sheetClick() {
judgeReal().then(res => { judgeReal().then(res => {
if(res.has_sign) { if(res.has_sign) {
if(!res.has_subscribe) { if(!res.has_subscribe) {
// 弹出公众号 // 弹出公众号
this.generalShow = true this.generalShow = true
} else { } else {
// 跳到咨询单 // 跳到咨询单
this.$Router.replace({name: 'sheetFeerCreate'}) this.$Router.replace({name: 'sheetFeerCreate'})
} }
return return
} }
// 跳到认证页面 // 跳到认证页面
this.$Router.replace({name: 'sheetIdcard'}) this.$Router.replace({name: 'sheetIdcard'})
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 状态 // 状态
judgeGeneral(){ judgeGeneral(){
// 获取微信授权信息 // 获取微信授权信息
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webview/webCode' url: 'https://web.douhuofalv.com/webview/webCode'
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode' // url: 'https://web.douhuotest.douhuofalv.com/webview/webCode'
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
// 关闭公众号 // 关闭公众号
this.generalShow = false this.generalShow = false
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
// page { // page {
// background-color: #446efe; // background-color: #446efe;
// } // }
.introduce-img { .introduce-img {
width: 100%; width: 100%;
display: inline-block; display: inline-block;
} }
.introduce-number { .introduce-number {
position: fixed; position: fixed;
right: $margin; right: $margin;
bottom: 180rpx; bottom: 180rpx;
z-index: 9; z-index: 9;
background-color: #ffffff; background-color: #ffffff;
border-radius: $radius * 5; border-radius: $radius * 5;
color: $mian-color; color: $mian-color;
font-size: $title-size-m; font-size: $title-size-m;
padding: 0 $padding; padding: 0 $padding;
line-height: 68rpx; line-height: 68rpx;
display: inline-block; display: inline-block;
box-shadow: 0 2rpx 10rpx rgba(218, 43, 86, .3); box-shadow: 0 2rpx 10rpx rgba(218, 43, 86, .3);
.number { .number {
position: absolute; position: absolute;
z-index: 10; z-index: 10;
top: -25rpx; top: -25rpx;
right: 0; right: 0;
border-radius: 50%; border-radius: 50%;
text-align: center; text-align: center;
background-color: $mian-color; background-color: $mian-color;
color: #ffffff; color: #ffffff;
width: 48rpx; width: 48rpx;
height: 48rpx; height: 48rpx;
line-height: 48rpx; line-height: 48rpx;
font-size: $title-size-sm; font-size: $title-size-sm;
text-align: center; text-align: center;
} }
} }
.introduce-btn { .introduce-btn {
position: fixed; position: fixed;
width: 100%; width: 100%;
left: 0; left: 0;
bottom: 0; bottom: 0;
text-align: center; text-align: center;
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
.btn { .btn {
background-color: #ffffff; background-color: #ffffff;
color: $mian-color; color: $mian-color;
font-weight: 600; font-weight: 600;
border-radius: $radius-sm; border-radius: $radius-sm;
width: 100%; width: 100%;
line-height: 90rpx; line-height: 90rpx;
font-size: $title-size; font-size: $title-size;
} }
} }
// 关注 // 关注
.tipsBack { .tipsBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 9; z-index: 9;
background-color: rgba(0, 0, 0, .8); background-color: rgba(0, 0, 0, .8);
} }
.tipsCont { .tipsCont {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
} }
.tipsWhite-top { .tipsWhite-top {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.tipsCont-img { .tipsCont-img {
width: 100%; width: 100%;
} }
.tipsWhite-name { .tipsWhite-name {
text-align: center; text-align: center;
color: #111111; color: #111111;
font-size: 34rpx; font-size: 34rpx;
font-weight: 600; font-weight: 600;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
.tipsWhite-text { .tipsWhite-text {
font-size: 30rpx; font-size: 30rpx;
color: #666666; color: #666666;
line-height: 48rpx; line-height: 48rpx;
} }
.tipsWhite-btn { .tipsWhite-btn {
display: flex; display: flex;
padding: $padding 10rpx; padding: $padding 10rpx;
box-sizing: border-box; box-sizing: border-box;
.tipsWhite-btn-go { .tipsWhite-btn-go {
flex: 2; flex: 2;
color: #fff; color: #fff;
margin: 0 15rpx; margin: 0 15rpx;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
text-align: center; text-align: center;
border: 2rpx solid #F6F6F6; border: 2rpx solid #F6F6F6;
background-color: #007df5; background-color: #007df5;
border-radius: $radius-m; border-radius: $radius-m;
&:first-child { &:first-child {
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
} }
} }
} }
</style> </style>

178
pages/index/lawyers.vue Normal file
View File

@@ -0,0 +1,178 @@
<template>
<view class="content">
<block v-if="lawyersArr.length > 0">
<view class="lawyer">
<view class="lawyer-item" v-for="(item, index) in lawyersArr" :key="index" @click="$Router.push({name: 'lawyerDetails', params: {id: item.lawyer_id}})">
<view class="lawyer-item-img">
<!-- 5:6 -->
<image :src="item.cover" mode="aspectFill"></image>
<view class="nowrap lawyer-item-name">
{{item.name}}
</view>
</view>
<view class="lawyer-item-cont">
<view class="nowrap lawyer-item-tips">
擅长
<block v-for="(items, itemsIndex) in item.tags" :key="itemsIndex">
{{items.name}},
</block>
</view>
<view class="lawyer-item-price">
<!-- <view class="lawyer-item-number">{{item.price}}</view> -->
<!-- <text>{{item.years}}+人咨询</text> -->
</view>
</view>
</view>
</view>
<!-- 分页 -->
<u-loadmore v-if="pagesShow" :status="status" />
</block>
<block v-else>
<view class="list-null">
<u-empty
mode="data"
icon="http://cdn.uviewui.com/uview/empty/data.png"
text="暂无律师数据"
>
</u-empty>
</view>
</block>
</view>
</template>
<script>
import { lawyers } from "@/apis/interfaces/index.js"
export default {
data() {
return {
lawyersArr : [],
// 分页
page : {
current : 1,
has_more: false,
},
pagesShow : false,
status : false,
};
},
created() {
this.getList()
},
methods: {
// 获取列表
getList(){
uni.showLoading({
title: '加载中...',
mask : true
})
lawyers({
larer : 1,
page : this.page.current,
}).then(res => {
console.log(res)
let { data, page } = res;
let atList = page.current == 1 ? [] : this.lawyersArr
this.lawyersArr = atList.concat(data)
this.page = page
this.pagesShow = false
uni.hideLoading()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
onCallPhone(phone){
uni.makePhoneCall({
phoneNumber: phone
})
}
},
onReachBottom() {
this.pagesShow = true;
if(this.page.has_more){
this.status = 'loading';
this.page.current++
this.getList()
return
}
this.status = 'nomore';
}
}
</script>
<style lang="scss">
.content{
box-sizing: border-box;
background: white;
padding-top: 1rpx;
}
// 列表
.lawyer {
overflow: hidden;
margin: 20rpx 15rpx 0;
.lawyer-item {
background-color: #fff;
width: calc(50% - 30rpx);
float: left;
margin: 0 15rpx $margin;
border: 2rpx solid #f1f1f1;
box-sizing: border-box;
border-radius: $radius-m;
overflow: hidden;
.lawyer-item-img {
position: relative;
width: 100%;
padding-top: 55%;
overflow: hidden;
background-color: #515151;
image {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
}
.lawyer-item-name {
position: absolute;
width: 100%;
left: 0;
bottom: 0;
background-color: rgba(0, 0, 0, .1);
line-height: 54rpx;
color: #ffffff;
padding: 0 $padding - 10;
box-sizing: border-box;
font-size: $title-size-lg;
}
}
.lawyer-item-cont {
padding: $padding - 10;
box-sizing: border-box;
.lawyer-item-tips {
font-size: $title-size-m;
color: $text-color;
}
.lawyer-item-price {
display: flex;
margin-top: 10rpx;
line-height: 44rpx;
.lawyer-item-number {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size;
}
text {
font-size: $title-size-sm;
color: #9d9d9d;
}
}
}
}
}
// 空页面
.list-null{ height: 60vh; display: flex; align-items: center; justify-content: center; }
</style>

View File

@@ -1,228 +1,228 @@
<template> <template>
<view class="content"> <view class="content">
<view class="sheet"> <view class="sheet">
<rich-text :nodes="articleContent"></rich-text> <rich-text :nodes="articleContent"></rich-text>
<!-- 立即咨询 --> <!-- 立即咨询 -->
<view class="lawyerBtn"> <view class="lawyerBtn">
<view class="lawyerBtn-name">您的心事我们</view> <view class="lawyerBtn-name">您的心事我们</view>
<!-- @click="$Router.push({name: 'indexSortpay', params:{id: lawyersData.lawyer_business_id, type:'business'}})" --> <!-- @click="$Router.push({name: 'indexSortpay', params:{id: lawyersData.lawyer_business_id, type:'business'}})" -->
<image class="lawyerBtn-img lawyerBtn-go" @click="sheetClick" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e1323131217b0ca7e1ed2e89a55a0740.png" mode="widthFix"></image> <image class="lawyerBtn-img lawyerBtn-go" @click="sheetClick" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e1323131217b0ca7e1ed2e89a55a0740.png" mode="widthFix"></image>
<image class="lawyerBtn-img lawyerBtn-see" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e4f37a76780df657cda85c242bfd792c.png" mode="widthFix"></image> <image class="lawyerBtn-img lawyerBtn-see" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e4f37a76780df657cda85c242bfd792c.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<!-- 关注 --> <!-- 关注 -->
<view class="tipsBack" v-if="generalShow"></view> <view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow"> <view class="tipsCont" v-if="generalShow">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image> <image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image>
<view class="tipsWhite-top"> <view class="tipsWhite-top">
<view class="tipsWhite-name"> <view class="tipsWhite-name">
请您先关注抖火法律咨询公众号 请您先关注抖火法律咨询公众号
</view> </view>
<view class="tipsWhite-text"> <view class="tipsWhite-text">
关注后可立即下单 关注后可立即下单
</view> </view>
</view> </view>
<view class="tipsWhite-btn"> <view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false"> <view class="tipsWhite-btn-go" @click="generalShow = false">
稍后关注 稍后关注
</view> </view>
<view class="tipsWhite-btn-go" @click="judgeGeneral"> <view class="tipsWhite-btn-go" @click="judgeGeneral">
马上关注 马上关注
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { businessDet, authFollow } from '@/apis/interfaces/index' import { businessDet, authFollow } from '@/apis/interfaces/index'
import { judgeReal } from '@/apis/interfaces/user' import { judgeReal } from '@/apis/interfaces/user'
export default { export default {
data() { data() {
return { return {
lawyersData : '', lawyersData : '',
articleContent : '', articleContent : '',
generalShow : false // 公众号 generalShow : false // 公众号
} }
}, },
onShow() { onShow() {
// 律师业务详情 // 律师业务详情
this.lawyersInfo() this.lawyersInfo()
}, },
methods: { methods: {
// 业务详情 // 业务详情
lawyersInfo() { lawyersInfo() {
businessDet(this.$Route.query.id).then(res => { businessDet(this.$Route.query.id).then(res => {
this.lawyersData = res this.lawyersData = res
this.articleContent= res.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"') this.articleContent= res.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"')
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 判断是否认证 // 判断是否认证
sheetClick() { sheetClick() {
judgeReal().then(res => { judgeReal().then(res => {
if(res.has_sign) { if(res.has_sign) {
if(!res.has_subscribe) { if(!res.has_subscribe) {
// 弹出公众号 // 弹出公众号
this.generalShow = true this.generalShow = true
} else { } else {
// 跳到咨询单 // 跳到咨询单
this.$Router.replace({name: 'sheetCreate'}) this.$Router.replace({name: 'sheetCreate'})
} }
return return
} }
// 跳到认证页面 // 跳到认证页面
this.$Router.replace({name: 'sheetIdcard'}) this.$Router.replace({name: 'sheetIdcard'})
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 状态 // 状态
judgeGeneral(){ judgeGeneral(){
// 获取微信授权信息 // 获取微信授权信息
authFollow({ authFollow({
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode' // url: 'https://web.douhuotest.douhuofalv.com/webview/webCode'
url: 'https://web.douhuofalv.com/webview/webCode' url: 'https://web.douhuofalv.com/webview/webCode'
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
// 关闭公众号 // 关闭公众号
this.generalShow = false this.generalShow = false
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.sheet { .sheet {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: relative; position: relative;
left: 0; left: 0;
top: 0; top: 0;
} }
.lawyerBtn { .lawyerBtn {
position: absolute; position: absolute;
z-index: 99; z-index: 99;
left: 0; left: 0;
bottom: $padding; bottom: $padding;
width: 100%; width: 100%;
padding: $padding - 10 $padding; padding: $padding - 10 $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
.lawyerBtn-name { .lawyerBtn-name {
font-size: $title-size-sm - 2; font-size: $title-size-sm - 2;
line-height: 60rpx; line-height: 60rpx;
opacity: .9; opacity: .9;
color: #fff; color: #fff;
} }
.lawyerBtn-img { .lawyerBtn-img {
display: block; display: block;
margin: 0 auto; margin: 0 auto;
} }
.lawyerBtn-go { .lawyerBtn-go {
width: 42%; width: 42%;
margin: 15rpx auto; margin: 15rpx auto;
} }
.lawyerBtn-see { .lawyerBtn-see {
width: 60%; width: 60%;
} }
} }
// 关注 // 关注
.tipsBack { .tipsBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 9; z-index: 9;
background-color: rgba(0, 0, 0, .8); background-color: rgba(0, 0, 0, .8);
} }
.tipsCont { .tipsCont {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
} }
.tipsWhite-top { .tipsWhite-top {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.tipsCont-img { .tipsCont-img {
width: 100%; width: 100%;
} }
.tipsWhite-name { .tipsWhite-name {
text-align: center; text-align: center;
color: #111111; color: #111111;
font-size: 34rpx; font-size: 34rpx;
font-weight: 600; font-weight: 600;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
.tipsWhite-text { .tipsWhite-text {
font-size: 30rpx; font-size: 30rpx;
color: #666666; color: #666666;
line-height: 48rpx; line-height: 48rpx;
} }
.tipsWhite-btn { .tipsWhite-btn {
display: flex; display: flex;
padding: $padding 10rpx; padding: $padding 10rpx;
box-sizing: border-box; box-sizing: border-box;
.tipsWhite-btn-go { .tipsWhite-btn-go {
flex: 2; flex: 2;
color: #fff; color: #fff;
margin: 0 15rpx; margin: 0 15rpx;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
text-align: center; text-align: center;
border: 2rpx solid #F6F6F6; border: 2rpx solid #F6F6F6;
background-color: #007df5; background-color: #007df5;
border-radius: $radius-m; border-radius: $radius-m;
&:first-child { &:first-child {
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
} }
} }
} }
</style> </style>

View File

@@ -1,218 +1,341 @@
<template> <template>
<view class="content"> <view class="content">
<img class="loginBack" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5682d339246af0f44b4984c849288aa5.png"> <img class="loginBack" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5682d339246af0f44b4984c849288aa5.png">
<img class="loginBottom" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/caa46039d88517ee8ba22b6c32dd47a1.png"> <img class="loginBottom" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/caa46039d88517ee8ba22b6c32dd47a1.png">
<view class="title"> <view class="title">
<view class="title-name"> <view class="title-name">
用户登录 用户登录
</view> </view>
<view class="title-tips"> <view class="title-tips">
密码登录仅适用于已注册用户 手机验证码登录
</view> </view>
</view> </view>
<view class="info"> <view class="info">
<view class="info-cont"> <view class="info-cont">
<!-- 输入手机号相关 --> <!-- 输入手机号相关 -->
<view class="inputs"> <view class="inputs">
<input type="number" placeholder="请输入手机号" maxlength="11" v-model="phone" /> <input type="number" placeholder="请输入手机号" maxlength="11" v-model="phone" />
</view> </view>
<!-- 输入密码 -->
<view class="inputs"> <view class="captcha-inputs">
<input type="text" :password="passwordState" placeholder="请输入密码" v-model="password" /> <view class="captcha-campus-inputs campus-inputs">
<image class="inputs-see" @click="seeClick" :src="seeState ? '../../static/icon/see_active.png' : '../../static/icon/see.png'" mode="aspectFill"></image> <input class="campus-form-input" type="text" placeholder="请输入图文验证码" v-model="newCaptcha" />
</view> </view>
<button class="btn" type="default" @click="LoginSms" :disabled="phone == '' || password == ''">立即登录</button> <image class="campus-form-graph" :src="captchaImg" mode="widthFix" @click="replaceClick"></image>
<view class="forget"> </view>
<view class="forget-label" @click="$Router.push({name: 'Register'})">我要注册</view>
<view class="forget-label forget-after" @click="$Router.push({name: 'Forget'})">忘记密码?</view> <view class="inputs captcha-inputs">
</view> <input class="campus-form-input" type="number" placeholder="请输入验证码" v-model="code" maxlength="4"></input>
<button @click="checkCaptcha" class="campus-form-code ":disabled="phone == ''" type="default" size="mini">{{getSms ? '重新发送' + smsTime + 's': '发送验证码'}}</button>
</view> </view>
<!-- 用户登录注册协议 -->
<view class="agreement"> <button class="btn" type="default" @click="LoginSms" :disabled="phone == '' || code == ''">立即登录</button>
<checkbox-group @change="radioChange"> <view class="forget">
<checkbox color="#da2b56" :checked="checked" style="transform: scale(.55)" class="radioGroup" /> <view class="forget-label" @click="$Router.push({name: 'Register'})">我要注册</view>
</checkbox-group> <view class="forget-label forget-after" @click="$Router.push({name: 'PasswordLogin'})">密码登录</view>
<view class="agreement-text"> </view>
我已阅读并同意抖火法律<view @click="$Router.push({name: 'Agreement', params: {page : 3}})">隐私协议</view><view @click="$Router.push({name: 'Agreement', params: {page : 4}})">服务协议</view>
</view> </view>
</view> <!-- 用户登录注册协议 -->
</view> <view class="agreement">
<checkbox-group @change="radioChange">
<checkbox color="#da2b56" :checked="checked" style="transform: scale(.55)" class="radioGroup" />
</checkbox-group>
<view class="agreement-text">
我已阅读并同意抖火法律<view @click="$Router.push({name: 'Agreement', params: {page : 3}})">隐私协议</view><view @click="$Router.push({name: 'Agreement', params: {page : 4}})">服务协议</view>
</view>
</view>
</view>
</view> </view>
</template> </template>
<script> <script>
import { Login } from '@/apis/interfaces/auth' import { Login, Captcha, smsAuth, authSms } from '@/apis/interfaces/auth'
export default { export default {
data() { data() {
return { return {
phone : '', // 手机号码 phone : '', // 手机号码
password: '', // 登录密码 password : '', // 登录密码
checked : false, // 勾选协议 checked : false, // 勾选协议
seeState : false, //小眼睛 seeState : false, //小眼睛
passwordState: true, passwordState: true,
disabled : false,
code : '', // 短信验证码
getSms : '',
smsTime : 60,
newCaptcha : '', // 填写图形码
captcha : '', // 输入图形码
captchaImg : '', // 图形码
} }
}, },
methods: { // 生命周期函数--监听页面显示
// 用户登录 onShow() {
LoginSms() { // 获取图形码
if(this.checked) { this.captchaInfo()
Login({ },
username : this.phone,
password : this.password methods: {
}).then(res => { // 图形码
// 存储用户token captchaInfo() {
this.$store.commit('setToken', res.token_type + ' ' + res.access_token) Captcha().then(res=>{
this.captchaImg = res.img
// 回到首页 this.captchaKey = res.key
this.$Router.replaceAll({name: 'Index'}) }).catch(err=>{
// this.$Router.back() uni.showToast({
}).catch(err => { title: err.message,
uni.showToast({ icon : 'none'
title: err.message, })
icon: "none" })
}) },
})
} else { // 看不清,换一张 - 图形码数据
uni.showToast({ replaceClick() {
title: '请勾选用户隐私和服务协议', this.captchaInfo();
icon: "none"
}) // 清除图形码数据
} this.newCaptcha = ''
}, },
// 勾选协议 // 需校验图形验证码
radioChange() { checkCaptcha() {
this.checked = !this.checked if(this.phone) {
}, let outTime
smsAuth({
// 查看密码 mobileNo : this.phone,
seeClick() { captcha : this.newCaptcha,
this.seeState = !this.seeState captcha_key: this.captchaKey
this.passwordState = !this.passwordState }).then(res => {
}, uni.showToast({
title: res.message,
} icon: "none"
})
this.getSms = true
outTime = setInterval(() => {
if (this.smsTime <= 1) {
this.getSms = false
this.smsTime = 60
clearInterval('outTime')
}
this.smsTime -= 1
}, 1000)
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
return
}
uni.showToast({
title: '请输入手机号',
icon: "none"
})
},
// 勾选协议
radioChange() {
this.checked = !this.checked
},
// 验证码登录
LoginSms() {
if(this.checked) {
authSms({
mobileNo : this.phone,
parent_id : '',
code : this.code
}).then(res => {
// 存储用户token
this.$store.commit('setToken', res.token_type + ' ' + res.access_token)
// 回到首页
this.$Router.replaceAll({name: 'Index'})
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
} else {
uni.showToast({
title: '请勾选用户隐私和服务协议',
icon: "none"
})
}
}
}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.loginBack { .loginBack {
width: 35%; width: 35%;
position: fixed; position: fixed;
top: 0; top: 0;
right: 0; right: 0;
} }
.loginBottom { .loginBottom {
width: 60%; width: 60%;
position: fixed; position: fixed;
bottom: 0; bottom: 0;
left: 0; left: 0;
} }
.agreement { .agreement {
padding: $padding 0 $padding - 20 $padding - 10; padding: $padding 0 $padding - 20 $padding - 10;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
font-size: $title-size-sm; font-size: $title-size-sm;
width: 100%; width: 100%;
line-height: 60rpx; line-height: 60rpx;
color: #979797; color: #979797;
.radioGroup { .radioGroup {
font-size: $title-size-sm; font-size: $title-size-sm;
} }
.agreement-text { .agreement-text {
display: flex; display: flex;
width: 100%; width: 100%;
view { view {
color: $mian-color; color: $mian-color;
padding: 0 5rpx; padding: 0 5rpx;
} }
} }
} }
.title { .title {
padding: $padding*4 $padding * 3 $padding*2; padding: $padding*4 $padding * 3 $padding*2;
box-sizing: border-box; box-sizing: border-box;
.title-name { .title-name {
font-size: $title-size + 10; font-size: $title-size + 10;
margin-bottom: $margin - 10; margin-bottom: $margin - 10;
} }
.title-tips { .title-tips {
color: #8e8e8e; color: #8e8e8e;
font-size: $title-size-m; font-size: $title-size-m;
} }
} }
.info { .info {
padding: $padding * 3 0; padding: $padding * 3 0;
box-sizing: border-box; box-sizing: border-box;
position: absolute; position: absolute;
z-index: 6; z-index: 6;
width: 100%; width: 100%;
.info-cont { .info-cont {
padding: 0 $padding * 3; padding: 0 $padding * 3;
box-sizing: border-box; box-sizing: border-box;
} }
.inputs { .inputs {
background-color: #f7f8fa; background-color: #f7f8fa;
height: 100rpx; height: 100rpx;
line-height: 100rpx; line-height: 100rpx;
margin-bottom: $margin + 20; margin-bottom: $margin + 20;
box-sizing: border-box; box-sizing: border-box;
color: #868686; color: #868686;
font-size: $title-size-m; font-size: $title-size-m;
padding: 0 $padding + 10; padding: 0 $padding + 10;
border-radius: $radius-m; border-radius: $radius-m;
box-sizing: border-box; box-sizing: border-box;
position: relative; position: relative;
.inputs-see { .inputs-see {
position: absolute; position: absolute;
right: $padding; right: $padding;
top: $padding; top: $padding;
width: 38rpx; width: 38rpx;
height: 38rpx; height: 38rpx;
} }
input { input {
font-weight: normal; font-weight: normal;
height: 100%; height: 100%;
} }
} }
.btn { .btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B); background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff; color: #ffffff;
border-radius: $radius-m; border-radius: $radius-m;
font-size: $title-size; font-size: $title-size;
height: 100rpx; height: 100rpx;
line-height: 100rpx; line-height: 100rpx;
padding: 0; padding: 0;
margin: $margin * 3 0 0; margin: $margin * 3 0 0;
&[disabled] { &[disabled] {
background-image: linear-gradient(to right, #ff8da9, #ffd0a2); background-image: linear-gradient(to right, #ff8da9, #ffd0a2);
} }
} }
.forget { .forget {
display: flex; display: flex;
line-height: 120rpx; line-height: 120rpx;
font-size: $title-size-m; font-size: $title-size-m;
.forget-label { .forget-label {
flex: 2; flex: 2;
text-align: center; text-align: center;
color: #7f8391; color: #000000;
} }
.forget-after { .forget-after {
position: relative; position: relative;
&::after { &::after {
position: absolute; position: absolute;
content: ''; content: '';
left: 0; left: 0;
bottom: calc(50% - 15rpx); bottom: calc(50% - 15rpx);
width: 2rpx; width: 2rpx;
height: 30rpx; height: 30rpx;
background-color: #f6f6f6; background-color: #f6f6f6;
} }
} }
} }
}
.captcha-inputs {
height: 100rpx;
display: flex;
margin-top: $margin + 20;
.campus-form-graph {
width: 220rpx;
margin-top: 20rpx;
border-radius: 5rpx;
}
.captcha-campus-inputs{
flex: 1;
margin-right: 20rpx;
}
.campus-inputs {
background-color: #f7f8fa;
height: 100rpx;
line-height: 100rpx;
box-sizing: border-box;
color: #868686;
font-size: $title-size-m;
padding: 0 $padding + 10;
border-radius: $radius-m;
box-sizing: border-box;
position: relative;
input {
font-weight: normal;
height: 100%;
}
}
.campus-form-code{
position: absolute;
top: 0;
right: 30rpx;
padding: 0;
margin: 0;
background-color: transparent;
font-size: 30rpx;
height: 100rpx;
line-height: 100rpx;
color: #f25448;
&::after{
border: none;
}
&[disabled]{
color: rgba($color: #f25448, $alpha: .5);
}
}
} }
</style> </style>

View File

@@ -0,0 +1,220 @@
<template>
<view class="content">
<img class="loginBack" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5682d339246af0f44b4984c849288aa5.png">
<img class="loginBottom" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/caa46039d88517ee8ba22b6c32dd47a1.png">
<view class="title">
<view class="title-name">
用户登录
</view>
<view class="title-tips">
密码登录仅适用于已注册用户
</view>
</view>
<view class="info">
<view class="info-cont">
<!-- 输入手机号相关 -->
<view class="inputs">
<input type="number" placeholder="请输入手机号" maxlength="11" v-model="phone" />
</view>
<!-- 输入密码 -->
<view class="inputs">
<input type="text" :password="passwordState" placeholder="请输入密码" v-model="password" />
<image class="inputs-see" @click="seeClick" :src="seeState ? '../../static/icon/see_active.png' : '../../static/icon/see.png'" mode="aspectFill"></image>
</view>
<button class="btn" type="default" @click="LoginSms" :disabled="phone == '' || password == ''">立即登录</button>
<view class="forget-label forget-after" style="width: 100%; text-align: center; padding-top: 15rpx; font-size: 28rpx; color: #7f8391;" @click="$Router.push({name: 'Forget'})">忘记密码?</view>
<view class="forget">
<view class="forget-label" @click="$Router.push({name: 'Register'})">我要注册</view>
<view class="forget-label forget-after" @click="$Router.push({name: 'Login'})">验证码登录</view>
</view>
</view>
<!-- 用户登录注册协议 -->
<view class="agreement">
<checkbox-group @change="radioChange">
<checkbox color="#da2b56" :checked="checked" style="transform: scale(.55)" class="radioGroup" />
</checkbox-group>
<view class="agreement-text">
我已阅读并同意抖火法律<view @click="$Router.push({name: 'Agreement', params: {page : 3}})">隐私协议</view><view @click="$Router.push({name: 'Agreement', params: {page : 4}})">服务协议</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { Login } from '@/apis/interfaces/auth'
export default {
data() {
return {
phone : '', // 手机号码
password: '', // 登录密码
checked : false, // 勾选协议
seeState : false, //小眼睛
passwordState: true,
}
},
methods: {
// 用户登录
LoginSms() {
if(this.checked) {
Login({
username : this.phone,
password : this.password
}).then(res => {
// 存储用户token
this.$store.commit('setToken', res.token_type + ' ' + res.access_token)
// 回到首页
this.$Router.replaceAll({name: 'Index'})
// this.$Router.back()
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
} else {
uni.showToast({
title: '请勾选用户隐私和服务协议',
icon: "none"
})
}
},
// 勾选协议
radioChange() {
this.checked = !this.checked
},
// 查看密码
seeClick() {
this.seeState = !this.seeState
this.passwordState = !this.passwordState
},
}
}
</script>
<style lang="scss" scoped>
.loginBack {
width: 35%;
position: fixed;
top: 0;
right: 0;
}
.loginBottom {
width: 60%;
position: fixed;
bottom: 0;
left: 0;
}
.agreement {
padding: $padding 0 $padding - 20 $padding - 10;
box-sizing: border-box;
display: flex;
font-size: $title-size-sm;
width: 100%;
line-height: 60rpx;
color: #979797;
.radioGroup {
font-size: $title-size-sm;
}
.agreement-text {
display: flex;
width: 100%;
view {
color: $mian-color;
padding: 0 5rpx;
}
}
}
.title {
padding: $padding*4 $padding * 3 $padding*2;
box-sizing: border-box;
.title-name {
font-size: $title-size + 10;
margin-bottom: $margin - 10;
}
.title-tips {
color: #8e8e8e;
font-size: $title-size-m;
}
}
.info {
padding: $padding * 3 0;
box-sizing: border-box;
position: absolute;
z-index: 6;
width: 100%;
.info-cont {
padding: 0 $padding * 3;
box-sizing: border-box;
}
.inputs {
background-color: #f7f8fa;
height: 100rpx;
line-height: 100rpx;
margin-bottom: $margin + 20;
box-sizing: border-box;
color: #868686;
font-size: $title-size-m;
padding: 0 $padding + 10;
border-radius: $radius-m;
box-sizing: border-box;
position: relative;
.inputs-see {
position: absolute;
right: $padding;
top: $padding;
width: 38rpx;
height: 38rpx;
}
input {
font-weight: normal;
height: 100%;
}
}
.btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff;
border-radius: $radius-m;
font-size: $title-size;
height: 100rpx;
line-height: 100rpx;
padding: 0;
margin: $margin * 3 0 0;
&[disabled] {
background-image: linear-gradient(to right, #ff8da9, #ffd0a2);
}
}
.forget {
display: flex;
line-height: 120rpx;
font-size: $title-size-m;
.forget-label {
flex: 2;
text-align: center;
color: #000000;
}
.forget-after {
position: relative;
&::after {
position: absolute;
content: '';
left: 0;
bottom: calc(50% - 15rpx);
width: 2rpx;
height: 30rpx;
background-color: #f6f6f6;
}
}
}
}
</style>

View File

@@ -0,0 +1,135 @@
<template>
<view class="from-content">
<view class="from-block" v-if="pickerArr.length > 0" >
<view class="from-block-item">
<label>办理业务</label>
<picker class="from-block-val" :range="pickerArr" :value="pickerIndex" range-key="title" @change="pickerIndex = $event.detail.value">
<view class="from-block-picker nowrap">{{pickerArr[pickerIndex].title}}
<u-icon class="from-block-picker-icon" name="arrow-down" color="#555" size="15"></u-icon>
</view>
</picker>
</view>
<view class="from-block-item">
<label>业务价格</label>
<view class="from-block-val price">{{pickerArr[pickerIndex].price}}</view>
</view>
<view class="from-block-item">
<label>业务描述</label>
<view class="from-block-val">{{pickerArr[pickerIndex].subtitle}}</view>
</view>
</view>
<view class="from-block">
<view class="from-block-item">
<label>客户姓名</label>
<input class="from-block-val from-block-input" placeholder="请输入客户姓名" v-model="name" />
</view>
<view class="from-block-item">
<label>手机号码</label>
<input class="from-block-val from-block-input" type="number" placeholder="请输入客户手机号码" maxlength="11" v-model="phone" />
</view>
</view>
<button class="from-btn" @click="onSubmit">提交办理</button>
</view>
</template>
<script>
import { accountManagement, accountFrom } from '@/apis/interfaces/index.js'
export default {
data() {
return {
pickerArr : [],
pickerIndex : 0,
name : '',
phone : ''
};
},
onLoad() {
uni.showLoading({
title: '加载中...',
mask : true
})
accountManagement().then(res => {
uni.hideLoading()
this.pickerArr = res;
this.pickerIndex = res.findIndex(val => val.id == this.$Route.query.id)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
// 提交表单
onSubmit(){
let { name, phone, pickerArr, pickerIndex } = this
console.log(pickerArr[pickerIndex])
if(name === ''){
uni.showToast({
title: '请输入客户姓名',
icon : 'none'
})
return
}
if(phone === ''){
uni.showToast({
title: '请输入客户手机号码',
icon : 'none'
})
return
}
uni.showLoading({
title: "提交中...",
mask : true
})
accountFrom({
name : name,
mobile : phone
}, pickerArr[pickerIndex].id).then(res => {
let { order_type, order_id, order_no, total } = res;
this.$Router.replace({name: 'FeePay', params: {id: order_id, orderType: order_type, price: total, payForm: 'synthesize'}})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.from-content{
min-height: 100vh;
padding: 30rpx;
background: #f7f8f9;
}
.from-block{
background: white;
border-radius: 20rpx;
margin-bottom: 30rpx;
padding: 0 30rpx;
}
.from-block-item{
min-height: 70rpx;
display: flex;
font-size: 32rpx;
border-bottom: solid 1rpx #f3f3f3;
padding: 15rpx 0;
}
.from-block-item:last-child{ border: none; }
label{ width: 200rpx; line-height: 70rpx; }
.from-block-val{ width: calc(100% - 200rpx); text-align: right; line-height: 70rpx;}
.from-block-val.price{ color: #446EFE; font-weight: bold; }
.from-block-input{ height: 70rpx; font-size: 32rpx; }
.from-block-picker{ padding-right: 50rpx; position: relative; }
.from-block-picker-icon{ position: absolute; right: 0; top: 50%; margin-top: -15rpx; }
.from-btn{ width: 100%; background-color: #446EFE; color: white; line-height: 95rpx; height: 95rpx; border-radius: 45rpx; font-size: 32rpx; font-weight: bold;
&::after{ display: none; }
}
</style>

View File

@@ -0,0 +1,139 @@
<template>
<view class="from-content">
<view class="from-block" v-if="pickerArr.length > 0" >
<view class="from-block-item">
<label>办理业务</label>
<picker class="from-block-val" :range="pickerArr" :value="pickerIndex" range-key="title" @change="pickerIndex = $event.detail.value">
<view class="from-block-picker nowrap">{{pickerArr[pickerIndex].title}}
<u-icon class="from-block-picker-icon" name="arrow-down" color="#555" size="15"></u-icon>
</view>
</picker>
</view>
<view class="from-block-item">
<label>业务价格</label>
<view class="from-block-val price">{{pickerArr[pickerIndex].price}}</view>
</view>
<view class="from-block-item">
<label>业务描述</label>
<view class="from-block-val">{{pickerArr[pickerIndex].subtitle}}</view>
</view>
</view>
<view class="from-block">
<view class="from-block-item">
<label>客户姓名</label>
<input class="from-block-val from-block-input" placeholder="请输入客户姓名" v-model="name" />
</view>
<view class="from-block-item">
<label>手机号码</label>
<input class="from-block-val from-block-input" type="number" placeholder="请输入客户手机号码" maxlength="11" v-model="phone" />
</view>
</view>
<button class="from-btn" @click="onSubmit">提交办理</button>
</view>
</template>
<script>
import { delegation, delegationFrom } from '@/apis/interfaces/index.js'
export default {
data() {
return {
pickerArr : [],
pickerIndex : 0,
name : '',
phone : ''
};
},
onLoad() {
uni.showLoading({
title: '加载中...',
mask : true
})
delegation().then(res => {
uni.hideLoading()
this.pickerArr = res;
this.pickerIndex = res.findIndex(val => val.id == this.$Route.query.id)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
// 提交表单
onSubmit(){
let { name, phone, pickerArr, pickerIndex } = this
if(name === ''){
uni.showToast({
title: '请输入客户姓名',
icon : 'none'
})
return
}
if(phone === ''){
uni.showToast({
title: '请输入客户手机号码',
icon : 'none'
})
return
}
uni.showLoading({
title: "提交中...",
mask : true
})
delegationFrom({
name : name,
mobile : phone
}, pickerArr[pickerIndex].id).then(res => {
let { order_type, order_id, order_no } = res;
this.$Router.replace({
name : 'Pay',
params : {
paytype : 'synthesize',
orderId : order_id,
orderType : order_type.replace(/\\/g, '-')
},
})
}).catch(err => {
console.log(err)
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss">
.from-content{
min-height: 100vh;
padding: 30rpx;
background: #f7f8f9;
}
.from-block{
background: white;
border-radius: 20rpx;
margin-bottom: 30rpx;
padding: 0 30rpx;
}
.from-block-item{
min-height: 70rpx;
display: flex;
font-size: 32rpx;
border-bottom: solid 1rpx #f3f3f3;
padding: 15rpx 0;
}
.from-block-item:last-child{ border: none; }
label{ width: 200rpx; line-height: 70rpx; }
.from-block-val{ width: calc(100% - 200rpx); text-align: right; line-height: 70rpx;}
.from-block-val.price{ color: #446EFE; font-weight: bold; }
.from-block-input{ height: 70rpx; font-size: 32rpx; }
.from-block-picker{ padding-right: 50rpx; position: relative; }
.from-block-picker-icon{ position: absolute; right: 0; top: 50%; margin-top: -15rpx; }
.from-btn{ width: 100%; background-color: #446EFE; color: white; line-height: 95rpx; height: 95rpx; border-radius: 45rpx; font-size: 32rpx; font-weight: bold;
&::after{ display: none; }
}
</style>

View File

@@ -18,14 +18,14 @@
<image class="paymentList-img" :src="Payment == 'wechat' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image> <image class="paymentList-img" :src="Payment == 'wechat' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view> </view>
</view> </view>
<view class="paymentList-label" @click="payType('umsMp')"> <!-- <view class="paymentList-label" @click="payType('umsMp')">
<view class="paymentList-left"> <view class="paymentList-left">
<image class="paymentList-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/2a4ea8f9f714e39088648383d5c52f32.png" mode="widthFix"></image>微信银联商务 <image class="paymentList-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/2a4ea8f9f714e39088648383d5c52f32.png" mode="widthFix"></image>微信银联商务
</view> </view>
<view class="paymentList-right"> <view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'umsMp' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image> <image class="paymentList-img" :src="Payment == 'umsMp' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view> </view>
</view> </view> -->
<view class="paymentList-label" @click="payType('umsAli')"> <view class="paymentList-label" @click="payType('umsAli')">
<view class="paymentList-left"> <view class="paymentList-left">
<image class="paymentList-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/4aaf302e9d8a90c21c39b3d2f39cebc2.png" mode="widthFix"></image>支付宝银联商务 <image class="paymentList-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/4aaf302e9d8a90c21c39b3d2f39cebc2.png" mode="widthFix"></image>支付宝银联商务
@@ -39,7 +39,7 @@
<!-- web.douhuotest.douhuofalv dev=0是线上 dev=1是线下 --> <!-- web.douhuotest.douhuofalv dev=0是线上 dev=1是线下 -->
<wx-open-launch-weapp <wx-open-launch-weapp
username="gh_918c81628d6f" username="gh_918c81628d6f"
:path="'pages/pay/pay?type=h5&dev=0&trade_id=' + tradeId + '&token=' + token" :path="'pages/pay/pay?type=h5&dev=1&trade_id=' + tradeId + '&token=' + token"
> >
<script type="text/wxtag-template"> <script type="text/wxtag-template">
<style> <style>
@@ -92,7 +92,7 @@
<script> <script>
const jweixin = require('jweixin-module'); const jweixin = require('jweixin-module');
import { Apply, Wechat, authFollow } from '@/apis/interfaces/index' import { Apply, Wechat, authFollow } from '@/apis/interfaces/index'
import { payInfo, payWechat, payUms } from '@/apis/interfaces/pay' import { payInfo, payWechat, payUms, umsState } from '@/apis/interfaces/pay'
export default { export default {
data() { data() {
return { return {
@@ -108,11 +108,12 @@
} }
}, },
onShow() { onShow() {
if(this.tradeId != ''){
this.onGetOrderPayState()
}
},
created() {
let { orderId, orderType } = this.$Route.query let { orderId, orderType } = this.$Route.query
uni.showLoading({
title: '加载中...',
mask : true
})
payInfo({ payInfo({
order_type : orderType, order_type : orderType,
order_id : orderId order_id : orderId
@@ -131,6 +132,38 @@
}) })
}, },
methods: { methods: {
// 查询订单状态
onGetOrderPayState(){
uni.showLoading({
title: '查询支付',
mask : true
})
let outTime;
let resNumb = 0;
outTime = setInterval(() => {
if(resNumb >= 3){
clearInterval(outTime)
uni.showToast({
title: '暂未查询到你的支付订单',
icon : 'none'
})
return
}
umsState(this.tradeId).then(res => {
resNumb++
if(res.state === 'success'){
clearInterval(outTime)
this.payMakePop = true
}
}).catch(err => {
clearInterval(outTime)
uni.showToast({
title: err.message,
icon : 'none'
})
})
}, 2000)
},
// 选择支付方式 // 选择支付方式
payType(type) { payType(type) {
if(this.Payment === type) return if(this.Payment === type) return
@@ -146,8 +179,7 @@
order_id : this.orderId, order_id : this.orderId,
openid : openId, openid : openId,
use_fire : 0, use_fire : 0,
fire : 0, fire : 0
type : payType
}).then(res => { }).then(res => {
let wxConfig = JSON.parse(res.wechat) let wxConfig = JSON.parse(res.wechat)
jweixin.config({ jweixin.config({
@@ -176,12 +208,18 @@
} }
}); });
}); });
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
}) })
} }
// 获取微信授权信息-获取oppid // 获取微信授权信息-获取oppid
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webWechat/index' url: 'https://web.douhuofalv.com/webWechat/index'
// url: 'https://web.douhuotest.douhuofalv.com/webWechat/index' // url: 'https://web.douhuotest.douhuofalv.com/webWechat/index',
// url: 'http://web.douhuo.demos.uzchain.tech/webWechat/index' 最新
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
@@ -202,13 +240,13 @@
type : payType type : payType
}).then(res => { }).then(res => {
let { trade_id } = res; let { trade_id } = res;
this.tradeId = trade_id this.tradeId = trade_id
switch (payType){ switch (payType){
case 'mp': case 'mp':
this.tradeId = res.trade_id this.tradeId = trade_id
break; break;
case 'mp_alipay': case 'mp_alipay':
this.tradeId = res.trade_id this.tradeId = trade_id
window.location.href = res.alipay window.location.href = res.alipay
break; break;
} }

View File

@@ -1,209 +1,209 @@
<template> <template>
<view class="content"> <view class="content">
<view class="point"> <view class="point">
<image class="point-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/280935db4a8ee4c0b17ddcb37f489b0f.png" mode="widthFix"></image> <image class="point-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/280935db4a8ee4c0b17ddcb37f489b0f.png" mode="widthFix"></image>
<view class="point-text"> <view class="point-text">
<view class="point-name"> <view class="point-name">
认证成功 认证成功
</view> </view>
<view class="point-tips"> <view class="point-tips">
<text>恭喜您已完成认证</text> <text>恭喜您已完成认证</text>
<text>专享更多安全保障,可进行选择咨询类型</text> <text>专享更多安全保障,可进行选择咨询类型</text>
</view> </view>
<view class="point-btn"> <view class="point-btn">
<view class="btn" @click="sheetClick"> <view class="btn" @click="sheetClick">
立即咨询 立即咨询
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="tipsBack" v-if="generalShow"></view> <view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow"> <view class="tipsCont" v-if="generalShow">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image> <image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image>
<view class="tipsWhite-top"> <view class="tipsWhite-top">
<view class="tipsWhite-name"> <view class="tipsWhite-name">
请您先关注抖火法律咨询公众号 请您先关注抖火法律咨询公众号
</view> </view>
<view class="tipsWhite-text"> <view class="tipsWhite-text">
关注后可立即下单 关注后可立即下单
</view> </view>
</view> </view>
<view class="tipsWhite-btn"> <view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false"> <view class="tipsWhite-btn-go" @click="generalShow = false">
稍后关注 稍后关注
</view> </view>
<view class="tipsWhite-btn-go" @click="judgeGeneral"> <view class="tipsWhite-btn-go" @click="judgeGeneral">
马上关注 马上关注
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { judgeReal } from '@/apis/interfaces/user' import { judgeReal } from '@/apis/interfaces/user'
import { authFollow } from '@/apis/interfaces/index' import { authFollow } from '@/apis/interfaces/index'
export default { export default {
data() { data() {
return { return {
generalShow: false // 公众号 generalShow: false // 公众号
} }
}, },
onLoad() { onLoad() {
}, },
methods: { methods: {
// 判断是否认证 // 判断是否认证
sheetClick() { sheetClick() {
judgeReal().then(res => { judgeReal().then(res => {
if(!res.has_subscribe) { if(!res.has_subscribe) {
// 弹出公众号 // 弹出公众号
this.generalShow = true this.generalShow = true
} else { } else {
// 跳到首页 // 跳到首页
this.$Router.replace({name: 'Index'}) this.$Router.replace({name: 'Index'})
} }
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 状态 // 状态
judgeGeneral(){ judgeGeneral(){
// 获取微信授权信息 // 获取微信授权信息
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webview/webCode', url: 'https://web.douhuofalv.com/webview/webCode',
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode' // url: 'https://web.douhuotest.douhuofalv.com/webview/webCode'
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
// 关闭公众号 // 关闭公众号
this.generalShow = false this.generalShow = false
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.point { .point {
text-align: center; text-align: center;
padding: 40% 0; padding: 40% 0;
.point-img { .point-img {
width: 50%; width: 50%;
margin: 0 auto 10rpx; margin: 0 auto 10rpx;
} }
.point-text { .point-text {
.point-name { .point-name {
font-size: $title-size + 14; font-size: $title-size + 14;
} }
.point-tips{ .point-tips{
margin: $margin + 20 0 $margin*3; margin: $margin + 20 0 $margin*3;
line-height: 52rpx; line-height: 52rpx;
text { text {
display: block; display: block;
color: #999999; color: #999999;
} }
} }
} }
.point-btn { .point-btn {
text-align: center; text-align: center;
.btn { .btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B); background-image: linear-gradient(to right, #da2b56, #FBAF3B);
display: inline-block; display: inline-block;
color: #ffffff; color: #ffffff;
border-radius: $radius-m; border-radius: $radius-m;
padding: 0 $padding; padding: 0 $padding;
line-height: 90rpx; line-height: 90rpx;
width: 70%; width: 70%;
} }
} }
} }
// 关注 // 关注
.tipsBack { .tipsBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 9; z-index: 9;
background-color: rgba(0, 0, 0, .8); background-color: rgba(0, 0, 0, .8);
} }
.tipsCont { .tipsCont {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
} }
.tipsWhite-top { .tipsWhite-top {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.tipsCont-img { .tipsCont-img {
width: 100%; width: 100%;
} }
.tipsWhite-name { .tipsWhite-name {
text-align: center; text-align: center;
color: #111111; color: #111111;
font-size: 34rpx; font-size: 34rpx;
font-weight: 600; font-weight: 600;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
.tipsWhite-text { .tipsWhite-text {
font-size: 30rpx; font-size: 30rpx;
color: #666666; color: #666666;
line-height: 48rpx; line-height: 48rpx;
} }
.tipsWhite-btn { .tipsWhite-btn {
display: flex; display: flex;
padding: $padding 10rpx; padding: $padding 10rpx;
box-sizing: border-box; box-sizing: border-box;
.tipsWhite-btn-go { .tipsWhite-btn-go {
flex: 2; flex: 2;
color: #fff; color: #fff;
margin: 0 15rpx; margin: 0 15rpx;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
text-align: center; text-align: center;
border: 2rpx solid #F6F6F6; border: 2rpx solid #F6F6F6;
background-color: #007df5; background-color: #007df5;
border-radius: $radius-m; border-radius: $radius-m;
&:first-child { &:first-child {
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
} }
} }
} }
</style> </style>

View File

@@ -1,446 +1,454 @@
<template> <template>
<view class="content"> <view class="content">
<view class="top"> <view class="top">
<view class="top-text" v-if="userName"> <view class="top-text" v-if="userName">
您好{{userName.nickname}} 您好{{userName.nickname}}
<!-- {{userName.parent.sex == '' ? '先生' : '女士'}} --> <!-- {{userName.parent.sex == '' ? '先生' : '女士'}} -->
</view> </view>
以下是根据您的情况为您匹配的机构最佳方案由于银行政策实时变动该方案为预估方案仅供参考具体以协商为准感谢您的支持 以下是根据您的情况为您匹配的机构最佳方案由于银行政策实时变动该方案为预估方案仅供参考具体以协商为准感谢您的支持
</view> </view>
<view class="white"> <view class="white">
<view class="list" v-for="(item, index) in schemesArr" :key="index"> <view class="list" v-for="(item, index) in schemesArr" :key="index">
<view class="label" :class="{active : item.schemesShow}"> <view class="label" :class="{active : item.schemesShow}">
<view class="labelTop"> <view class="labelTop">
<view class="labelTop-name"> <view class="labelTop-name">
{{item.institution.title}} {{item.institution.title}}
</view> </view>
<view class="labelTop-tips"> <view class="labelTop-tips">
{{item.business_type.title}} {{item.business_type.title}}
</view> </view>
</view> </view>
<view class="labelPlan-list"> <view class="labelPlan-list">
<view class="labelPlan-item" v-for="(items, itemsIndex) in item.base" :key="itemsIndex"> <view class="labelPlan-item" v-for="(items, itemsIndex) in item.base" :key="itemsIndex">
<view class="labelPlan-item-name">{{items.title}}</view> <view class="labelPlan-item-name">{{items.title}}</view>
<view class="nowrap labelPlan-item-text"> <view class="nowrap labelPlan-item-text">
<block v-if="items.key === 'price'"> <block v-if="items.key === 'price'">
{{items.value}} {{items.value}}
</block> </block>
<block v-else-if="items.key === 'overdue_day'"> <block v-else-if="items.key === 'overdue_day'">
{{items.value}} {{items.value}}
</block> </block>
<block v-else> <block v-else>
{{items.value}} {{items.value}}
</block> </block>
</view> </view>
<block v-if="items.value"> <block v-if="items.value">
<view v-if="items.key === 'rush' || items.key === 'remark'" class="labelPlan-item-btn" @click="seeTips(items.title, items.value)">查看</view> <view v-if="items.key === 'rush' || items.key === 'remark'" class="labelPlan-item-btn" @click="seeTips(items.title, items.value)">查看</view>
</block> </block>
</view> </view>
</view> </view>
<view class="labelPlan"> <view class="labelPlan">
<view class="labelPlan-top"> <view class="labelPlan-top">
<view class="labelPlan-name"> <view class="labelPlan-name">
预估方案 预估方案
</view> </view>
<view class="labelPlan-tips"> <view class="labelPlan-tips">
YGFA YGFA
</view> </view>
</view> </view>
<view class="labelPlan-list"> <view class="labelPlan-list" v-if="item.type == 'one'">
<view class="labelPlan-item" v-for="(paramsItem, paramsIndex) in item.params" :key="paramsIndex"> <text class="labelPlan-item labelPlan-content">
<view class="labelPlan-item-name">{{paramsItem.title}}</view> {{item.content}}
<view class="nowrap labelPlan-item-text"> </text>
{{paramsItem.value}} </view>
</view> <view class="labelPlan-list" v-else>
<view class="labelPlan-item-btn" v-if="paramsItem.title == '协商方案' || paramsItem.title == '减免情况' || paramsItem.title == '关于减免结清减免政策'" @click="seeTips(paramsItem.title, paramsItem.value)">查看</view> <view class="labelPlan-item" v-for="(paramsItem, paramsIndex) in item.params" :key="paramsIndex">
</view> <view class="labelPlan-item-name">{{paramsItem.title}}</view>
</view> <view class="nowrap labelPlan-item-text">
</view> {{paramsItem.value}}
<view class="labelNotice" :class="{active : item.noticeShow}"> </view>
<view class="labelNotice-top"> <view class="labelPlan-item-btn" v-if="paramsItem.title == '协商方案' || paramsItem.title == '减免情况' || paramsItem.title == '关于减免结清减免政策'" @click="seeTips(paramsItem.title, paramsItem.value)">查看</view>
<view class="labelNotice-name"> </view>
须知 </view>
</view> </view>
<view class="labelNotice-text"> <view class="labelNotice" :class="{active : item.noticeShow}">
{{item.business_type.notic}} <view class="labelNotice-top">
</view> <view class="labelNotice-name">
</view> 须知
<view class="labelNotice-btn" @click="noticeTap(index)"> </view>
<image class="labelNotice-img" :class="{active : item.noticeShow}" src="@/static/imgs/openArrow_grey.png" mode="widthFix"></image>{{item.noticeShow ? '收起' : '展开'}} <text class="labelNotice-text">
</view> {{item.business_type.notic}}
</view> </text>
</view> </view>
<view class="open" @click="recordTap(index)"> <view class="labelNotice-btn" @click="noticeTap(index)">
<view class="open-text"> <image class="labelNotice-img" :class="{active : item.noticeShow}" src="@/static/imgs/openArrow_grey.png" mode="widthFix"></image>{{item.noticeShow ? '收起' : '展开'}}
<image :class="{active : item.schemesShow}" src="@/static/imgs/openArrow.png" mode="widthFix"></image>{{item.schemesShow ? '收起' : '展开'}} </view>
</view> </view>
</view> </view>
</view> <view class="open" @click="recordTap(index)">
<view class="open-text">
<view class="reminder"> <image :class="{active : item.schemesShow}" src="@/static/imgs/openArrow.png" mode="widthFix"></image>{{item.schemesShow ? '收起' : '展开'}}
<image class="reminder-img" src="@/static/imgs/reminderIcon.png"></image> </view>
<view class="reminder-text"> </view>
<text>温馨提示</text> </view>
{{reminder}}
</view> <view class="reminder">
</view> <image class="reminder-img" src="@/static/imgs/reminderIcon.png"></image>
</view> <view class="reminder-text">
<text>温馨提示</text>
<mouldTips :see-data="seeData" @tipsClose="($event) => {seeData.seeShow = $event}"></mouldTips> {{reminder}}
</view>
</view>
</view>
<mouldTips :see-data="seeData" @tipsClose="($event) => {seeData.seeShow = $event}"></mouldTips>
</view> </view>
</template> </template>
<script> <script>
import { Schemes } from '@/apis/interfaces/index' import { Schemes } from '@/apis/interfaces/index'
import mouldTips from '@/components/mould-tips.vue' import mouldTips from '@/components/mould-tips.vue'
export default { export default {
components: { components: {
mouldTips mouldTips
}, },
data() { data() {
return { return {
schemesArr : [], // 预估方案列表 schemesArr : [], // 预估方案列表
reminder : '', // 温馨提示 reminder : '', // 温馨提示
userName : '', // 用户 userName : '', // 用户
// 查看提示组件 // 查看提示组件
seeData : { seeData : {
seeShow : false, seeShow : false,
seeTitle: '', seeTitle: '',
seeText : '', seeText : '',
}, },
noticeShow : false, // 须知展开 noticeShow : false, // 须知展开
baleShow : false, // 服务包弹出 baleShow : false, // 服务包弹出
} }
}, },
onShow() {}, onShow() {},
onLoad() { onLoad() {
// 获取方案 // 获取方案
this.schemesInfo(); this.schemesInfo();
}, },
methods: { methods: {
// 方案 // 方案
schemesInfo() { schemesInfo() {
// this.$Route.query.id // this.$Route.query.id
Schemes(this.$Route.query.id).then(res => { Schemes(this.$Route.query.id).then(res => {
this.reminder = res.tips this.reminder = res.tips
let esArr = res.schemes let esArr = res.schemes
esArr.forEach((item, index) => { esArr.forEach((item, index) => {
index == 0 ? item.schemesShow = true : item.schemesShow = false index == 0 ? item.schemesShow = true : item.schemesShow = false
index == 0 ? item.noticeShow = true : item.noticeShow = false index == 0 ? item.noticeShow = true : item.noticeShow = false
}) })
this.schemesArr = esArr this.schemesArr = esArr
this.userName = res.user this.userName = res.user
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 提示组件 -- 赋值 // 提示组件 -- 赋值
seeTips(title, text) { seeTips(title, text) {
this.seeData.seeShow = true this.seeData.seeShow = true
this.seeData.seeTitle = title this.seeData.seeTitle = title
this.seeData.seeText = text this.seeData.seeText = text
}, },
// 列表展开 // 列表展开
recordTap(index) { recordTap(index) {
var listData = this.schemesArr var listData = this.schemesArr
var helpFlag = this.schemesArr[index].schemesShow var helpFlag = this.schemesArr[index].schemesShow
listData.forEach((item) => { listData.forEach((item) => {
item.schemesShow = false item.schemesShow = false
}) })
listData[index].schemesShow = !helpFlag listData[index].schemesShow = !helpFlag
this.schemesArr = listData this.schemesArr = listData
}, },
// 须知展开 // 须知展开
noticeTap(index) { noticeTap(index) {
var listData = this.schemesArr var listData = this.schemesArr
var helpFlag = this.schemesArr[index].noticeShow var helpFlag = this.schemesArr[index].noticeShow
listData.forEach((item) => { listData.forEach((item) => {
item.noticeShow = false item.noticeShow = false
}) })
listData[index].noticeShow = !helpFlag listData[index].noticeShow = !helpFlag
this.schemesArr = listData this.schemesArr = listData
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
background-color: #f6f6f6; background-color: #f6f6f6;
overflow-y: scroll; overflow-y: scroll;
height: 100vh; height: 100vh;
// height: calc(100vh - 44px); // height: calc(100vh - 44px);
} }
.top { .top {
background-color: $mian-color; background-color: $mian-color;
color: #ffffff; color: #ffffff;
padding: $padding * 2 $padding 280rpx; padding: $padding * 2 $padding 280rpx;
box-sizing: border-box; box-sizing: border-box;
font-size: $title-size-m; font-size: $title-size-m;
line-height: 42rpx; line-height: 42rpx;
opacity: .9; opacity: .9;
text-align: justify; text-align: justify;
.top-text { .top-text {
margin-bottom: $margin; margin-bottom: $margin;
} }
} }
.white { .white {
position: relative; position: relative;
top: -200rpx; top: -200rpx;
left: 0; left: 0;
width: 100%; width: 100%;
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
z-index: 9; z-index: 9;
border-bottom: transparent 40rpx solid; border-bottom: transparent 40rpx solid;
.list { .list {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
background-color: #ffffff; background-color: #ffffff;
border-radius: $radius - 4; border-radius: $radius - 4;
position: relative; position: relative;
margin-top: $margin * 3; margin-top: $margin * 3;
box-shadow: 0 0 20rpx rgba(0, 0, 0, .05); box-shadow: 0 0 20rpx rgba(0, 0, 0, .05);
&::after, &::after,
&::before { &::before {
position: absolute; position: absolute;
content: ''; content: '';
background-color: rgba(255, 255, 255, .4); background-color: rgba(255, 255, 255, .4);
left: 20rpx; left: 20rpx;
border-radius: $radius - 4 $radius - 4 0 0; border-radius: $radius - 4 $radius - 4 0 0;
} }
&::after { &::after {
z-index: 2; z-index: 2;
width: calc(100% - 40rpx); width: calc(100% - 40rpx);
left: 20rpx; left: 20rpx;
top: -25rpx; top: -25rpx;
height: 25px; height: 25px;
} }
&::before { &::before {
z-index: 1; z-index: 1;
width: calc(100% - 80rpx); width: calc(100% - 80rpx);
left: 40rpx; left: 40rpx;
top: -50rpx; top: -50rpx;
height: 50rpx; height: 50rpx;
} }
&:first-child { &:first-child {
margin-top: 0; margin-top: 0;
} }
.label { .label {
position: relative; position: relative;
height: 84rpx; height: 84rpx;
overflow: hidden; overflow: hidden;
&.active { &.active {
height: auto; height: auto;
} }
&::after, &::after,
&::before { &::before {
position: absolute; position: absolute;
content: ''; content: '';
width: 30rpx; width: 30rpx;
height: 30rpx; height: 30rpx;
border-radius: 50%; border-radius: 50%;
background-color: #f6f6f6; background-color: #f6f6f6;
top: 33%; top: 33%;
} }
&::after { &::after {
left: -45rpx; left: -45rpx;
} }
&::before { &::before {
right: -45rpx; right: -45rpx;
} }
.labelTop { .labelTop {
line-height: 80rpx; line-height: 80rpx;
margin-bottom: $margin - 20; margin-bottom: $margin - 20;
display: flex; display: flex;
.labelTop-name { .labelTop-name {
flex: 1; flex: 1;
font-size: $title-size + 2; font-size: $title-size + 2;
font-weight: 600; font-weight: 600;
} }
.labelTop-tips { .labelTop-tips {
margin-left: 20rpx; margin-left: 20rpx;
background-color: #FBE7EE; background-color: #FBE7EE;
color: $mian-color; color: $mian-color;
font-size: $title-size-sm; font-size: $title-size-sm;
font-weight: normal; font-weight: normal;
padding: 0 15rpx; padding: 0 15rpx;
border: 2rpx solid $mian-color; border: 2rpx solid $mian-color;
border-radius: $radius * 2; border-radius: $radius * 2;
height: 44rpx; height: 44rpx;
line-height: 44rpx; line-height: 44rpx;
display: inline-block; display: inline-block;
margin-top: 18rpx; margin-top: 18rpx;
} }
} }
.labelPlan { .labelPlan {
border-top: 2rpx dotted #e7e7e7; border-top: 2rpx dotted #e7e7e7;
padding-top: $padding; padding-top: $padding;
margin-top: $margin; margin-top: $margin;
.labelPlan-top { .labelPlan-top {
display: flex; display: flex;
line-height: 54rpx; line-height: 54rpx;
color: $mian-color; color: $mian-color;
margin-bottom: $margin; margin-bottom: $margin;
.labelPlan-name { .labelPlan-name {
flex: 1; flex: 1;
font-size: $title-size + 4; font-size: $title-size + 4;
font-weight: 600; font-weight: 600;
} }
.labelPlan-tips { .labelPlan-tips {
opacity: .2; opacity: .2;
font-size: $title-size + 2; font-size: $title-size + 2;
} }
} }
} }
.labelPlan-item { .labelPlan-item {
line-height: 40rpx; line-height: 40rpx;
margin-bottom: $margin + 10; margin-bottom: $margin + 10;
display: flex; display: flex;
font-size: $title-size-m; font-size: $title-size-m;
color: #111111; color: #111111;
&:last-child { &:last-child {
margin-bottom: 10rpx; margin-bottom: 10rpx;
} }
.labelPlan-item-name { .labelPlan-item-name {
color: #999999; color: #999999;
flex: 1; flex: 1;
margin-right: $margin; margin-right: $margin;
} }
.labelPlan-item-text { .labelPlan-item-text {
width: 30%; width: 30%;
text-align: right; text-align: right;
} }
.labelPlan-item-btn { .labelPlan-item-btn {
color: $mian-color; color: $mian-color;
border: $mian-color 2rpx solid; border: $mian-color 2rpx solid;
width: 80rpx; width: 80rpx;
text-align: center; text-align: center;
border-radius: $radius-m; border-radius: $radius-m;
height: 40rpx; height: 40rpx;
line-height: 40rpx; line-height: 40rpx;
margin-left: 20rpx; margin-left: 20rpx;
font-size: $title-size-sm - 2; font-size: $title-size-sm - 2;
} }
} &.labelPlan-content {
.labelNotice { line-height: 52rpx;
font-size: $title-size-m; }
background-color: #F6F6F6; }
border-radius: $radius-m; .labelNotice {
margin-top: $margin; font-size: $title-size-m;
height: 240rpx; background-color: #F6F6F6;
overflow: hidden; border-radius: $radius-m;
position: relative; margin-top: $margin;
&.active { height: 240rpx;
height: auto; overflow: hidden;
} position: relative;
.labelNotice-top { &.active {
padding: $padding $padding 0; height: auto;
box-sizing: border-box; }
.labelNotice-name { .labelNotice-top {
color: #111111; padding: $padding $padding 0;
margin-bottom: $margin - 10; box-sizing: border-box;
font-weight: 600; .labelNotice-name {
} color: #111111;
.labelNotice-text { margin-bottom: $margin - 10;
color: #666666; font-weight: 600;
line-height: 52rpx; }
text-align: justify; .labelNotice-text {
margin-bottom: 100rpx; color: #666666;
} line-height: 52rpx;
} text-align: justify;
.labelNotice-btn { margin-bottom: 100rpx;
text-align: center; }
line-height: 100rpx; }
color: #999999; .labelNotice-btn {
position: absolute; text-align: center;
bottom: 0; line-height: 100rpx;
left: 0; color: #999999;
width: 100%; position: absolute;
background-color: #F6F6F6; bottom: 0;
.labelNotice-img { left: 0;
width: 24rpx; width: 100%;
height: 24rpx; background-color: #F6F6F6;
margin-right: 10rpx; .labelNotice-img {
transition: .2s; width: 24rpx;
&.active { height: 24rpx;
transform:rotate(180deg) margin-right: 10rpx;
} transition: .2s;
} &.active {
} transform:rotate(180deg)
} }
} }
}
.open { }
text-align: center; }
margin-top: $margin - 10;
width: 100%; .open {
background-color: #ffffff; text-align: center;
.open-text { margin-top: $margin - 10;
background-color: #FBE7EE; width: 100%;
display: inline-block; background-color: #ffffff;
color: $mian-color; .open-text {
padding: 0 $padding - 10; background-color: #FBE7EE;
line-height: 58rpx; display: inline-block;
font-size: $title-size-m; color: $mian-color;
border-radius: $radius-sm; padding: 0 $padding - 10;
image { line-height: 58rpx;
width: 22rpx; font-size: $title-size-m;
height: 22rpx; border-radius: $radius-sm;
margin-right: 10rpx; image {
transition: .2s; width: 22rpx;
&.active { height: 22rpx;
transform:rotate(180deg) margin-right: 10rpx;
} transition: .2s;
} &.active {
} transform:rotate(180deg)
} }
} }
} }
}
.reminder { }
position: fixed; }
left: 0;
bottom: 0; .reminder {
background-color: #f6f6f6; position: fixed;
z-index: 10; left: 0;
width: 100%; bottom: 0;
height: 240rpx; background-color: #f6f6f6;
overflow: hidden; z-index: 10;
padding: $padding; width: 100%;
box-sizing: border-box; height: 240rpx;
display: flex; overflow: hidden;
color: #FEA044; padding: $padding;
font-size: $title-size-m; box-sizing: border-box;
border-bottom: 2rpx solid #f5f5f5; display: flex;
.reminder-img { color: #FEA044;
width: 32rpx; font-size: $title-size-m;
height: 32rpx; border-bottom: 2rpx solid #f5f5f5;
margin-top: 8rpx; .reminder-img {
} width: 32rpx;
.reminder-text { height: 32rpx;
overflow-y: scroll; margin-top: 8rpx;
height: 200rpx; }
width: calc(100% - 52rpx); .reminder-text {
margin-left: 20rpx; overflow-y: scroll;
line-height: 40rpx; height: 200rpx;
text-align: justify; width: calc(100% - 52rpx);
font-size: $title-size-sm; margin-left: 20rpx;
text { line-height: 40rpx;
display: block; text-align: justify;
} font-size: $title-size-sm;
} text {
} display: block;
}
}
}
</style> </style>

View File

@@ -1,188 +1,199 @@
<template> <template>
<view class="content"> <view class="content">
<view class="create-type"> <view class="create-type">
<view class="create-type-title"> <view class="create-type-title">
选择咨询类型 选择咨询类型
</view> </view>
<block v-for="(item, index) in synthesisArr" :key="index+'synthesis'"> <block v-for="(item, index) in synthesisArr" :key="index+'synthesis'">
<view class="create-type-item" :class="{'active': item.self_type + item.synthesis_id == businessName}" @click="onBusiness(item.self_type, item.synthesis_id)"> <view class="create-type-item" :class="{'active': item.self_type + item.synthesis_id == businessName}" @click="onBusiness(item.self_type, item.synthesis_id)">
<image class="create-type-icon" :src="item.cover" mode="aspectFill"></image> <image class="create-type-icon" :src="item.cover" mode="aspectFill"></image>
<view class="create-type-text"> <view class="create-type-text">
<view class="title nowrap">{{item.title || '-'}}</view> <view class="title nowrap">{{item.title || '-'}}</view>
<view class="submit nowrap">免费咨询一次</view> <!-- <view class="submit nowrap">免费咨询一次</view> -->
</view> </view>
<image class="create-type-check" :src="item.self_type + item.synthesis_id == businessName ? '/static/icon/Check_active.png' : '/static/icon/Check.png'" mode="aspectFill"></image> <image class="create-type-check" :src="item.self_type + item.synthesis_id == businessName ? '/static/icon/Check_active.png' : '/static/icon/Check.png'" mode="aspectFill"></image>
</view> </view>
</block> </block>
</view> </view>
<view class="create-btn"> <view class="create-btn">
<button size="default" @click="onNext()">下一步</button> <button size="default" @click="onNext()">下一步</button>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { workIndex } from '@/apis/interfaces/index' import { workIndex } from '@/apis/interfaces/index'
import { synthList } from '@/apis/interfaces/synthesis' import { synthList } from '@/apis/interfaces/synthesis'
export default { export default {
data() { data() {
return { return {
businessArr : [], businessArr : [],
businessType: '', businessType: '',
businessName: '', businessName: '',
businessId : '', businessId : '',
synthesisArr: [] synthesisArr: []
}; };
}, },
created() { created() {
// 业务类型列表 // 业务类型列表
workIndex().then(res => { // workIndex().then(res => {
this.businessArr = res
this.businessType= res[0].self_type // console.log(res)
this.businessName= res[0].self_type + res[0].business_id
this.businessId = res[0].business_id // this.businessArr = res
}).catch(err => { // this.businessType= res[0].self_type
uni.showToast({ // this.businessName= res[0].self_type + res[0].business_id
title: err.message, // this.businessId = res[0].business_id
icon : 'none' // }).catch(err => {
}) // uni.showToast({
}) // title: err.message,
// icon : 'none'
// 综法类型列表 // })
synthList().then(res => { // })
this.synthesisArr = res
}).catch(err => { // 综法类型列表
uni.showToast({ synthList().then(res => {
title: err.message, this.synthesisArr = res
icon : 'none' }).catch(err => {
}) uni.showToast({
}) title: err.message,
}, icon : 'none'
methods: { })
// 选择业务类型 })
onBusiness(type, id){ },
this.businessName = type + id methods: {
this.businessType = type // 选择业务类型
this.businessId = id onBusiness(type, id){
}, this.businessName = type + id
this.businessType = type
// 创建业务单 this.businessId = id
},
// 创建业务单
onNext(){ onNext(){
// 信用卡/贷款 console.log(this.businessType)
if(this.businessType == 'business') { // 信用卡/贷款
let busines = this.businessArr.find(val => val.business_id === this.businessId) // if(this.businessType == 'business') {
// let busines = this.businessArr.find(val => val.business_id === this.businessId)
this.$Router.replace({
name : 'sheetBasic', // this.$Router.replace({
params : { // name : 'sheetBasic',
businessTitle : busines.title, // params : {
businessId : busines.business_id, // businessTitle : busines.title,
} // businessId : busines.business_id,
// }
// })
// return
// }
if(this.businessType != 'synthesis'){
uni.showToast({
title: '请选择咨询类型',
icon : 'none'
}) })
return return
} }
// 综法
// 综法 let synthesis = this.synthesisArr.find(val => val.synthesis_id === this.businessId)
let synthesis = this.synthesisArr.find(val => val.synthesis_id === this.businessId) if(synthesis.can.buy) {
if(synthesis.can.buy) { this.$Router.push({
this.$Router.push({ name : 'FeeWrite',
name : 'FeeWrite', params : {
params : { synthesisId: synthesis.synthesis_id
synthesisId: synthesis.synthesis_id }
} })
}) } else {
} else { this.$Router.replace({
this.$Router.replace({ name : 'PersonBrief',
name : 'PersonBrief', params : {
params : { synthesisId: synthesis.synthesis_id,
synthesisId: synthesis.synthesis_id, type: 1
type: 1 }
} })
}) }
} }
} },
},
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
padding: 50rpx; padding: 50rpx;
box-sizing: border-box; box-sizing: border-box;
height: 100vh; height: 100vh;
// height: calc(100vh - 44px); // height: calc(100vh - 44px);
background-color: #fcfcfc; background-color: #fcfcfc;
} }
// 选择业务类型 // 选择业务类型
.create-type{ .create-type{
padding-top: 50rpx; padding-top: 50rpx;
.create-type-title{ .create-type-title{
line-height: 50rpx; line-height: 50rpx;
text-align: center; text-align: center;
font-size: $title-size + 4; font-size: $title-size + 4;
margin-bottom: 70rpx; margin-bottom: 70rpx;
font-weight: 600; font-weight: 600;
text { text {
font-weight: normal; font-weight: normal;
color: gray; color: gray;
display: block; display: block;
font-size: $title-size-m; font-size: $title-size-m;
} }
} }
.create-type-item{ .create-type-item{
background: #ffffff; background: #ffffff;
border-radius: $radius-m; border-radius: $radius-m;
padding: 35rpx 30rpx; padding: 35rpx 30rpx;
margin-top: 30rpx; margin-top: 30rpx;
border:solid 1rpx #f8f8f8; border:solid 1rpx #f8f8f8;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
align-items: center; align-items: center;
box-shadow: 0 0 5rpx rgba(0, 0, 0, .05); box-shadow: 0 0 5rpx rgba(0, 0, 0, .05);
position: relative; position: relative;
.create-type-icon{ .create-type-icon{
width: 88rpx; width: 88rpx;
height: 88rpx; height: 88rpx;
margin-right: $margin; margin-right: $margin;
background-color: white; background-color: white;
border-radius: $radius; border-radius: $radius;
} }
.create-type-text{ .create-type-text{
line-height: 50rpx; line-height: 50rpx;
.title{ .title{
font-size: 30rpx; font-size: 30rpx;
} }
.submit{ .submit{
color: gray; color: gray;
font-size: 26rpx; font-size: 26rpx;
} }
} }
.create-type-check { .create-type-check {
width: 38rpx; width: 38rpx;
height: 38rpx; height: 38rpx;
position: absolute; position: absolute;
top: 44rpx; top: 60rpx;
right: 30rpx; right: 30rpx;
} }
&.active{ &.active{
border:solid 1rpx #ff9fb1; border:solid 1rpx #ff9fb1;
} }
} }
} }
// 按钮 // 按钮
.create-btn{ .create-btn{
margin-top: 100rpx; margin-top: 100rpx;
button[size="default"]{ button[size="default"]{
height: 90rpx; height: 90rpx;
line-height: 90rpx; line-height: 90rpx;
background: $mian-color; background: $mian-color;
font-size: 32rpx; font-size: 32rpx;
color: white; color: white;
font-weight: bold; font-weight: bold;
&::after{ &::after{
border: none; border: none;
} }
} }
} }
</style> </style>

View File

@@ -1,251 +1,251 @@
<template> <template>
<view class="content"> <view class="content">
<view class="idcard"> <view class="idcard">
<view class="idcardTitle"> <view class="idcardTitle">
<view class="idcardTitle-name"> <view class="idcardTitle-name">
身份认证 身份认证
</view> </view>
<view class="idcardTitle-tips"> <view class="idcardTitle-tips">
应监管要求请先进行身份认证 应监管要求请先进行身份认证
</view> </view>
</view> </view>
<view class="idcardImg"> <view class="idcardImg">
<view class="idcardImg-label" @click="updImg('frontCard')"> <view class="idcardImg-label" @click="updImg('frontCard')">
<image class="idcardImg-img" mode="widthFix" :src="frontCard.showpath ? frontCard.showpath : 'https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5ed55d77ed9c1e818a943cd7b4b7d28a.png'"></image> <image class="idcardImg-img" mode="widthFix" :src="frontCard.showpath ? frontCard.showpath : 'https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5ed55d77ed9c1e818a943cd7b4b7d28a.png'"></image>
<view class="idcardImg-text"> <view class="idcardImg-text">
点击上传正面 点击上传正面
</view> </view>
</view> </view>
<view class="idcardImg-label" @click="updImg('backCard')"> <view class="idcardImg-label" @click="updImg('backCard')">
<image class="idcardImg-img" mode="widthFix" :src="backCard.showpath ? backCard.showpath : 'https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/4a266e0dec95a3b15cf50ac58e37c478.png'"></image> <image class="idcardImg-img" mode="widthFix" :src="backCard.showpath ? backCard.showpath : 'https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/4a266e0dec95a3b15cf50ac58e37c478.png'"></image>
<view class="idcardImg-text"> <view class="idcardImg-text">
点击上传反面 点击上传反面
</view> </view>
</view> </view>
</view> </view>
<view class="idcardInfo"> <view class="idcardInfo">
<view class="idcardInfo-label"> <view class="idcardInfo-label">
<view class="idcardInfo-name"> <view class="idcardInfo-name">
姓名 姓名
</view> </view>
<view class="idcardInfo-input active"> <view class="idcardInfo-input active">
{{realData.name ? realData.name : '待自动输入'}} {{realData.name ? realData.name : '待自动输入'}}
</view> </view>
</view> </view>
<view class="idcardInfo-label"> <view class="idcardInfo-label">
<view class="idcardInfo-name"> <view class="idcardInfo-name">
身份证号 身份证号
</view> </view>
<view class="idcardInfo-input"> <view class="idcardInfo-input">
{{realData.id_card ? realData.id_card : '身份证号'}} {{realData.id_card ? realData.id_card : '身份证号'}}
</view> </view>
</view> </view>
<view class="idcardInfo-label"> <view class="idcardInfo-label">
<view class="idcardInfo-name"> <view class="idcardInfo-name">
有效期限 有效期限
</view> </view>
<view class="idcardInfo-input"> <view class="idcardInfo-input">
{{realData.expiration_date ? realData.expiration_date : '待自动输入'}} {{realData.expiration_date ? realData.expiration_date : '待自动输入'}}
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="idcardBtn"> <view class="idcardBtn">
<view class="idcardBtn-tips"> <view class="idcardBtn-tips">
<img src="@/static/imgs/card_ensure.png">个人信息安全保障中 <img src="@/static/imgs/card_ensure.png">个人信息安全保障中
</view> </view>
<button class="idcardBtn-go" type="default" :disabled="realData == ''" @click="faceClick">立即认证</button> <button class="idcardBtn-go" type="default" :disabled="realData == ''" @click="faceClick">立即认证</button>
</view> </view>
<!-- <view @click="$Router.push({name: 'Authsuccess'})">认证成功后会-临时跳转</view> --> <!-- <view @click="$Router.push({name: 'Authsuccess'})">认证成功后会-临时跳转</view> -->
</view> </view>
</template> </template>
<script> <script>
import { realName, faceUrl } from '@/apis/interfaces/user' import { realName, faceUrl } from '@/apis/interfaces/user'
import { uploads } from '@/apis/interfaces/uploading' import { uploads } from '@/apis/interfaces/uploading'
export default { export default {
data() { data() {
return { return {
// 身份证正面 // 身份证正面
frontCard:{ frontCard:{
showpath: '', showpath: '',
path : '' path : ''
}, },
// 身份证反面 // 身份证反面
backCard:{ backCard:{
showpath: '', showpath: '',
path : '' path : ''
}, },
realData : '', // 个人信息 realData : '', // 个人信息
authShortUrl: '' // 人脸识别地址-第三方 authShortUrl: '' // 人脸识别地址-第三方
} }
}, },
onLoad() {}, onLoad() {},
onShow() { onShow() {
}, },
methods: { methods: {
// 认证信息 // 认证信息
realInfo() { realInfo() {
realName({ realName({
front_card: this.frontCard.path, front_card: this.frontCard.path,
back_card : this.backCard.path, back_card : this.backCard.path,
redirect_url: "https://web.douhuofalv.com/sheet/authSuccess", redirect_url: "https://web.douhuofalv.com/sheet/authSuccess",
// redirect_url: "https://web.douhuotest.douhuofalv.com/sheet/authSuccess" // redirect_url: "https://web.douhuotest.douhuofalv.com/sheet/authSuccess"
}).then(res => { }).then(res => {
this.realData = res.certification this.realData = res.certification
this.authShortUrl = res.sign.authShortUrl this.authShortUrl = res.sign.authShortUrl
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 上传图片 // 上传图片
updImg(type){ updImg(type){
uni.chooseImage({ uni.chooseImage({
count : 1, count : 1,
success : path => { success : path => {
uploads([{ uploads([{
uri : path.tempFilePaths[0] uri : path.tempFilePaths[0]
}], { }], {
driver: "private-oss" driver: "private-oss"
}).then(res => { }).then(res => {
this[type].showpath = res.url[0] this[type].showpath = res.url[0]
this[type].path = res.path[0] this[type].path = res.path[0]
if(this.frontCard.path !=='' && this.backCard.path !=='') { if(this.frontCard.path !=='' && this.backCard.path !=='') {
// 获取认证信息 // 获取认证信息
this.realInfo(); this.realInfo();
} }
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
} }
}) })
}, },
// 人脸识别 // 人脸识别
faceClick() { faceClick() {
window.location.href = this.authShortUrl window.location.href = this.authShortUrl
// const newUrl = this.authShortUrl // const newUrl = this.authShortUrl
// let faceUrl= encodeURIComponent(newUrl) // let faceUrl= encodeURIComponent(newUrl)
// uni.navigateTo({ // uni.navigateTo({
// url: '/webview/webview?faceUrl=' + faceUrl // url: '/webview/webview?faceUrl=' + faceUrl
// }); // });
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
height: 100vh; height: 100vh;
overflow-y: scroll; overflow-y: scroll;
} }
.idcard { .idcard {
background-color: #ffffff; background-color: #ffffff;
border-radius: $radius; border-radius: $radius;
box-sizing: border-box; box-sizing: border-box;
} }
.idcardTitle { .idcardTitle {
margin: 0 0 $margin + 20; margin: 0 0 $margin + 20;
line-height: 60rpx; line-height: 60rpx;
.idcardTitle-name { .idcardTitle-name {
color: $text-color; color: $text-color;
font-size: $title-size + 16; font-size: $title-size + 16;
font-weight: 600; font-weight: 600;
} }
.idcardTitle-tips { .idcardTitle-tips {
color: #7c8495; color: #7c8495;
font-size: $title-size-lg; font-size: $title-size-lg;
} }
} }
.idcardImg { .idcardImg {
display: flex; display: flex;
margin: $margin -15rpx; margin: $margin -15rpx;
.idcardImg-label { .idcardImg-label {
flex: 2; flex: 2;
text-align: center; text-align: center;
background-color: #fdf4f5; background-color: #fdf4f5;
padding: $padding $padding + 10 $padding + 58; padding: $padding $padding + 10 $padding + 58;
margin: 0 15rpx; margin: 0 15rpx;
position: relative; position: relative;
border-radius: $radius-sm; border-radius: $radius-sm;
overflow: hidden; overflow: hidden;
.idcardImg-img { .idcardImg-img {
width: 100%; width: 100%;
} }
.idcardImg-text { .idcardImg-text {
text-align: center; text-align: center;
position: absolute; position: absolute;
width: 100%; width: 100%;
background-color: $mian-color; background-color: $mian-color;
color: #ffffff; color: #ffffff;
left: 0; left: 0;
bottom: 0; bottom: 0;
line-height: 68rpx; line-height: 68rpx;
font-size: $title-size-m; font-size: $title-size-m;
opacity: .9; opacity: .9;
} }
} }
} }
.idcardInfo-label { .idcardInfo-label {
display: flex; display: flex;
line-height: 120rpx; line-height: 120rpx;
border-bottom: 2rpx solid #f5f5f5; border-bottom: 2rpx solid #f5f5f5;
&:last-child { &:last-child {
border: none; border: none;
} }
.idcardInfo-name { .idcardInfo-name {
flex: 1; flex: 1;
color: #637392; color: #637392;
} }
.idcardInfo-input { .idcardInfo-input {
color: #d2d5dd; color: #d2d5dd;
&.active { &.active {
color: #000000; color: #000000;
} }
} }
} }
.idcardBtn { .idcardBtn {
margin-top: $margin * 4; margin-top: $margin * 4;
text-align: center; text-align: center;
padding: 0 $padding; padding: 0 $padding;
box-sizing: border-box; box-sizing: border-box;
.idcardBtn-tips { .idcardBtn-tips {
color: #8091aa; color: #8091aa;
line-height: 90rpx; line-height: 90rpx;
font-size: $title-size-m; font-size: $title-size-m;
img { img {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
vertical-align: -10rpx; vertical-align: -10rpx;
margin-right: 5rpx; margin-right: 5rpx;
} }
} }
.idcardBtn-go { .idcardBtn-go {
background-color: $mian-color; background-color: $mian-color;
color: #ffffff; color: #ffffff;
border-radius: $radius * 3; border-radius: $radius * 3;
line-height: 90rpx; line-height: 90rpx;
font-size: $title-size + 2; font-size: $title-size + 2;
&[disabled] { &[disabled] {
background-color: #fdc5d3; background-color: #fdc5d3;
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,217 +1,217 @@
<template> <template>
<view class="content"> <view class="content">
<view class="sheet"> <view class="sheet">
<image class="sheet-img" v-if="type == 1" src="https://cdn.douhuofalv.com/images/2022/11/30/cb0654de804d11905d2bb539e2fb5f24.jpg" mode="widthFix"></image> <image class="sheet-img" v-if="type == 1" src="https://cdn.douhuofalv.com/images/2022/11/30/cb0654de804d11905d2bb539e2fb5f24.jpg" mode="widthFix"></image>
<image class="sheet-img" v-else-if="type == 2" src="https://cdn.douhuofalv.com/images/2022/11/30/365f75baeaa1b4c5d041dce7f5ad6867.jpg" mode="widthFix"></image> <image class="sheet-img" v-else-if="type == 2" src="https://cdn.douhuofalv.com/images/2022/11/30/365f75baeaa1b4c5d041dce7f5ad6867.jpg" mode="widthFix"></image>
<image class="sheet-img" v-else src="https://cdn.douhuofalv.com/images/2022/11/30/007cf45b7138a2552f6a80ffa390c3ad.jpg" mode="widthFix"></image> <image class="sheet-img" v-else src="https://cdn.douhuofalv.com/images/2022/11/30/007cf45b7138a2552f6a80ffa390c3ad.jpg" mode="widthFix"></image>
<!-- 立即咨询 --> <!-- 立即咨询 -->
<view class="lawyerBtn"> <view class="lawyerBtn">
<view class="lawyerBtn-name">您的心事我们</view> <view class="lawyerBtn-name">您的心事我们</view>
<image class="lawyerBtn-img lawyerBtn-go" @click="sheetClick" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e1323131217b0ca7e1ed2e89a55a0740.png" mode="widthFix"></image> <image class="lawyerBtn-img lawyerBtn-go" @click="sheetClick" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e1323131217b0ca7e1ed2e89a55a0740.png" mode="widthFix"></image>
<image class="lawyerBtn-img lawyerBtn-see" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e4f37a76780df657cda85c242bfd792c.png" mode="widthFix"></image> <image class="lawyerBtn-img lawyerBtn-see" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/e4f37a76780df657cda85c242bfd792c.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<!-- 关注 --> <!-- 关注 -->
<view class="tipsBack" v-if="generalShow"></view> <view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow"> <view class="tipsCont" v-if="generalShow">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image> <image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image>
<view class="tipsWhite-top"> <view class="tipsWhite-top">
<view class="tipsWhite-name"> <view class="tipsWhite-name">
请您先关注抖火法律咨询公众号 请您先关注抖火法律咨询公众号
</view> </view>
<view class="tipsWhite-text"> <view class="tipsWhite-text">
关注后可立即下单 关注后可立即下单
</view> </view>
</view> </view>
<view class="tipsWhite-btn"> <view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false"> <view class="tipsWhite-btn-go" @click="generalShow = false">
稍后关注 稍后关注
</view> </view>
<view class="tipsWhite-btn-go" @click="judgeGeneral"> <view class="tipsWhite-btn-go" @click="judgeGeneral">
马上关注 马上关注
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { judgeReal } from '@/apis/interfaces/user' import { judgeReal } from '@/apis/interfaces/user'
import { authFollow } from '@/apis/interfaces/index' import { authFollow } from '@/apis/interfaces/index'
export default { export default {
data() { data() {
return { return {
type : '', type : '',
generalShow: false // 公众号 generalShow: false // 公众号
} }
}, },
onShow() { onShow() {
this.type = this.$Route.query.type this.type = this.$Route.query.type
}, },
methods: { methods: {
// 判断是否认证 // 判断是否认证
sheetClick() { sheetClick() {
judgeReal().then(res => { judgeReal().then(res => {
if(res.has_sign) { if(res.has_sign) {
if(!res.has_subscribe) { if(!res.has_subscribe) {
// 弹出公众号 // 弹出公众号
this.generalShow = true this.generalShow = true
} else { } else {
// 跳到咨询单 // 跳到咨询单
this.$Router.replace({name: 'sheetCreate'}) this.$Router.replace({name: 'sheetCreate'})
} }
return return
} }
// 跳到认证页面 // 跳到认证页面
this.$Router.replace({name: 'sheetIdcard'}) this.$Router.replace({name: 'sheetIdcard'})
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 状态 // 状态
judgeGeneral(){ judgeGeneral(){
// 获取微信授权信息 // 获取微信授权信息
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webview/webCode', url: 'https://web.douhuofalv.com/webview/webCode',
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode' // url: 'https://web.douhuotest.douhuofalv.com/webview/webCode'
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
// 关闭公众号 // 关闭公众号
this.generalShow = false this.generalShow = false
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.sheet { .sheet {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: relative; position: relative;
left: 0; left: 0;
top: 0; top: 0;
.sheet-img { .sheet-img {
width: 100%; width: 100%;
} }
} }
.lawyerBtn { .lawyerBtn {
position: absolute; position: absolute;
z-index: 99; z-index: 99;
left: 0; left: 0;
bottom: $padding; bottom: $padding;
width: 100%; width: 100%;
padding: $padding - 10 $padding; padding: $padding - 10 $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
.lawyerBtn-name { .lawyerBtn-name {
font-size: $title-size-sm - 2; font-size: $title-size-sm - 2;
line-height: 60rpx; line-height: 60rpx;
opacity: .9; opacity: .9;
color: #fff; color: #fff;
} }
.lawyerBtn-img { .lawyerBtn-img {
display: block; display: block;
margin: 0 auto; margin: 0 auto;
} }
.lawyerBtn-go { .lawyerBtn-go {
width: 42%; width: 42%;
margin: 15rpx auto; margin: 15rpx auto;
} }
.lawyerBtn-see { .lawyerBtn-see {
width: 60%; width: 60%;
} }
} }
// 关注 // 关注
.tipsBack { .tipsBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 9; z-index: 9;
background-color: rgba(0, 0, 0, .8); background-color: rgba(0, 0, 0, .8);
} }
.tipsCont { .tipsCont {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
} }
.tipsWhite-top { .tipsWhite-top {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.tipsCont-img { .tipsCont-img {
width: 100%; width: 100%;
} }
.tipsWhite-name { .tipsWhite-name {
text-align: center; text-align: center;
color: #111111; color: #111111;
font-size: 34rpx; font-size: 34rpx;
font-weight: 600; font-weight: 600;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
.tipsWhite-text { .tipsWhite-text {
font-size: 30rpx; font-size: 30rpx;
color: #666666; color: #666666;
line-height: 48rpx; line-height: 48rpx;
} }
.tipsWhite-btn { .tipsWhite-btn {
display: flex; display: flex;
padding: $padding 10rpx; padding: $padding 10rpx;
box-sizing: border-box; box-sizing: border-box;
.tipsWhite-btn-go { .tipsWhite-btn-go {
flex: 2; flex: 2;
color: #fff; color: #fff;
margin: 0 15rpx; margin: 0 15rpx;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
text-align: center; text-align: center;
border: 2rpx solid #F6F6F6; border: 2rpx solid #F6F6F6;
background-color: #007df5; background-color: #007df5;
border-radius: $radius-m; border-radius: $radius-m;
&:first-child { &:first-child {
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,422 +1,423 @@
<template> <template>
<view class="content"> <view class="content">
<view class="paymentTop"> <view class="paymentTop">
<!-- v-if="applyData.status" --> <!-- v-if="applyData.status" -->
<view class="paymentTop-name"> <view class="paymentTop-name">
订单支付 订单支付
<text>与人方便,与己方便,珍惜时间,请先付款</text> <text>与人方便,与己方便,珍惜时间,请先付款</text>
</view> </view>
<img class="paymentTop-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/d9c965766807a6e1c57da11e069c8686.png"> <img class="paymentTop-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/d9c965766807a6e1c57da11e069c8686.png">
</view> </view>
<view class="paymentShow"> <view class="paymentShow">
<img class="paymentShow-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5ccd7b6473095bf0e55c21240ca2eb90.png"> <img class="paymentShow-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5ccd7b6473095bf0e55c21240ca2eb90.png">
<view class="paymentShow-text"> <view class="paymentShow-text">
<view class="paymentShow-top"> <view class="paymentShow-top">
<view class="paymentShow-top-name">订单名称<text>{{style == 'chajia' ? '补差价' : '咨询服务费'}}</text></view> <view class="paymentShow-top-name">订单名称<text>{{style == 'chajia' ? '补差价' : '咨询服务费'}}</text></view>
<view class="paymentShow-top-price">{{price}}</view> <view class="paymentShow-top-price">{{price}}</view>
</view> </view>
<view class="paymentShow-tips"> <view class="paymentShow-tips">
订单描述{{remark ? remark : '暂无描述'}} 订单描述{{remark ? remark : '暂无描述'}}
</view> </view>
<view class="paymentShow-top-name" style="margin-bottom: 10px; color: #9a9a9a;">支付方式</view> <view class="paymentShow-top-name" style="margin-bottom: 10px; color: #9a9a9a;">支付方式</view>
<view @click="payTypeVal = 'alipay'" class="paymentList-label"> <view @click="payTypeVal = 'alipay'" class="paymentList-label">
<image class="paymentList-img" :src="payTypeVal == 'alipay' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>支付宝银联商务 <image class="paymentList-img" :src="payTypeVal == 'alipay' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>支付宝银联商务
</view> </view>
<view @click="onUmsPay('mp')" class="paymentList-label"> <view @click="onUmsPay('mp')" class="paymentList-label">
<image class="paymentList-img" :src="payTypeVal == 'umsWx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>微信支付银联商务 <image class="paymentList-img" :src="payTypeVal == 'umsWx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>微信支付银联商务
</view> </view>
<view @click="payTypeVal = 'dgwxalipay'" class="paymentList-label"> <view @click="payTypeVal = 'dgwxalipay'" class="paymentList-label">
<image class="paymentList-img" :src="payTypeVal == 'dgwxalipay' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>支付宝汇付 <image class="paymentList-img" :src="payTypeVal == 'dgwxalipay' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>支付宝汇付
</view> </view>
<view @click="dgwxPay('mp')" class="paymentList-label"> <view @click="dgwxPay('mp')" class="paymentList-label">
<image class="paymentList-img" :src="payTypeVal == 'dgwx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>微信支付(汇付) <image class="paymentList-img" :src="payTypeVal == 'dgwx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>微信支付(汇付)
</view> </view>
</view> </view>
</view> </view>
<view class="paymentBtn" v-if="payTypeVal == 'umsWx'"> <view class="paymentBtn" v-if="payTypeVal == 'umsWx'">
<!-- douhuotest dev=0是线上 dev=1是线下 --> <!-- douhuotest dev=0是线上 dev=1是线下 -->
<wx-open-launch-weapp <wx-open-launch-weapp
username="gh_918c81628d6f" username="gh_918c81628d6f"
:path="'pages/pay/pay?type=h5&dev=0&trade_id=' + tradeId + '&token=' + token" :path="'pages/pay/pay?type=h5&dev=0&trade_id=' + tradeId + '&token=' + token"
> >
<script type="text/wxtag-template"> <script type="text/wxtag-template">
<style> <style>
.gobtn { .gobtn {
width: 280px; width: 280px;
background-color: #da2b56; background-color: #da2b56;
color: #ffffff; color: #ffffff;
border-radius: 5px; border-radius: 5px;
height: 50px; height: 50px;
line-height: 50px; line-height: 50px;
font-size: 18px; font-size: 18px;
border: none; border: none;
} }
</style> </style>
<button type="default" class="gobtn">打开小程序收银台</button> <button type="default" class="gobtn">打开小程序收银台</button>
</script> </script>
</wx-open-launch-weapp> </wx-open-launch-weapp>
</view> </view>
<view class="paymentBtn" v-else-if="payTypeVal == 'dgwx'"> <view class="paymentBtn" v-else-if="payTypeVal == 'dgwx'">
<button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChickDg"> <button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChickDg">
打开小程序收银台 打开小程序收银台
</button> </button>
</view> </view>
<view class="paymentBtn" v-else> <view class="paymentBtn" v-else>
<button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChick"> <button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChick">
立即支付 立即支付
</button> </button>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import VConsole from 'vconsole'; import VConsole from 'vconsole';
const jweixin = require('jweixin-module'); const jweixin = require('jweixin-module');
import { applyPay, diffPay, authFollow } from '@/apis/interfaces/index' import { applyPay, diffPay, authFollow } from '@/apis/interfaces/index'
import { umsDiff, umsOrder, umsState, dgPay, diffDgPay } from '@/apis/interfaces/pay.js' import { umsDiff, umsOrder, umsState, dgPay, diffDgPay } from '@/apis/interfaces/pay.js'
export default { export default {
data() { data() {
return { return {
payTypeVal : 'alipay', // 支付方式 payTypeVal : 'alipay', // 支付方式
tradeId : '', // 查询id tradeId : '', // 查询id
jumpUrlDg : '', // 抖巩支付 jumpUrlDg : '', // 抖巩支付
getState : false, // 查询支付结果 getState : false, // 查询支付结果
token : '', // 用户token token : '', // 用户token
style : '', // 支付类型 style : '', // 支付类型
price : '', // 价格 price : '', // 价格
disabled : false // 按钮状态 disabled : false // 按钮状态
} }
}, },
onLoad() { onLoad() {
// new VConsole(); // new VConsole();
}, },
onShow() { onShow() {
if(this.getState && this.tradeId != ''){ if(this.getState && this.tradeId != ''){
this.getUmsState(this.tradeId) this.getUmsState(this.tradeId)
} }
this.token = this.$store.getters.getToken this.token = this.$store.getters.getToken
this.style = this.$Route.query.style this.style = this.$Route.query.style
this.price = this.$Route.query.price this.price = this.$Route.query.price
this.remark = this.$Route.query.remark this.remark = this.$Route.query.remark
}, },
methods: { methods: {
// 查询支付结果 // 查询支付结果
getUmsState(tradeId){ getUmsState(tradeId){
uni.showLoading({ uni.showLoading({
title: '查询支付结果...', title: '查询支付结果...',
mask : true mask : true
}) })
let outTime; let outTime;
let resNumb = 0; let resNumb = 0;
outTime = setInterval(() => { outTime = setInterval(() => {
if(resNumb >= 3){ if(resNumb >= 3){
clearInterval(outTime) clearInterval(outTime)
uni.showToast({ uni.showToast({
title: "查询支付结果失败", title: "查询支付结果失败",
icon : "none", icon : "none",
mask : true mask : true
}) })
return return
} }
umsState(tradeId).then(res => { umsState(tradeId).then(res => {
resNumb++ resNumb++
if(res.state === 'success'){ if(res.state === 'success'){
clearInterval(outTime) clearInterval(outTime)
uni.hideLoading() uni.hideLoading()
this.$Router.replace({name: 'sheetPoint'}) this.$Router.replace({name: 'sheetPoint'})
} }
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, 2000) }, 2000)
}, },
// 支付 // 支付
payChick(){ payChick(){
switch(this.payTypeVal){ switch(this.payTypeVal){
case '': case '':
uni.showToast({ uni.showToast({
title: '请选择支付方式', title: '请选择支付方式',
icon : 'none' icon : 'none'
}) })
break; break;
case 'wxpay': case 'wxpay':
this.payClick() this.payClick()
break; break;
case 'alipay': case 'alipay':
this.onUmsPay('mp_alipay') this.onUmsPay('mp_alipay')
break; break;
case 'dgwxalipay': case 'dgwxalipay':
this.dgwxPay('mp_alipay') this.dgwxPay('mp_alipay')
break; break;
} }
this.showPayMenu = false this.showPayMenu = false
}, },
// 抖供支付 // 抖供支付
payChickDg() { payChickDg() {
window.location.href = this.jumpUrlDg.scheme_code window.location.href = this.jumpUrlDg.scheme_code
}, },
// 第三方差价支付 // 第三方差价支付
onUmsPay(type){ onUmsPay(type){
let umsFun = this.style == 'chajia' ? umsDiff : umsOrder let umsFun = this.style == 'chajia' ? umsDiff : umsOrder
umsFun(this.$Route.query.id, {type}).then(res => { umsFun(this.$Route.query.id, {type}).then(res => {
this.getState = true this.getState = true
switch (type){ switch (type){
case 'mp': case 'mp':
this.tradeId = res.trade_id this.tradeId = res.trade_id
this.payTypeVal = 'umsWx' this.payTypeVal = 'umsWx'
break; break;
case 'mp_alipay': case 'mp_alipay':
this.tradeId = res.trade_id this.tradeId = res.trade_id
window.location.href = res.alipay window.location.href = res.alipay
break; break;
} }
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
// 斗拱支付 // 斗拱支付
dgwxPay(type){ dgwxPay(type){
uni.showLoading({ uni.showLoading({
title: '加载中...', title: '加载中...',
mask : true mask : true
}) })
let umsFun = this.style == 'chajia' ? dgPay : diffDgPay let umsFun = this.style == 'chajia' ? dgPay : diffDgPay
dgPay(this.$Route.query.id, {type, app_schema: 'weixin://'}).then(res => { dgPay(this.$Route.query.id, {type, app_schema: 'weixin://'}).then(res => {
let { params, trade_id } = res; let { params, trade_id } = res;
this.getState = true this.getState = true
uni.hideLoading() uni.hideLoading()
switch (type){ switch (type){
case 'mp': case 'mp':
this.tradeId = trade_id this.tradeId = trade_id
this.jumpUrlDg = JSON.parse(params.miniapp_data) this.jumpUrlDg = JSON.parse(params.miniapp_data)
this.payTypeVal = 'dgwx' this.payTypeVal = 'dgwx'
break; break;
case 'mp_alipay': case 'mp_alipay':
this.tradeId = trade_id this.tradeId = trade_id
// window.location.href = 'https://ds.alipay.com/?scheme=' + encodeURIComponent(params.jump_url) // window.location.href = 'https://ds.alipay.com/?scheme=' + encodeURIComponent(params.jump_url)
window.location.href = `https://ds.alipay.com/?scheme=` + encodeURIComponent(params.jump_url) window.location.href = `https://ds.alipay.com/?scheme=` + encodeURIComponent(params.jump_url)
this.payTypeVal = 'dgwxalipay' this.payTypeVal = 'dgwxalipay'
break; break;
} }
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
//咨询服务费 - 微信支付 //咨询服务费 - 微信支付
payClick() { payClick() {
let newOpenId = uni.getStorageSync('openId') let newOpenId = uni.getStorageSync('openId')
if(newOpenId) { if(newOpenId) {
let NewUrl = '' let NewUrl = ''
if(this.$Route.query.style == 'daijiao') { if(this.$Route.query.style == 'daijiao') {
NewUrl = applyPay NewUrl = applyPay
} else { } else {
NewUrl = diffPay NewUrl = diffPay
} }
NewUrl(this.$Route.query.id, { NewUrl(this.$Route.query.id, {
openid : newOpenId openid : newOpenId
}).then(res => { }).then(res => {
let wxConfig = JSON.parse(res.wechat) let wxConfig = JSON.parse(res.wechat)
jweixin.config({ jweixin.config({
appId: wxConfig.appId, appId: wxConfig.appId,
debug: false, debug: false,
jsApiList: ['chooseWXPay'], jsApiList: ['chooseWXPay'],
signature: wxConfig.signature, signature: wxConfig.signature,
nonceStr: wxConfig.nonceStr, nonceStr: wxConfig.nonceStr,
timestamp: wxConfig.timestamp, timestamp: wxConfig.timestamp,
}) })
jweixin.ready(() => { jweixin.ready(() => {
jweixin.chooseWXPay({ jweixin.chooseWXPay({
timestamp: wxConfig.timeStamp, timestamp: wxConfig.timeStamp,
nonceStr: wxConfig.nonceStr, nonceStr: wxConfig.nonceStr,
package: wxConfig.package, package: wxConfig.package,
signType: wxConfig.signType, signType: wxConfig.signType,
paySign: wxConfig.paySign, paySign: wxConfig.paySign,
success: payRes => { success: payRes => {
// 先跳支付成功 // 先跳支付成功
uni.showToast({ uni.showToast({
title: '支付成功', title: '支付成功',
icon: "none" icon: "none"
}) })
this.disabled = true this.disabled = true
setTimeout(()=>{ setTimeout(()=>{
this.$Router.replace({name: 'sheetPoint'}) this.$Router.replace({name: 'sheetPoint'})
},3000) },3000)
}, },
cancel: payCancel => { cancel: payCancel => {
// 跳到咨询单 // 跳到咨询单
this.$Router.replace({name: 'sheetIndex'}) this.$Router.replace({name: 'sheetIndex'})
}, },
fail: payfail => { fail: payfail => {
// 取消支付 // 取消支付
uni.showToast({ uni.showToast({
title: '取消支付', title: '取消支付',
icon: 'none' icon: 'none'
}) })
this.disabled = true this.disabled = true
setTimeout(()=>{ setTimeout(()=>{
this.$Router.replace({name: 'User'}) this.$Router.replace({name: 'User'})
},1000) },1000)
} }
}); });
}); });
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
return return
} }
// 获取微信授权信息-获取oppid // 获取微信授权信息-获取oppid
authFollow({ authFollow({
// url: 'https://web.douhuotest.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price // url: 'https://web.douhuotest.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price
url: 'https://web.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price // url: 'http://web.douhuo.demos.uzchain.tech/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price 最新
}).then(res => { url: 'https://web.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price
window.location.href = res }).then(res => {
}).catch(err => { window.location.href = res
uni.showToast({ }).catch(err => {
title: err.message, uni.showToast({
icon: "none" title: err.message,
}) icon: "none"
}) })
} })
}
}
}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.paymentTop { .paymentTop {
background-color: #dc7f8b; background-color: #dc7f8b;
padding: $padding * 2 $padding * 2 $padding * 4; padding: $padding * 2 $padding * 2 $padding * 4;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
color: #ffffff; color: #ffffff;
.paymentTop-name { .paymentTop-name {
flex: 1; flex: 1;
font-size: $title-size + 10; font-size: $title-size + 10;
text { text {
margin-top: 20rpx; margin-top: 20rpx;
display: block; display: block;
font-size: $title-size-sm; font-size: $title-size-sm;
} }
} }
.paymentTop-img { .paymentTop-img {
width: 100rpx; width: 100rpx;
height: 100rpx; height: 100rpx;
} }
} }
.paymentShow { .paymentShow {
position: relative; position: relative;
top: -80rpx; top: -80rpx;
left: 0; left: 0;
width: 100%; width: 100%;
.paymentShow-img, .paymentShow-img,
.paymentShow-text{ .paymentShow-text{
position: absolute; position: absolute;
left: 30rpx; left: 30rpx;
top: 0; top: 0;
width: calc(100% - 60rpx); width: calc(100% - 60rpx);
} }
.paymentShow-text { .paymentShow-text {
padding: $padding $padding * 2 0; padding: $padding $padding * 2 0;
box-sizing: border-box; box-sizing: border-box;
} }
.paymentShow-top { .paymentShow-top {
display: flex; display: flex;
font-size: $title-size + 2; font-size: $title-size + 2;
line-height: 130rpx; line-height: 130rpx;
.paymentShow-top-name { .paymentShow-top-name {
flex: 1; flex: 1;
display: flex; display: flex;
color: #9a9a9a; color: #9a9a9a;
text { text {
color: #000000; color: #000000;
} }
} }
.paymentShow-top-price { .paymentShow-top-price {
color: $mian-color; color: $mian-color;
} }
} }
.paymentShow-tips { .paymentShow-tips {
margin-bottom: $margin + 10; margin-bottom: $margin + 10;
color: #9a9a9a; color: #9a9a9a;
font-size: $title-size-lg; font-size: $title-size-lg;
} }
.paymentShow-coupon { .paymentShow-coupon {
display: flex; display: flex;
.paymentTop-icon { .paymentTop-icon {
width: 42rpx; width: 42rpx;
height: 42rpx; height: 42rpx;
} }
.paymentTop-usable { .paymentTop-usable {
flex: 1; flex: 1;
margin-left: 20rpx; margin-left: 20rpx;
text { text {
display: block; display: block;
color: #9a9a9a; color: #9a9a9a;
font-size: $title-size-sm; font-size: $title-size-sm;
line-height: 48rpx; line-height: 48rpx;
} }
} }
} }
} }
.paymentList-label { .paymentList-label {
line-height: 80rpx; line-height: 80rpx;
display: flex; display: flex;
} }
.paymentList-icon { .paymentList-icon {
width: 40rpx; width: 40rpx;
height: 40rpx; height: 40rpx;
margin-right: $margin - 10; margin-right: $margin - 10;
} }
.paymentList-img { .paymentList-img {
width: 34rpx; width: 34rpx;
height: 34rpx; height: 34rpx;
margin-top: 22rpx; margin-top: 22rpx;
margin-right: $margin - 10; margin-right: $margin - 10;
} }
.paymentBtn { .paymentBtn {
position: fixed; position: fixed;
bottom: $margin * 2; bottom: $margin * 2;
left: 0; left: 0;
text-align: center; text-align: center;
padding: 0 $padding 100rpx; padding: 0 $padding 100rpx;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
.paymentBtn-go { .paymentBtn-go {
width: 70% !important; width: 70% !important;
background-color: $mian-color; background-color: $mian-color;
color: #ffffff; color: #ffffff;
border-radius: 10rpx; border-radius: 10rpx;
line-height: 94rpx; line-height: 94rpx;
font-size: $title-size + 2; font-size: $title-size + 2;
&[disabled] { &[disabled] {
background-color: #eba5a5; background-color: #eba5a5;
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,499 +1,499 @@
<template> <template>
<view class="content"> <view class="content">
<image class="expandImg" src="https://cdn.douhuofalv.com/images/2023/04/19/df2ecf6ece3e59de1d51c4ad09aa68f3.jpg" mode="widthFix"></image> <image class="expandImg" src="https://cdn.douhuofalv.com/images/2023/04/19/df2ecf6ece3e59de1d51c4ad09aa68f3.jpg" mode="widthFix"></image>
<view class="list"> <view class="list">
<view class="list-title"> <view class="list-title">
<view class="list-title-number">expand</view> <view class="list-title-number">expand</view>
<view class="list-title-name">法律服务拓展包</view> <view class="list-title-name">法律服务拓展包</view>
<view class="list-title-trim"></view> <view class="list-title-trim"></view>
</view> </view>
<view class="list-item"> <view class="list-item">
<!-- @click="seekClick(item.expand_id)" --> <!-- @click="seekClick(item.expand_id)" -->
<view class="list-label" v-for="(item, index) in entrustArr" :key="index"> <view class="list-label" v-for="(item, index) in entrustArr" :key="index">
<view class="list-label-name"> <view class="list-label-name">
{{item.title}} {{item.title}}
</view> </view>
<view class="list-label-price"><rich-text :nodes="item.content"></rich-text></view> <view class="list-label-price"><rich-text :nodes="item.content"></rich-text></view>
<!-- <view class="list-label-go">购买</view> --> <!-- <view class="list-label-go">购买</view> -->
<!-- data[0].order.status --> <!-- data[0].order.status -->
<view class="list-label-go" :class="{'hide': item.button_status === 2}" @click="onBtn(index)"> <view class="list-label-go" :class="{'hide': item.button_status === 2}" @click="onBtn(index)">
<text v-if="item.button_status === 0">购买</text> <text v-if="item.button_status === 0">购买</text>
<text v-if="item.button_status === 1">等待支付</text> <text v-if="item.button_status === 1">等待支付</text>
<text v-if="item.button_status === 2">待审核</text> <text v-if="item.button_status === 2">待审核</text>
<text v-if="item.button_status === 3">审核驳回</text> <text v-if="item.button_status === 3">审核驳回</text>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<image class="expandBttom" src="https://cdn.douhuofalv.com/images/2023/04/17/fc4cad00a630e3d69b3f486e9d2937e9.png" mode="widthFix"></image> <image class="expandBttom" src="https://cdn.douhuofalv.com/images/2023/04/17/fc4cad00a630e3d69b3f486e9d2937e9.png" mode="widthFix"></image>
<!-- 关注公众号 --> <!-- 关注公众号 -->
<view class="tipsBack" v-if="generalShow"></view> <view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow"> <view class="tipsCont" v-if="generalShow">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image> <image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image>
<view class="tipsWhite-top"> <view class="tipsWhite-top">
<view class="tipsWhite-name"> <view class="tipsWhite-name">
请您先关注抖火法律咨询公众号 请您先关注抖火法律咨询公众号
</view> </view>
<view class="tipsWhite-text"> <view class="tipsWhite-text">
关注后可立即下单 关注后可立即下单
</view> </view>
</view> </view>
<view class="tipsWhite-btn"> <view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false"> <view class="tipsWhite-btn-go" @click="generalShow = false">
稍后关注 稍后关注
</view> </view>
<view class="tipsWhite-btn-go" @click="judgeGeneral"> <view class="tipsWhite-btn-go" @click="judgeGeneral">
马上关注 马上关注
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<!-- 打款凭证弹出 --> <!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view> <view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}"> <view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image> <image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title"> <view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view> <view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view> <view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn"> <view class="voucherPop-btn">
<!-- @click="cancelPay" --> <!-- @click="cancelPay" -->
<view class="voucherPop-go" @click="voucherState = false"> <view class="voucherPop-go" @click="voucherState = false">
暂不支付 暂不支付
</view> </view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen"> <view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证 上传凭证
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { judgeReal } from '@/apis/interfaces/user' import { judgeReal } from '@/apis/interfaces/user'
import { authFollow } from '@/apis/interfaces/index' import { authFollow } from '@/apis/interfaces/index'
import { expandsList } from '@/apis/interfaces/synthesis' import { expandsList } from '@/apis/interfaces/synthesis'
export default { export default {
data() { data() {
return { return {
entrustArr : [], //案件委托列表 entrustArr : [], //案件委托列表
generalShow : false, generalShow : false,
voucherState : false, // 上传凭证弹出// 公众号 voucherState : false, // 上传凭证弹出// 公众号
orderId : '', // 订单 ID orderId : '', // 订单 ID
orderType : '', // 订单类型 orderType : '', // 订单类型
orderPrice : '', // 订单金额 orderPrice : '', // 订单金额
} }
}, },
created() {}, created() {},
onShow() { onShow() {
// 获取-案件委托-列表 // 获取-案件委托-列表
this.yearServe(); this.yearServe();
}, },
methods: { methods: {
// 案件委托-列表 // 案件委托-列表
yearServe(){ yearServe(){
expandsList().then(res => { expandsList().then(res => {
this.entrustArr = res this.entrustArr = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
// 点击开通按钮 // 点击开通按钮
onBtn(index){ onBtn(index){
let obj = this.entrustArr[index] let obj = this.entrustArr[index]
if(obj.order === null){ if(obj.order === null){
this.seekClick(obj.expand_id) this.seekClick(obj.expand_id)
return return
} }
// 0 购买 1 待支付 2 待审核 3 驳回 // 0 购买 1 待支付 2 待审核 3 驳回
switch (obj.button_status){ switch (obj.button_status){
case 0: case 0:
this.seekClick(obj.expand_id) this.seekClick(obj.expand_id)
break; break;
case 1: case 1:
this.expressSheet(obj.order.expand_order_id, obj.order.order_type, obj.order.can, obj.order.price) this.expressSheet(obj.order.expand_order_id, obj.order.order_type, obj.order.can, obj.order.price)
break; break;
case 2: case 2:
uni.showToast({ uni.showToast({
title: '打款凭证审核中,请耐心等待', title: '打款凭证审核中,请耐心等待',
icon : 'none' icon : 'none'
}) })
break; break;
case 3: case 3:
this.$Router.push({ this.$Router.push({
name : 'VoucherOpen', name : 'VoucherOpen',
params : { params : {
payId : obj.order.offline_pays.offline_pay_id, payId : obj.order.offline_pays.offline_pay_id,
type : 'edit', type : 'edit',
orderId : obj.order.order_id, orderId : obj.order.order_id,
orderType : obj.order.order_type.replace(/\\/g, '-'), orderType : obj.order.order_type.replace(/\\/g, '-'),
price : obj.price price : obj.price
} }
}) })
break; break;
} }
}, },
// 选择支付方式 // 选择支付方式
expressSheet(id, type, can, price) { expressSheet(id, type, can, price) {
this.orderId = id this.orderId = id
this.orderType = type this.orderType = type
this.orderPrice = price this.orderPrice = price
uni.showActionSheet({ uni.showActionSheet({
itemList: ['线上支付', '线下支付'], itemList: ['线上支付', '线下支付'],
success: sheetRes => { success: sheetRes => {
if(sheetRes.tapIndex == 0) { if(sheetRes.tapIndex == 0) {
if(can.online) { if(can.online) {
this.$Router.push({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'service'}}) this.$Router.push({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'service'}})
return return
} }
this.voucherState = true this.voucherState = true
} else if (sheetRes.tapIndex == 1) { } else if (sheetRes.tapIndex == 1) {
this.$Router.push({name: 'VoucherOpen', params: {orderId: id, orderType: type, price: price}}) this.$Router.push({name: 'VoucherOpen', params: {orderId: id, orderType: type, price: price}})
} }
}, },
fail: sheetFail => {} fail: sheetFail => {}
}) })
}, },
// 上传凭证 // 上传凭证
clickOpen() { clickOpen() {
this.voucherState = false this.voucherState = false
this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType, price: this.orderPrice}}) this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType, price: this.orderPrice}})
}, },
// 立即咨询 // 立即咨询
seekClick(entrustId) { seekClick(entrustId) {
// 判断是否认证 // 判断是否认证
judgeReal().then(res => { judgeReal().then(res => {
if(res.has_sign) { if(res.has_sign) {
if(!res.has_subscribe) { if(!res.has_subscribe) {
// 弹出公众号 // 弹出公众号
this.generalShow = true this.generalShow = true
} else { } else {
// 跳到咨询表单页 // 跳到咨询表单页
this.$Router.push({ this.$Router.push({
name: 'ExpandWrite', name: 'ExpandWrite',
params: { params: {
entrustId entrustId
} }
}) })
} }
return return
} }
// 跳到认证页面 // 跳到认证页面
this.$Router.replace({name: 'sheetIdcard'}) this.$Router.replace({name: 'sheetIdcard'})
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 状态 // 状态
judgeGeneral(){ judgeGeneral(){
// 获取微信授权信息 // 获取微信授权信息
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webview/webCode' url: 'https://web.douhuofalv.com/webview/webCode'
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode' // url: 'https://web.douhuotest.douhuofalv.com/webview/webCode'
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
// 关闭公众号 // 关闭公众号
this.generalShow = false this.generalShow = false
}, },
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
background-color: #121d4c; background-color: #121d4c;
} }
.expandImg, .expandImg,
.expandBttom{ .expandBttom{
width: 100%; width: 100%;
display: block; display: block;
} }
.list { .list {
padding: 0 30rpx 30rpx; padding: 0 30rpx 30rpx;
box-sizing: border-box; box-sizing: border-box;
background-color: #121d4c; background-color: #121d4c;
.list-title { .list-title {
font-size: 36rpx; font-size: 36rpx;
margin-bottom: 40rpx; margin-bottom: 40rpx;
color: #ffffff; color: #ffffff;
.list-title-trim { .list-title-trim {
position: relative; position: relative;
left: 390rpx; left: 390rpx;
bottom: 28rpx; bottom: 28rpx;
background-color: #2f3aae; background-color: #2f3aae;
width: 35%; width: 35%;
height: 4rpx; height: 4rpx;
padding-left: 40rpx; padding-left: 40rpx;
box-sizing: border-box; box-sizing: border-box;
&::after { &::after {
position: absolute; position: absolute;
content: ''; content: '';
left: -50rpx; left: -50rpx;
top: -10rpx; top: -10rpx;
width: 20rpx; width: 20rpx;
height: 20rpx; height: 20rpx;
transform:rotate(45deg); transform:rotate(45deg);
background-color: #2f3aae; background-color: #2f3aae;
} }
} }
.list-title-number { .list-title-number {
font-weight: 600; font-weight: 600;
font-size: 58rpx; font-size: 58rpx;
background-image: -webkit-linear-gradient(top,#ffffff 40%, transparent 70%); background-image: -webkit-linear-gradient(top,#ffffff 40%, transparent 70%);
-webkit-background-clip:text; -webkit-background-clip:text;
-webkit-text-fill-color:transparent; -webkit-text-fill-color:transparent;
text-transform: uppercase; text-transform: uppercase;
} }
.list-title-name { .list-title-name {
font-size: 44rpx; font-size: 44rpx;
margin-top: -20rpx; margin-top: -20rpx;
width: 390rpx; width: 390rpx;
} }
} }
.list-item { .list-item {
position: relative; position: relative;
padding-left: 100rpx; padding-left: 100rpx;
box-sizing: border-box; box-sizing: border-box;
&::after { &::after {
position: absolute; position: absolute;
content: ''; content: '';
left: 10rpx; left: 10rpx;
top: 0; top: 0;
border-left: 4rpx dashed #3b46d6; border-left: 4rpx dashed #3b46d6;
width: 0; width: 0;
height: calc(100% - 64rpx); height: calc(100% - 64rpx);
} }
.list-label { .list-label {
background-image: linear-gradient(to right,#3d48dd, #1f2a6f); background-image: linear-gradient(to right,#3d48dd, #1f2a6f);
padding: 15rpx 40rpx 15rpx 90rpx; padding: 15rpx 40rpx 15rpx 90rpx;
box-sizing: border-box; box-sizing: border-box;
border-radius: 80rpx 15rpx 15rpx 80rpx; border-radius: 80rpx 15rpx 15rpx 80rpx;
margin-bottom: 30rpx; margin-bottom: 30rpx;
color: #ffffff; color: #ffffff;
position: relative; position: relative;
&::before { &::before {
position: absolute; position: absolute;
content: ''; content: '';
left: -88rpx; left: -88rpx;
top: calc(50% - 1rpx); top: calc(50% - 1rpx);
border-bottom: 4rpx dashed #3b46d6; border-bottom: 4rpx dashed #3b46d6;
width: 60rpx; width: 60rpx;
height: 0; height: 0;
} }
&::after { &::after {
position: absolute; position: absolute;
content: ''; content: '';
left: 40rpx; left: 40rpx;
top: calc(50% - 9rpx); top: calc(50% - 9rpx);
background-color: #091443; background-color: #091443;
width: 18rpx; width: 18rpx;
height: 18rpx; height: 18rpx;
border-radius: 50%; border-radius: 50%;
} }
.list-label-name { .list-label-name {
margin-bottom: 5rpx; margin-bottom: 5rpx;
} }
.list-label-price { .list-label-price {
line-height: 48rpx; line-height: 48rpx;
} }
.list-label-go { .list-label-go {
position: absolute; position: absolute;
right: 30rpx; right: 30rpx;
top: 35rpx; top: 35rpx;
background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2); background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2);
color: #12053d; color: #12053d;
display: inline-block; display: inline-block;
line-height: 54rpx; line-height: 54rpx;
padding: 0 30rpx; padding: 0 30rpx;
border-radius: 54rpx; border-radius: 54rpx;
font-size: 26rpx; font-size: 26rpx;
font-weight: 600; font-weight: 600;
&.hide{ &.hide{
opacity: .7; opacity: .7;
} }
} }
} }
} }
} }
// 关注 // 关注
.tipsBack { .tipsBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 9; z-index: 9;
background-color: rgba(0, 0, 0, .8); background-color: rgba(0, 0, 0, .8);
} }
.tipsCont { .tipsCont {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
} }
.tipsWhite-top { .tipsWhite-top {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.tipsCont-img { .tipsCont-img {
width: 100%; width: 100%;
} }
.tipsWhite-name { .tipsWhite-name {
text-align: center; text-align: center;
color: #111111; color: #111111;
font-size: 34rpx; font-size: 34rpx;
font-weight: 600; font-weight: 600;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
.tipsWhite-text { .tipsWhite-text {
font-size: 30rpx; font-size: 30rpx;
color: #666666; color: #666666;
line-height: 48rpx; line-height: 48rpx;
} }
.tipsWhite-btn { .tipsWhite-btn {
display: flex; display: flex;
padding: $padding 10rpx; padding: $padding 10rpx;
box-sizing: border-box; box-sizing: border-box;
.tipsWhite-btn-go { .tipsWhite-btn-go {
flex: 2; flex: 2;
color: #fff; color: #fff;
margin: 0 15rpx; margin: 0 15rpx;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
text-align: center; text-align: center;
border: 2rpx solid #F6F6F6; border: 2rpx solid #F6F6F6;
background-color: #007df5; background-color: #007df5;
border-radius: $radius-m; border-radius: $radius-m;
&:first-child { &:first-child {
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
} }
} }
} }
// 打款凭证弹出 // 打款凭证弹出
.voucherBack { .voucherBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 99; z-index: 99;
background-color: rgba(0, 0, 0, .6); background-color: rgba(0, 0, 0, .6);
display: none; display: none;
&.active { &.active {
display: block; display: block;
} }
} }
.voucherPop { .voucherPop {
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 100; z-index: 100;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
display: none; display: none;
&.active { &.active {
display: -webkit-box; display: -webkit-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
position: relative; position: relative;
.voucherPop-img { .voucherPop-img {
position: absolute !important; position: absolute !important;
top: -80rpx; top: -80rpx;
right: calc(50% - 100rpx); right: calc(50% - 100rpx);
width: 200rpx; width: 200rpx;
} }
.voucherPop-title { .voucherPop-title {
box-sizing: border-box; box-sizing: border-box;
padding: 50rpx 70rpx; padding: 50rpx 70rpx;
margin-top: 100rpx; margin-top: 100rpx;
text-align: center; text-align: center;
.voucherPop-name { .voucherPop-name {
font-weight: 600; font-weight: 600;
font-size: 38rpx; font-size: 38rpx;
} }
.voucherPop-text { .voucherPop-text {
padding: 30rpx 0 35rpx; padding: 30rpx 0 35rpx;
line-height: 44rpx; line-height: 44rpx;
} }
.voucherPop-btn { .voucherPop-btn {
display: flex; display: flex;
.voucherPop-go { .voucherPop-go {
flex: 2; flex: 2;
text-align: center; text-align: center;
border: 2rpx solid #da2b56; border: 2rpx solid #da2b56;
color: #da2b56; color: #da2b56;
margin: 0 15rpx; margin: 0 15rpx;
line-height: 74rpx; line-height: 74rpx;
border-radius: 10rpx; border-radius: 10rpx;
background-color: #ffffff; background-color: #ffffff;
&.voucherPop-up { &.voucherPop-up {
background-color: #da2b56; background-color: #da2b56;
color: #ffffff; color: #ffffff;
} }
} }
} }
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
<template> <template>
<view class="content"> <view class="content">
<view id="poster" class="poster"> <view id="poster" :class="['poster', {'vip_bg': seekData.is_vip}]">
<view class="top"> <view class="top">
<view class="top-cont"> <view class="top-cont">
<image class="top-cont-img" src="https://cdn.douhuofalv.com/images/2023/04/24/a45643fc33ca42b7a430aee573a93da4.png" mode="widthFix"></image> <image class="top-cont-img" src="https://cdn.douhuofalv.com/images/2023/04/24/a45643fc33ca42b7a430aee573a93da4.png" mode="widthFix"></image>
@@ -13,6 +13,9 @@
<view class="confirm-white"> <view class="confirm-white">
<view class="confirm-top">订单号 {{seekData.order_no}}</view> <view class="confirm-top">订单号 {{seekData.order_no}}</view>
<view class="confirm-list"> <view class="confirm-list">
<view class="confirm-item" style="color: #CD7F32; font-weight: bold;" v-if="seekData.is_vip">
<view class="confirm-item-label">VIP订单</view>
</view>
<view class="confirm-item" v-for="(item, index) in seekData.params"> <view class="confirm-item" v-for="(item, index) in seekData.params">
<view class="confirm-item-label">{{item.title}}</view> <view class="confirm-item-label">{{item.title}}</view>
<view class="confirm-item-text" v-if="item.key == 'address'">{{item.value_text.province_name}}{{item.value_text.city}}</view> <view class="confirm-item-text" v-if="item.key == 'address'">{{item.value_text.province_name}}{{item.value_text.city}}</view>
@@ -115,10 +118,16 @@
height: 100%; height: 100%;
overflow-y: scroll; overflow-y: scroll;
position: fixed; position: fixed;
&.vip_bg{
background: linear-gradient(to bottom,#bf9960, #f9cd9e);
}
} }
.poster { .poster {
background-image: linear-gradient(to bottom,#041f79, #111e4b); background-image: linear-gradient(to bottom,#041f79, #111e4b);
&.vip_bg{
background: linear-gradient(to bottom,#582700, #f9cd9e);
}
} }
.top { .top {

View File

@@ -61,7 +61,7 @@
<!-- web.douhuotest.douhuofalv dev=0是线上 dev=1是线下 --> <!-- web.douhuotest.douhuofalv dev=0是线上 dev=1是线下 -->
<wx-open-launch-weapp <wx-open-launch-weapp
username="gh_918c81628d6f" username="gh_918c81628d6f"
:path="'pages/pay/pay?type=h5&dev=0&trade_id=' + tradeId + '&token=' + token" :path="'pages/pay/pay?type=h5&dev=1&trade_id=' + tradeId + '&token=' + token"
> >
<script type="text/wxtag-template"> <script type="text/wxtag-template">
<style> <style>
@@ -116,7 +116,7 @@
const jweixin = require('jweixin-module'); const jweixin = require('jweixin-module');
import { Apply, Wechat, authFollow } from '@/apis/interfaces/index' import { Apply, Wechat, authFollow } from '@/apis/interfaces/index'
import { ums, umsState } from '@/apis/interfaces/pay' import { ums, umsState } from '@/apis/interfaces/pay'
import { servicePay, serviceUms, serviceDg, expandPay, expandUms, expandDg, entrustPay, entrustUms, entrustDg, synDiffPay, synDiffUms, synDiffDg } from '@/apis/interfaces/pay' import { servicePay, serviceUms, serviceDg, expandPay, expandUms, expandDg, entrustPay, entrustUms, entrustDg, synDiffPay, synDiffUms, synDiffDg, payWechat, payUms, payDg } from '@/apis/interfaces/pay'
export default { export default {
data() { data() {
return { return {
@@ -133,7 +133,7 @@
payForm : '', // 支付类型 payForm : '', // 支付类型
} }
}, },
onShow() { onShow() {
this.token = this.$store.getters.getToken this.token = this.$store.getters.getToken
this.payPrice = this.$Route.query.price this.payPrice = this.$Route.query.price
this.payForm = this.$Route.query.payForm this.payForm = this.$Route.query.payForm
@@ -174,6 +174,8 @@
apiUrl = expandDg apiUrl = expandDg
} else if (this.payForm == 'entrust') { } else if (this.payForm == 'entrust') {
apiUrl = entrustDg apiUrl = entrustDg
} else if (this.payForm == 'synthesize') {
apiUrl = payDg
} }
NewUrl = apiUrl NewUrl = apiUrl
} }
@@ -213,6 +215,8 @@
apiUrl = serviceUms apiUrl = serviceUms
} else if (this.payForm == 'expand') { } else if (this.payForm == 'expand') {
apiUrl = expandUms apiUrl = expandUms
} else if (this.payForm == 'synthesize') {
apiUrl = payUms
} else { } else {
apiUrl = entrustUms apiUrl = entrustUms
} }
@@ -265,6 +269,8 @@
apiUrl = servicePay apiUrl = servicePay
} else if (this.payForm == 'expand') { } else if (this.payForm == 'expand') {
apiUrl = expandPay apiUrl = expandPay
} else if (this.payForm == 'synthesize') {
apiUrl = payWechat
} else { } else {
apiUrl = entrustPay apiUrl = entrustPay
} }
@@ -307,6 +313,9 @@
} else if (this.payForm == 'expand') { } else if (this.payForm == 'expand') {
// 跳到拓展单 // 跳到拓展单
this.$Router.replace({name: 'ExpandOrder'}) this.$Router.replace({name: 'ExpandOrder'})
} else if (this.payForm == 'synthesize') {
// 个人中心
this.$Router.replace({name: 'User'})
} else { } else {
// 跳到委托单 // 跳到委托单
this.$Router.replace({name: 'EntrustOrder'}) this.$Router.replace({name: 'EntrustOrder'})
@@ -329,6 +338,11 @@
setTimeout(()=>{ setTimeout(()=>{
this.$Router.replace({name: 'ExpandOrder'}) this.$Router.replace({name: 'ExpandOrder'})
},1000) },1000)
} else if (this.payForm == 'synthesize') {
// 个人中心
setTimeout(()=>{
this.$Router.replace({name: 'User'})
},1000)
} else { } else {
// 跳到委托单 // 跳到委托单
setTimeout(()=>{ setTimeout(()=>{
@@ -350,7 +364,8 @@
// 获取微信授权信息-获取oppid // 获取微信授权信息-获取oppid
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price url: 'https://web.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price
// url: 'https://web.douhuotest.douhuofalv.com/webWechat/index?id=' + this.orderId + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price // url: 'https://web.douhuotest.douhuofalv.com/webWechat/index?id=' + this.orderId + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price
// url: 'http://web.douhuo.demos.uzchain.tech/webWechat/index?id=' + this.orderId + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price 最新
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
@@ -370,6 +385,9 @@
} else if (this.payForm == 'expand') { } else if (this.payForm == 'expand') {
// 跳到拓展单 // 跳到拓展单
this.$Router.replace({name: 'ExpandOrder'}) this.$Router.replace({name: 'ExpandOrder'})
} else if (this.payForm == 'synthesize') {
// 个人中心
this.$Router.replace({name: 'User'})
} else { } else {
// 跳到委托单 // 跳到委托单
this.$Router.replace({name: 'EntrustOrder'}) this.$Router.replace({name: 'EntrustOrder'})

View File

@@ -1,416 +1,425 @@
<template> <template>
<view class="content"> <view class="content">
<view class="top"> <view class="top">
<view class="top-cont"> <view class="top-cont">
<view class="top-cont-name">个人法律咨询</view> <view class="top-cont-name">个人法律咨询</view>
<view class="top-cont-text">请仔细填写以下信息</view> <view class="top-cont-text">请仔细填写以下信息</view>
</view> </view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image> <image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view> </view>
<view class="idcardBorder"> <view class="idcardBorder">
<!-- 表单部分 --> <!-- 表单部分 -->
<view class="idcardAdd-block"> <view class="idcardAdd-block">
<block v-for="(item, keyIndex) in paramsArr" :key="keyIndex"> <block v-for="(item, keyIndex) in paramsArr" :key="keyIndex">
<block v-if="item.pre_key == null || isShow(item)"> <block v-if="item.pre_key == null || isShow(item)">
<view class="idcardAdd-block-name"> <view class="idcardAdd-block-name">
<view class="idcardAdd-block-see"> <view class="idcardAdd-block-see">
<text v-if="item.is_required == 1">*</text>{{item.title}} <text v-if="item.is_required == 1">*</text>{{item.title}}
</view> </view>
</view> </view>
<!-- 单输入框 --> <!-- 单输入框 -->
<view class="idcardAdd-block-write" v-if="item.type === 'price' || item.type === 'number' || item.type === 'text' || item.type === 'password' || item.type === 'mobile' || item.type === 'day'"> <view class="idcardAdd-block-write" v-if="item.type === 'price' || item.type === 'number' || item.type === 'text' || item.type === 'password' || item.type === 'mobile' || item.type === 'day'">
<block v-if="item.key === 'name' || item.type === 'mobile'"> <block v-if="item.key === 'name' || item.type === 'mobile'">
<input class="idcardAdd-input" v-model="item.value" :placeholder="item.value_text" v-if="item.value_text"> <input class="idcardAdd-input" v-model="item.value" :placeholder="item.value_text" v-if="item.value_text">
<mouldInput v-else class="idcardAdd-input" :blur-value="item.value" :input-type="item.type" :input-title="item.title" :input-key="item.key" @onValue="($event) => {item.value = $event}"></mouldInput> <mouldInput v-else class="idcardAdd-input" :blur-value="item.value" :input-type="item.type" :input-title="item.title" :input-key="item.key" @onValue="($event) => {item.value = $event}"></mouldInput>
</block> </block>
<block v-else> <block v-else>
<mouldInput class="idcardAdd-input" :blur-value="item.value" :input-type="item.type" :input-title="item.title" :input-key="item.key" @onValue="($event) => {item.value = $event}"></mouldInput> <mouldInput class="idcardAdd-input" :blur-value="item.value" :input-type="item.type" :input-title="item.title" :input-key="item.key" @onValue="($event) => {item.value = $event}"></mouldInput>
</block> </block>
</view> </view>
<!-- 下拉框 --> <!-- 下拉框 -->
<view class="idcardAdd-block-write" v-if="item.type === 'select'"> <view class="idcardAdd-block-write" v-if="item.type === 'select'">
<picker class="idcardAdd-picker" :range="item.options" :value="item.value" @change="item.value = $event.detail.value"> <picker class="idcardAdd-picker" :range="item.options" :value="item.value" @change="item.value = $event.detail.value">
<view class="nowrap"> <view class="nowrap">
<!-- {{item.options[item.value]}} --> <!-- {{item.options[item.value]}} -->
{{item.options[item.value]}} {{item.options[item.value]}}
</view> </view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image> <image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker> </picker>
</view> </view>
<!-- 多选 --> <!-- 多选 -->
<view class="idcardAdd-aline" v-if="item.type === 'checkbox'"> <view class="idcardAdd-aline" v-if="item.type === 'checkbox'">
<checkbox-group @change="item.value = $event.detail.value"> <checkbox-group @change="item.value = $event.detail.value">
<label class="checkbox-item" v-for="(checkboxItem, checkboxIndex) in item.options"> <label class="checkbox-item" v-for="(checkboxItem, checkboxIndex) in item.options">
<checkbox class="checkbox-input" :value="checkboxIndex" color="#446EFE"></checkbox>{{checkboxItem}} <checkbox class="checkbox-input" :value="checkboxIndex" color="#446EFE"></checkbox>{{checkboxItem}}
</label> </label>
</checkbox-group> </checkbox-group>
</view> </view>
<!-- 单选 --> <!-- 单选 -->
<view class="idcardAdd-aline" v-if="item.type === 'radio'"> <view class="idcardAdd-aline" v-if="item.type === 'radio'">
<radio-group @change="item.value = $event.detail.value"> <radio-group @change="item.value = $event.detail.value">
<label class="idcardAdd-aline-write" v-for="(radioItem, radioIndex) in item.options" :key="radioIndex"> <label class="idcardAdd-aline-write" v-for="(radioItem, radioIndex) in item.options" :key="radioIndex">
<radio :value="radioIndex" color="#446EFE" style="transform:scale(.65)" :checked="item.value === radioIndex" /><text>{{radioItem}}</text> <radio :value="radioIndex" color="#446EFE" style="transform:scale(.65)" :checked="item.value === radioIndex" /><text>{{radioItem}}</text>
</label> </label>
</radio-group> </radio-group>
</view> </view>
<!-- 描述 --> <!-- 描述 -->
<view class="idcardAdd-depict-textarea" v-if="item.type === 'textarea'"> <view class="idcardAdd-depict-textarea" v-if="item.type === 'textarea'">
<textarea maxlength="500" class="textarea" :placeholder="'请输入' + item.title" v-model="item.value"></textarea> <textarea maxlength="500" class="textarea" :placeholder="'请输入' + item.title" v-model="item.value"></textarea>
<text>500字以内</text> <text>500字以内</text>
</view> </view>
<!-- 被告所在地 --> <!-- 被告所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'defendant_address'"> <block v-if="item.type === 'pro_city' && item.key === 'defendant_address'">
<view class="idcardAdd-block-write"> <view class="idcardAdd-block-write">
<uni-data-picker <uni-data-picker
:localdata="cityPicker" :localdata="cityPicker"
:border="false" :border="false"
split="-" split="-"
placeholder="选择城市" placeholder="选择城市"
@change="defendantPicker" @change="defendantPicker"
></uni-data-picker> ></uni-data-picker>
</view> </view>
</block> </block>
<!-- 目前所在地 --> <!-- 目前所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'address'"> <block v-if="item.type === 'pro_city' && item.key === 'address'">
<view class="idcardAdd-block-write"> <view class="idcardAdd-block-write">
<uni-data-picker <uni-data-picker
:localdata="cityPicker" :localdata="cityPicker"
:border="false" :border="false"
split="-" split="-"
placeholder="选择城市" placeholder="选择城市"
@change="addressPicker" @change="addressPicker"
></uni-data-picker> ></uni-data-picker>
</view> </view>
</block> </block>
</block> </block>
</block> </block>
</view> </view>
</view> </view>
<view class="idcardBtn"> <view class="idcardBtn">
<button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button> <button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { synthDet, synthPost } from '@/apis/interfaces/synthesis' import { synthDet, synthPost } from '@/apis/interfaces/synthesis'
import { createCity } from '@/apis/interfaces/user' import { createCity } from '@/apis/interfaces/user'
import mouldInput from '@/components/mould-input.vue' import mouldInput from '@/components/mould-input.vue'
export default { export default {
components: { components: {
mouldInput mouldInput
}, },
data() { data() {
return { return {
paramsArr : [], // 信息 paramsArr : [], // 信息
cityPicker : [], // 地址 cityPicker : [], // 地址
// 目前所在地 // 目前所在地
address : {}, address : {},
disabled : false disabled : false
} }
}, },
created() { created() {
uni.showLoading({ uni.showLoading({
title: '加载中...', title: '加载中...',
mask : true mask : true
}) })
// 获取综法咨询-详情 // 获取综法咨询-详情
this.getBusiness(); this.getBusiness();
// 省市区 // 省市区
createCity().then(res => { createCity().then(res => {
this.cityPicker = res; this.cityPicker = res;
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
computed: { computed: {
isShow(){ isShow(){
return (item) => { return (item) => {
if(item.pre_key != null){ if(item.pre_key != null){
let index = this.paramsArr.findIndex(val => val.key == item.pre_key) let index = this.paramsArr.findIndex(val => val.key == item.pre_key)
return item.pre_value == this.paramsArr[index].value return item.pre_value == this.paramsArr[index].value
} }
return false return false
} }
} }
}, },
methods: { methods: {
// 综法咨询-详情 // 综法咨询-详情
getBusiness(){ getBusiness(){
synthDet(this.$Route.query.synthesisId).then(res => { synthDet(this.$Route.query.synthesisId).then(res => {
let froms = res.synthesis.params let froms = res.synthesis.params
froms.map(val => { froms.map(val => {
if(val.type === 'checkbox'){ if(val.type === 'checkbox'){
val.value = [] val.value = []
}else if(val.type === 'select'){ }else if(val.type === 'select'){
val.value = 0 val.value = 0
}else{ }else{
val.value = "" val.value = ""
} }
}) })
this.paramsArr = froms this.paramsArr = froms
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
// 目前所在地-选择城市 // 目前所在地-选择城市
addressPicker(e){ addressPicker(e){
let { value } = e.detail let { value } = e.detail
let dataArr = { let dataArr = {
province_id: value[0].value, province_id: value[0].value,
city_id: value[1].value city_id: value[1].value
} }
this.address = dataArr this.address = dataArr
}, },
// 提交订单数据 // 提交订单数据
onSubmit(){ onSubmit(){
uni.showLoading({ uni.showLoading({
title: '提交中...', title: '提交中...',
mask : true mask : true
}) })
let subData = {}; let subData = {};
let dataArr = [] let dataArr = []
for(let val of this.paramsArr){ for(let val of this.paramsArr){
if(val.type === 'pro_city'){ if(val.type === 'pro_city'){
subData[val.key] = this.address subData[val.key] = this.address
}else{ }else{
subData[val.key] = val.value subData[val.key] = val.value
} }
} }
for(let key in subData){ for(let key in subData){
dataArr.push({ dataArr.push({
key, key,
value: subData[key] value: subData[key]
}) })
} }
synthPost(this.$Route.query.synthesisId, { synthPost(this.$Route.query.synthesisId, {
data: dataArr, data: dataArr,
type: 'self', type: 'self',
channel: 'h5', channel: 'h5',
user_id: '' user_id: ''
}).then(res => { }).then(res => {
this.disabled = true this.disabled = true
uni.showToast({ uni.showToast({
title: '提交成功', title: '提交成功',
icon: "none" icon: "none"
}) })
setTimeout(()=>{
this.$Router.replace({name: 'FeeConfirm', params: {synthesisId: res.synthesis_order_id}}) // 若价格大于0,要去支付
},3000) let number = Number(res.price)
}).catch( err => { if(number > 0) {
uni.showToast({ this.$Router.replace({name: 'Pay', params: {orderId: res.order_id, orderType: res.order_type}})
title: err.message, return
icon: "none" }
})
}) // 否则直接跳转详情
}, setTimeout(()=>{
} this.$Router.replace({name: 'FeeConfirm', params: {synthesisId: res.synthesis_order_id}})
} },3000)
</script> }).catch( err => {
uni.showToast({
<style lang="scss" scoped> title: err.message,
.content { icon: "none"
background-color: #111e4b; })
width: 100vw; })
height: 100%; },
overflow-y: scroll; }
position: fixed; }
} </script>
.top { <style lang="scss" scoped>
position: relative; .content {
height: 180rpx; background-color: #111e4b;
.top-img { width: 100vw;
position: absolute; height: 100%;
right: 0; overflow-y: scroll;
top: 0; position: fixed;
width: 30%; }
}
.top-cont { .top {
position: absolute; position: relative;
left: 0; height: 180rpx;
top: 0; .top-img {
width: 100%; position: absolute;
padding: 40rpx 30rpx; right: 0;
box-sizing: border-box; top: 0;
.top-cont-name { width: 30%;
font-weight: 600; }
font-size: 44rpx; .top-cont {
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%); position: absolute;
-webkit-background-clip:text; left: 0;
-webkit-text-fill-color:transparent; top: 0;
margin-bottom: 10rpx; width: 100%;
} padding: 40rpx 30rpx;
.top-cont-text { box-sizing: border-box;
font-size: 34rpx; .top-cont-name {
color: #ffffff; font-weight: 600;
} font-size: 44rpx;
} background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
} -webkit-background-clip:text;
-webkit-text-fill-color:transparent;
.idcardBorder { margin-bottom: 10rpx;
padding: 30rpx; }
box-sizing: border-box; .top-cont-text {
} font-size: 34rpx;
color: #ffffff;
.idcardAdd-block { }
padding: $padding + 20 $padding; }
box-sizing: border-box; }
background-color: #ffffff;
border-radius: $radius; .idcardBorder {
position: relative; padding: 30rpx;
} box-sizing: border-box;
}
.idcardAdd-depict-textarea {
background-color: #f7faff; .idcardAdd-block {
line-height: 90rpx; padding: $padding + 20 $padding;
border-radius: $radius-sm; box-sizing: border-box;
padding: 0 30rpx; background-color: #ffffff;
box-sizing: border-box; border-radius: $radius;
position: relative; position: relative;
width: 100%; }
margin-bottom: 40rpx;
.textarea { .idcardAdd-depict-textarea {
width: 100%; background-color: #f7faff;
padding: $padding 0; line-height: 90rpx;
box-sizing: border-box; border-radius: $radius-sm;
} padding: 0 30rpx;
text { box-sizing: border-box;
width: 100%; position: relative;
text-align: right; width: 100%;
font-size: 28rpx; margin-bottom: 40rpx;
color: #999999; .textarea {
display: block; width: 100%;
} padding: $padding 0;
} box-sizing: border-box;
}
.idcardAdd-block-write { text {
background-color: #f7faff; width: 100%;
height: 90rpx; text-align: right;
line-height: 90rpx; font-size: 28rpx;
border-radius: $radius-sm; color: #999999;
padding: 0 30rpx; display: block;
box-sizing: border-box; }
position: relative; }
display: flex;
width: 100%; .idcardAdd-block-write {
margin-bottom: 40rpx; background-color: #f7faff;
&:last-child { height: 90rpx;
margin-bottom: 0; line-height: 90rpx;
} border-radius: $radius-sm;
.idcardAdd-input { padding: 0 30rpx;
width: 100%; box-sizing: border-box;
height: 100%; position: relative;
display: flex; display: flex;
border: none; width: 100%;
background-color: transparent; margin-bottom: 40rpx;
font-size: 30rpx; &:last-child {
} margin-bottom: 0;
} }
.idcardAdd-input {
.idcardAdd-picker { width: 100%;
position: relative; height: 100%;
width: 100%; display: flex;
} border: none;
background-color: transparent;
.idcardAdd-picke-image { font-size: 30rpx;
width: 24rpx; }
height: 24rpx; }
position: absolute;
top: $margin; .idcardAdd-picker {
right: $margin; position: relative;
} width: 100%;
}
.idcardAdd-block-name {
margin-bottom: $margin; .idcardAdd-picke-image {
display: flex; width: 24rpx;
.idcardAdd-block-see { height: 24rpx;
color: $text-color; position: absolute;
margin-right: $margin; top: $margin;
font-size: 30rpx; right: $margin;
text { }
color: $mian-color;
padding-right: 10rpx; .idcardAdd-block-name {
} margin-bottom: $margin;
} display: flex;
} .idcardAdd-block-see {
color: $text-color;
// checkbox margin-right: $margin;
.checkbox-item{ font-size: 30rpx;
display: inline-block; text {
margin-right: 20rpx; color: $mian-color;
color: #999999; padding-right: 10rpx;
line-height: 70rpx; }
&:last-child { }
margin-right: 0; }
}
.checkbox-input{ // checkbox
transform:scale(0.6); .checkbox-item{
} display: inline-block;
} margin-right: 20rpx;
color: #999999;
.idcardAdd-aline { line-height: 70rpx;
position: relative; &:last-child {
display: flex; margin-right: 0;
width: 100%; }
margin-bottom: 40rpx; .checkbox-input{
.idcardAdd-aline-write { transform:scale(0.6);
margin-right: 30rpx; }
color: #999999; }
}
} .idcardAdd-aline {
position: relative;
// 按钮 display: flex;
.idcardBtn { width: 100%;
background-color: #111e4b; margin-bottom: 40rpx;
width: 100%; .idcardAdd-aline-write {
padding: 20rpx 60rpx 140rpx; margin-right: 30rpx;
box-sizing: border-box; color: #999999;
display: flex; }
.idcardBtn-go { }
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e); // 按钮
color: #582700; .idcardBtn {
font-weight: 600; background-color: #111e4b;
font-size: 36rpx; width: 100%;
border-radius: $radius * 3; padding: 20rpx 60rpx 140rpx;
height: 94rpx; box-sizing: border-box;
line-height: 94rpx; display: flex;
box-shadow: 0 6rpx 10rpx rgba(0, 0, 0, .5); .idcardBtn-go {
text-align: center; width: 100%;
&[disabled] { background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
background-color: #f9f9f9; color: #582700;
border-color: #e2e2e2; font-weight: 600;
color: #959595; font-size: 36rpx;
} border-radius: $radius * 3;
&::after { height: 94rpx;
display: none; line-height: 94rpx;
} box-shadow: 0 6rpx 10rpx rgba(0, 0, 0, .5);
} text-align: center;
} &[disabled] {
background-color: #f9f9f9;
border-color: #e2e2e2;
color: #959595;
}
&::after {
display: none;
}
}
}
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,226 +1,230 @@
<template> <template>
<view class="content"> <view class="content">
<view class="list" v-if="yearArr.length > 0"> <view class="list" v-if="yearArr.length > 0">
<view class="listItem" v-for="(item, index) in yearArr" :key="index"> <view class="listItem" v-for="(item, index) in yearArr" :key="index">
<view class="listItem-no"> <view class="listItem-no">
订单号{{item.order_no}} 订单号{{item.order_no}}
</view> </view>
<view class="listItem-cont"> <view class="listItem-cont">
<view class="listItem-cont-label"> <view class="listItem-cont-label">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
订单类型 订单类型
</view> </view>
<view class="listItem-cont-text listItem-cont-status"> <view class="listItem-cont-text listItem-cont-status">
{{item.synthesis.title}} {{item.synthesis.title}}
</view> </view>
</view> </view>
<view class="listItem-cont-label"> <view class="listItem-cont-label">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
业务联系人 业务联系人
</view> </view>
<view class="listItem-cont-text listItem-cont-price"> <view class="listItem-cont-text listItem-cont-price">
{{item.user.parent.nickname}} {{item.user.parent.nickname}}
</view> </view>
</view> </view>
<view class="listItem-cont-label" v-if="item.lawyer"> <view class="listItem-cont-label" v-if="item.lawyer">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
所属律师 所属律师
</view> </view>
<view class="listItem-cont-text listItem-cont-price"> <view class="listItem-cont-text listItem-cont-price">
{{item.lawyer.name}} {{item.lawyer.name}}
</view> </view>
</view> </view>
<!-- <view class="listItem-cont-label" v-if="item.lawyer"> <!-- <view class="listItem-cont-label" v-if="item.lawyer">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
律师电话 律师电话
</view> </view>
<view class="listItem-cont-text listItem-cont-price"> <view class="listItem-cont-text listItem-cont-price">
{{item.lawyer.username}} {{item.lawyer.username}}
</view> </view>
</view> --> </view> -->
</view> </view>
<view class="listItem-labor"> <view class="listItem-labor">
<view class="listItem-labor-time"> <view class="listItem-labor-time">
{{item.created_at}} {{item.created_at}}
</view> </view>
<view class="listItem-labor-btn"> <view class="listItem-labor-btn">
<view @click="$Router.push({name: 'FeeConfirm', params: {synthesisId: item.synthesis_order_id}})" class="listItem-labor-go yellow"> <view @click="$Router.push({name: 'Pay', params: {orderId: item.order_id, orderType: item.order_type}})" class="listItem-labor-go yellow" v-if="item.can.pay">
查看详情 去支付
</view> </view>
</view>
</view> <view @click="$Router.push({name: 'FeeConfirm', params: {synthesisId: item.synthesis_order_id}})" class="listItem-labor-go yellow" v-if="item.can.look">
</view> 查看详情
</view> </view>
</view>
<view class="pack-center pages-hint" v-else> </view>
<image src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/7ad417d0c215db601b8e1bead05c3a5e.png"></image> </view>
<view>暂无订单</view> </view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/7ad417d0c215db601b8e1bead05c3a5e.png"></image>
<view>暂无订单</view>
</view>
</view> </view>
</template> </template>
<script> <script>
import { seekOrder } from '@/apis/interfaces/synthesis' import { seekOrder } from '@/apis/interfaces/synthesis'
export default { export default {
data() { data() {
return { return {
yearStatus : 0, // 0 未付款 1 2 yearStatus : 0, // 0 未付款 1 2
yearArr : [], // 咨询单列表 yearArr : [], // 咨询单列表
page : {}, // 分页信息 page : {}, // 分页信息
lodingStats : false, // 加载状态 lodingStats : false, // 加载状态
} }
}, },
created() { created() {
// 获取-咨询单-列表 // 获取-咨询单-列表
this.yearServe(); this.yearServe();
}, },
methods: { methods: {
// 咨询单-列表 // 咨询单-列表
yearServe(page){ // status : this.yearStatus,
seekOrder({ yearServe(page){
status : this.yearStatus, seekOrder({
page : page || 1 page : page || 1
}).then(res => { }).then(res => {
let esArr = res.data let esArr = res.data
let list = this.yearArr, let list = this.yearArr,
newData = [] newData = []
if(page == 1 || page == undefined) list = [] if(page == 1 || page == undefined) list = []
newData = list.concat(esArr) newData = list.concat(esArr)
this.yearArr = newData this.yearArr = newData
this.page = res.page this.page = res.page
this.lodingStats = false this.lodingStats = false
uni.stopPullDownRefresh() uni.stopPullDownRefresh()
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
// 状态选择 // 状态选择
stateClick(state) { stateClick(state) {
this.yearStatus = state this.yearStatus = state
// 获取-咨询单列表 // 获取-咨询单列表
this.yearServe(); this.yearServe();
}, },
// 订单支付 // 订单支付
canClick(e) { canClick(e) {
// pay_status == 1可支付 // pay_status == 1可支付
if(e.can.pay_status == 1) { if(e.can.pay_status == 1) {
// pay_way为1的时线上支付, 为2时线下支付 // pay_way为1的时线上支付, 为2时线下支付
if(e.service.pay_way == 1) { if(e.service.pay_way == 1) {
this.$Router.push({name: 'FeePay', params: {orderId: e.service_order_id}}) this.$Router.push({name: 'FeePay', params: {orderId: e.service_order_id}})
} }
} }
}, },
// 选择支付方式 // 选择支付方式
expressSheet(item) { expressSheet(item) {
uni.showActionSheet({ uni.showActionSheet({
itemList: ['微信支付', '打款凭证'], itemList: ['微信支付', '打款凭证'],
success: sheetRes => { success: sheetRes => {
console.log(sheetRes) console.log(sheetRes)
}, },
fail: sheetFail => {} fail: sheetFail => {}
}) })
}, },
// 页面相关事件处理函数--监听用户下拉动作 // 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() { onPullDownRefresh() {
// 获取-咨询单-列表 // 获取-咨询单-列表
this.yearServe(); this.yearServe();
}, },
// 上拉加载 // 上拉加载
onReachBottom(){ onReachBottom(){
this.lodingStats = true this.lodingStats = true
let pageNumber = this.page.current let pageNumber = this.page.current
if(this.page.has_more){ if(this.page.has_more){
pageNumber++ pageNumber++
// 获取-咨询单-列表 // 获取-咨询单-列表
this.yearServe(pageNumber); this.yearServe(pageNumber);
} }
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
background-color: #f7f9fa; background-color: #f7f9fa;
overflow-y: scroll; overflow-y: scroll;
height: 100%; height: 100%;
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
.list { .list {
padding: 30rpx; padding: 30rpx;
box-sizing: border-box; box-sizing: border-box;
.listItem { .listItem {
background-color: #ffffff; background-color: #ffffff;
border-radius: 10rpx; border-radius: 10rpx;
margin-bottom: 30rpx; margin-bottom: 30rpx;
.listItem-no { .listItem-no {
line-height: 90rpx; line-height: 90rpx;
padding: 0 30rpx; padding: 0 30rpx;
box-sizing: border-box; box-sizing: border-box;
border-bottom: 2rpx solid #eeeeee; border-bottom: 2rpx solid #eeeeee;
} }
.listItem-cont { .listItem-cont {
padding: 15rpx 30rpx; padding: 15rpx 30rpx;
box-sizing: border-box; box-sizing: border-box;
.listItem-cont-label { .listItem-cont-label {
display: flex; display: flex;
line-height: 60rpx; line-height: 60rpx;
color: #666666; color: #666666;
font-size: 28rpx; font-size: 28rpx;
.listItem-cont-name { .listItem-cont-name {
flex: 1; flex: 1;
} }
.listItem-cont-text { .listItem-cont-text {
color: #000000; color: #000000;
&.listItem-cont-status { &.listItem-cont-status {
color: #da2b56; color: #da2b56;
} }
&.listItem-cont-price { &.listItem-cont-price {
font-weight: 600; font-weight: 600;
} }
} }
} }
} }
.listItem-labor { .listItem-labor {
border-top: 2rpx solid #eeeeee; border-top: 2rpx solid #eeeeee;
line-height: 50rpx; line-height: 50rpx;
padding: 25rpx 30rpx; padding: 25rpx 30rpx;
box-sizing: border-box; box-sizing: border-box;
font-size: 26rpx; font-size: 26rpx;
display: flex; display: flex;
.listItem-labor-time { .listItem-labor-time {
flex: 1; flex: 1;
color: #999999; color: #999999;
} }
.listItem-labor-go { .listItem-labor-go {
display: inline-block; display: inline-block;
border: 2rpx solid #da2b56; border: 2rpx solid #da2b56;
color: #da2b56; color: #da2b56;
border-radius: 80rpx; border-radius: 80rpx;
padding: 0 20rpx; padding: 0 20rpx;
&.active { &.active {
border-color: #999999; border-color: #999999;
color: #666666; color: #666666;
} }
&.yellow { &.yellow {
border-color: #ec7647; border-color: #ec7647;
color: #ec7647; color: #ec7647;
} }
} }
} }
} }
} }
</style> </style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,492 +1,492 @@
<template> <template>
<view class="content"> <view class="content">
<view class="orderFixed"> <view class="orderFixed">
<view class="orderTab"> <view class="orderTab">
<view class="orderTab-item" :class="{active : yearType == 1}" @click="tabClick('1')"> <view class="orderTab-item" :class="{active : yearType == 1}" @click="tabClick('1')">
<text>个人年费单</text> <text>个人年费单</text>
</view> </view>
<view class="orderTab-item" :class="{active : yearType == 2}" @click="tabClick('2')"> <view class="orderTab-item" :class="{active : yearType == 2}" @click="tabClick('2')">
<text>企业年费单</text> <text>企业年费单</text>
</view> </view>
</view> </view>
<view class="orderState"> <view class="orderState">
<view class="orderState-item" :class="{active : yearStatus == 0}" @click="stateClick('0')"> <view class="orderState-item" :class="{active : yearStatus == 0}" @click="stateClick('0')">
<text>待支付</text> <text>待支付</text>
</view> </view>
<view class="orderState-item" :class="{active : yearStatus == 1}" @click="stateClick('1')"> <view class="orderState-item" :class="{active : yearStatus == 1}" @click="stateClick('1')">
<text>待签约</text> <text>待签约</text>
</view> </view>
<view class="orderState-item" :class="{active : yearStatus == 2}" @click="stateClick('2')"> <view class="orderState-item" :class="{active : yearStatus == 2}" @click="stateClick('2')">
<text>已签约</text> <text>已签约</text>
</view> </view>
<view class="orderState-item" :class="{active : yearStatus == 4}" @click="stateClick('4')"> <view class="orderState-item" :class="{active : yearStatus == 4}" @click="stateClick('4')">
<text>已退款</text> <text>已退款</text>
</view> </view>
</view> </view>
</view> </view>
<view class="list" v-if="yearArr.length > 0"> <view class="list" v-if="yearArr.length > 0">
<view class="listItem" v-for="(item, index) in yearArr" :key="index"> <view class="listItem" v-for="(item, index) in yearArr" :key="index">
<view class="listItem-no"> <view class="listItem-no">
订单号{{item.order_no}} 订单号{{item.order_no}}
</view> </view>
<view class="listItem-cont"> <view class="listItem-cont">
<view class="listItem-cont-label"> <view class="listItem-cont-label">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
订单状态 订单状态
</view> </view>
<view class="listItem-cont-text listItem-cont-status"> <view class="listItem-cont-text listItem-cont-status">
{{item.status.text}} {{item.status.text}}
</view> </view>
</view> </view>
<view class="listItem-cont-label"> <view class="listItem-cont-label">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
订单金额 订单金额
</view> </view>
<view class="listItem-cont-text listItem-cont-price"> <view class="listItem-cont-text listItem-cont-price">
{{item.total}} {{item.total}}
</view> </view>
</view> </view>
<view class="listItem-cont-label" v-if="item.can.lawyer_status != 0"> <view class="listItem-cont-label" v-if="item.can.lawyer_status != 0">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
律师匹配 律师匹配
</view> </view>
<view class="listItem-cont-text listItem-cont-price"> <view class="listItem-cont-text listItem-cont-price">
<block v-if="item.can.lawyer_status == 1">待匹配律师</block> <block v-if="item.can.lawyer_status == 1">待匹配律师</block>
<block v-else-if="item.can.lawyer_status == 2">已匹配律师</block> <block v-else-if="item.can.lawyer_status == 2">已匹配律师</block>
</view> </view>
</view> </view>
<view class="listItem-cont-label"> <view class="listItem-cont-label">
<view class="listItem-cont-name"> <view class="listItem-cont-name">
下单时间 下单时间
</view> </view>
<view class="listItem-cont-text listItem-cont-price"> <view class="listItem-cont-text listItem-cont-price">
{{item.created_at}} {{item.created_at}}
</view> </view>
</view> </view>
</view> </view>
<view class="listItem-labor"> <view class="listItem-labor">
<view class="listItem-labor-time"> <view class="listItem-labor-time">
<view @click="operateMore(item.order_id)" v-if="item.can.cancel">更多</view> <view @click="operateMore(item.order_id)" v-if="item.can.cancel">更多</view>
</view> </view>
<view class="listItem-labor-btn"> <view class="listItem-labor-btn">
<view v-if="item.can.sign" @click="esignClick(item.order_id, item.order_type)" class="listItem-labor-go"> <view v-if="item.can.sign" @click="esignClick(item.order_id, item.order_type)" class="listItem-labor-go">
去签约 去签约
</view> </view>
<view v-if="item.can.pay_status == 1" @click="expressSheet(item.service_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go"> <view v-if="item.can.pay_status == 1" @click="expressSheet(item.service_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go">
去支付 去支付
</view> </view>
<view class="listItem-labor-go active" v-else-if="item.can.pay_status == 2">等待审核</view> <view class="listItem-labor-go active" v-else-if="item.can.pay_status == 2">等待审核</view>
<view class="listItem-labor-go" v-else-if="item.can.pay_status == 3" @click="$Router.push({name: 'VoucherOpen', params: {payId: item.offline_pays.offline_pay_id, orderId: item.service_order_id, price: item.price, orderType: item.order_type, type: 'edit'}})">审核驳回</view> <view class="listItem-labor-go" v-else-if="item.can.pay_status == 3" @click="$Router.push({name: 'VoucherOpen', params: {payId: item.offline_pays.offline_pay_id, orderId: item.service_order_id, price: item.price, orderType: item.order_type, type: 'edit'}})">审核驳回</view>
<view @click="$Router.push({name: 'YearConfirm', params: {servicesId: item.service_order_id}})" class="listItem-labor-go yellow"> <view @click="$Router.push({name: 'YearConfirm', params: {servicesId: item.service_order_id}})" class="listItem-labor-go yellow">
查看详情 查看详情
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="pack-center pages-hint" v-else> <view class="pack-center pages-hint" v-else>
<image src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/7ad417d0c215db601b8e1bead05c3a5e.png"></image> <image src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/7ad417d0c215db601b8e1bead05c3a5e.png"></image>
<view>暂无订单</view> <view>暂无订单</view>
</view> </view>
<!-- 打款凭证弹出 --> <!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view> <view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}"> <view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image> <image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title"> <view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view> <view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view> <view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn"> <view class="voucherPop-btn">
<view class="voucherPop-go" @click="voucherState = false"> <view class="voucherPop-go" @click="voucherState = false">
暂不支付 暂不支付
</view> </view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen"> <view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证 上传凭证
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { yearOrder, esignUrl, yearCancel } from '@/apis/interfaces/synthesis' import { yearOrder, esignUrl, yearCancel } from '@/apis/interfaces/synthesis'
export default { export default {
data() { data() {
return { return {
yearType : 1, // 1 个人 2 企业 yearType : 1, // 1 个人 2 企业
yearStatus : 0, // 0 未付款 1 2 yearStatus : 0, // 0 未付款 1 2
yearArr : [], // 年费咨询单列表 yearArr : [], // 年费咨询单列表
orderId : '', // 订单 ID orderId : '', // 订单 ID
orderType : '', // 订单类型 orderType : '', // 订单类型
orderPrice : '', // 订单金额 orderPrice : '', // 订单金额
page : {}, // 分页信息 page : {}, // 分页信息
lodingStats : false, // 加载状态 lodingStats : false, // 加载状态
voucherState : false, // 上传凭证弹出 voucherState : false, // 上传凭证弹出
} }
}, },
created() { created() {
this.yearType = this.$Route.query.yearType || 1 this.yearType = this.$Route.query.yearType || 1
}, },
onShow() { onShow() {
// 获取-年费咨询单列表 // 获取-年费咨询单列表
this.yearServe(); this.yearServe();
}, },
methods: { methods: {
// 年费咨询单列表 // 年费咨询单列表
yearServe(page){ yearServe(page){
yearOrder({ yearOrder({
type : this.yearType, type : this.yearType,
status : this.yearStatus, status : this.yearStatus,
page: page || 1 page: page || 1
}).then(res => { }).then(res => {
let esArr = res.data let esArr = res.data
let list = this.yearArr, let list = this.yearArr,
newData = [] newData = []
if(page == 1 || page == undefined) list = [] if(page == 1 || page == undefined) list = []
newData = list.concat(esArr) newData = list.concat(esArr)
this.yearArr = newData this.yearArr = newData
this.page = res.page this.page = res.page
this.lodingStats = false this.lodingStats = false
uni.stopPullDownRefresh() uni.stopPullDownRefresh()
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
// 类型选择 // 类型选择
tabClick(type) { tabClick(type) {
this.yearType = type this.yearType = type
// 获取-年费咨询单列表 // 获取-年费咨询单列表
this.yearServe(); this.yearServe();
}, },
// 状态选择 // 状态选择
stateClick(state) { stateClick(state) {
this.yearStatus = state this.yearStatus = state
// 获取-年费咨询单列表 // 获取-年费咨询单列表
this.yearServe(); this.yearServe();
}, },
// 选择支付方式 // 选择支付方式
expressSheet(id, type, can, price) { expressSheet(id, type, can, price) {
this.orderId = id this.orderId = id
this.orderType = type this.orderType = type
this.orderPrice = price this.orderPrice = price
uni.showActionSheet({ uni.showActionSheet({
itemList: ['线上支付', '线下支付'], itemList: ['线上支付', '线下支付'],
success: sheetRes => { success: sheetRes => {
if(sheetRes.tapIndex == 0) { if(sheetRes.tapIndex == 0) {
if(can.online) { if(can.online) {
this.$Router.push({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'service'}}) this.$Router.push({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'service'}})
return return
} }
this.voucherState = true this.voucherState = true
} else if (sheetRes.tapIndex == 1) { } else if (sheetRes.tapIndex == 1) {
this.$Router.push({name: 'VoucherOpen', params: {orderId: id, orderType: type, price: price}}) this.$Router.push({name: 'VoucherOpen', params: {orderId: id, orderType: type, price: price}})
} }
}, },
fail: sheetFail => { fail: sheetFail => {
uni.showToast({ uni.showToast({
title: '取消支付', title: '取消支付',
icon : 'none' icon : 'none'
}) })
} }
}) })
}, },
// 上传凭证 // 上传凭证
clickOpen() { clickOpen() {
this.voucherState = false this.voucherState = false
this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType, price: this.orderPrice}}) this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType, price: this.orderPrice}})
}, },
// 去签约 // 去签约
esignClick(id,type) { esignClick(id,type) {
esignUrl({ esignUrl({
order_id : id, order_id : id,
order_type: type, order_type: type,
redirect_url: "https://web.douhuofalv.com/user/index", redirect_url: "https://web.douhuofalv.com/user/index",
// redirect_url: "https://web.douhuotest.douhuofalv.com/user/index", // redirect_url: "https://web.douhuotest.douhuofalv.com/user/index",
channel : 'h5', channel : 'h5',
app_scheme : '' app_scheme : ''
}).then(res => { }).then(res => {
window.location.href= res.sign_url window.location.href= res.sign_url
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 更多操作 // 更多操作
operateMore(id) { operateMore(id) {
wx.showActionSheet({ wx.showActionSheet({
itemList: ['取消订单'], itemList: ['取消订单'],
success: ()=> { success: ()=> {
wx.showModal({ wx.showModal({
title : '提示', title : '提示',
content : '是否取消订单', content : '是否取消订单',
success : res=> { success : res=> {
if (res.confirm) { if (res.confirm) {
yearCancel(id).then(res => { yearCancel(id).then(res => {
wx.showToast({ wx.showToast({
title:'取消成功', title:'取消成功',
icon:'none' icon:'none'
}) })
// 获取-年费咨询单列表 // 获取-年费咨询单列表
this.yearServe(); this.yearServe();
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
} }
} }
}) })
}, },
fail: err=> {} fail: err=> {}
}) })
}, },
// 页面相关事件处理函数--监听用户下拉动作 // 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() { onPullDownRefresh() {
// 获取-年费咨询单列表 // 获取-年费咨询单列表
this.yearServe(); this.yearServe();
}, },
// 上拉加载 // 上拉加载
onReachBottom(){ onReachBottom(){
this.lodingStats = true this.lodingStats = true
let pageNumber = this.page.current let pageNumber = this.page.current
if(this.page.has_more){ if(this.page.has_more){
pageNumber++ pageNumber++
// 获取-年费咨询单列表 // 获取-年费咨询单列表
this.yearServe(pageNumber); this.yearServe(pageNumber);
} }
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
background-color: #f7f9fa; background-color: #f7f9fa;
overflow-y: scroll; overflow-y: scroll;
height: 100%; height: 100%;
position: absolute; position: absolute;
width: 100%; width: 100%;
} }
.orderFixed { .orderFixed {
position: fixed; position: fixed;
top: 44px; top: 44px;
left: 0; left: 0;
width: 100%; width: 100%;
z-index: 9; z-index: 9;
.orderTab { .orderTab {
height: 90rpx; height: 90rpx;
line-height: 90rpx; line-height: 90rpx;
background-color: white; background-color: white;
display: flex; display: flex;
.orderTab-item { .orderTab-item {
flex: 2; flex: 2;
text-align: center; text-align: center;
position: relative; position: relative;
color: #000000; color: #000000;
&::after { &::after {
position: absolute; position: absolute;
content: ''; content: '';
left: calc(50% - 25rpx); left: calc(50% - 25rpx);
bottom: 0; bottom: 0;
width: 50rpx; width: 50rpx;
height: 8rpx; height: 8rpx;
background-color: #da2b56; background-color: #da2b56;
display: none; display: none;
border-radius: 90rpx; border-radius: 90rpx;
} }
&.active { &.active {
font-weight: 600; font-weight: 600;
} }
&.active::after { &.active::after {
display: block; display: block;
} }
} }
} }
.orderState { .orderState {
display: flex; display: flex;
padding: 30rpx; padding: 30rpx;
box-sizing: border-box; box-sizing: border-box;
background-color: #f7f9fa; background-color: #f7f9fa;
.orderState-item { .orderState-item {
background-color: white; background-color: white;
line-height: 54rpx; line-height: 54rpx;
padding: 0 25rpx; padding: 0 25rpx;
border-radius: 54rpx; border-radius: 54rpx;
font-size: 28rpx; font-size: 28rpx;
margin-right: 30rpx; margin-right: 30rpx;
&.active { &.active {
background-color: #da2b56; background-color: #da2b56;
color: #ffffff; color: #ffffff;
} }
} }
} }
} }
.list { .list {
margin-top: 44px; margin-top: 44px;
padding: 130rpx 30rpx 0; padding: 130rpx 30rpx 0;
box-sizing: border-box; box-sizing: border-box;
.listItem { .listItem {
background-color: #ffffff; background-color: #ffffff;
border-radius: 10rpx; border-radius: 10rpx;
margin-bottom: 30rpx; margin-bottom: 30rpx;
.listItem-no { .listItem-no {
line-height: 90rpx; line-height: 90rpx;
padding: 0 30rpx; padding: 0 30rpx;
box-sizing: border-box; box-sizing: border-box;
border-bottom: 2rpx solid #eeeeee; border-bottom: 2rpx solid #eeeeee;
} }
.listItem-cont { .listItem-cont {
padding: 15rpx 30rpx; padding: 15rpx 30rpx;
box-sizing: border-box; box-sizing: border-box;
.listItem-cont-label { .listItem-cont-label {
display: flex; display: flex;
line-height: 60rpx; line-height: 60rpx;
color: #666666; color: #666666;
font-size: 28rpx; font-size: 28rpx;
.listItem-cont-name { .listItem-cont-name {
flex: 1; flex: 1;
} }
.listItem-cont-text { .listItem-cont-text {
color: #000000; color: #000000;
&.listItem-cont-status { &.listItem-cont-status {
color: #da2b56; color: #da2b56;
} }
&.listItem-cont-price { &.listItem-cont-price {
font-weight: 600; font-weight: 600;
} }
} }
} }
} }
.listItem-labor { .listItem-labor {
border-top: 2rpx solid #eeeeee; border-top: 2rpx solid #eeeeee;
line-height: 50rpx; line-height: 50rpx;
padding: 25rpx 30rpx; padding: 25rpx 30rpx;
box-sizing: border-box; box-sizing: border-box;
font-size: 26rpx; font-size: 26rpx;
display: flex; display: flex;
.listItem-labor-time { .listItem-labor-time {
flex: 1; flex: 1;
color: #999999; color: #999999;
} }
.listItem-labor-go { .listItem-labor-go {
display: inline-block; display: inline-block;
border: 2rpx solid #da2b56; border: 2rpx solid #da2b56;
color: #da2b56; color: #da2b56;
border-radius: 80rpx; border-radius: 80rpx;
padding: 0 20rpx; padding: 0 20rpx;
margin-left: 20rpx; margin-left: 20rpx;
&.active { &.active {
border-color: #dadada; border-color: #dadada;
color: #868686; color: #868686;
} }
&.yellow { &.yellow {
border-color: #ec7647; border-color: #ec7647;
color: #ec7647; color: #ec7647;
} }
} }
} }
} }
} }
// 打款凭证弹出 // 打款凭证弹出
.voucherBack { .voucherBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 99; z-index: 99;
background-color: rgba(0, 0, 0, .6); background-color: rgba(0, 0, 0, .6);
display: none; display: none;
&.active { &.active {
display: block; display: block;
} }
} }
.voucherPop { .voucherPop {
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 100; z-index: 100;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
display: none; display: none;
&.active { &.active {
display: -webkit-box; display: -webkit-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
position: relative; position: relative;
.voucherPop-img { .voucherPop-img {
position: absolute !important; position: absolute !important;
top: -80rpx; top: -80rpx;
right: calc(50% - 100rpx); right: calc(50% - 100rpx);
width: 200rpx; width: 200rpx;
} }
.voucherPop-title { .voucherPop-title {
box-sizing: border-box; box-sizing: border-box;
padding: 50rpx 70rpx; padding: 50rpx 70rpx;
margin-top: 100rpx; margin-top: 100rpx;
text-align: center; text-align: center;
.voucherPop-name { .voucherPop-name {
font-weight: 600; font-weight: 600;
font-size: 38rpx; font-size: 38rpx;
} }
.voucherPop-text { .voucherPop-text {
padding: 30rpx 0 35rpx; padding: 30rpx 0 35rpx;
line-height: 44rpx; line-height: 44rpx;
} }
.voucherPop-btn { .voucherPop-btn {
display: flex; display: flex;
.voucherPop-go { .voucherPop-go {
flex: 2; flex: 2;
text-align: center; text-align: center;
border: 2rpx solid #da2b56; border: 2rpx solid #da2b56;
color: #da2b56; color: #da2b56;
margin: 0 15rpx; margin: 0 15rpx;
line-height: 74rpx; line-height: 74rpx;
border-radius: 10rpx; border-radius: 10rpx;
background-color: #ffffff; background-color: #ffffff;
&.voucherPop-up { &.voucherPop-up {
background-color: #da2b56; background-color: #da2b56;
color: #ffffff; color: #ffffff;
} }
} }
} }
} }
} }
} }
</style> </style>

View File

@@ -14,9 +14,10 @@
{{userData.nickname}} <image v-if="userData.certification" class="userTop-icon" src="@/static/imgs/user_attestation.png"></image> {{userData.nickname}} <image v-if="userData.certification" class="userTop-icon" src="@/static/imgs/user_attestation.png"></image>
</view> </view>
<view class="userTop-identity-tips"> <view class="userTop-identity-tips">
普通用户 <image class="userTop-arrow" src="@/static/imgs/use_arrow.png"></image> {{userData.identity.name}}<image class="userTop-arrow" src="@/static/imgs/use_arrow.png"></image>
</view> </view>
</view> </view>
<view class="user-vip" @click="$Router.push({name: 'vip'})">{{!userData.identity.can_open_vip && !userData.identity.can_renew_vip ? '会员权益': ''}}{{userData.identity.can_open_vip ? '开通会员': ''}}{{userData.identity.can_renew_vip ? '开通会员': ''}}</view>
</view> </view>
<view class="userTop-height" v-else @click="$Router.push({name: 'Login'})"> <view class="userTop-height" v-else @click="$Router.push({name: 'Login'})">
<view class="userTop-head"> <view class="userTop-head">
@@ -30,7 +31,7 @@
</view> </view>
<!-- 临时 style="display: none;" --> <!-- 临时 style="display: none;" -->
<view class="userTop-see" v-if="userLogin"> <view class="userTop-see" v-if="userLogin">
<view class="userTop-label" @click="$Router.push({name: 'sheetIndex'})"> <!-- <view class="userTop-label" @click="$Router.push({name: 'sheetIndex'})">
<view class="userSee-name"> <view class="userSee-name">
协商调解类 协商调解类
</view> </view>
@@ -46,6 +47,31 @@
</view> </view>
</block> </block>
<img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/2823f7c9ed144df424ca8ee6c47b0ff6.png"> <img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/2823f7c9ed144df424ca8ee6c47b0ff6.png">
</view> -->
<view class="userTop-label" @click="$Router.push({name: 'AccountWork'})" style="display: none;">
<view class="userSee-name">
账户管理资讯类
</view>
<view class="userSee-number">
<!-- {{ userData.business_orders_count.all ? userData.business_orders_count.all : '0'}}<text></text> -->
</view>
<view class="userSee-tips">
客户账户管理资讯类订单
</view>
<img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/2823f7c9ed144df424ca8ee6c47b0ff6.png">
</view>
<view class="userTop-label" @click="$Router.push({name: 'DelegationWork'})" style="display: none;">
<view class="userSee-name">
委托管理类
</view>
<view class="userSee-number">
<!-- {{ userData.business_orders_count.all ? userData.business_orders_count.all : '0'}}<text></text> -->
</view>
<view class="userSee-tips">
客户委托管理类订单
</view>
<img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/2823f7c9ed144df424ca8ee6c47b0ff6.png">
</view> </view>
<view class="userTop-label" @click="$Router.push({name: 'synthesisOrder', params: {type: 'legal'}})"> <view class="userTop-label" @click="$Router.push({name: 'synthesisOrder', params: {type: 'legal'}})">
@@ -56,7 +82,8 @@
{{synthesisAll.legal_consulting ? synthesisAll.legal_consulting : '0'}}<text></text> {{synthesisAll.legal_consulting ? synthesisAll.legal_consulting : '0'}}<text></text>
</view> </view>
<view class="userSee-tips"> <view class="userSee-tips">
个人企业法律 <!-- 个人 -->
企业法律
</view> </view>
<img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/84e573c04d3dcb7fa1cccefbde9bf851.png"> <img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/84e573c04d3dcb7fa1cccefbde9bf851.png">
</view> </view>
@@ -72,7 +99,7 @@
</view> </view>
<img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/19/08e5c39f136d84e9754d4ac4d16af181.png"> <img class="userSee-icon" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/19/08e5c39f136d84e9754d4ac4d16af181.png">
</view> </view>
<view class="userTop-label" @click="$Router.push({name: 'EmpowerOrder'})"> <view class="userTop-label" @click="$Router.push({name: 'EmpowerOrder'})" style="display: none;">
<view class="userSee-name"> <view class="userSee-name">
增收赋能类 增收赋能类
</view> </view>
@@ -88,7 +115,7 @@
</view> </view>
</view> </view>
<!-- 临时 style="display: none;" --> <!-- 临时 style="display: none;" -->
<view class="board" v-if="userLogin"> <view class="board" v-if="userLogin" style="display: none;">
<view class="board-title"> <view class="board-title">
数据看板 数据看板
</view> </view>
@@ -109,7 +136,19 @@
<view class="board-number">{{userData.business_orders_count.diff_count}}</view> <view class="board-number">{{userData.business_orders_count.diff_count}}</view>
</view> </view>
</view> </view>
</view> </view>
<view class="block-flex" v-if="userData.salesman" @click="onCallPhone(userData.salesman.username)">
<view class="block-flex-title">业务联系人</view>
<view>{{userData.salesman.nickname || '-'}}</view>
</view>
<view class="block-flex" @click="$Router.push({name: 'Tema'})" v-if="userData.identity.id > 1">
<view class="block-flex-title">我的推荐</view>
<u-icon name="arrow-right"></u-icon>
</view>
<view class="block-flex" @click="qrcodeShow = true">
<view class="block-flex-title">我的邀请码</view>
<u-icon name="arrow-right"></u-icon>
</view>
<view class="tool"> <view class="tool">
<view class="tool-title"> <view class="tool-title">
其他工具 其他工具
@@ -168,23 +207,44 @@
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<!-- 邀请码 -->
<u-popup mode="center" closeable :show="qrcodeShow" @close="qrcodeShow = false">
<view class="qrcode">
<image class="qrcode-bg" src="/static/qrcode_bg.png" mode="widthFix"></image>
<view class="qrcode-content">
<image class="qrcode-src" :src="qrcode.qrcode" mode="aspectFit"></image>
<view class="qrcode-footer">
<view class="qrcode-code">{{qrcode.invite}}</view>
<view class="qrcode-text">邀请码</view>
</view>
</view>
</view>
</u-popup>
</view> </view>
</template> </template>
<script> <script>
import { articleList } from '@/apis/interfaces/index' import { articleList } from '@/apis/interfaces/index'
import { userIndex } from '@/apis/interfaces/user' import { userIndex, userQrcode } from '@/apis/interfaces/user'
import { synthesisCount } from '@/apis/interfaces/synthesis' import { synthesisCount } from '@/apis/interfaces/synthesis'
export default { export default {
data() { data() {
return { return {
userLogin : false, //登录状态 userLogin : false, //登录状态
userData : {}, //用户数据 userData : {
identity: {
can_open_vip : false,
can_renew_vip : false
}
}, //用户数据
synthesisAll : '', // 综法数量 synthesisAll : '', // 综法数量
listArr : [], // 文章列表 listArr : [], // 文章列表
page : {}, // 分页信息 page : {}, // 分页信息
lodingStats : false, // 加载状态 lodingStats : false, // 加载状态
qrcodeShow : false, // 弹出层
qrcode : ''
}; };
}, },
@@ -204,23 +264,29 @@
methods:{ methods:{
// 用户信息 // 用户信息
userInfo() { userInfo() {
userIndex().then(res => { Promise.all([userIndex(), userQrcode()]).then(res => {
this.userData = res this.userData = res[0]
}).catch(err => { this.qrcode = res[1]
uni.showToast({ }).catch(err => {
title: err.message, uni.showToast({
icon: "none" title: err.message,
}) icon: "none"
}) })
})
},
// 拨打电话
onCallPhone(e){
wx.makePhoneCall({
phoneNumber: e,
fail: () => {}
})
}, },
// 综法订单数据数量 // 综法订单数据数量
synthesisInfo() { synthesisInfo() {
synthesisCount({channel: 'self'}).then(res => { synthesisCount({channel: 'self'}).then(res => {
console.log(res)
this.synthesisAll = res this.synthesisAll = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
@@ -255,7 +321,31 @@
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.qrcode{
width: 600rpx;
position: relative;
.qrcode-bg{ width: 100%; vertical-align: top; }
.qrcode-content{
position: absolute;
top: 290rpx;
left: 0;
right: 0;
width: 100%;
text-align: center;
.qrcode-src{ width: 220rpx; height: 220rpx; background: #333; }
.qrcode-footer{ width: 100%; padding-top: 30rpx; text-align: center; }
.qrcode-code{ font-weight: bold; font-size: 34rpx; }
.qrcode-text{ font-size: 28rpx; color: gray; line-height: 30rpx; }
}
}
.block-flex{
display: flex; color: gray; font-size: 32rpx; align-items: center; justify-content: space-between; padding: 20rpx 30rpx; line-height: 60rpx;
&-title{ color: #333; }
}
.userTop { .userTop {
position: relative; position: relative;
width: 100%; width: 100%;
@@ -274,7 +364,10 @@
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
.userTop-height { .userTop-height {
height: 110rpx; height: 110rpx;
display: flex;
align-items: center;
flex-wrap: wrap;
.userTop-head { .userTop-head {
width: 110rpx; width: 110rpx;
height: 110rpx; height: 110rpx;
@@ -291,7 +384,7 @@
} }
} }
.userTop-text { .userTop-text {
width: calc(100% - 150rpx); width: calc(100% - 310rpx);
float: left; float: left;
margin-left: 30rpx; margin-left: 30rpx;
padding-top: $padding - 20; padding-top: $padding - 20;
@@ -328,7 +421,18 @@
margin-left: 4rpx; margin-left: 4rpx;
} }
} }
} }
.user-vip{
background: $mian-color;
color: white;
position: relative;
z-index: 1;
width: 170rpx;
font-size: 28rpx;
line-height: 70rpx;
border-radius: 35rpx;
text-align: center;
}
} }
.userTop-see { .userTop-see {
margin: 0 -10rpx; margin: 0 -10rpx;

View File

@@ -1,432 +1,432 @@
<template> <template>
<view class="content"> <view class="content">
<view class="setupItem"> <view class="setupItem">
<view class="label" @click="albumClick"> <view class="label" @click="albumClick">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_01.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_01.png" mode="aspectFill"></image>
<view class="label-name-text">修改头像</view> <view class="label-name-text">修改头像</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-head" :src="avatar ? avatar : 'https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5641d82e94651198a0a2236f368ff9ba.png'" mode="aspectFill"></image> <image class="label-name-head" :src="avatar ? avatar : 'https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/5641d82e94651198a0a2236f368ff9ba.png'" mode="aspectFill"></image>
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<view class="label" @click="$Router.push({name: 'Modify'})"> <view class="label" @click="$Router.push({name: 'Modify'})">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_02.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_02.png" mode="aspectFill"></image>
<view class="label-name-text">修改密码</view> <view class="label-name-text">修改密码</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<view class="label" @click="$Router.push({name: 'Authsuccess'})" v-if="certification"> <view class="label" @click="$Router.push({name: 'Authsuccess'})" v-if="certification">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image>
<view class="label-name-text">实名认证</view> <view class="label-name-text">实名认证</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<view class="label" @click="$Router.push({name: 'sheetIdcard'})" v-else> <view class="label" @click="$Router.push({name: 'sheetIdcard'})" v-else>
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image>
<view class="label-name-text">实名认证</view> <view class="label-name-text">实名认证</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<!-- <view class="label" @click="$Router.push({name: 'Invite'})"> <!-- <view class="label" @click="$Router.push({name: 'Invite'})">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image>
<view class="label-name-text">邀请码</view> <view class="label-name-text">邀请码</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> --> </view> -->
</view> </view>
<view class="setupItem"> <view class="setupItem">
<view class="label" @click="$Router.push({name: 'Referee'})"> <!-- <view class="label" @click="$Router.push({name: 'Referee'})">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_04.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_04.png" mode="aspectFill"></image>
<view class="label-name-text">我的伙伴</view> <view class="label-name-text">我的伙伴</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<view class="label-name-number" v-if="childrenCount">{{childrenCount}}</view> <view class="label-name-number" v-if="childrenCount">{{childrenCount}}</view>
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view> -->
<view class="label" @click="$Router.push({name: 'SignLog'})"> <view class="label" @click="$Router.push({name: 'SignLog'})">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_08.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_08.png" mode="aspectFill"></image>
<view class="label-name-text">合同查看</view> <view class="label-name-text">合同查看</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<view class="label" @click="$Router.push({name: 'Parent'})"> <!-- <view class="label" @click="$Router.push({name: 'Parent'})">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_05.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_05.png" mode="aspectFill"></image>
<view class="label-name-text">业务联系人</view> <view class="label-name-text">业务联系人</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view> -->
<view class="label" @click="delSubscribe" v-if="hasSubscribe"> <view class="label" @click="delSubscribe" v-if="hasSubscribe">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_07.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_07.png" mode="aspectFill"></image>
<view class="label-name-text">{{hasTitle}}</view> <view class="label-name-text">{{hasTitle}}</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
<view class="label" @click="followSubscribe" v-else> <view class="label" @click="followSubscribe" v-else>
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_07.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_07.png" mode="aspectFill"></image>
<view class="label-name-text">{{hasTitle}}</view> <view class="label-name-text">{{hasTitle}}</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
</view> </view>
<view class="setupItem"> <view class="setupItem">
<view class="label" @click="$Router.push({name: 'AppDown'})"> <view class="label" @click="$Router.push({name: 'AppDown'})">
<view class="label-name"> <view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_06.png" mode="aspectFill"></image> <image class="label-name-img" src="/static/imgs/zK_06.png" mode="aspectFill"></image>
<view class="label-name-text">APP下载</view> <view class="label-name-text">APP下载</view>
</view> </view>
<view class="label-tips"> <view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image> <image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view> </view>
</view> </view>
</view> </view>
<view class="setupItem"> <view class="setupItem">
<view class="signOut" @click="outLogin"> <view class="signOut" @click="outLogin">
退出登录 退出登录
</view> </view>
</view> </view>
<!-- 关注公众号弹出 --> <!-- 关注公众号弹出 -->
<view class="tipsBack" v-if="generalShow"></view> <view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow"> <view class="tipsCont" v-if="generalShow">
<view class="tipsWhite"> <view class="tipsWhite">
<image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image> <image class="tipsCont-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/06/06/6b1485847b45273618f8d922ceee889c.png" mode="widthFix"></image>
<view class="tipsWhite-top"> <view class="tipsWhite-top">
<view class="tipsWhite-name"> <view class="tipsWhite-name">
关注抖火法律咨询公众号 关注抖火法律咨询公众号
</view> </view>
<view class="tipsWhite-text"> <view class="tipsWhite-text">
关注后可立即下单 关注后可立即下单
</view> </view>
</view> </view>
<view class="tipsWhite-btn"> <view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false"> <view class="tipsWhite-btn-go" @click="generalShow = false">
稍后关注 稍后关注
</view> </view>
<view class="tipsWhite-btn-go" @click="judgeGeneral"> <view class="tipsWhite-btn-go" @click="judgeGeneral">
马上关注 马上关注
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import { userIndex, setting, userSubscribe, judgeReal } from '@/apis/interfaces/user' import { userIndex, setting, userSubscribe, judgeReal } from '@/apis/interfaces/user'
import { authFollow } from '@/apis/interfaces/index' import { authFollow } from '@/apis/interfaces/index'
import { uploads } from '@/apis/interfaces/uploading' import { uploads } from '@/apis/interfaces/uploading'
export default { export default {
data() { data() {
return { return {
avatar : '', //用户头像 avatar : '', //用户头像
childrenCount: '', // 下级人数 childrenCount: '', // 下级人数
certification: '', // 是否认证 certification: '', // 是否认证
hasSubscribe : '', // 是否关注公众号 hasSubscribe : '', // 是否关注公众号
hasTitle : '', // 是否关注公众号-标题 hasTitle : '', // 是否关注公众号-标题
generalShow : false ,// 公众号 generalShow : false ,// 公众号
}; };
}, },
onShow() { onShow() {
// 获取用户信息 // 获取用户信息
this.userInfo(); this.userInfo();
// 判断是否认证 // 判断是否认证
this.sheetClick(); this.sheetClick();
}, },
methods:{ methods:{
// 用户信息 // 用户信息
userInfo() { userInfo() {
userIndex().then(res => { userIndex().then(res => {
this.avatar = res.avatar this.avatar = res.avatar
this.childrenCount = res.children_count.one this.childrenCount = res.children_count.one
this.certification = res.certification this.certification = res.certification
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 判断是否认证 // 判断是否认证
sheetClick(){ sheetClick(){
// 获取微信授权信息 // 获取微信授权信息
judgeReal().then(res => { judgeReal().then(res => {
if(res.has_subscribe) { if(res.has_subscribe) {
this.hasTitle = '解除公众号' this.hasTitle = '解除公众号'
} else { } else {
this.hasTitle = '关注公众号' this.hasTitle = '关注公众号'
} }
this.hasSubscribe = res.has_subscribe this.hasSubscribe = res.has_subscribe
}).catch( err => { }).catch( err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
}, },
// 相册选择图片 // 相册选择图片
albumClick() { albumClick() {
var _this = this var _this = this
uni.chooseImage({ uni.chooseImage({
count: 1, //默认9 count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album','camera'], // way是点击时传入的打开方式相机或相册 sourceType: ['album','camera'], // way是点击时传入的打开方式相机或相册
success: path=> { success: path=> {
uploads([{ uploads([{
uri : path.tempFilePaths[0] uri : path.tempFilePaths[0]
}]).then(res => { }]).then(res => {
this.avatar = res.url[0] this.avatar = res.url[0]
// 上传头像 // 上传头像
this.settingInfo('avatar', res.path[0]) this.settingInfo('avatar', res.path[0])
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
}); });
}, },
// 上传用户信息 // 上传用户信息
settingInfo(key, value) { settingInfo(key, value) {
setting(key, { setting(key, {
value: value value: value
}).then(res => { }).then(res => {
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon : 'none'
}) })
}) })
}, },
// 退出登录 // 退出登录
outLogin(){ outLogin(){
this.$store.commit('setToken', '') this.$store.commit('setToken', '')
this.$Router.replaceAll({name: 'Index'}) this.$Router.replaceAll({name: 'Index'})
}, },
// 删除用户微信数据和关注 // 删除用户微信数据和关注
delSubscribe() { delSubscribe() {
uni.showModal({ uni.showModal({
title: '温馨提示', title: '温馨提示',
content: '是否解除公众号?', content: '是否解除公众号?',
confirmColor: '#da2b56', confirmColor: '#da2b56',
success: res=> { success: res=> {
if (res.confirm) { if (res.confirm) {
userSubscribe().then(res => { userSubscribe().then(res => {
// 判断是否认证 // 判断是否认证
this.sheetClick(); this.sheetClick();
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
} else if (res.cancel) { } else if (res.cancel) {
console.log('用户点击取消'); console.log('用户点击取消');
} }
} }
}); });
}, },
// 绑定用户微信数据和关注 // 绑定用户微信数据和关注
followSubscribe(){ followSubscribe(){
// 弹出公众号 // 弹出公众号
this.generalShow = true this.generalShow = true
}, },
// 状态 // 状态
judgeGeneral(){ judgeGeneral(){
// 获取微信授权信息 // 获取微信授权信息
authFollow({ authFollow({
url: 'https://web.douhuofalv.com/webview/webCode' url: 'https://web.douhuofalv.com/webview/webCode'
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode' // url: 'https://web.douhuotest.douhuofalv.com/webview/webCode'
}).then(res => { }).then(res => {
window.location.href = res window.location.href = res
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon: "none" icon: "none"
}) })
}) })
// 关闭公众号 // 关闭公众号
this.generalShow = false this.generalShow = false
} }
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.content { .content {
background-color: #f7f9fa; background-color: #f7f9fa;
height: 100vh; height: 100vh;
overflow-y: scroll; overflow-y: scroll;
} }
.setupItem { .setupItem {
margin-bottom: $margin; margin-bottom: $margin;
background-color: #ffffff; background-color: #ffffff;
.label { .label {
line-height: 60rpx; line-height: 60rpx;
display: flex; display: flex;
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
border-bottom: 2rpx solid #f7f9fa; border-bottom: 2rpx solid #f7f9fa;
&:last-child { &:last-child {
border: none; border: none;
} }
.label-name { .label-name {
display: flex; display: flex;
flex: 1; flex: 1;
.label-name-img { .label-name-img {
width: 34rpx; width: 34rpx;
height: 34rpx; height: 34rpx;
margin-top: 12rpx; margin-top: 12rpx;
margin-right: 20rpx; margin-right: 20rpx;
} }
} }
.label-tips { .label-tips {
display: flex; display: flex;
.label-name-head { .label-name-head {
width: 54rpx; width: 54rpx;
height: 54rpx; height: 54rpx;
border-radius: 50%; border-radius: 50%;
margin-right: 20rpx; margin-right: 20rpx;
} }
.label-name-arrow { .label-name-arrow {
width: 24rpx; width: 24rpx;
height: 24rpx; height: 24rpx;
margin-top: 18rpx; margin-top: 18rpx;
} }
.label-name-number { .label-name-number {
display: inline-block; display: inline-block;
background-color: $mian-color; background-color: $mian-color;
color: #ffffff; color: #ffffff;
border-radius: $radius * 3; border-radius: $radius * 3;
height: 36rpx; height: 36rpx;
line-height: 36rpx; line-height: 36rpx;
padding: 0 $padding - 10; padding: 0 $padding - 10;
font-size: $title-size-sm; font-size: $title-size-sm;
margin: 12rpx 20rpx 0 0; margin: 12rpx 20rpx 0 0;
} }
} }
} }
.signOut { .signOut {
text-align: center; text-align: center;
line-height: 60rpx; line-height: 60rpx;
padding: $padding - 5 0; padding: $padding - 5 0;
color: $mian-color; color: $mian-color;
} }
} }
// 关注 // 关注
.tipsBack { .tipsBack {
position: fixed; position: fixed;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
left: 0; left: 0;
top: 0; top: 0;
z-index: 9; z-index: 9;
background-color: rgba(0, 0, 0, .8); background-color: rgba(0, 0, 0, .8);
} }
.tipsCont { .tipsCont {
display: -webkit-box; display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-box-pack: center; -webkit-box-pack: center;
position: fixed; position: fixed;
left: 0; left: 0;
right: 0; right: 0;
top: 0; top: 0;
bottom: 0; bottom: 0;
z-index: 10; z-index: 10;
padding: 0 10%; padding: 0 10%;
box-sizing: border-box; box-sizing: border-box;
} }
.tipsWhite { .tipsWhite {
background-color: #ffffff; background-color: #ffffff;
border-radius: 20rpx; border-radius: 20rpx;
overflow: hidden; overflow: hidden;
} }
.tipsWhite-top { .tipsWhite-top {
padding: $padding; padding: $padding;
box-sizing: border-box; box-sizing: border-box;
text-align: center; text-align: center;
} }
.tipsCont-img { .tipsCont-img {
width: 100%; width: 100%;
} }
.tipsWhite-name { .tipsWhite-name {
text-align: center; text-align: center;
color: #111111; color: #111111;
font-size: 34rpx; font-size: 34rpx;
font-weight: 600; font-weight: 600;
margin-bottom: 15rpx; margin-bottom: 15rpx;
} }
.tipsWhite-text { .tipsWhite-text {
font-size: 30rpx; font-size: 30rpx;
color: #666666; color: #666666;
line-height: 48rpx; line-height: 48rpx;
} }
.tipsWhite-btn { .tipsWhite-btn {
display: flex; display: flex;
padding: $padding 10rpx; padding: $padding 10rpx;
box-sizing: border-box; box-sizing: border-box;
.tipsWhite-btn-go { .tipsWhite-btn-go {
flex: 2; flex: 2;
color: #fff; color: #fff;
margin: 0 15rpx; margin: 0 15rpx;
height: 80rpx; height: 80rpx;
line-height: 80rpx; line-height: 80rpx;
text-align: center; text-align: center;
border: 2rpx solid #F6F6F6; border: 2rpx solid #F6F6F6;
background-color: #007df5; background-color: #007df5;
border-radius: $radius-m; border-radius: $radius-m;
&:first-child { &:first-child {
color: #333333; color: #333333;
background-color: #ffffff; background-color: #ffffff;
border: 2rpx solid #cccccc; border: 2rpx solid #cccccc;
} }
} }
} }
</style> </style>

215
pages/user/team.vue Normal file
View File

@@ -0,0 +1,215 @@
<template>
<view class="content">
<block v-if="users.length > 0">
<view class="team-item" v-for="(item, index) in users" :key="index" @click="onCallPhone(item.real_username)">
<u-avatar :src="item.avatar" size="48"></u-avatar>
<view class="team-content">
<view class="nowrap name">{{item.nickname}}</view>
<view class="nowrap identitys">
<text class="identity certification-y" v-if="item.certification"><image src="@/static/icon/user_nav_03.png"></image>已实名</text>
<text class="identity identity-2" v-if="item.identity.order == 2">实习顾问</text>
<text class="identity identity-1" v-if="item.identity.order == 1">普通用户</text>
<text class="identity identity-3" v-if="item.identity.order == 3">顾问</text>
</view>
<view class="nowrap submit">联系电话{{item.username}}</view>
<view class="nowrap submit">注册时间{{item.created_at}}</view>
</view>
<view class="mobile">
<uni-icons class="mobile-icon" type="phone-filled" size="18" color="white"></uni-icons>
</view>
</view>
<!-- 分页 -->
<u-loadmore v-if="pagesShow" :status="status" />
</block>
<block v-else>
<view class="list-null">
<u-empty
mode="data"
icon="http://cdn.uviewui.com/uview/empty/data.png"
text="暂无客户数据"
>
</u-empty>
</view>
</block>
</view>
</template>
<script>
import { team } from '@/apis/interfaces/user.js'
export default {
data() {
return {
tabs : [],
tabVal : 0,
users : [],
count : {
all: 0
},
// 分页
page : {
current : 1,
has_more: false,
},
pagesShow : false,
status : false,
};
},
created() {
this.getList()
},
methods: {
// 获取列表
getList(){
uni.showLoading({
title: '加载中...',
mask : true
})
team({
larer : 1,
page : this.page.current,
}).then(res => {
console.log(res)
let { lists, count } = res;
let atList = lists.page.current == 1 ? [] : this.lists
this.count = count
this.users = atList.concat(lists.data)
this.page = lists.page
this.pagesShow = false
uni.hideLoading()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
onCallPhone(phone){
uni.makePhoneCall({
phoneNumber: phone
})
}
},
onReachBottom() {
this.pagesShow = true;
if(this.page.has_more){
this.status = 'loading';
this.page.current++
this.getList()
return
}
this.status = 'nomore';
}
}
</script>
<style lang="scss">
.content{
box-sizing: border-box;
background: white;
padding-top: 30rpx;
}
// 统计数据
.total{
margin: 30rpx 30rpx 0;
background: linear-gradient(to top left, #446EFE, #0f36bb);
box-shadow: 10rpx 0 15rpx 15rpx rgba(0, 0, 0, .03);
border-radius: 20rpx;
padding: 50rpx;
color: white;
display: flex;
justify-content: space-between;
align-items: center;
.total-title{
font-size: 28rpx;
opacity: .8;
padding-top: 10rpx;
}
.total-number{
text-align: right;
font-weight: bold;
}
}
// 团队列表
.team-item{
background: white;
display: flex;
justify-content: space-between;
padding: 30rpx;
border-radius: 20rpx;
margin: 0 30rpx 30rpx 30rpx;
box-shadow: 10rpx 0 15rpx 15rpx rgba(0, 0, 0, .03);
position: relative;
overflow: hidden;
&::after{
width: 30rpx;
height: 30rpx;
border-radius: 15rpx;
background: linear-gradient(to top left, #446EFE, #0f36bb);
position: absolute;
left: -15rpx;
top: 30rpx;
content: " ";
}
.team-content{
width: calc( 100% - 48px - 100rpx );
padding-left: 30rpx;
box-sizing: border-box;
.name{
font-weight: bold;
font-size: 34rpx;
}
.submit{
line-height: 40rpx;
font-size: 26rpx;
color: gray;
}
.identitys{
margin-bottom: 10rpx;
.identity{
font-size: 24rpx;
border-radius: 15rpx;
line-height: 30rpx;
padding: 0 10rpx;
color: white;
margin-right: 20rpx;
&.identity-2{
background: #443DE2;
}
&.identity-1{
background: #e1e1e1;
}
&.identity-3{
background: #FEAD45;
}
&.certification-y{
background: #FFF7EC;
border-color: #FEAD45;
color: #FEAD45;
image{
width: 32rpx;
height: 32rpx;
vertical-align: middle;
margin-bottom: 5rpx;
}
}
}
}
}
.mobile{
width: 100rpx;
border-radius: 35rpx;
margin-top: 9px;
height: 30px;
line-height: 30px;
color: white;
background: #446EFE;
text-align: center;
.mobile-icon{
display: inline-block;
}
}
}
// 空页面
.list-null{ height: 60vh; display: flex; align-items: center; justify-content: center; }
</style>

129
pages/user/vip.vue Normal file
View File

@@ -0,0 +1,129 @@
<template>
<view>
<view v-if="identity != null" :style="(identity.open || identity.renew) ? 'padding-bottom:230rpx': 'padding-bottom:110rpx'">
<image class="vip-cover" :src="identity.cover" mode="widthFix"></image>
<view class="vip-footer">
<view class="vip-text">
<text class="vip-text-item">{{identity.identity_name}}</text>
<text class="vip-text-item">到期时间: {{identity.end_at || '长期'}}</text>
</view>
<button class="vip-btn" v-if="identity.open || identity.renew" @click="vipShow = true">{{identity.open ? '开通': ''}}{{identity.renew ? '续费': ''}} ({{identity.price}}/{{identity.years}})</button>
</view>
</view>
<!-- 弹出层 -->
<u-popup :show="vipShow" mode="center" :round="10" closeable @close="vipShow = false">
<view class="vip-tips" v-if="identity != null">
<view class="vip-tips-title">开通会员</view>
<view class="vip-tips-price"><text class="vip-tips-price-sm"></text>{{identity.price}}</view>
<view class="vip-tips-text">年限{{identity.years}}</view>
<input class="vip-tips-input" placeholder="请输入真实姓名" v-model="nickname" />
<button class="vip-tips-btn" @click="onOpen">去支付</button>
</view>
</u-popup>
</view>
</template>
<script>
import { identity, vip } from '@/apis/interfaces/user'
export default {
data() {
return {
vipShow : false,
identity: null,
nickname: ""
};
},
onShow(){
uni.showLoading({
title: '加载中...',
mask : true
})
identity().then(res => {
this.identity = res;
uni.hideLoading()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
onOpen(){
if(this.nickname == ''){
uni.showToast({
title: '请输入真实姓名',
icon : 'none'
})
return
}
uni.showLoading({
title: "获取支付...",
mask : true
})
vip({ real_name: this.nickname }).then(res => {
uni.hideLoading()
let { order_type, order_id } = res
this.$Router.push({
name: "Pay",
params: {
orderId : order_id,
orderType : order_type
}
})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss">
.vip-cover{ width: 100%; vertical-align: top; }
.vip-footer{
padding: 30rpx;
background: #d2382c;
position: fixed;
bottom: 0;
left: 0;
right: 0;
.vip-text{
color: #fff5e9;
font-size: 30rpx;
text-align: center;
line-height: 50rpx;
.vip-text-item{ padding: 0 15rpx; }
}
.vip-btn{
margin-top: 30rpx;
background: linear-gradient(to right, #fffefc, #fff0d9);
color: #d2382c;
font-weight: bold;
font-size: 34rpx;
border-radius: 45rpx;
line-height: 90rpx;
&::after{ display: none; }
}
}
// 开通会员弹出层
.vip-tips{
width: 75vw;
padding: 50rpx;
box-sizing: border-box;
.vip-tips-title{ text-align: center; font-weight: bold; font-size: 36rpx; padding-bottom: 30rpx; }
.vip-tips-price{
text-align: center;
font-weight: bold;
font-size: 50rpx;
color: #d2382c;
&-sm{ font-size: 80%; }
}
.vip-tips-text{ font-size: 30rpx; color: gray; padding-bottom: 50rpx; text-align: center; }
.vip-tips-input{ background: #f7f8f9; border-radius: 45rpx; height: 90rpx; margin-bottom: 30rpx; padding: 0 30rpx; text-align: center; font-size: 32rpx; }
.vip-tips-btn{ background: #d2382c; color: white; line-height: 90rpx; border-radius: 45rpx; font-weight: bold; font-size: 34rpx; }
}
</style>

319
pages/work/account.vue Normal file
View File

@@ -0,0 +1,319 @@
<template>
<view class="content">
<!-- tabs -->
<u-sticky bgColor="#FFF" zIndex="9" >
<u-tabs
:current="tabsCurrent"
:list="tabs"
keyName="value"
lineColor="#446EFE"
:scrollable="tabs.length > 5"
:activeStyle="{
color: '#111',
fontWeight: 'bold',
fontSize: '32rpx'
}"
:inactiveStyle="{
color: '#606266',
fontSize: '30rpx'
}"
@click="onTabs"
></u-tabs>
</u-sticky>
<!-- 订单列表 -->
<view class="orders" v-if="orders.length > 0">
<view class="orders-item" v-for="(item, index) in orders" :key="index">
<view class="orders-flex">
<view class="no nowrap" @click="copyNo(item.order_no)">
{{item.order_no}}
</view>
<view class="state">{{item.status.text}}</view>
</view>
<view class="orders-content">
<view class="orders-content-item">
<label>业务名称</label>
<view class="nowrap">{{item.item.title}}</view>
</view>
<view class="orders-content-item">
<label>客户姓名</label>
<view class="nowrap">{{item.name}}</view>
</view>
<view class="orders-content-item">
<label>手机号码</label>
<view class="nowrap">{{item.mobile}}</view>
</view>
<view class="orders-content-item">
<label>创建时间</label>
<view class="nowrap">{{item.created_at}}</view>
</view>
<view class="orders-content-item" v-if="item.paid_at != ''">
<label>支付时间</label>
<view class="nowrap">{{item.paid_at}}</view>
</view>
</view>
<view class="orders-flex">
<view class="price">{{item.item.price}}</view>
<view class="btns">
<view class="btns-item border" v-if="item.can.cancel" @click="onCancel(item)">取消订单</view>
<view class="btns-item" v-if="item.can.pay" @click="onPay(item)">立即支付</view>
</view>
</view>
</view>
<!-- 分页 -->
<u-loadmore v-if="pagesShow" :status="status" />
</view>
<!-- 订单是空的 -->
<view class="order-null" v-else>
<u-empty
mode="order"
icon="http://cdn.uviewui.com/uview/empty/order.png"
text="暂无相关订单"
>
</u-empty>
</view>
</view>
</template>
<script>
import { accountOrder, accountCancel } from '@/apis/interfaces/index.js'
export default {
data() {
return {
tabs : [{ id: '', value: '全部' }],
tabsCurrent : 0,
tabsId : '',
orders : [],
pagesShow : false,
page : {
current : 1,
has_more: false,
},
status : ''
};
},
onShow() {
this.getOrder()
},
methods: {
// 筛选分类
onTabs(e){
let { id, index } = e;
this.tabsCurrent = index
this.tabsId = id
this.page = { current: 1, has_more: false }
this.getOrder()
},
// 获取订单列表
getOrder(){
let { tabsId, tabs, orders, page } = this
accountOrder({
manager: 1,
status : tabsId,
page : page.current
}).then(res => {
let { status, lists } = res;
this.tabs = [{ id: '', value: '全部' }].concat(status)
this.orders = lists.page.current == 1 ? lists.data : this.orders.concat(lists.data)
this.page = lists.page
this.pagesShow = false
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 取消订单
onCancel(e){
let { order_id } = e;
uni.showModal({
title : "提示",
content : "确认取消当前订单嘛?",
cancelText : "取消",
confirmColor: "#446EFE",
success : modalRes => {
if(modalRes.confirm){
uni.showLoading({
title: "加载中...",
mask : true
})
accountCancel(order_id).then(res => {
uni.showToast({
title: '订单已取消',
icon : 'none'
})
this.page = { current: 1, has_more: false }
this.getOrder()
}).catch(err => {
console.log(err)
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
})
},
// 复制订单号码
copyNo(no){
uni.setClipboardData({
data : no,
success : res => {
uni.showToast({
title: '订单号已复制',
icon : 'none'
})
}
})
},
// 去支付
onPay(obj){
let { order_id, order_type, paid_at } = obj
if(paid_at == ''){
this.$Router.replace({name: 'FeePay', params: {id: order_id, orderType: order_type, price: obj.item.price, payForm: 'synthesize'}})
}
}
},
onReachBottom() {
this.pagesShow = true;
if(this.page.has_more){
this.status = 'loading';
this.page.current++
this.getOrder()
return
}
this.status = 'nomore';
}
}
</script>
<style lang="scss">
.content{ background: #f7f8f9; min-height: calc(100vh - 44px); }
// 订单列表
.orders{
padding: 30rpx 0 10rpx;
.orders-item{
margin: 0 30rpx 20rpx;
background-color: white;
border-radius: $radius;
}
.orders-content{
padding: 20rpx 30rpx;
.orders-content-item{
line-height: 70rpx;
display: flex;
justify-content: space-between;
font-size: 30rpx;
color: #111111;
label{
color: #999999;
}
.orders-content-btn{
color: #446EFE;
}
.orders-content-bottom{
padding-right: 40rpx;
position: relative;
.orders-content-icon{
position: absolute;
right: 0;
top: 0;
}
}
}
.orders-content-type{
text{
margin-right: 30rpx;
position: relative;
display: inline-block;
&::after{
position: absolute;
content: "/";
width: 30rpx;
text-align: center;
font-size: 30rpx;
top: 0;
right: -30rpx;
}
&:last-child{
margin-right: 0;
&::after{
display: none;
}
}
}
}
.orders-content-block{
background: rgba(68, 110, 254, .03);
padding: 20rpx;
font-size: 28rpx;
border-radius: 10rpx;
margin: 10rpx 0;
.item-flex{
display: flex;
justify-content: space-between;
line-height: 50rpx;
}
}
}
.orders-flex{
border-bottom: solid 1rpx #F6F6F6;
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 30rpx;
&:last-child{
border-top: solid 1rpx #F6F6F6;
border-bottom: none;
}
.no{
font-size: 30rpx;
color: #111;
line-height: 60rpx;
width: calc(100% - 150rpx);
}
.state{
color: #446EFE;
font-weight: bold;
font-size: 30rpx;
line-height: 60rpx;
width: 150rpx;
text-align: right;
}
.price{
font-weight: bold;
color: #446EFE;
}
.btns{
width: 400rpx;
text-align: right;
.btns-item{
display: inline-block;
height: 70rpx;
line-height: 70rpx;
background: #446EFE;
color: white;
border-radius: 35rpx;
padding: 0 30rpx;
font-size: 30rpx;
&.border{
border: solid 1rpx #446EFE;
color: #446EFE;
background: white;
height: 68rpx;
line-height: 68rpx;
&::after{ display: none;}
}
&:last-child{ margin-left: 30rpx; }
}
}
}
}
// 订单为空
.order-null{
height: 80vh;
display: flex;
justify-content: center;
align-items: center;
}
</style>

313
pages/work/delegation.vue Normal file
View File

@@ -0,0 +1,313 @@
<template>
<view class="content">
<!-- tabs -->
<u-sticky bgColor="#FFF" zIndex="9" >
<u-tabs
:current="tabsCurrent"
:list="tabs"
keyName="value"
lineColor="#446EFE"
:scrollable="tabs.length > 5"
:activeStyle="{
color: '#111',
fontWeight: 'bold',
fontSize: '32rpx'
}"
:inactiveStyle="{
color: '#606266',
fontSize: '30rpx'
}"
@click="onTabs"
></u-tabs>
</u-sticky>
<!-- 订单列表 -->
<view class="orders" v-if="orders.length > 0">
<view class="orders-item" v-for="(item, index) in orders" :key="index">
<view class="orders-flex">
<view class="no nowrap" @click="copyNo(item.order_no)">
{{item.order_no}}
</view>
<view class="state">{{item.status.text}}</view>
</view>
<view class="orders-content">
<view class="orders-content-item">
<label>业务名称</label>
<view class="nowrap">{{item.item.title}}</view>
</view>
<view class="orders-content-item">
<label>客户姓名</label>
<view class="nowrap">{{item.name}}</view>
</view>
<view class="orders-content-item">
<label>手机号码</label>
<view class="nowrap">{{item.mobile}}</view>
</view>
<view class="orders-content-item">
<label>创建时间</label>
<view class="nowrap">{{item.created_at}}</view>
</view>
<view class="orders-content-item" v-if="item.paid_at != ''">
<label>支付时间</label>
<view class="nowrap">{{item.paid_at}}</view>
</view>
</view>
<view class="orders-flex">
<view class="price">{{item.item.price}}</view>
<view class="btns">
<view class="btns-item border" v-if="item.can.cancel" @click="onCancel(item)">取消订单</view>
<view class="btns-item" v-if="item.can.pay" @click="onPay(item)">立即支付</view>
</view>
</view>
</view>
<!-- 分页 -->
<u-loadmore v-if="pagesShow" :status="status" />
</view>
<!-- 订单是空的 -->
<view class="order-null" v-else>
<u-empty
mode="order"
icon="http://cdn.uviewui.com/uview/empty/order.png"
text="暂无相关订单"
>
</u-empty>
</view>
</view>
</template>
<script>
import { delegationOrder, delegationCancel } from '@/apis/interfaces/index.js'
export default {
data() {
return {
tabs : [{ id: '', value: '全部' }],
tabsCurrent : 0,
tabsId : '',
orders : [],
pagesShow : false,
page : {
current : 1,
has_more: false,
},
status : ''
};
},
onShow() {
this.getOrder()
},
methods: {
// 筛选分类
onTabs(e){
let { id, index } = e;
this.tabsCurrent = index
this.tabsId = id
this.page = { current: 1, has_more: false }
this.getOrder()
},
// 获取订单列表
getOrder(){
let { tabsId, tabs, orders, page } = this
delegationOrder({
manager: 1,
status : tabsId,
page : page.current
}).then(res => {
let { status, lists } = res;
this.tabs = [{ id: '', value: '全部' }].concat(status)
this.orders = lists.page.current == 1 ? lists.data : this.orders.concat(lists.data)
this.page = lists.page
this.pagesShow = false
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 取消订单
onCancel(e){
let { order_id } = e;
uni.showModal({
title : "提示",
content : "确认取消当前订单嘛?",
cancelText : "取消",
confirmColor: "#446EFE",
success : modalRes => {
if(modalRes.confirm){
uni.showLoading({
title: "加载中...",
mask : true
})
delegationCancel(order_id).then(res => {
uni.showToast({
title: '订单已取消',
icon : 'none'
})
this.page = { current: 1, has_more: false }
this.getOrder()
}).catch(err => {
console.log(err)
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
})
},
// 复制订单号码
copyNo(no){
uni.setClipboardData({
data : no,
success : res => {
uni.showToast({
title: '订单号已复制',
icon : 'none'
})
}
})
},
// 去支付
onPay(obj){
let { order_id, order_type, paid_at } = obj
if(paid_at == ''){
this.$Router.replace({name: 'FeePay', params: {id: order_id, orderType: order_type, price: obj.item.price, payForm: 'synthesize'}})
}
}
},
onReachBottom() {
this.pagesShow = true;
if(this.page.has_more){
this.status = 'loading';
this.page.current++
this.getOrder()
return
}
this.status = 'nomore';
}
}
</script>
<style lang="scss">
.content{ background: #f7f8f9; min-height: calc(100vh - 44px); }
// 订单列表
.orders{
padding: 30rpx 0 10rpx;
.orders-item{
margin: 0 30rpx 20rpx;
background-color: white;
border-radius: $radius;
}
.orders-content{
padding: 20rpx 30rpx;
.orders-content-item{
line-height: 70rpx;
display: flex;
justify-content: space-between;
font-size: 30rpx;
color: #111111;
label{
color: #999999;
}
.orders-content-btn{
color: #446EFE;
}
&.orders-content-bottom{
padding-right: 40rpx;
position: relative;
.orders-content-icon{
position: absolute;
right: 0;
top: 0;
}
}
}
.orders-content-type{
text{
margin-right: 30rpx;
position: relative;
display: inline-block;
&::after{
position: absolute;
content: "/";
width: 30rpx;
text-align: center;
font-size: 30rpx;
top: 0;
right: -30rpx;
}
&:last-child{
margin-right: 0;
&::after{
display: none;
}
}
}
}
.orders-content-block{
background: rgba(68, 110, 254, .03);
padding: 20rpx;
font-size: 28rpx;
border-radius: 10rpx;
margin: 10rpx 0;
.item-flex{
display: flex;
justify-content: space-between;
line-height: 50rpx;
}
}
}
.orders-flex{
border-bottom: solid 1rpx #F6F6F6;
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx $padding;
&:last-child{
border-top: solid 1rpx #F6F6F6;
border-bottom: none;
}
.no{
font-size: 30rpx;
color: #111;
line-height: 60rpx;
width: calc(100% - 150rpx);
}
.state{
color: #446EFE;
font-weight: bold;
font-size: 30rpx;
line-height: 60rpx;
width: 150rpx;
text-align: right;
}
.price{
font-weight: bold;
color: #446EFE;
}
.btns{
width: 400rpx;
text-align: right;
.btns-item{
display: inline-block;
height: 70rpx;
line-height: 70rpx;
background: #446EFE;
color: white;
border-radius: 35rpx;
padding: 0 30rpx;
font-size: 30rpx;
&.border{ border: solid 1rpx #446EFE; color: #446EFE; background: white; height: 68rpx; &::after{ display: none; } }
&:last-child{ margin-left: 30rpx; }
}
}
}
}
// 订单为空
.order-null{
height: 80vh;
display: flex;
justify-content: center;
align-items: center;
}
</style>

View File

@@ -30,20 +30,20 @@ router.beforeEach((to, from, next) => {
return return
} }
// 检查用户是否授权了微信 // 检查用户是否授权了微信
// if(to.name != 'webWechatIndex' && openId === ''){ if(to.name != 'webWechatIndex' && openId === ''){
// authFollow({ authFollow({
// // url: 'https://web.douhuotest.douhuofalv.com/webWechat/index' // url: 'https://web.douhuo.demos.uzchain.tech/webWechat/index',
// url: 'https://web.douhuofalv.com/webWechat/index' url: 'https://web.douhuofalv.com/webWechat/index'
// }).then(res => { }).then(res => {
// window.location.href = res window.location.href = res
// }).catch(err => { }).catch(err => {
// uni.showToast({ uni.showToast({
// title: err.message, title: err.message,
// icon: "none" icon: "none"
// }) })
// }) })
// return return
// } }
// 检查是否需要登录 // 检查是否需要登录
if(to.auth && token === ''){ if(to.auth && token === ''){

BIN
static/.DS_Store vendored

Binary file not shown.

BIN
static/icon/user_nav_03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
static/qrcode_bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
static/vip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

119
yarn.lock
View File

@@ -2,67 +2,69 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/parser@^7.18.4": "@babel/parser@^7.23.5":
version "7.21.4" version "7.24.4"
resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz"
integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
"@babel/runtime@^7.17.2": "@babel/runtime@^7.17.2":
version "7.20.7" version "7.20.13"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.13.tgz"
integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==
dependencies: dependencies:
regenerator-runtime "^0.13.11" regenerator-runtime "^0.13.11"
"@vue/compiler-sfc@2.7.14": "@vue/compiler-sfc@2.7.16":
version "2.7.14" version "2.7.16"
resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz"
integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== integrity sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==
dependencies: dependencies:
"@babel/parser" "^7.18.4" "@babel/parser" "^7.23.5"
postcss "^8.4.14" postcss "^8.4.14"
source-map "^0.6.1" source-map "^0.6.1"
optionalDependencies:
prettier "^1.18.2 || ^2.0.0"
"@vue/devtools-api@^6.0.0-beta.11": "@vue/devtools-api@^6.0.0-beta.11":
version "6.4.5" version "6.4.5"
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.4.5.tgz#d54e844c1adbb1e677c81c665ecef1a2b4bb8380" resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz"
integrity sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ== integrity sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==
base64-arraybuffer@^1.0.2: base64-arraybuffer@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz"
integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
copy-text-to-clipboard@^3.0.1: copy-text-to-clipboard@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz#8cbf8f90e0a47f12e4a24743736265d157bce69c" resolved "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz"
integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q== integrity sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==
core-js@^2.6.5: core-js@^2.6.5:
version "2.6.12" version "2.6.12"
resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" resolved "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.11.0: core-js@^3.11.0:
version "3.27.1" version "3.27.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.27.1.tgz#23cc909b315a6bb4e418bf40a52758af2103ba46" resolved "https://registry.npmmirror.com/core-js/-/core-js-3.27.2.tgz"
integrity sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww== integrity sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==
css-line-break@^2.1.0: css-line-break@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz"
integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
dependencies: dependencies:
utrie "^1.0.2" utrie "^1.0.2"
csstype@^3.1.0: csstype@^3.1.0:
version "3.1.2" version "3.1.3"
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
html2canvas@^1.4.1: html2canvas@^1.4.1:
version "1.4.1" version "1.4.1"
resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz"
integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
dependencies: dependencies:
css-line-break "^2.1.0" css-line-break "^2.1.0"
@@ -70,80 +72,85 @@ html2canvas@^1.4.1:
jweixin-module@^1.6.0: jweixin-module@^1.6.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/jweixin-module/-/jweixin-module-1.6.0.tgz#4a7ea614083e3c9c3f49e2fdc2bb882cfa58dfcd" resolved "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz"
integrity sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w== integrity sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==
mutation-observer@^1.0.3: mutation-observer@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0" resolved "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz"
integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA== integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
nanoid@^3.3.6: nanoid@^3.3.7:
version "3.3.6" version "3.3.7"
resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz"
integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
picocolors@^1.0.0: picocolors@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
postcss@^8.4.14: postcss@^8.4.14:
version "8.4.23" version "8.4.38"
resolved "https://registry.npmmirror.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
dependencies: dependencies:
nanoid "^3.3.6" nanoid "^3.3.7"
picocolors "^1.0.0" picocolors "^1.0.0"
source-map-js "^1.0.2" source-map-js "^1.2.0"
"prettier@^1.18.2 || ^2.0.0":
version "2.8.8"
resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz"
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
regenerator-runtime@^0.13.11: regenerator-runtime@^0.13.11:
version "0.13.11" version "0.13.11"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz"
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
source-map-js@^1.0.2: source-map-js@^1.2.0:
version "1.0.2" version "1.2.0"
resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
source-map@^0.6.1: source-map@^0.6.1:
version "0.6.1" version "0.6.1"
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
text-segmentation@^1.0.3: text-segmentation@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz"
integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
dependencies: dependencies:
utrie "^1.0.2" utrie "^1.0.2"
uni-read-pages@^1.0.5: uni-read-pages@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/uni-read-pages/-/uni-read-pages-1.0.5.tgz#452c8dcaa8977bbaef600909be926c8d9704387c" resolved "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz"
integrity sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA== integrity sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==
uni-simple-router@2.0.7: uni-simple-router@2.0.7:
version "2.0.7" version "2.0.7"
resolved "https://registry.yarnpkg.com/uni-simple-router/-/uni-simple-router-2.0.7.tgz#04e0b5be6cd733a1ecb9d35a3dbe82f27f48204e" resolved "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz"
integrity sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA== integrity sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA==
utrie@^1.0.2: utrie@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz"
integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
dependencies: dependencies:
base64-arraybuffer "^1.0.2" base64-arraybuffer "^1.0.2"
uview-ui@^2.0.31: uview-ui@^2.0.31:
version "2.0.35" version "2.0.31"
resolved "https://registry.yarnpkg.com/uview-ui/-/uview-ui-2.0.35.tgz#b0e7916382e533402cfb2e86c10f2cacca22a9b4" resolved "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz"
integrity sha512-OfMttN3XkHvQosXfd8bjz8ASTvypPoGzBWmQZBJ871bYMCA7t2bDFPlzjbxUj/5ykAjKnZ8zMUapSwSisVt99g== integrity sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==
vconsole@^3.15.0: vconsole@^3.15.0:
version "3.15.0" version "3.15.0"
resolved "https://registry.yarnpkg.com/vconsole/-/vconsole-3.15.0.tgz#2383482b0a4106204090046ec128071284e04a90" resolved "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.0.tgz"
integrity sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ== integrity sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==
dependencies: dependencies:
"@babel/runtime" "^7.17.2" "@babel/runtime" "^7.17.2"
@@ -153,23 +160,23 @@ vconsole@^3.15.0:
vue-canvas-poster@^1.2.1: vue-canvas-poster@^1.2.1:
version "1.2.1" version "1.2.1"
resolved "https://registry.npmmirror.com/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz#1a0cb97d7daa76442f724a685ce5578a97a6b557" resolved "https://registry.npmmirror.com/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz"
integrity sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw== integrity sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw==
dependencies: dependencies:
core-js "^2.6.5" core-js "^2.6.5"
vue "^2.6.10" vue "^2.6.10"
vue@^2.6.10: vue@^2.6.10:
version "2.7.14" version "2.7.16"
resolved "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" resolved "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz"
integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== integrity sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==
dependencies: dependencies:
"@vue/compiler-sfc" "2.7.14" "@vue/compiler-sfc" "2.7.16"
csstype "^3.1.0" csstype "^3.1.0"
vuex@^4.1.0: vuex@^4.1.0:
version "4.1.0" version "4.1.0"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.1.0.tgz#aa1b3ea5c7385812b074c86faeeec2217872e36c" resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==
dependencies: dependencies:
"@vue/devtools-api" "^6.0.0-beta.11" "@vue/devtools-api" "^6.0.0-beta.11"