Compare commits

...

16 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
51 changed files with 4454 additions and 1920 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
@@ -579,8 +675,8 @@
officialGeneral(){ officialGeneral(){
// 获取微信授权信息 // 获取微信授权信息
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 => {
@@ -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

@@ -78,8 +78,8 @@
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 => {

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

@@ -95,8 +95,8 @@
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 => {

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

@@ -78,8 +78,8 @@
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 => {

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

@@ -94,8 +94,8 @@
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

View File

@@ -372,11 +372,11 @@
<view class="btn-lable-go active" v-else-if="item.status.value == 7"> <view class="btn-lable-go active" v-else-if="item.status.value == 7">
{{item.status.text}} {{item.status.text}}
</view> </view>
<block v-else-if="item.status.value == 9"> <!-- <block v-else-if="item.status.value == 9">
<view class="btn-lable-go" v-if="item.can.confirm" @click="$Router.push({name: 'OrderModify', params: {id: item.business_order_id}})"> <view class="btn-lable-go" v-if="item.can.confirm" @click="$Router.push({name: 'OrderModify', params: {id: item.business_order_id}})">
去确认 去确认
</view> </view>
</block> </block> -->
<!-- <view class="btn-lable-go" v-else-if="item.status.value == 8" @click="$Router.push({name: 'sheetHandle'})"> <!-- <view class="btn-lable-go" v-else-if="item.status.value == 8" @click="$Router.push({name: 'sheetHandle'})">
{{item.status.text}} {{item.status.text}}
</view> --> </view> -->
@@ -558,8 +558,8 @@
// 去签约 // 去签约
contractClick(id) { contractClick(id) {
contractGo(id, { contractGo(id, {
// 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",
app_scheme : '' app_scheme : ''
}).then(res => { }).then(res => {
// let faceUrl = encodeURIComponent(res.sign_url) // let faceUrl = encodeURIComponent(res.sign_url)

View File

@@ -81,8 +81,8 @@
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 => {

View File

@@ -42,7 +42,7 @@
<!-- 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=1&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>
@@ -289,8 +289,9 @@
// 获取微信授权信息-获取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 最新
url: 'https://web.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&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 => {

View File

@@ -436,8 +436,8 @@
// 去签约 // 去签约
contractClick() { contractClick() {
contractGo(this.$Route.query.id, { contractGo(this.$Route.query.id, {
// 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",
app_scheme : '' app_scheme : ''
}).then(res => { }).then(res => {
// let faceUrl = encodeURIComponent(res.sign_url) // let faceUrl = encodeURIComponent(res.sign_url)

View File

@@ -231,8 +231,8 @@
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 => {

View File

@@ -240,8 +240,8 @@
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 => {

View File

@@ -210,8 +210,8 @@
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 => {

View File

@@ -219,8 +219,8 @@
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 => {

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

@@ -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(()=>{
@@ -349,8 +363,9 @@
// 获取微信授权信息-获取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>

View File

@@ -243,8 +243,8 @@
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 => {

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>

View File

@@ -268,8 +268,8 @@
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 => {

View File

@@ -218,8 +218,8 @@
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 => {

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

@@ -49,7 +49,7 @@
</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>
@@ -58,7 +58,7 @@
<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>
@@ -68,7 +68,7 @@
<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>
@@ -76,7 +76,7 @@
<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>
@@ -273,8 +273,8 @@
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 => {

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

@@ -32,8 +32,8 @@ router.beforeEach((to, from, next) => {
// 检查用户是否授权了微信 // 检查用户是否授权了微信
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 => {

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"