[抖火客户端]

This commit is contained in:
2023-05-15 13:18:38 +08:00
commit d61dde8bd8
818 changed files with 142329 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/unpackage
/node_modules

154
App.vue Normal file
View File

@@ -0,0 +1,154 @@
<script>
import { getWxJsdk } from '@/apis/interfaces/public.js'
export default {
onLaunch() {
getWxJsdk({
url: window.location.href
}).then(res => {
let wxconfig = JSON.parse(res)
this.$wx.config({
appId : wxconfig.appId,
debug : false,
jsApiList : ['chooseWXPay', 'chooseImage', 'previewImage'],
signature : wxconfig.signature,
nonceStr : wxconfig.nonceStr,
timestamp : wxconfig.timestamp,
openTagList : ['wx-open-launch-weapp']
})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
}
</script>
<style>
/* 水平居中 */
.pack-center {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
/* 下拉刷新 */
.refresh{
height: 90rpx;
line-height: 90rpx;
text-align: center;
font-size: 28rpx;
color: #999;
}
.refresh-icon{
width: 32rpx;
vertical-align: middle;
margin-bottom: 4rpx;
}
/* 页面信息提醒 */
.pages-hint,
.pages-loding{
text-align: center;
color: #747788;
font-size: 28rpx;
background: white;
}
.pages-hint image {
width: 188rpx;
height: 188rpx;
}
.pages-loding image {
width: 38rpx;
height: 38rpx;
}
.pages-hint-text {
margin: 30rpx 0;
}
/* 上拉加载 */
.pagesLoding {
text-align: center;
color: gray;
line-height: 90rpx;
font-size: 26rpx;
}
.pagesLodingIcon {
width: 32rpx;
height: 32rpx;
vertical-align: middle;
margin-right: 10rpx;
margin-bottom: 6rpx;
}
/* 文字截取 */
.nowrap {
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.nowrap-multi {
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
/* 全选样式 */
checkbox.allCheckbox .uni-checkbox-input {
border-radius: 100upx;
height: 32rpx;
width: 32rpx;
}
checkbox.allCheckbox.checked .uni-checkbox-input {
background-color: #446EFE !important;
border-color: #446EFE !important;
color: #ffffff !important;
}
checkbox.allCheckbox .uni-checkbox-input.uni-checkbox-input-checked:before {
color: #446EFE !important;
transform: translate(-50%,-48%) scale(.5);
-webkit-transform: translate(-50%,-48%) scale(.5);
}
/* 单选样式 */
checkbox.singleCheckbox .uni-checkbox-input {
border-radius: 100upx;
height: 32rpx;
width: 32rpx;
}
checkbox.singleCheckbox.checked .uni-checkbox-input {
background-color: #446EFE !important;
border-color: #446EFE !important;
color: #ffffff !important;
}
checkbox.singleCheckbox .uni-checkbox-input.uni-checkbox-input-checked:before {
color: #446EFE !important;
transform: translate(-50%,-48%) scale(.5);
-webkit-transform: translate(-50%,-48%) scale(.5);
}
</style>

160
apis/index.js Normal file
View File

@@ -0,0 +1,160 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import store from '@/store'
// 基础配置
const config = {
apiUrl : 'https://api.douhuotest.douhuofalv.com/api/', // 测试环境
// apiUrl : 'https://douhuo.douhuofalv.com/api/', // 正式环境
timeout : 60000
}
let loginHintState = false
// 网络请求
const request = (parameter, hideLoding) => {
// 检查url配置
if(parameter.url === 'undefined' || parameter.url === ''){
uni.showToast({
title: '请求地址不能为空',
icon : 'none'
})
return
}
// 注入header
config.header = {
'Accept': 'application/json',
'Authorization': store.getters.getToken || ''
}
// 加载提示
if(!hideLoding) uni.showLoading({
title: '加载中',
mask : true
});
// 请求实例
return new Promise((resolve, reject) => {
uni.request({
url : config.apiUrl + parameter.url,
timeout : config.timeout,
header : config.header || {},
data : parameter.data || {},
method : parameter.method || 'GET',
success : res => {
if (res.header.Authorization){
updateToken('token', res.header.Authorization)
}
if(res.statusCode === 200){
uni.hideLoading()
const resolveData = res.data
if(resolveData.status_code === 200) {
resolve(resolveData.data)
return
}
if(resolveData.status_code === 401) {
loginHint()
return
}
reject(resolveData)
return
}
errToast(res.statusCode)
}
})
})
}
// 文件上传
const uploading = (paths, driver) => {
uni.showLoading({
title: '上传中',
mask : true
});
// 注入header
config.header = {
'Accept': 'application/json',
'Authorization': store.getters.getToken || ''
}
// 上传图片
return new Promise((resolve, reject) => {
uni.uploadFile({
url : config.apiUrl + 'storage/uploads',
files : paths,
header : config.header || {},
formData: driver || {},
success : res=>{
if(res.statusCode === 200){
uni.hideLoading()
let updData = JSON.parse(res.data)
if(updData.status_code === 200){
resolve(updData.data)
return
}
reject(updData)
return
}
errToast(res.statusCode)
}
})
})
}
// 处理一些http请求错误提示
const errToast = (code) => {
switch (code){
case 404:
uni.showToast({
title: code + '接口不存在,请联系系统管理员',
icon : 'none'
})
break;
case 405:
uni.showToast({
title: code + '请检查接口请求方式错误',
icon : 'none'
})
break;
case 500:
uni.showToast({
title: code + '服务端错误,请检查服务器信息',
icon : 'none'
})
break;
}
}
// 更新token
const updateToken = (token) => {
store.commit('setToken', token)
}
// 处理登录提示
const loginHint = () => {
if( loginHintState ) return
if(!loginHintState) loginHintState = true
updateToken('')
uni.showModal({
title: '登录提示',
content: '您的登录信息已过期,请重新登录',
confirmColor: '#8b64fd',
showCancel:false,
success: res=> {
loginHintState = false
if (res.confirm) uni.reLaunch({
url: '/login/login'
})
}
})
}
export {
request,
uploading,
config
}

78
apis/interfaces/auth.js Normal file
View File

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

238
apis/interfaces/index.js Normal file
View File

@@ -0,0 +1,238 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import { request } from '../index'
// 首页数据
const home = () =>{
return request({
url: "business/home"
})
}
// 文章分类
const articleSort = () =>{
return request({
url: "cms/categories"
})
}
// 文章列表
const articleList = (data) =>{
return request({
url: "cms/articles",
data: data
})
}
// 文章详情
const articleBrief = (article_id) =>{
return request({
url: "cms/articles/" + article_id
})
}
// 文章收藏
const collect = (article_id) =>{
return request({
url: "cms/articles/favorite/" + article_id
})
}
// 我的文章收藏
const myCollect = (data) =>{
return request({
url: "user/favorites",
data: data
})
}
// 精选律师列表
const lawyers = (data) =>{
return request({
url: "lawyers",
data: data
})
}
// 精选律师详情
const lawyersdet = (lawyer_id) =>{
return request({
url: "lawyers/" + lawyer_id
})
}
//律师业务
const lawyersBusiness = () =>{
return request({
url: "lawyers/businesses"
})
}
//律师业务详情
const businessDet = (lawyer_business_id) =>{
return request({
url: "lawyers/businesses/" + lawyer_business_id
})
}
//律师订单金额
const lawyerOrder = (lawyer_id) =>{
return request({
url: "lawyers/" + lawyer_id + "/order"
})
}
//律师业务-创建订单
const businessOrder = (lawyer_business_id) =>{
return request({
url: "lawyers/businesses/" + lawyer_business_id + "/order"
})
}
// 获取主业务
const workIndex = () =>{
return request({
url: "business/index"
})
}
// 获取主业务机构
const workOne = (business_id) =>{
return request({
url: "business/" + business_id + "/institution"
})
}
// 获取二级业务类型
const workLevel = (business_id) =>{
return request({
url: "business/institution/" + business_id + "/type"
})
}
// 提交基础信息
const workStore = (data) =>{
return request({
url: "business/store",
method: 'POST',
data: data
})
}
// 9.9预约
const Apply = (business_order_id) =>{
return request({
url: "business/apply/" + business_order_id + "/info"
})
}
// 9.9预约--微信支付
const Wechat = (apply_order_no, data) =>{
return request({
url: "pay/apply/" + apply_order_no + "/wechat",
data: data
})
}
// 咨询服务费--微信支付
const applyPay = (business_order_id, data) =>{
return request({
url: "pay/order/" + business_order_id + "/wechat",
data: data
})
}
// 补差价--微信支付
const diffPay = (business_order_diff_price_id, data) =>{
return request({
url: "pay/diff/" + business_order_diff_price_id + "/wechat",
data: data
})
}
// 获取公众号openid
const Openid = (data) =>{
return request({
url: "user/auth/official/openid",
data: data
})
}
// 获取授权页面
const authFollow = (data) => {
return request({
url : 'user/auth/official/url',
data: data
})
}
// 获取方案
const Schemes = (business_order_id) =>{
return request({
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
})
}
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
}

181
apis/interfaces/pay.js Normal file
View File

@@ -0,0 +1,181 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import { request } from '../index'
// 银联9.9商务支付
const ums = (applyNo, data) =>{
return request({
url : 'pay/apply/' + applyNo + '/ums',
data
})
}
// 银联服务包支付
const umsOrder = (applyNo, data) =>{
return request({
url : 'pay/order/' + applyNo + '/ums',
data
})
}
// 银联补差价支付
const umsDiff = (diffPriceId, data) =>{
return request({
url : 'pay/diff/' + diffPriceId + '/ums',
data
})
}
// 查询支付结果
const umsState = (trade_id) => {
return request({
url : 'payments/query/' + trade_id,
})
}
// 斗拱支付 - 咨询单
const dgPay = (orderId, data) => {
return request({
url : 'pay/order/' + orderId + '/dg',
data
})
}
// 斗拱支付补差价 - 咨询单
const diffDgPay = (orderId, data) => {
return request({
url: 'pay/diff/' + orderId + '/dg',
data
})
}
// 斗拱支付 - 预约单
const umsDg = (applyNo, data) => {
return request({
url : 'pay/apply/' + applyNo + '/dg',
data
})
}
// 综法订单支付 //
// 年费单--微信支付
const servicePay = (service_order_id, data) =>{
return request({
url: "pay/service_order/" + service_order_id + "/wechat",
data: data
})
}
// 年费单--银联商务
const serviceUms = (service_order_id, data) =>{
return request({
url : 'pay/service_order/' + service_order_id + '/ums',
data: data
})
}
// 年费单--汇付斗拱支付
const serviceDg = (service_order_id, data) =>{
return request({
url : 'pay/service_order/' + service_order_id + '/dg',
data: data
})
}
// 拓展单--微信支付
const expandPay = (expand_order_id, data) =>{
return request({
url: "pay/expand_order/" + expand_order_id + "/wechat",
data: data
})
}
// 拓展单--银联商务
const expandUms = (expand_order_id, data) =>{
return request({
url : 'pay/expand_order/' + expand_order_id + '/ums',
data: data
})
}
// 拓展单--汇付斗拱支付
const expandDg = (expand_order_id, data) =>{
return request({
url : 'pay/expand_order/' + expand_order_id + '/dg',
data: data
})
}
// 委托单--微信支付
const entrustPay = (entrust_order_id, data) =>{
return request({
url: "pay/entrust_order/" + entrust_order_id + "/wechat",
data: data
})
}
// 委托单--银联商务
const entrustUms = (entrust_order_id, data) =>{
return request({
url : 'pay/entrust_order/' + entrust_order_id + '/ums',
data: data
})
}
// 委托单--汇付斗拱支付
const entrustDg = (entrust_order_id, data) =>{
return request({
url : 'pay/entrust_order/' + entrust_order_id + '/dg',
data: data
})
}
// 综法订单差价--微信支付
const synDiffPay = (diff_price_id, data) =>{
return request({
url: "pay/diff_price/" + diff_price_id + "/wechat",
data: data
})
}
// 综法订单差价--三方支付
const synDiffUms = (diff_price_id, data) =>{
return request({
url: "pay/diff_price/" + diff_price_id + "/ums",
data: data
})
}
// 综法订单差价--汇付斗拱
const synDiffDg = (diff_price_id, data) =>{
return request({
url: "pay/diff_price/" + diff_price_id + "/dg",
data: data
})
}
export {
ums,
umsOrder,
umsDiff,
umsState,
dgPay,
diffDgPay,
umsDg,
// 综法
servicePay,
serviceUms,
serviceDg,
expandPay,
expandUms,
expandDg,
entrustPay,
entrustUms,
entrustDg,
synDiffPay,
synDiffUms,
synDiffDg
}

20
apis/interfaces/public.js Normal file
View File

@@ -0,0 +1,20 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import { request } from '../index'
// 获取微信支付
const getWxJsdk = data =>{
return request({
url : 'user/auth/official/jssdk',
data : data
})
}
export {
getWxJsdk
}

View File

@@ -0,0 +1,277 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import { request } from '../index'
// 获取综法订单数据数量
const synthesisCount = (data) =>{
return request({
url: "synthesis/data/orders_count",
data: data
})
}
// 综法咨询-一次免费列表
const synthList = () =>{
return request({
url: "synthesis/index"
})
}
// 综法咨询-一次免费详情
const synthDet = (synthesis_id) =>{
return request({
url: "synthesis/index/" + synthesis_id
})
}
// 综法咨询-一次免费创建单
const synthPost = (synthesis_id, data) =>{
return request({
url: "synthesis/index/" + synthesis_id + "/order",
method: 'POST',
data: data
})
}
// 综法咨询-年费服务包列表
const yearSynthList = data =>{
return request({
url: "synthesis/services",
data: data
})
}
// 综法咨询-年费服务包详情
const yearSynthInfo = (service_id) =>{
return request({
url: "synthesis/services/" + service_id
})
}
// 综法咨询-年费服务包创建单
const yearSynthPost = (service_id, data) =>{
return request({
url: "synthesis/services/" + service_id + "/buy",
method: 'POST',
data: data
})
}
// 综法咨询-案件委托列表
const entrustList = () =>{
return request({
url: "synthesis/entrusts"
})
}
// 综法咨询-案件委托子分类
const entrustSon = data =>{
return request({
url: "synthesis/entrust/all",
data: data
})
}
// 综法咨询-案件委托详情
const entrustInfo = (entrust_id) =>{
return request({
url: "synthesis/entrust/" + entrust_id
})
}
// 综法咨询-案件委托创建单
const entrustPost = (entrust_id, data) =>{
return request({
url: "synthesis/entrust/" + entrust_id + "/order",
method: 'POST',
data: data
})
}
// 综法咨询-拓展服务列表
const expandsList = () =>{
return request({
url: "synthesis/expands",
})
}
// 综法咨询-拓展服务详情
const expandsInfo = (expand_id) =>{
return request({
url: "synthesis/expand/" + expand_id
})
}
// 综法咨询-拓展服务创建单
const expandsPost = (expand_id, data) =>{
return request({
url: "synthesis/expand/" + expand_id + "/order",
method: 'POST',
data: data
})
}
// 综法咨询-年费服务包微信支付
const yearSynthPay = (service_order_id, data) =>{
return request({
url: "pay/service_order/" + service_order_id + "/wechat",
data: data
})
}
// 年费订单-列表
const yearOrder = data =>{
return request({
url: "synthesis/services/orders",
data: data
})
}
// 年费订单-详情
const yearOrderSee = (order_id) =>{
return request({
url: "synthesis/services/order/" + order_id
})
}
// 咨询单-列表
const seekOrder = data =>{
return request({
url: "synthesis/orders",
data: data
})
}
// 咨询订单-详情
const seekOrderSee = (synthesis_order_id) =>{
return request({
url: "synthesis/order/" + synthesis_order_id
})
}
// 委托单-列表
const entrustOrder = data =>{
return request({
url: "synthesis/entrust/orders",
data: data
})
}
// 拓展单-列表
const expandOrder = data =>{
return request({
url: "synthesis/expand/orders",
data: data
})
}
// 年费费--线下打款
const offlineOpen = (data) =>{
return request({
url: "pay/offline/pay",
method: 'POST',
data: data
})
}
// 查看打款凭证-查看提交信息
const bankSee = (pay_id, data) =>{
return request({
url: "pay/offline/" + pay_id + "/show",
data: data
})
}
// 编辑打款凭证
const bankEdit = (pay_id, data) =>{
return request({
url: "pay/offline/" + pay_id + "/edit",
method: 'POST',
data: data
})
}
// 获取线下打款银行
const bankInfo = (data) =>{
return request({
url: "pay/offline/bank"
})
}
// 咨询单-补差价列表
const diffPrices = data =>{
return request({
url: "synthesis/diff_prices",
data: data
})
}
// 咨询单-创建补差价
const entrustPay = data =>{
return request({
url: "synthesis/diff_prices/create",
method: 'POST',
data: data
})
}
// 咨询单-取消补差价
const cancelPrices = (diff_price_id) =>{
return request({
url: "synthesis/diff_prices/" + diff_price_id,
method: 'DELETE'
})
}
// 获取签约地址
const esignUrl = (data) =>{
return request({
url: "synthesis/esign/sign_url",
data: data
})
}
export {
synthesisCount,
synthList,
synthDet,
synthPost,
yearSynthList,
yearSynthInfo,
yearSynthPost,
entrustList,
entrustSon,
entrustInfo,
entrustPost,
expandsList,
expandsInfo,
expandsPost,
yearSynthPay,
yearOrder,
yearOrderSee,
seekOrder,
seekOrderSee,
entrustOrder,
expandOrder,
offlineOpen,
bankSee,
bankEdit,
bankInfo,
diffPrices,
entrustPay,
cancelPrices,
esignUrl
}

View File

@@ -0,0 +1,17 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 上传图片
*/
import { uploading as upd } from '../index'
const uploads = (paths, driver) => {
return upd(paths, driver)
}
export {
uploads
}

408
apis/interfaces/user.js Normal file
View File

@@ -0,0 +1,408 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import { request } from '../index'
// 获取用户信息
const userIndex = () =>{
return request({
url: "user"
})
}
// 实名认证
const realName = (data) =>{
return request({
url: "user/certification",
method: 'POST',
data: data
})
}
// 是否实名认证
const judgeReal = () =>{
return request({
url: "user/certified"
})
}
// 人脸识别
const faceUrl = () =>{
return request({
url: "e-signs/authorize/psn"
})
}
// 获取签约地址
const contractGo = (business_order_id, data) =>{
return request({
url: "business/" + business_order_id + '/sign_url',
data: data
})
}
// 修改用户资料
const setting = (key, data) =>{
return request({
url: "user/setting/" + key,
method: 'PUT',
data: data
})
}
// 我的伙伴
const Relations = (data) =>{
return request({
url: "user/relations",
data: data
})
}
// 我的推荐
const Parent = () =>{
return request({
url: "user/parent"
})
}
// 邀请码
const inviteCode = () =>{
return request({
url: "user/invite"
})
}
// 我的咨询单基础信息
const userBase = (business_order_id) =>{
return request({
url: "business/" + business_order_id + "/user/base"
})
}
// 我的咨询单详细信息-银行
const userBank = (business_order_item_id) =>{
return request({
url: "business/" + business_order_item_id + "/user/bank"
})
}
// 修改基础信息-提交
const basePut = (business_order_user_id, data) =>{
return request({
url: "business/" + business_order_user_id + "/user/base",
method: 'POST',
data: data
})
}
// 修改银行和其他信息-提交
const bankPut = (business_order_user_bank_id, data) =>{
return request({
url: "business/" + business_order_user_bank_id + "/user/bank",
method: 'POST',
data: data
})
}
// 我的咨询单基础信息 - 首次提交
const BaseFirst = (business_order_user_id, user_base_id) =>{
return request({
url: "business/" + business_order_user_id + "/user/base/" + user_base_id,
method: 'POST'
})
}
// 修改银行和其他信息--通过之前数据
const BankFirst = (business_order_user_bank_id, user_bank_id) =>{
return request({
url: "business/" + business_order_user_bank_id + "/user/bank/" + user_bank_id,
method: 'POST'
})
}
// 省市区选择
const create = (data) =>{
return request({
url: "region",
data: data
})
}
// 获取所有省市区数据
const createAll = (data) =>{
return request({
url: "region/all",
data: data
})
}
// 获取所有省市数据
const createCity = (data) =>{
return request({
url: "region/pro_city",
data: data
})
}
// 机构列表
const bankIns = (business_order_id) =>{
return request({
url: "business/" + business_order_id + "/ins"
})
}
// 基本信息查看-个人中心
const BaseSee = () =>{
return request({
url: "user/base"
})
}
// 机构详情查看-个人中心
const BankSee = (user_bank_id) =>{
return request({
url: "user/base/" + user_bank_id + "/bank"
})
}
// 机构详情查看-个人中心
const BankIns = (business_institution_id) =>{
return request({
url: "user/base/" + business_institution_id + "/bank_by_ins"
})
}
// 机构列表查看-个人中心
const BankList = () =>{
return request({
url: "user/base/banks"
})
}
// 我的咨询单
const myOrders = (data) =>{
return request({
url: "business/orders",
data: data
})
}
// 进度
const StepsUrl = (business_order_id) =>{
return request({
url: "business/" + business_order_id + "/steps"
})
}
// 服务包查看
const baleSee = (business_order_id) =>{
return request({
url: "business/" + business_order_id + "/order_services"
})
}
// 获取物流公司
const getExpress = () =>{
return request({
url: "express"
})
}
// 发件
const Send = (business_order_id, data) =>{
return request({
url: "business/" + business_order_id + "/expresses",
method: 'POST',
data: data
})
}
// 优惠券
const coupons = (data) =>{
return request({
url: "coupons/user/coupons",
data: data
})
}
// 需要修改的订单资料
const myAffirm = (data) =>{
return request({
url: "business/modify/data",
data: data
})
}
// 需要补差价
const myDiff = (data) =>{
return request({
url: "business/diff_prices",
data: data
})
}
// 需要确认方案数
const myModify = (data) =>{
return request({
url: "business/close_schemes",
data: data
})
}
// 确认方案详情
const myModifyInfo = (business_order_scheme_id) =>{
return request({
url: "business/close_schemes/" + business_order_scheme_id
})
}
// 确认方案详情 - 同意方案
const modifyYes = (business_order_close_scheme_id, data) =>{
return request({
url: "business/close_schemes/" + business_order_close_scheme_id + "/agree",
method: 'POST',
data: data
})
}
// 确认方案详情 - 不同意方案
const modifyNo = (business_order_close_scheme_id, data) =>{
return request({
url: "business/close_schemes/" + business_order_close_scheme_id + "/refuse",
method: 'POST',
data: data
})
}
// 获取用户姓名手机号性别
const userBasic = () =>{
return request({
url: "user/basic"
})
}
// 获取邮寄列表
const expressList = (business_order_id) =>{
return request({
url: "business/" + business_order_id + "/expresses"
})
}
// 查看物流
const logistic = (business_order_express_id) =>{
return request({
url: "business/" + business_order_express_id + "/logistic"
})
}
// 退款完成
const myRefund = (data) =>{
return request({
url: "business/refunds",
data: data
})
}
// 展示法务老师操作记录
const doLogs = (order_id, data) =>{
return request({
url: "business/" + order_id + "/do_logs",
data: data
})
}
// 缓存信息-信用卡展示
const cacheBank = (business_order_user_bank_id) =>{
return request({
url: "business/" + business_order_user_bank_id + "/cache/bank"
})
}
// 缓存信息-信用卡
const cacheBankPut = (business_order_user_bank_id, data) =>{
return request({
url: "business/" + business_order_user_bank_id + "/cache/bank",
method: 'POST',
data: data
})
}
// 签约记录
const getSignLogs = data => {
return request({
url: 'business/flows',
data
})
}
// 获取签约合同
const getFlows = id => {
return request({
url: 'e-signs/flows/' + id
})
}
// 删除用户微信数据和关注
const userSubscribe = () => {
return request({
url: 'user/auth/wechat/subscribe',
method: 'DELETE'
})
}
export {
userIndex,
realName,
judgeReal,
faceUrl,
contractGo,
setting,
Relations,
Parent,
inviteCode,
userBase,
userBank,
basePut,
bankPut,
BaseFirst,
BankFirst,
create,
createAll,
createCity,
bankIns,
BaseSee,
BankSee,
BankIns,
BankList,
myOrders,
StepsUrl,
baleSee,
getExpress,
Send,
coupons,
myAffirm,
myDiff,
myModify,
myModifyInfo,
modifyYes,
modifyNo,
userBasic,
expressList,
logistic,
myRefund,
doLogs,
cacheBank,
cacheBankPut,
getSignLogs,
getFlows,
userSubscribe
}

View File

@@ -0,0 +1,58 @@
<template>
<view>
<checkbox-group @change="checkboxChange">
<view class="idcardAdd-multi-write" v-for="(letterItem, letterIndex) in checkboxList" :key="letterIndex">
<checkbox :value="letterIndex.toString()" :checked="isChecked(letterIndex)" color="#4e7bfe" style="transform:scale(.6); margin-top: -3rpx;"/>
<text>{{letterItem}}</text>
</view>
</checkbox-group>
</view>
</template>
<script>
export default{
name: 'mouldCheckbox',
data(){
return {
}
},
computed: {
isChecked(){
return (index) => {
return this.checkboxVlaue.findIndex(val => val == index) >= 0
}
}
},
props: {
checkboxVlaue: {
type: Array,
default: () => {
return []
}
},
checkboxList: {
type: Array,
default: () => {
return []
}
}
},
watch:{
},
methods: {
checkboxChange(e){
this.$emit('onCheckbox', e.detail.value)
}
}
}
</script>
<style>
.idcardAdd-multi-write {
line-height: 70rpx;
margin-top: $margin;
display: flex;
color: #999999;
}
</style>

62
components/mould-date.vue Normal file
View File

@@ -0,0 +1,62 @@
<template>
<view class="content">
<picker mode="date" :value="valueDate" :start="startDate" :end="endDate" @change="bindDateChange">
<view class="uni-input">{{valueDate}}</view>
</picker>
</view>
</template>
<script>
export default {
name: 'mouldDate',
props: {
bankList: {
type: Array,
default: () => {
return []
}
},
valueDate: {
type : String,
default : ''
}
},
data(){
const currentDate = this.getDate({
format: true
})
return {}
},
computed: {
startDate() {
return this.getDate('start');
},
endDate() {
return this.getDate('end');
}
},
methods: {
bindDateChange(e){
this.$emit('onDate', e.detail.value)
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
}
}
</script>
<style>
</style>

View File

@@ -0,0 +1,67 @@
<template>
<view>
<block v-if="inputType == 'price'">
<input type="digit" :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
<text></text>
</block>
<block v-else-if="inputType == 'number'">
<input type="number" :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
<block v-else-if="inputType == 'day'">
<input type="number" :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
<text></text>
</block>
<block v-else-if="inputType == 'password'">
<input type="text" password :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
<block v-else-if="inputType == 'mobile'">
<input type="number" maxlength="11" :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
<block v-else>
<input v-if="inputKey == 'card_no'" type="number" :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
<input v-else type="text" :placeholder="'请输入' + inputTitle" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
</view>
</template>
<script>
export default{
name: 'mouldInput',
data(){
return {
workIndex: 0
}
},
props: {
inputKey: {
type : String,
default : ''
},
inputType: {
type : String,
default : ''
},
blurValue: {
type : String,
default : ''
},
inputTitle: {
type : String,
default : ''
}
},
onLoad() {},
methods: {
blurInput(e){
this.$emit('onValue', e.detail.value)
}
}
}
</script>
<style>
input {
width: 100%;
height: 100%;
}
</style>

View File

@@ -0,0 +1,55 @@
<template>
<view>
<picker
v-if="bankList.length > 0"
:range="bankList"
range-key="title"
:value="bankValue"
@change="bindPickerChange"
>
<view class="uni-input">{{bankList[bankIndex].title}}</view>
</picker>
</view>
</template>
<script>
export default {
name: 'mouldPicker',
props: {
bankList: {
type: Array,
default: () => {
return []
}
},
bankValue: {
type: Number,
default: () => {
return []
}
}
},
data(){
return {
bankIndex: 0
}
},
watch:{
bankList(e, old){
this.bankIndex = 0;
}
},
onLoad() {
},
methods: {
bindPickerChange(e){
this.bankIndex = e.detail.value
this.$emit('bankPicker', this.bankList[e.detail.value].institution_id)
}
}
}
</script>
<style>
</style>

View File

@@ -0,0 +1,53 @@
<template>
<view>
<radio-group @change="radioChange">
<label class="idcardAdd-aline-write" v-for="(limitItem, limitIndex) in radioList" :key="limitIndex">
<!-- <radio :value="limitIndex.toString()" :checked="checkboxVlaue.toString() == limitIndex.toString()" color="#4e7bfe" style="transform:scale(.65)"/> -->
<radio :value="limitIndex.toString()" :checked="radioVlaue == limitIndex.toString()" color="#4e7bfe" style="transform:scale(.65)"/>
<text>{{limitItem}}</text>
</label>
</radio-group>
</view>
</template>
<script>
export default{
name: 'mouldRadio',
data(){
return {
radioVlaue: null // 选中的会员卡ID
}
},
props: {
radioList: {
type: Array,
default: () => {
return []
}
},
// radioVlaue: {
// type : String,
// default : ''
// },
},
watch:{
radioList(e, old){
this.radioVlaue = null
}
},
methods: {
radioChange(e){
this.radioVlaue = e.detail.value
this.$emit('onRadio', e.detail.value)
}
}
}
</script>
<style>
.idcardAdd-aline-write {
display: inline-block;
font-size: $title-size-lg;
margin-left: 30rpx;
}
</style>

48
components/mould-text.vue Normal file
View File

@@ -0,0 +1,48 @@
<template>
<view class="content">
<textarea placeholder-style="color:#999999; font-size: 30rpx" maxlength="500" :value="blurValue" :placeholder="blurPlaceholder" @input="blurInput"/>
<view class="idcardAdd-depict-number">500字以内</view>
</view>
</template>
<script>
export default{
name: 'mouldText',
data(){
return {}
},
props: {
blurValue : {
type : String,
default : ''
},
blurPlaceholder: {
type : String,
default : ''
},
depictNumber: {
type : String,
default : ''
}
},
onLoad() {
},
methods: {
blurInput(e){
this.$emit('onTextarea', e.detail.value)
}
}
}
</script>
<style lang="scss" scoped>
.content {
width: 100%;
}
.idcardAdd-depict-number {
text-align: right;
font-size: 26rpx;
color: #999;
}
</style>

98
components/mould-tips.vue Normal file
View File

@@ -0,0 +1,98 @@
<template>
<view>
<view class="tipsBack" v-if="seeData.seeShow"></view>
<view class="tipsCont" v-if="seeData.seeShow">
<view class="tipsWhite">
<view class="tipsWhite-top">
<view class="tipsWhite-name">
{{seeData.seeTitle}}
</view>
<view class="tipsWhite-text">
{{seeData.seeText}}
</view>
</view>
<view class="tipsWhite-btn" @click="tipsClick">
知道了
</view>
</view>
</view>
</view>
</template>
<script>
export default{
name: 'mouldTips',
data(){
return {}
},
props: {
seeData: {
type : Object,
default : ''
},
},
onLoad() {
},
methods: {
tipsClick(){
this.$emit('tipsClose', false)
}
}
}
</script>
<style>
.tipsBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .5);
}
.tipsCont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 10%;
box-sizing: border-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
}
.tipsWhite-top {
padding: 30rpx 50rpx;
box-sizing: border-box;
}
.tipsWhite-name {
text-align: center;
color: #111111;
font-size: 34rpx;
font-weight: 600;
margin-bottom: 30rpx;
}
.tipsWhite-text {
font-size: 30rpx;
color: #666666;
line-height: 48rpx;
}
.tipsWhite-btn {
color: #446EFE;
line-height: 100rpx;
text-align: center;
border-top: 2rpx solid #F6F6F6;
}
</style>

View File

@@ -0,0 +1,43 @@
<template>
<view>
<picker
v-if="selectList.length > 0"
:range="selectList"
:value="selectValue"
@change="bindPickerChange"
>
<view class="uni-input">{{selectList[selectValue]}}</view>
</picker>
</view>
</template>
<script>
export default {
name: 'mouldSelect',
props: {
selectList: {
type: Array,
default: () => {
return []
}
},
selectValue: {
type: String,
default: ''
},
},
data(){
return {}
},
onShow() {},
methods: {
bindPickerChange(e){
this.$emit('bankPicker', e.detail.value)
}
}
}
</script>
<style>
</style>

25
index.html Normal file
View File

@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app">
<!--app-html-->
<!--组件引用-->
<go-back></go-back>
</div>
<script type="module" src="/main.js"></script>
</body>
</html>

49
main.js Normal file
View File

@@ -0,0 +1,49 @@
import App from './App'
// #ifndef VUE3
import Vue from 'vue';
import { router, RouterMount } from './router';
import webUni from '@/static/uni.webview.js'
import store from './store';
import uView from "uview-ui";
Vue.use(uView);
Vue.use(router)
// 页面转成JPG
import html2canvas from 'html2canvas';
Vue.use(html2canvas)
// 导入组件库-海报
import VueCanvasPoster from 'vue-canvas-poster'
// 注册组件库-海报
Vue.use(VueCanvasPoster)
//微信支付
Vue.prototype.$wx = require('jweixin-module')
Vue.prototype.$store = store
Vue.prototype.$webUni = webUni
// Vue.prototype.$urlName = 'https://web.douhuofalv.com/webWechat/index'
// Vue.prototype.$urlName = 'https://web.douhuotest.douhuofalv.com/webWechat/index'
Vue.config.ignoredElements = [...Vue.config.ignoredElements, 'wx-open-launch-weapp']
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef H5
RouterMount(app,router,'#app')
// #endif
// #ifdef VUE3
import {
createSSRApp
} from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif

89
manifest.json Normal file
View File

@@ -0,0 +1,89 @@
{
"name" : "douhuo",
"appid" : "__UNI__21B714A",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {},
/* SDK */
"sdkConfigs" : {}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2",
"h5" : {
"router" : {
"mode" : "history"
},
"title" : "抖火法律",
"devServer" : {
"https" : true
},
"sdkConfigs" : {
"maps" : {}
},
"optimization" : {
"treeShaking" : {
"enable" : true
}
}
}
}

191
package-lock.json generated Normal file
View File

@@ -0,0 +1,191 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@babel/parser": {
"version": "7.21.8",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.21.8.tgz",
"integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA=="
},
"@babel/runtime": {
"version": "7.20.13",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.20.13.tgz",
"integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
"requires": {
"regenerator-runtime": "^0.13.11"
}
},
"@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"requires": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
}
},
"@vue/devtools-api": {
"version": "6.4.5",
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz",
"integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
},
"base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
},
"copy-text-to-clipboard": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz",
"integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q=="
},
"core-js": {
"version": "3.27.2",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.27.2.tgz",
"integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w=="
},
"css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"requires": {
"utrie": "^1.0.2"
}
},
"csstype": {
"version": "3.1.2",
"resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
"html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"requires": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
}
},
"jweixin-module": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
},
"mutation-observer": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
},
"nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
"postcss": {
"version": "8.4.23",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.23.tgz",
"integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
"requires": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
}
},
"regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
},
"text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"requires": {
"utrie": "^1.0.2"
}
},
"uni-read-pages": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz",
"integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA=="
},
"uni-simple-router": {
"version": "2.0.8-beta.4",
"resolved": "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.8-beta.4.tgz",
"integrity": "sha512-ipTHhOaRvjV8qrt3HosX5pNMhwFYBnFOuKyV5joH0evfXubjrGI5tjdwpmwzfW5h3VBth3iAqScv+pW/QmIJXw=="
},
"utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"requires": {
"base64-arraybuffer": "^1.0.2"
}
},
"uview-ui": {
"version": "2.0.31",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
"integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw=="
},
"vconsole": {
"version": "3.15.0",
"resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.0.tgz",
"integrity": "sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==",
"requires": {
"@babel/runtime": "^7.17.2",
"copy-text-to-clipboard": "^3.0.1",
"core-js": "^3.11.0",
"mutation-observer": "^1.0.3"
}
},
"vue": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.14.tgz",
"integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
"requires": {
"@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": {
"core-js": {
"version": "2.6.12",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
}
}
},
"vuex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
"integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
"requires": {
"@vue/devtools-api": "^6.0.0-beta.11"
}
}
}
}

17
package.json Normal file
View File

@@ -0,0 +1,17 @@
{
"main": "main.js",
"dependencies": {
"html2canvas": "^1.4.1",
"jweixin-module": "^1.6.0",
"uni-read-pages": "^1.0.5",
"uni-simple-router": "^2.0.8-beta.4",
"uview-ui": "^2.0.31",
"vconsole": "^3.15.0",
"vue-canvas-poster": "^1.2.1",
"vuex": "^4.1.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "张慢慢"
}

617
pages.json Normal file
View File

@@ -0,0 +1,617 @@
{
"pages": [ //pages数组中第一项表示应用启动页参考https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"aliasPath": "/index",
"name": "Index",
"style": {
"navigationBarTitleText": "抖火法律",
"navigationStyle": "custom"
}
}, {
"path": "pages/index/details",
"aliasPath": "/index/details",
"name": "indexDetails",
"style": {
"navigationBarTitleText": "法律常识"
}
}, {
"path": "pages/index/collect",
"aliasPath": "/index/collect",
"name": "indexCollect",
"auth": true,
"style": {
"navigationBarTitleText": "文章收藏"
}
}, {
"path": "pages/index/lawyerDet",
"aliasPath": "/index/lawyerDet",
"name": "lawyerDetails",
"auth": true,
"style": {
"navigationBarTitleText": "律师详情"
}
}, {
"path": "pages/index/introduce",
"aliasPath": "/index/introduce",
"auth": true,
"name": "indexIntroduce",
"style": {
"navigationBarTitleText": "抖火法律咨询服务"
}
}, {
"path": "pages/index/sortInfo",
"aliasPath": "/index/sortInfo",
"auth": true,
"name": "indexSort",
"style": {
"navigationBarTitleText": "抖火法律"
}
}, {
"path": "pages/index/sortPay",
"aliasPath": "/index/sortPay",
"name": "indexSortpay",
"auth": true,
"style": {
"navigationBarTitleText": "支付"
}
}, {
"path": "pages/index/sortPoint",
"aliasPath": "/index/sortPoint",
"name": "sortPoint",
"style": {
"navigationBarTitleText": "支付成功"
}
}, {
"path": "pages/index/general",
"aliasPath": "/index/general",
"name": "indexGeneral",
"auth": true,
"style": {
"navigationBarTitleText": "关注公众号"
}
}, {
"path": "pages/index/workSearch",
"aliasPath": "/index/workSearch",
"name": "indexWork",
"auth": true,
"style": {
"navigationBarTitleText": "绑定业务员"
}
}, {
"path": "pages/login/login",
"aliasPath": "/login/login",
"name": "Login",
"style": {
"navigationBarTitleText": "抖火法律-登录"
}
}, {
"path": "pages/login/agreement",
"aliasPath": "/login/agreement",
"name": "Agreement",
"style": {
"navigationBarTitleText": "用户协议"
}
}, {
"path": "pages/login/forget",
"aliasPath": "/login/forget",
"name": "Forget",
"style": {
"navigationBarTitleText": "找回密码"
}
}, {
"path": "pages/login/modify",
"aliasPath": "/login/modify",
"name": "Modify",
"auth": true,
"style": {
"navigationBarTitleText": "修改密码"
}
}, {
"path": "pages/login/register",
"aliasPath": "/login/register",
"name": "Register",
"style": {
"navigationBarTitleText": "抖火法律-注册"
}
}, {
"path": "pages/user/index",
"aliasPath": "/user/index",
"name": "User",
"style": {
"navigationBarTitleText": "个人中心",
"navigationStyle": "custom"
}
}, {
"path": "pages/user/coupon",
"aliasPath": "/user/coupon",
"name": "Coupon",
"auth": true,
"style": {
"navigationBarTitleText": "优惠券"
}
}, {
"path": "pages/user/setup",
"aliasPath": "/user/setup",
"name": "Setup",
"auth": true,
"style": {
"navigationBarTitleText": "其他功能"
}
}, {
"path": "pages/user/manage",
"aliasPath": "/user/manage",
"name": "Manage",
"auth": true,
"style": {
"navigationBarTitleText": "信息管理"
}
}, {
"path": "pages/user/manageBase",
"aliasPath": "/user/manageBase",
"name": "userBase",
"auth": true,
"style": {
"navigationBarTitleText": "基础信息"
}
}, {
"path": "pages/user/manageBank",
"aliasPath": "/user/manageBank",
"name": "userBank",
"auth": true,
"style": {
"navigationBarTitleText": "银行信息管理"
}
}, {
"path": "pages/user/manageOther",
"aliasPath": "/user/manageOther",
"name": "userOther",
"auth": true,
"style": {
"navigationBarTitleText": "银行其他管理"
}
}, {
"path": "pages/user/manageIns",
"aliasPath": "/user/manageIns",
"name": "Ins",
"auth": true,
"style": {
"navigationBarTitleText": "机构列表"
}
}, {
"path": "pages/user/referee",
"aliasPath": "/user/referee",
"name": "Referee",
"auth": true,
"style": {
"navigationBarTitleText": "我的伙伴"
}
}, {
"path": "pages/user/parent",
"aliasPath": "/user/parent",
"name": "Parent",
"auth": true,
"style": {
"navigationBarTitleText": "业务联系人"
}
}, {
"path": "pages/user/appDown",
"aliasPath": "/user/appDown",
"name": "AppDown",
"auth": true,
"style": {
"navigationBarTitleText": "APP下载"
}
}, {
"path": "pages/user/orderAffirm",
"aliasPath": "/user/orderAffirm",
"name": "OrderAffirm",
"auth": true,
"style": {
"navigationBarTitleText": "修改订单资料"
}
}, {
"path": "pages/user/orderMake",
"aliasPath": "/user/orderMake",
"name": "OrderMake",
"auth": true,
"style": {
"navigationBarTitleText": "补交服务费"
}
}, {
"path": "pages/user/orderModify",
"aliasPath": "/user/orderModify",
"name": "OrderModify",
"auth": true,
"style": {
"navigationBarTitleText": "待确认方案"
}
}, {
"path": "pages/user/orderModifyInfo",
"aliasPath": "/user/orderModifyInfo",
"name": "OrderModifyInfo",
"auth": true,
"style": {
"navigationBarTitleText": "结案方案"
}
}, {
"path": "pages/user/invite",
"aliasPath": "/user/invite",
"name": "Invite",
"auth": true,
"style": {
"navigationBarTitleText": "邀请码"
}
}, {
"path": "pages/user/signLog",
"aliasPath": "/user/signLog",
"name": "SignLog",
"auth": true,
"style": {
"navigationBarTitleText": "合同列表"
}
}, {
"path": "pages/user/contract",
"aliasPath": "/user/contract",
"name": "Contract",
"auth": true,
"style": {
"navigationBarTitleText": "合同查看"
}
}, {
"path": "pages/filePreview",
"aliasPath": "/pages/filePreview",
"name": "FilePreview",
"auth": true,
"style": {
"navigationBarTitleText": "合同查看"
}
}, {
"path": "pages/modify/modify-bank",
"aliasPath": "/modify/modify-bank",
"name": "ModifyBank",
"auth": true,
"style": {
"navigationBarTitleText": "银行信息"
}
}, {
"path": "pages/modify/modify-other",
"aliasPath": "/modify/modify-other",
"name": "ModifyOther",
"auth": true,
"style": {
"navigationBarTitleText": "银行信息"
}
}, {
"path": "pages/modify/modify-base",
"aliasPath": "/modify/modify-base",
"name": "ModifyBase",
"auth": true,
"style": {
"navigationBarTitleText": "基础信息"
}
}, {
"path": "pages/sheet/index",
"aliasPath": "/sheet/index",
"name": "sheetIndex",
"auth": true,
"style": {
"navigationBarTitleText": "咨询单"
}
}, {
"path": "pages/sheet/create",
"aliasPath": "/sheet/create",
"name": "sheetCreate",
"style": {
"navigationBarTitleText": "选择咨询类型"
}
}, {
"path": "pages/sheet/basic",
"aliasPath": "/sheet/basic",
"name": "sheetBasic",
"style": {
"navigationBarTitleText": "基本信息"
}
}, {
"path": "pages/sheet/loan",
"aliasPath": "/sheet/loan",
"name": "sheetLoan",
"style": {
"navigationBarTitleText": "抖火法律"
}
}, {
"path": "pages/sheet/payment",
"aliasPath": "/sheet/payment",
"name": "sheetPayment",
"style": {
"navigationBarTitleText": "支付"
}
}, {
"path": "pages/sheet/estimate",
"aliasPath": "/sheet/estimate",
"name": "sheetEstimate",
"style": {
"navigationBarTitleText": "预估方案"
}
}, {
"path": "pages/sheet/idcard",
"aliasPath": "/sheet/idcard",
"name": "sheetIdcard",
"style": {
"navigationBarTitleText": "实名认证"
}
}, {
"path": "pages/sheet/pay",
"aliasPath": "/sheet/pay",
"name": "sheetPay",
"style": {
"navigationBarTitleText": "预约咨询订单"
}
}, {
"path": "pages/sheet/point",
"aliasPath": "/sheet/point",
"name": "sheetPoint",
"style": {
"navigationBarTitleText": "认证成功"
}
}, {
"path": "pages/sheet/authSuccess",
"aliasPath": "/sheet/authSuccess",
"name": "Authsuccess",
"style": {
"navigationBarTitleText": "认证成功"
}
}, {
"path": "pages/sheet/speed",
"aliasPath": "/sheet/speed",
"name": "sheetSpeed",
"style": {
"navigationBarTitleText": "咨询单进度"
}
}, {
"path": "pages/sheet/express",
"aliasPath": "/sheet/express",
"name": "sheetExpress",
"style": {
"navigationBarTitleText": "快递邮寄"
}
}, {
"path": "pages/sheet/process",
"aliasPath": "/sheet/process",
"name": "sheetProcess",
"style": {
"navigationBarTitleText": "审核中"
}
}, {
"path": "pages/sheet/handle",
"aliasPath": "/sheet/handle",
"name": "sheetHandle",
"style": {
"navigationBarTitleText": "记录列表"
}
}, {
"path": "pages/sheet/bale",
"aliasPath": "/sheet/bale",
"name": "sheetBale",
"style": {
"navigationBarTitleText": "服务包"
}
}, {
"path": "pages/sheet/logistic",
"aliasPath": "/sheet/logistic",
"name": "sheetLogistic",
"style": {
"navigationBarTitleText": "物流信息"
}
}, {
"path": "pages/webview/webview",
"aliasPath": "/webview/webview",
"name": "webviewIndex",
"style": {
"navigationBarTitleText": ""
}
}, {
"path": "pages/webview/webCode",
"aliasPath": "/webview/webCode",
"name": "webCodeIndex",
"style": {
"navigationBarTitleText": ""
}
}, {
"path": "pages/webWechat/index",
"aliasPath": "/webWechat/index",
"name": "webWechatIndex",
"style": {
"navigationBarTitleText": ""
}
}, {
"path": "pages/app/eSigna",
"aliasPath": "/app/e-sign",
"name": "appESign",
"style": {
"navigationBarTitleText": "结果",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/synthesis/feeWrite",
"aliasPath": "/synthesis/feeWrite",
"name": "FeeWrite",
"style": {
"navigationBarTitleText": "个人法律咨询"
}
}, {
"path": "pages/synthesis/feeConfirm",
"aliasPath": "/synthesis/feeConfirm",
"name": "FeeConfirm",
"style": {
"navigationBarTitleText": "个人法律咨询-咨询详单"
}
}, {
"path": "pages/synthesis/standBrief",
"aliasPath": "/synthesis/standBrief",
"name": "StandBrief",
"style": {
"navigationBarTitleText": "企业全年法律"
}
}, {
"path": "pages/synthesis/standWrite",
"aliasPath": "/synthesis/standWrite",
"name": "StandWrite",
"style": {
"navigationBarTitleText": "企业全年法律-咨询"
}
}, {
"path": "pages/synthesis/personBrief",
"aliasPath": "/synthesis/personBrief",
"name": "PersonBrief",
"style": {
"navigationBarTitleText": "个人法律咨询365服务包"
}
}, {
"path": "pages/synthesis/personWrite",
"aliasPath": "/synthesis/personWrite",
"name": "PersonWrite",
"style": {
"navigationBarTitleText": "个人法律咨询365服务包"
}
}, {
"path": "pages/synthesis/feePay",
"aliasPath": "/synthesis/feePay",
"name": "FeePay",
"style": {
"navigationBarTitleText": "订单支付"
}
}, {
"path": "pages/synthesis/payPoint",
"aliasPath": "/synthesis/payPoint",
"name": "PayPoint",
"style": {
"navigationBarTitleText": "支付成功"
}
}, {
"path": "pages/synthesis/entrustBrief",
"aliasPath": "/synthesis/entrustBrief",
"name": "EntrustBrief",
"auth": true,
"style": {
"navigationBarTitleText": "案件委托"
}
}, {
"path": "pages/synthesis/entrustWrite",
"aliasPath": "/synthesis/entrustWrite",
"name": "EntrustWrite",
"auth": true,
"style": {
"navigationBarTitleText": "案件委托-咨询"
}
}, {
"path": "pages/synthesis/entrustCivil",
"aliasPath": "/synthesis/entrustCivil",
"name": "EntrustCivil",
"auth": true,
"style": {
"navigationBarTitleText": "案件委托-咨询"
}
}, {
"path": "pages/synthesis/expandBrief",
"aliasPath": "/synthesis/expandBrief",
"name": "ExpandBrief",
"auth": true,
"style": {
"navigationBarTitleText": "拓展服务"
}
}, {
"path": "pages/synthesis/expandWrite",
"aliasPath": "/synthesis/expandWrite",
"name": "ExpandWrite",
"auth": true,
"style": {
"navigationBarTitleText": "拓展服务-咨询"
}
}, {
"path": "pages/synthesis/order",
"aliasPath": "/synthesis/order",
"name": "synthesisOrder",
"style": {
"navigationBarTitleText": "综法咨询单"
}
}, {
"path": "pages/synthesis/seekOrder",
"aliasPath": "/synthesis/seekOrder",
"name": "SeekOrder",
"style": {
"navigationBarTitleText": "综法-咨询单"
}
}, {
"path": "pages/synthesis/yearOrder",
"aliasPath": "/synthesis/yearOrder",
"name": "YearOrder",
"style": {
"navigationBarTitleText": "综法-年费单"
}
}, {
"path": "pages/synthesis/yearConfirm",
"aliasPath": "/synthesis/yearConfirm",
"name": "YearConfirm",
"style": {
"navigationBarTitleText": "综法-咨询单"
}
}, {
"path": "pages/synthesis/entrustOrder",
"aliasPath": "/synthesis/entrustOrder",
"name": "EntrustOrder",
"style": {
"navigationBarTitleText": "综法-委托单"
}
}, {
"path": "pages/synthesis/expandOrder",
"aliasPath": "/synthesis/expandOrder",
"name": "ExpandOrder",
"style": {
"navigationBarTitleText": "综法-拓展单"
}
}, {
"path": "pages/synthesis/voucherOpen",
"aliasPath": "/synthesis/voucherOpen",
"name": "VoucherOpen",
"style": {
"navigationBarTitleText": "综法-上传凭证"
}
}, {
"path": "pages/synthesis/diffList",
"aliasPath": "/synthesis/diffList",
"name": "DiffList",
"style": {
"navigationBarTitleText": "补差列表"
}
}
],
"globalStyle": {
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"backgroundColor": "#f3f4f6",
"navigationStyle": "default"
},
"uniIdRouter": {},
"tabBar": {
"color": "#9b9f9f",
"selectedColor": "#da2b56",
"backgroundColor": "#FFFFFF",
"borderStyle": "#ddd",
"list": [{
"pagePath": "pages/index/index",
"text": "抖火法律",
"iconPath": "static/tabBar/tabBar_icon_00.png",
"selectedIconPath": "static/tabBar/tabBar_show_00.png"
}, {
"pagePath": "pages/user/index",
"text": "个人中心",
"iconPath": "static/tabBar/tabBar_icon_01.png",
"selectedIconPath": "static/tabBar/tabBar_show_01.png"
}]
}
}

46
pages/404/404.vue Normal file
View File

@@ -0,0 +1,46 @@
<template>
<view class="content vertical">
<image src="@/static/404/404.png" mode="widthFix"></image>
<view class="text">出错了</view>
<view class="text">你访问的页面以离开了地球~</view>
<button type="default" size="mini" @click="$Router.replaceAll({name: 'Index'})">返回首页</button>
</view>
</template>
<script>
export default {
data() {
return {
};
}
}
</script>
<style lang="scss" scoped>
.content{
height: 100vh;
width: 100vw;
text-align: center;
padding-bottom: 20vh;
background: #2e065f;
.text{
color: #dbb6ec;
line-height: 60rpx;
font-size: $title-size-m;
}
button{
height: 80rpx;
line-height: 80rpx;
width: 60vw;
font-size: $title-size-lg;
border-radius: 0;
margin-top: $margin*2;
background: white;
color: #2e065f;
&::after{
border: none;
}
}
}
</style>

105
pages/app/eSigna.vue Normal file
View File

@@ -0,0 +1,105 @@
<template>
<view class="content">
<view class="point">
<image class="point-img" src="/static/imgs/signsSuccess.jpg" mode="widthFix"></image>
<view class="point-text">
<view class="point-name">
{{title}}
</view>
<view class="point-tips">
<text>{{content}}</text>
</view>
<!-- <view class="point-btn">
<view class="btn" @click="onBack">
返回
</view>
</view> -->
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
title: '未知',
content: '-'
};
},
onShow() {
if(this.$Route.query.sign_type === 'personal') {
this.title = "认证成功"
this.content = "实名认证成功"
}
if(this.$Route.query.sign_type === 'order') {
this.title = "签约成功"
this.content = "恭喜您已完成签约"
}
},
methods: {
onBack(){
this.$webUni.postMessage({
data: {
type: 'back',
val : this.$Route.query.sign_type
}
})
// try{
// window.location = "doufire://"
// if(uni.getSystemInfoSync().platform == 'android'){
// let ifr = document.createElement('iframe');
// ifr.src = "doufire://";
// ifr.style.display = 'none';
// document.body.appendChild(ifr);
// }else{
// }
// }catch(e){
// uni.showToast({
// title: e,
// icon : 'none'
// })
// }
}
}
}
</script>
<style lang="scss">
.point {
text-align: center;
padding: 40% 0;
.point-img {
width: 50%;
margin: 0 auto 10rpx;
}
.point-text {
.point-name {
font-size: $title-size + 14;
}
.point-tips{
margin: $margin + 20 0 $margin*3;
line-height: 52rpx;
text {
display: block;
color: #999999;
}
}
}
.point-btn {
text-align: center;
.btn {
background-color: #446EFE;
display: inline-block;
color: #ffffff;
border-radius: $radius-m;
padding: 0 $padding;
line-height: 90rpx;
width: 70%;
}
}
}
</style>

64
pages/filePreview.vue Normal file
View File

@@ -0,0 +1,64 @@
<template>
<view>
<view class="pack-center pages-hint grey" v-if="loading">
<image src="/static/imgs/loadingGif.gif" ></image>
<view>疯狂加载中...</view>
</view>
<web-view :src="pdfUrl"></web-view>
<!-- <web-view src="https://uniapp.dcloud.io/static/web-view.html"></web-view> -->
<!-- <web-view src="/static/hybrid/web/viewer.html" :webview-styles="{height:'100%'}"></web-view> -->
</view>
</template>
<script>
export default {
data() {
return {
viewerUrl : '/static/hybrid/web/viewer.html',
pdfUrl : '',
loading : true
};
},
onLoad(params){
let that = this
setTimeout(function() {
that.loading = false
const urlStr = params.url; // 这里是获取的url值
that.pdfUrl = `${that.viewerUrl}?file=${decodeURIComponent(urlStr)}`;
}, 2000);
},
onBackPress(){}
}
</script>
<style>
.pack-center {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: -1;
}
.pages-hint {
width: 100%;
text-align: center;
color: #747788;
font-size: 28rpx;
background: white;
background-color: #f9f9f9;
}
.pages-hint image {
width: 220rpx;
height: 220rpx;
}
</style>

200
pages/index/collect.vue Normal file
View File

@@ -0,0 +1,200 @@
<template>
<view class="content">
<view class="list-tabs">
<scroll-view class="list-classify" scroll-x="true" show-scrollbar="false" scroll-with-animation>
<view v-for="(item, index) in articleArr" :key="index" class="list-tabs-item" :class="{show : categoryId == item.category_id}" @click="onTabs(item.category_id)">{{item.title}}</view>
</scroll-view>
</view>
<view class="list-item" v-if="listArr.length > 0">
<view class="list-item-label" v-for="(item, index) in listArr" :key="index" @click="$Router.push({name: 'indexDetails', params: {id: item.favoriteable.article_id}})">
<view class="list-item-img">
<!-- 5:6 -->
<image :src="item.favoriteable.cover" mode="aspectFill"></image>
</view>
<view class="list-item-cont">
<view class="nowrap list-item-name">
{{item.favoriteable.title}}
</view>
<view class="list-item-see">
<image class="list-item-icon" src="@/static/imgs/indexSee.png"></image>{{item.favoriteable.clicks}} 游览
</view>
<view class="list-item-tips" v-for="(items, itemsIndex) in item.favoriteable.categories" :key="itemsIndex">
{{items.title}}
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无数据</view>
</view>
</view>
</template>
<script>
import { myCollect } from '@/apis/interfaces/index'
export default {
data() {
return {
articleArr : '', // 分类
categoryId : 1, // 分类id
listArr : '', // 列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
}
},
onShow() {
// 获取我的收藏
this.collectInfo();
},
methods: {
// 获取我的收藏
collectInfo(page) {
myCollect({
category_id: this.categoryId,
page : page || 1
}).then(res => {
let list = this.listArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(res.favorites.data)
this.articleArr = res.categories
this.listArr = newData
this.page = res.favorites.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 文章分类筛选
onTabs(e) {
this.categoryId = e
// 获取我的收藏
this.collectInfo();
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取我的收藏
this.collectInfo()
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取我的收藏
this.collectInfo(pageNumber)
}
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f6f6f6;
overflow-y: scroll;
height: 100vh;
// height: calc(100vh - 44px);
}
.list-classify {
background-color: #fff;
white-space: nowrap;
padding: 20rpx $padding;
box-sizing: border-box;
position: fixed;
top: 44px;
left: 0;
z-index: 9;
width: 100%;
.list-tabs-item {
display: inline-block;
font-size: $title-size-m;
color: #a5a5a5;
margin-right: 40rpx;
line-height: 54rpx;
position: relative;
background-color: #f6f6f6;
color: #000;
padding: 0 20rpx;
border-radius: $radius * 3;
&.show {
background-color: $mian-color;
color: #fff;
}
&:last-child {
margin-right: 0;
}
}
::-webkit-scrollbar{
width: 0;
height: 0;
color: transparent;
}
}
// 列表
.list-item {
margin-top: 110rpx;
.list-item-label {
padding: $padding;
box-sizing: border-box;
margin-bottom: $margin;
position: relative;
background-color: #ffffff;
.list-item-img {
width: 200rpx;
height: 150rpx;
border:1px solid #d2d2d2;
border-radius: $radius - 10;
overflow: hidden;
box-sizing: border-box;
image {
width: 100%;
vertical-align:middle;
}
}
.list-item-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: $padding $padding $padding 250rpx;
box-sizing: border-box;
box-sizing: border-box;
.list-item-name {
color: $text-color;
line-height: 44rpx;
font-size: $title-size-m;
}
.list-item-see {
font-size: $title-size-sm - 4;
margin-top: 30rpx;
display: flex;
line-height: 30rpx;
.list-item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 10rpx;
}
}
.list-item-tips {
font-size: $title-size-sm - 4;
display: inline-block;
color: #a1a1a1;
padding-left: 40rpx;
}
}
}
}
</style>

165
pages/index/details.vue Normal file
View File

@@ -0,0 +1,165 @@
<template>
<view class="content">
<view class="title">
{{articleData.title}}
</view>
<view class="see">
<view class="seeTips" v-for="(item, index) in articleData.categories" :key="index">
{{item.title}}
</view>
<view class="seeTime">
{{articleData.created_at}}
</view>
<view class="seeName">
<image src="@/static/imgs/collect.png" mode="widthFix"></image><text>{{articleData.clicks}}</text>
</view>
</view>
<view class="brief" v-if="articleData.sub_title">
<image src="@/static/imgs/detailsImg.png" mode="widthFix"></image>{{articleData.sub_title}}
</view>
<view class="subject">
<rich-text :nodes="articleContent"></rich-text>
</view>
<view class="collect">
<view class="collect-btn" :class="{active : articleData.isFavorite}" @click="favoriteClick">
<image :src="articleData.isFavorite ? '/static/imgs/collect_active.png' : '/static/imgs/collect.png'" mode="widthFix"></image>
<text>{{articleData.isFavorite ? '已收藏' : '收藏'}}</text>
</view>
</view>
</view>
</template>
<script>
import { articleBrief, collect } from '@/apis/interfaces/index'
export default {
data() {
return {
articleData : '', // 文章详情
articleContent: '', // 文章内容
}
},
onShow() {
// 获取文章列详情
this.articleInfo();
},
methods: {
// 文章列详情
articleInfo(page) {
articleBrief(this.$Route.query.id).then(res => {
this.articleData = res
this.articleContent= res.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"')
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 收藏
favoriteClick() {
collect(this.$Route.query.id).then(res => {
// 获取文章列详情
this.articleInfo();
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
padding: $padding;
box-sizing: border-box;
}
.title {
font-size: $title-size + 8;
line-height: 58rpx;
}
.see {
margin: $margin 0 $margin + 10;
display: flex;
font-size: $title-size-sm - 2;
line-height: 40rpx;
position: relative;
.seeTips {
color: #686868;
background-color: #ececec;
padding: 0 10rpx;
border-radius: $radius-sm - 4;
margin-right: $margin;
}
.seeName {
position: absolute;
right: 0;
top: 0;
display: flex;
image {
width: 30rpx;
height: 30rpx;
margin: 7rpx 10rpx 0 0;
}
}
.seeTime {
color: #cfcfcf;
}
}
.brief {
font-size: $title-size-sm;
margin: $margin 0;
background-color: #f5f5f5;
border-radius: $radius-sm - 4;
padding: $padding $padding + 10;
box-sizing: border-box;
line-height: 42rpx;
text-align: justify;
display: flex;
image {
width: 34rpx;
height: 34rpx;
margin-right: 20rpx;
margin-top: 8rpx;
}
}
.subject {
font-size: $title-size-lg;
line-height: 48rpx;
}
.collect {
position: fixed;
right: 0;
bottom: 30rpx;
z-index: 9;
width: 100%;
text-align: center;
.collect-btn {
background-color: #f5f5f5;
border-radius: $radius * 3;
height: 80rpx;
display: inline-block;
text-align: center;
margin: 0 auto;
padding: 0 $padding + 10;
line-height: 80rpx;
font-size: $title-size-m;
color: #000000;
&.active {
background-color: $mian-color;
color: #ffffff;
}
image {
width: 36rpx;
height: 36rpx;
margin: 0 10rpx 0 0;
vertical-align: -6rpx;
}
}
}
</style>

62
pages/index/general.vue Normal file
View File

@@ -0,0 +1,62 @@
<template>
<view class="content">
<image class="code-img" src="@/static/imgs/code_back.jpg" mode="widthFix"></image>
<view class="code-btn">
<image class="code-btn-go" src="/static/imgs/code_btn.png" mode="widthFix" @click="$Router.push({name: 'Index'})"></image>
</view>
<image class="code-back" src="../../static/imgs/code_bottom.png" mode="widthFix"></image>
</view>
</template>
<script>
import { wechatCode } from '@/apis/interfaces/index'
export default {
data() {
return {
}
},
onLoad(options) {
// 获取微信code
wechatCode({
code: this.$Route.query.code
}).then(res => {}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #1f25ae;
height: 100%;
}
.code-img {
width: 100%;
}
.code-back {
position: relative;
bottom: 0;
left: 0;
width: 100%;
}
.code-btn {
position: relative;
bottom: 20%;
z-index: 9;
width: 100%;
left: 0;
text-align: center;
.code-btn-go {
width: 50%;
margin: 0 auto;
}
}
</style>

View File

@@ -0,0 +1,890 @@
<template>
<view class="content">
<!-- top -->
<view class="top">
<view class="topBack"></view>
<view class="topCont">
<!-- logo -->
<view class="topCont-logo">
<image class="topCont-logo-img" src="@/static/imgs/logo_title.png" mode="widthFix"></image>
<view class="topCont-logo-go" @click="seekClick">
立即咨询
</view>
</view>
<!-- 专业优质在线法律平台 -->
<view class="topCont-text">
<view class="topCont-text-name">
专业优质在线法律平台
</view>
<view class="topCont-text-tips">
<text v-if="homeData.attorney">
{{homeData.attorney.value}}+{{homeData.attorney.name}}
</text>
<block v-if="homeData.use_count">{{homeData.use_count.value}}+{{homeData.use_count.name}}</block>
</view>
</view>
<!-- 平台公告 -->
<view class="topCont-notice">
<view class="topCont-notice-name"><image src="@/static/imgs/noticeArrow.png" mode="widthFix"></image>平台公告</view>
<view class="topCont-notice-cont">
<view class="topCont-notice-title">今日</view>
<swiper class="topCont-notice-swiper" circular :autoplay="autoplay" :interval="interval"
:duration="duration" vertical="y">
<block v-for="(item, index) in noticesArr" :key="index">
<swiper-item>
<view class="topCont-swiper-item">
<view class="topCont-swiper-name nowrap" v-if="item.user">
{{item.user.name}} {{item.user.text}}
</view>
<view class="topCont-swiper-name nowrap" v-else>
今日暂无信息
</view>
</view>
</swiper-item>
</block>
</swiper>
</view>
</view>
<!-- 按钮链接 -->
<view class="topCont-tool">
<view class="topCont-tool-left">
<view class="topCont-tool-cont" @click="seekClick('other', 1)">
<!-- @click="$Router.push({name: 'sheetLoan', params: {type: 1}}) -->
<view class="topCont-whole-name">
经济纠纷
</view>
<view class="topCont-whole-tips">
咨询服务 抖火法律
</view>
<image class="topCont-whole-img" src="@/static/imgs/toolImg_00.png" mode="widthFix"></image>
</view>
</view>
<view class="topCont-tool-right">
<view class="topCont-tool-label" @click="seekClick('other', 2)">
<view class="topCont-tool-cont">
<view class="topCont-tool-name">
刑事辩护
</view>
<view class="topCont-tool-tips">
咨询服务 抖火法律
</view>
<image class="topCont-tool-img" src="@/static/imgs/toolImg_03.png" alt=""></image>
</view>
</view>
<view class="topCont-tool-label" @click="seekClick('other', 3)">
<view class="topCont-tool-cont">
<view class="topCont-tool-name">
合同纠纷
</view>
<view class="topCont-tool-tips">
咨询服务 抖火法律
</view>
<image class="topCont-tool-img" src="@/static/imgs/toolImg_02.png" alt=""></image>
</view>
</view>
</view>
</view>
<!-- 数据展示 -->
<view class="topCont-data">
<view class="topCont-data-label" v-if="homeData.consult">
{{homeData.consult.name}}<text>{{homeData.consult.value}}</text>
</view>
<view class="topCont-data-label" v-if="homeData.sucess_count">
{{homeData.sucess_count.name}}<text>{{homeData.sucess_count.value}}</text>
</view>
<view class="topCont-data-label" v-if="homeData.success_rate">
{{homeData.success_rate.name}}<text>{{homeData.success_rate.value}}</text>
</view>
</view>
</view>
</view>
<!-- 工具 -->
<!-- <view class="tool">
<scroll-view class="tool-lable" scroll-x="true" show-scrollbar="false">
<view class="tool-lable-item" v-for="(item, index) in lawyersWork" :key="index" @click="$Router.push({name: 'indexSort', params: {id: item.lawyer_business_id}})">
<image :src="item.cover" class="tool-lable-img"></image>
<view class="tool-lable-name">
{{item.title}}
</view>
</view>
</scroll-view>
</view> -->
<!-- 金牌律师 -->
<view class="list">
<view class="list-title">
金牌律师
</view>
<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>
</view>
<!-- 法律常识 -->
<view class="list">
<view class="list-title">
法律常识
</view>
<view class="list-tabs">
<scroll-view class="list-classify" scroll-x="true" show-scrollbar="false">
<view v-for="(item, index) in articleArr" :key="index" class="list-tabs-item" :class="{show : categoryId == item.category_id}" @click="onTabs(item.category_id)">{{item.title}}</view>
</scroll-view>
</view>
<view class="list-item">
<view class="list-item-label" v-for="(item, index) in listArr" :key="index" @click="$Router.push({name: 'indexDetails', params: {id: item.article_id}})">
<view class="list-item-img">
<!-- 5:6 -->
<image :src="item.cover" mode="widthFix"></image>
</view>
<view class="list-item-cont">
<view class="nowrap list-item-name">
{{item.title}}
</view>
<view class="list-item-see">
<image class="list-item-icon" src="@/static/imgs/indexSee.png" mode="widthFix"></image>{{item .clicks}} 游览
</view>
<view class="list-item-tips" v-for="(items, itemsIndex) in item.categories" :key="itemsIndex">
{{items.title}}
</view>
</view>
</view>
</view>
</view>
<!-- 是否有上级 -->
<view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow">
<view class="tipsWhite">
<image class="tipsCont-img" src="@/static/imgs/seek_back.jpg" mode="widthFix"></image>
<view class="tipsWhite-top">
<view class="tipsWhite-name">
抱歉您还没有业务员
</view>
<view class="tipsWhite-text">
绑定后可立即咨询
</view>
</view>
<view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false">
暂不绑定
</view>
<view class="tipsWhite-btn-go" @click="judgeGeneral">
立即绑定
</view>
</view>
</view>
</view>
<!-- 弹出 -->
<view class="haveBack" v-if="haveimg"></view>
<view class="haveCont" v-if="haveimg">
<image class="haveCont-img" :src="layadImg" mode="widthFix"></image>
<image class="haveCont-close" src="@/static/imgs/close.png" mode="widthFix" @click="haveHIde"></image>
</view>
</view>
</template>
<script>
import { home, articleSort, articleList } from '@/apis/interfaces/index'
import { userIndex } from '@/apis/interfaces/user'
export default {
data() {
return {
autoplay : true,
interval : 3000,
duration : 500,
homeData : {}, // 首页数据
homeList : '', // 首页分类
lawyersArr : [], // 精选律师
noticesArr : [], // 公告列表
articleArr : [], // 文章分类
categoryId : 1, // 文章分类id
listArr : [], // 文章列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
generalShow : false, // 是否有上级弹出
parentData : '',
first : 1,
layadState : '',
layadImg : '',
haveimg : ''
}
},
onShow() {
// 获取首页数据
this.homeInfo();
// 获取文章分类
this.articleInfo();
// 获取文章列表
this.articleItem();
if(this.$store.getters.getToken) {
userIndex().then(res => {
this.parentData = res.parent
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
},
methods: {
// 首页数据
homeInfo() {
home().then(res => {
if(res.layad.is_lay_ad) {
this.layadImg = res.layad.lay_ad_img
}
let times = Number(res.layad.times.padEnd(4, 0))
if(this.first === 1 && res.layad.is_lay_ad) {
this.haveimg = true
// 定时器
let timer = setInterval(() => {
clearInterval(timer)
this.haveimg = false
},times);
}
this.homeList = res.categories
this.lawyersArr = res.lawyers
this.noticesArr = res.notices
let newObj = {}
res.configs.map(item => newObj[item.slug] = {name: item.name, value: item.value})
this.homeData = newObj
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 文章分类
articleInfo() {
articleSort().then(res => {
this.articleArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 文章分类筛选
onTabs(e) {
this.categoryId = e
// 获取文章列表
this.articleItem();
},
// 文章列表
articleItem(page) {
articleList({
category_id: this.categoryId,
page : page || 1
}).then(res => {
let list = this.listArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(res.data)
this.listArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 立即咨询判断
seekClick(e, type) {
if(this.$store.getters.getToken) {
if(this.parentData) {
if(e != 'other') {
// 跳到立即咨询
this.$Router.push({name: 'indexIntroduce'})
} else {
// 跳到其他立即咨询
this.$Router.push({name: 'sheetLoan', params: {type: type}})
}
return
}
// 业务员弹出
this.generalShow = true
return
}
// 去登录
this.$Router.push({name: 'Login'})
},
// 状态
judgeGeneral(){
// 跳到业务员搜索
this.$Router.push({name: 'indexWork'})
// 关闭业务员弹出
this.generalShow = false
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取文章列表
this.articleItem()
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取文章列表
this.articleItem(pageNumber)
}
},
// 关闭弹出
haveHIde() {
this.first = 0
this.haveimg = false
}
}
}
</script>
<style lang="scss" scoped>
body {
background-color: #f2f6f8;
}
.top {
position: relative;
.topBack {
width: 100%;
position: absolute;
padding-top: 37%;
background-image: linear-gradient(to right, #d51a59, #ed7646);
border-radius: 0 0 $radius*4 $radius*4;
}
.topCont {
width: 100%;
position: inherit;
top: 0;
left: 0;
padding: $padding;
box-sizing: border-box;
position: relative;
.topCont-logo {
display: flex;
line-height: 58rpx;
.topCont-logo-img {
margin-right: 15rpx;
width: 190rpx;
}
.topCont-logo-name {
font-weight: 600;
}
.topCont-logo-go {
background-color: #ffffff;
border-radius: $radius*5;
text-align: center;
color: $mian-color;
font-size: $title-size;
line-height: 72rpx;
font-weight: 600;
display: inline-block;
position: absolute;
right: $margin;
top: $margin + 10;
padding: 0 $padding + 10;
}
}
.topCont-text {
margin-top: $margin;
color: #ffffff;
.topCont-text-name {
font-size: $title-size + 6;
font-weight: 600;
}
.topCont-text-tips {
font-size: $title-size-sm;
margin: $margin - 10 0 $margin;
text {
padding-right: $padding * 2;
display: inline-block;
position: relative;
}
}
}
.topCont-notice {
width: 100%;
height: 74rpx;
overflow: hidden;
display: flex;
background-color: #ffffff;
border-radius: $radius - 5;
padding: 0 $padding;
box-sizing: border-box;
margin-bottom: $margin;
.topCont-notice-name {
color: $mian-color;
font-size: $title-size-lg;
font-weight: 600;
width: 190rpx;
line-height: 74rpx;
display: flex;
image {
width: 38rpx;
height: 38rpx;
margin-top: 19rpx;
margin-right: 10rpx;
vertical-align: middle;
}
}
.topCont-notice-cont {
height: 74rpx;
width: calc(100% - 190rpx);
display: flex;
.topCont-notice-title {
font-size: $title-size-sm - 4;
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
height: 34rpx;
line-height: 32rpx;
margin-top: 20rpx;
width: 60rpx;
text-align: center;
border-radius: $radius - 10;
margin-right: $margin - 10;
}
.topCont-notice-swiper {
height: 74rpx;
width: calc(100% - 60rpx);
.topCont-swiper-item {
display: flex;
font-size: $title-size-sm - 2;
line-height: 74rpx;
.topCont-swiper-name {
color: $text-color;
}
}
}
}
}
.topCont-tool {
display: flex;
.topCont-tool-left {
width: calc(50% - 20rpx);
position: relative;
background-color: #554ca7;
background-image: linear-gradient(to bottom right, #544df1, #8283ff);
padding-top: calc(50% - 20rpx);
margin-right: $margin - 10;
border-radius: $radius;
overflow: hidden;
.topCont-whole-name {
margin: 15rpx 0;
font-size: $title-size + 6;
}
.topCont-whole-tips {
line-height: 35rpx;
font-size: $title-size-sm - 2;
opacity: .9;
}
.topCont-whole-img {
position: absolute;
right: 0;
bottom: 0;
width: 100%;
}
}
.topCont-tool-right {
width: 50%;
}
.topCont-tool-label {
position: relative;
padding-top: calc(50% - 20rpx);
border-radius: $radius;
overflow: hidden;
&:nth-child(1) {
margin-bottom: 20rpx;
background-image: linear-gradient(to bottom right, #f46049, #fe8479);
}
&:nth-child(2) {
margin-top: 20rpx;
background-image: linear-gradient(to bottom right, #32c4c2, #50ecc7);
}
}
.topCont-tool-cont {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
overflow: hidden;
padding: $padding - 10 $padding;
box-sizing: border-box;
color: #ffffff;
.topCont-tool-name {
margin-bottom: $margin - 15;
}
.topCont-tool-tips {
font-size: $title-size-sm - 4;
opacity: .7;
}
.topCont-tool-img {
width: 80rpx;
height: 80rpx;
position: absolute;
right: 25rpx;
top: calc(50% - 40rpx);
}
}
}
.topCont-data {
background-color: #f6f6f8;
line-height: 70rpx;
display: flex;
margin-top: 30rpx;
border-radius: $radius - 10;
font-size: $title-size-sm - 2;
.topCont-data-label {
flex: 3;
text-align: center;
text {
color: $mian-color;
padding: 0 5rpx;
}
}
}
}
}
// 法律常识
.list {
padding:0 $padding;
box-sizing: border-box;
.list-title {
font-weight: 600;
margin-bottom: 10rpx;
color: $text-color;
}
.lawyer {
overflow: hidden;
margin: 20rpx -15rpx 0;
.lawyer-item {
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-tabs {
background-color: #f0f0f0;
border-radius: $radius-m;
padding: 5rpx $padding 15rpx;
box-sizing: border-box;
margin-top: $margin - 10;
}
.list-classify {
white-space: nowrap;
.list-tabs-item {
display: inline-block;
font-size: $title-size-m;
color: $text-color;
padding-right: 50rpx;
line-height: 54rpx;
position: relative;
border-bottom: 6rpx solid #e5e5e5;
&::after {
position: absolute;
content: '';
left: 0;
bottom: -6rpx;
background-color: transparent;
border-radius: $radius*3;
width: calc(100% - 50rpx);
height: 6rpx;
z-index: 9;
}
&:last-child {
padding-right: 0;
}
&.show {
color: #000000;
}
&.show::after {
background-color: $mian-color;
}
}
::-webkit-scrollbar{
width: 0;
height: 0;
color: transparent;
}
}
.list-item {
margin-top: $margin;
.list-item-label {
margin-bottom: $margin;
position: relative;
.list-item-img {
width: 200rpx;
height: 150rpx;
display:table-cell;
text-align:center;
vertical-align:middle;
border:1px solid #d2d2d2;
border-radius: $radius - 10;
overflow: hidden;
box-sizing: border-box;
image {
width: 100%;
vertical-align:middle;
}
}
.list-item-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding-left: 220rpx;
box-sizing: border-box;
box-sizing: border-box;
.list-item-name {
color: $text-color;
line-height: 44rpx;
font-size: $title-size-m;
}
.list-item-see {
font-size: $title-size-sm - 4;
margin-top: 30rpx;
display: flex;
line-height: 30rpx;
.list-item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 10rpx;
}
}
.list-item-tips {
font-size: $title-size-sm - 4;
display: inline-block;
color: #a1a1a1;
padding-left: 40rpx;
}
}
}
}
}
// 是否有上级
.tipsBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .8);
}
.tipsCont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 10%;
box-sizing: border-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
overflow: hidden;
}
.tipsWhite-top {
padding: $padding;
box-sizing: border-box;
text-align: center;
}
.tipsCont-img {
width: 100%;
}
.tipsWhite-name {
text-align: center;
color: #111111;
font-size: 34rpx;
font-weight: 600;
margin-bottom: 15rpx;
}
.tipsWhite-text {
font-size: 30rpx;
color: #666666;
line-height: 48rpx;
}
.tipsWhite-btn {
display: flex;
padding: $padding 10rpx;
box-sizing: border-box;
.tipsWhite-btn-go {
flex: 2;
color: #fff;
margin: 0 15rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
border: 2rpx solid #F6F6F6;
background-color: #007df5;
border-radius: $radius-m;
&:first-child {
color: #333333;
background-color: #ffffff;
border: 2rpx solid #cccccc;
}
}
}
// 图片弹出
.haveBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .7);
}
.haveCont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 10%;
box-sizing: border-box;
text-align: center;
}
.haveCont-img {
width: 75%;
border-radius: 20rpx;
overflow: hidden;
display: block;
margin: 0 auto;
}
.haveCont-close {
width: 52rpx;
height: 52rpx;
margin-top: 10px;
opacity: .8;
}
</style>

891
pages/index/index.vue Normal file
View File

@@ -0,0 +1,891 @@
<template>
<view class="content">
<!-- top -->
<view class="top">
<view class="topBack"></view>
<view class="topCont">
<!-- logo -->
<view class="topCont-logo">
<image class="topCont-logo-img" src="@/static/imgs/logo_title.png" mode="widthFix"></image>
<view class="topCont-logo-go" @click="seekClick">
立即咨询
</view>
</view>
<!-- 专业优质在线法律平台 -->
<view class="topCont-text">
<view class="topCont-text-name">
专业优质在线法律平台
</view>
<view class="topCont-text-tips">
<text v-if="homeData.attorney">
{{homeData.attorney.value}}+{{homeData.attorney.name}}
</text>
<block v-if="homeData.use_count">{{homeData.use_count.value}}+{{homeData.use_count.name}}</block>
</view>
</view>
<!-- 平台公告 -->
<view class="topCont-notice">
<view class="topCont-notice-name"><image src="@/static/imgs/noticeArrow.png" mode="widthFix"></image>平台公告</view>
<view class="topCont-notice-cont">
<view class="topCont-notice-title">今日</view>
<swiper class="topCont-notice-swiper" circular :autoplay="autoplay" :interval="interval"
:duration="duration" vertical="y">
<block v-for="(item, index) in noticesArr" :key="index">
<swiper-item>
<view class="topCont-swiper-item">
<view class="topCont-swiper-name nowrap" v-if="item.user">
{{item.user.name}} {{item.user.text}}
</view>
<view class="topCont-swiper-name nowrap" v-else>
今日暂无信息
</view>
</view>
</swiper-item>
</block>
</swiper>
</view>
</view>
<!-- 按钮链接 -->
<view class="topCont-tool">
<view class="topCont-tool-left topCont-tool-right">
<view class="topCont-tool-label blueBlock" @click="$Router.push({name: 'PersonBrief', params: {type: 1}})">
<view class="topCont-tool-cont">
<!-- @click="$Router.push({name: 'indexEntrust'}) -->
<view class="topCont-tool-name">
个人全年法律
</view>
<view class="topCont-tool-tips">
咨询服务 抖火法律
</view>
<image class="topCont-tool-img" src="@/static/imgs/toolImg_01.png" mode="widthFix"></image>
</view>
</view>
<view class="topCont-tool-label redBlock" @click="$Router.push({name: 'EntrustBrief'})">
<view class="topCont-tool-cont">
<view class="topCont-tool-name">
案件委托
</view>
<view class="topCont-tool-tips">
咨询服务 抖火法律
</view>
<image class="topCont-tool-img" src="@/static/imgs/toolImg_03.png" alt=""></image>
</view>
</view>
</view>
<view class="topCont-tool-right">
<view class="topCont-tool-label purpleBlock" @click="$Router.push({name: 'StandBrief', params: {type: 2}})">
<view class="topCont-tool-cont">
<view class="topCont-tool-name">
企业全年法律
</view>
<view class="topCont-tool-tips">
咨询服务 抖火法律
</view>
<image class="topCont-tool-img" src="@/static/imgs/toolImg_04.png" mode="widthFix"></image>
</view>
</view>
<view class="topCont-tool-label greenBlock" @click="$Router.push({name: 'ExpandBrief'})">
<view class="topCont-tool-cont">
<view class="topCont-tool-name">
拓展服务
</view>
<view class="topCont-tool-tips">
咨询服务 抖火法律
</view>
<image class="topCont-tool-img" src="@/static/imgs/toolImg_02.png" alt=""></image>
</view>
</view>
</view>
</view>
<!-- 数据展示 -->
<view class="topCont-data">
<view class="topCont-data-label" v-if="homeData.consult">
{{homeData.consult.name}}<text>{{homeData.consult.value}}</text>人
</view>
<view class="topCont-data-label" v-if="homeData.sucess_count">
{{homeData.sucess_count.name}}<text>{{homeData.sucess_count.value}}</text>单
</view>
<view class="topCont-data-label" v-if="homeData.success_rate">
{{homeData.success_rate.name}}<text>{{homeData.success_rate.value}}</text>
</view>
</view>
</view>
</view>
<!-- 工具 -->
<!-- <view class="tool">
<scroll-view class="tool-lable" scroll-x="true" show-scrollbar="false">
<view class="tool-lable-item" v-for="(item, index) in lawyersWork" :key="index" @click="$Router.push({name: 'indexSort', params: {id: item.lawyer_business_id}})">
<image :src="item.cover" class="tool-lable-img"></image>
<view class="tool-lable-name">
{{item.title}}
</view>
</view>
</scroll-view>
</view> -->
<!-- 金牌律师 -->
<view class="list">
<view class="list-title">
金牌律师
</view>
<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>
</view>
<!-- 法律常识 -->
<view class="list">
<view class="list-title">
法律常识
</view>
<view class="list-tabs">
<scroll-view class="list-classify" scroll-x="true" show-scrollbar="false">
<view v-for="(item, index) in articleArr" :key="index" class="list-tabs-item" :class="{show : categoryId == item.category_id}" @click="onTabs(item.category_id)">{{item.title}}</view>
</scroll-view>
</view>
<view class="list-item">
<view class="list-item-label" v-for="(item, index) in listArr" :key="index" @click="$Router.push({name: 'indexDetails', params: {id: item.article_id}})">
<view class="list-item-img">
<!-- 5:6 -->
<image :src="item.cover" mode="widthFix"></image>
</view>
<view class="list-item-cont">
<view class="nowrap list-item-name">
{{item.title}}
</view>
<view class="list-item-see">
<image class="list-item-icon" src="@/static/imgs/indexSee.png" mode="widthFix"></image>{{item .clicks}} 游览
</view>
<view class="list-item-tips" v-for="(items, itemsIndex) in item.categories" :key="itemsIndex">
{{items.title}}
</view>
</view>
</view>
</view>
</view>
<!-- 是否有上级 -->
<view class="tipsBack" v-if="generalShow"></view>
<view class="tipsCont" v-if="generalShow">
<view class="tipsWhite">
<image class="tipsCont-img" src="@/static/imgs/seek_back.jpg" mode="widthFix"></image>
<view class="tipsWhite-top">
<view class="tipsWhite-name">
抱歉,您还没有业务员
</view>
<view class="tipsWhite-text">
绑定后,可立即咨询
</view>
</view>
<view class="tipsWhite-btn">
<view class="tipsWhite-btn-go" @click="generalShow = false">
暂不绑定
</view>
<view class="tipsWhite-btn-go" @click="judgeGeneral">
立即绑定
</view>
</view>
</view>
</view>
<!-- 弹出 -->
<view class="haveBack" v-if="haveimg"></view>
<view class="haveCont" v-if="haveimg">
<image class="haveCont-img" :src="layadImg" mode="widthFix"></image>
<image class="haveCont-close" src="@/static/imgs/close.png" mode="widthFix" @click="haveHIde"></image>
</view>
</view>
</template>
<script>
import { home, articleSort, articleList } from '@/apis/interfaces/index'
import { userIndex } from '@/apis/interfaces/user'
export default {
data() {
return {
autoplay : true,
interval : 3000,
duration : 500,
homeData : {}, // 首页数据
homeList : '', // 首页分类
lawyersArr : [], // 精选律师
noticesArr : [], // 公告列表
articleArr : [], // 文章分类
categoryId : 1, // 文章分类id
listArr : [], // 文章列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
generalShow : false, // 是否有上级弹出
parentData : '',
first : 1,
layadState : '',
layadImg : '',
haveimg : ''
}
},
onShow() {
// 获取首页数据
this.homeInfo();
// 获取文章分类
this.articleInfo();
// 获取文章列表
this.articleItem();
if(this.$store.getters.getToken) {
userIndex().then(res => {
this.parentData = res.parent
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
},
methods: {
// 首页数据
homeInfo() {
home().then(res => {
if(res.layad.is_lay_ad) {
this.layadImg = res.layad.lay_ad_img
}
let times = Number(res.layad.times.padEnd(4, 0))
if(this.first === 1 && res.layad.is_lay_ad) {
this.haveimg = true
// 定时器
let timer = setInterval(() => {
clearInterval(timer)
this.haveimg = false
},times);
}
this.homeList = res.categories
this.lawyersArr = res.lawyers
this.noticesArr = res.notices
let newObj = {}
res.configs.map(item => newObj[item.slug] = {name: item.name, value: item.value})
this.homeData = newObj
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 文章分类
articleInfo() {
articleSort().then(res => {
this.articleArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 文章分类筛选
onTabs(e) {
this.categoryId = e
// 获取文章列表
this.articleItem();
},
// 文章列表
articleItem(page) {
articleList({
category_id: this.categoryId,
page : page || 1
}).then(res => {
let list = this.listArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(res.data)
this.listArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 立即咨询判断
seekClick(e, type) {
if(this.$store.getters.getToken) {
if(this.parentData) {
if(e != 'other') {
// 跳到立即咨询
this.$Router.push({name: 'indexIntroduce'})
} else {
// 跳到其他立即咨询
this.$Router.push({name: 'sheetLoan', params: {type: type}})
}
return
}
// 业务员弹出
this.generalShow = true
return
}
// 去登录
this.$Router.push({name: 'Login'})
},
// 状态
judgeGeneral(){
// 跳到业务员搜索
this.$Router.push({name: 'indexWork'})
// 关闭业务员弹出
this.generalShow = false
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取文章列表
this.articleItem()
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取文章列表
this.articleItem(pageNumber)
}
},
// 关闭弹出
haveHIde() {
this.first = 0
this.haveimg = false
}
}
}
</script>
<style lang="scss" scoped>
body {
background-color: #f2f6f8;
}
.top {
position: relative;
.topBack {
width: 100%;
position: absolute;
padding-top: 37%;
background-image: linear-gradient(to right, #d51a59, #ed7646);
border-radius: 0 0 $radius*4 $radius*4;
}
.topCont {
width: 100%;
position: inherit;
top: 0;
left: 0;
padding: $padding;
box-sizing: border-box;
position: relative;
.topCont-logo {
display: flex;
line-height: 58rpx;
.topCont-logo-img {
margin-right: 15rpx;
width: 190rpx;
}
.topCont-logo-name {
font-weight: 600;
}
.topCont-logo-go {
background-color: #ffffff;
border-radius: $radius*5;
text-align: center;
color: $mian-color;
font-size: $title-size;
line-height: 72rpx;
font-weight: 600;
display: inline-block;
position: absolute;
right: $margin;
top: $margin + 10;
padding: 0 $padding + 10;
}
}
.topCont-text {
margin-top: $margin;
color: #ffffff;
.topCont-text-name {
font-size: $title-size + 6;
font-weight: 600;
}
.topCont-text-tips {
font-size: $title-size-sm;
margin: $margin - 10 0 $margin;
text {
padding-right: $padding * 2;
display: inline-block;
position: relative;
}
}
}
.topCont-notice {
width: 100%;
height: 74rpx;
overflow: hidden;
display: flex;
background-color: #ffffff;
border-radius: $radius - 5;
padding: 0 $padding;
box-sizing: border-box;
margin-bottom: $margin;
.topCont-notice-name {
color: $mian-color;
font-size: $title-size-lg;
font-weight: 600;
width: 190rpx;
line-height: 74rpx;
display: flex;
image {
width: 38rpx;
height: 38rpx;
margin-top: 19rpx;
margin-right: 10rpx;
vertical-align: middle;
}
}
.topCont-notice-cont {
height: 74rpx;
width: calc(100% - 190rpx);
display: flex;
.topCont-notice-title {
font-size: $title-size-sm - 4;
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
height: 34rpx;
line-height: 32rpx;
margin-top: 20rpx;
width: 60rpx;
text-align: center;
border-radius: $radius - 10;
margin-right: $margin - 10;
}
.topCont-notice-swiper {
height: 74rpx;
width: calc(100% - 60rpx);
.topCont-swiper-item {
display: flex;
font-size: $title-size-sm - 2;
line-height: 74rpx;
.topCont-swiper-name {
color: $text-color;
}
}
}
}
}
.topCont-tool {
display: flex;
.topCont-tool-left {
width: calc(50% - 20rpx);
margin-right: $margin - 10;
overflow: hidden;
}
.topCont-tool-right {
width: 50%;
}
.topCont-tool-label {
position: relative;
padding-top: calc(50% - 20rpx);
border-radius: $radius;
overflow: hidden;
&.blueBlock {
margin-bottom: 20rpx;
background-image: linear-gradient(to bottom right, #097df5, #71b9ff);
}
&.redBlock {
margin-top: 20rpx;
background-image: linear-gradient(to bottom right, #f46049, #fe8479);
}
&.purpleBlock {
margin-bottom: 20rpx;
background-image: linear-gradient(to bottom right, #9c78fe, #a892ff);
}
&.greenBlock {
margin-top: 20rpx;
background-image: linear-gradient(to bottom right, #32c4c2, #50ecc7);
}
}
.topCont-tool-cont {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
overflow: hidden;
padding: $padding - 10 $padding;
box-sizing: border-box;
color: #ffffff;
.topCont-tool-name {
margin-bottom: $margin - 15;
}
.topCont-tool-tips {
font-size: $title-size-sm - 4;
opacity: .7;
}
.topCont-tool-img {
width: 80rpx;
height: 80rpx;
position: absolute;
right: 25rpx;
top: calc(50% - 40rpx);
}
}
}
.topCont-data {
background-color: #f6f6f8;
line-height: 70rpx;
display: flex;
margin-top: 30rpx;
border-radius: $radius - 10;
font-size: $title-size-sm - 2;
.topCont-data-label {
flex: 3;
text-align: center;
text {
color: $mian-color;
padding: 0 5rpx;
}
}
}
}
}
// 法律常识
.list {
padding:0 $padding;
box-sizing: border-box;
.list-title {
font-weight: 600;
margin-bottom: 10rpx;
color: $text-color;
}
.lawyer {
overflow: hidden;
margin: 20rpx -15rpx 0;
.lawyer-item {
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-tabs {
background-color: #f0f0f0;
border-radius: $radius-m;
padding: 5rpx $padding 15rpx;
box-sizing: border-box;
margin-top: $margin - 10;
}
.list-classify {
white-space: nowrap;
.list-tabs-item {
display: inline-block;
font-size: $title-size-m;
color: $text-color;
padding-right: 50rpx;
line-height: 54rpx;
position: relative;
border-bottom: 6rpx solid #e5e5e5;
&::after {
position: absolute;
content: '';
left: 0;
bottom: -6rpx;
background-color: transparent;
border-radius: $radius*3;
width: calc(100% - 50rpx);
height: 6rpx;
z-index: 9;
}
&:last-child {
padding-right: 0;
}
&.show {
color: #000000;
}
&.show::after {
background-color: $mian-color;
}
}
::-webkit-scrollbar{
width: 0;
height: 0;
color: transparent;
}
}
.list-item {
margin-top: $margin;
.list-item-label {
margin-bottom: $margin;
position: relative;
.list-item-img {
width: 200rpx;
height: 150rpx;
display:table-cell;
text-align:center;
vertical-align:middle;
border:1px solid #d2d2d2;
border-radius: $radius - 10;
overflow: hidden;
box-sizing: border-box;
image {
width: 100%;
vertical-align:middle;
}
}
.list-item-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding-left: 220rpx;
box-sizing: border-box;
box-sizing: border-box;
.list-item-name {
color: $text-color;
line-height: 44rpx;
font-size: $title-size-m;
}
.list-item-see {
font-size: $title-size-sm - 4;
margin-top: 30rpx;
display: flex;
line-height: 30rpx;
.list-item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 10rpx;
}
}
.list-item-tips {
font-size: $title-size-sm - 4;
display: inline-block;
color: #a1a1a1;
padding-left: 40rpx;
}
}
}
}
}
// 是否有上级
.tipsBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .8);
}
.tipsCont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 10%;
box-sizing: border-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
overflow: hidden;
}
.tipsWhite-top {
padding: $padding;
box-sizing: border-box;
text-align: center;
}
.tipsCont-img {
width: 100%;
}
.tipsWhite-name {
text-align: center;
color: #111111;
font-size: 34rpx;
font-weight: 600;
margin-bottom: 15rpx;
}
.tipsWhite-text {
font-size: 30rpx;
color: #666666;
line-height: 48rpx;
}
.tipsWhite-btn {
display: flex;
padding: $padding 10rpx;
box-sizing: border-box;
.tipsWhite-btn-go {
flex: 2;
color: #fff;
margin: 0 15rpx;
height: 80rpx;
line-height: 80rpx;
text-align: center;
border: 2rpx solid #F6F6F6;
background-color: #007df5;
border-radius: $radius-m;
&:first-child {
color: #333333;
background-color: #ffffff;
border: 2rpx solid #cccccc;
}
}
}
// 图片弹出
.haveBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .7);
}
.haveCont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 10%;
box-sizing: border-box;
text-align: center;
}
.haveCont-img {
width: 75%;
border-radius: 20rpx;
overflow: hidden;
display: block;
margin: 0 auto;
}
.haveCont-close {
width: 52rpx;
height: 52rpx;
margin-top: 10px;
opacity: .8;
}
</style>

233
pages/index/introduce.vue Normal file
View File

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

320
pages/index/lawyerDet.vue Normal file
View File

@@ -0,0 +1,320 @@
<template>
<view class="content">
<view class="lawyerBack">
<image src="/static/imgs/lawyerBack.png" mode="widthFix"></image>
</view>
<view class="lawyerCont">
<view class="white">
<view class="basics-top">
<!-- 4:3 -->
<image class="basics-head" :src="lawyersData.photo" mode="aspectFill"></image>
<view class="basics-top-info">
<view class="basics-top-name">{{lawyersData.name}}</view>
<view class="basics-top-lingo">精英律师</view>
<view class="basics-top-lingo">1对1专项咨询解决</view>
</view>
</view>
<view class="basics-data">
<!-- <view class="basics-data-item">
<view class="basics-data-number basics-score">
<text></text>{{lawyersData.price}}
</view>
<view class="basics-data-name">咨询费用</view>
</view> -->
<view class="basics-data-item">
<view class="basics-data-number">100<text></text></view>
<view class="basics-data-name">服务人数</view>
</view>
<view class="basics-data-item">
<view class="basics-data-number">{{lawyersData.years}}<text></text></view>
<view class="basics-data-name">职业年限</view>
</view>
</view>
<view class="basics-good">
<view class="basics-good-name">擅长</view>
<view class="basics-good-text">
<block v-for="(item, index) in lawyersData.tags" :key="index">
<text>{{item.name}}</text>
</block>
</view>
</view>
</view>
<view class="white">
<view class="white-title">律师档案</view>
<view class="brief">
<view class="brief-label">
<image class="brief-icon" src="/static/icon/lawyerIcon_01.png" mode="aspectFill"></image>
<view class="brief-cont">
<view class="brief-name">
执照认证
</view>
<view class="brief-text">
-
</view>
</view>
</view>
<view class="brief-label">
<image class="brief-icon" src="/static/icon/lawyerIcon_03.png" mode="aspectFill"></image>
<view class="brief-cont">
<view class="brief-name">
律所认证
</view>
<view class="brief-text">
精英律师
</view>
</view>
</view>
<view class="brief-label">
<image class="brief-icon" src="/static/icon/lawyerIcon_05.png" mode="aspectFill"></image>
<view class="brief-cont">
<view class="brief-name">
荣誉奖项
</view>
<view class="brief-text">
-
</view>
</view>
</view>
<view class="brief-label">
<image class="brief-icon" src="/static/icon/lawyerIcon_04.png" mode="aspectFill"></image>
<view class="brief-cont">
<view class="brief-name">
简介
</view>
<view class="brief-text">
{{lawyersData.description}}
</view>
</view>
</view>
<view class="brief-label">
<image class="brief-icon" src="/static/icon/lawyerIcon_02.png" mode="aspectFill"></image>
<view class="brief-cont">
<view class="brief-name">
详情
</view>
<view class="brief-text">
<rich-text :nodes="articleContent"></rich-text>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 立即咨询 -->
<!-- <view class="lawyerBtn">
<view class="btn" @click="$Router.push({name: 'indexSortpay', params:{id: lawyersData.lawyer_id, type:'lawyer'}})">
立即咨询 {{lawyersData.price}}
</view>
</view> -->
</view>
</template>
<script>
import { lawyersdet } from '@/apis/interfaces/index'
export default {
data() {
return {
lawyersData : '',
articleContent : ''
}
},
onShow() {
// 获取精选律师详情
this.lawyersInfo()
},
methods: {
lawyersInfo() {
lawyersdet(this.$Route.query.id).then(res => {
this.lawyersData = res
this.articleContent= res.content.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;"')
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background: #f5f5f7;
height: 100vh;
overflow-y: scroll;
}
.lawyerBack{
position: absolute;
width: 100%;
image{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
&::after,
&::before{
position: absolute;
width: 100%;
height: 100%;
content: " ";
top: 0;
left: 0;
}
&::after{
background-image: linear-gradient(to top, #fff, rgba(255,255,255,.0));
z-index: 1;
}
&::before{
z-index: 2;
backdrop-filter: blur(10px);
}
}
.lawyerCont {
position: relative;
z-index: 3;
padding: $padding * 2 $padding $padding;
box-sizing: border-box;
// border-bottom: 100rpx solid transparent;
.white {
background-color: #fff;
border-radius: 10rpx;
padding: $padding;
box-sizing: border-box;
margin-bottom: $margin;
}
.basics-top {
display: flex;
margin-bottom: 20rpx;
.basics-top-info {
width: calc(100% - 130rpx);
padding: 0 $padding;
box-sizing: border-box;
.basics-top-name {
font-size: $title-size-sm + 8;
font-weight: 600;
margin-bottom: 20rpx;
}
.basics-top-lingo {
margin-top: 8rpx;
color: #85888f;
font-size: $title-size-sm;
}
}
.basics-head {
flex: 1;
width: 120rpx;
height: 160rpx;
border-radius: $radius-m;
}
}
.basics-data {
display: flex;
.basics-data-item {
flex: 3;
text-align: center;
.basics-data-number {
font-weight: 600;
line-height: 54rpx;
text {
font-weight: normal;
font-size: $title-size-sm - 2;
padding-left: 5rpx;
}
&.basics-score {
color: $mian-color;
}
}
.basics-data-name {
font-size: $title-size-sm - 2;
line-height: 32rpx;
color: $text-color;
}
}
}
.basics-good {
font-size: $title-size-m;
display: flex;
margin-top: $margin + 10;
.basics-good-name {
line-height: 42rpx;
width: 70rpx;
font-weight: 600;
}
.basics-good-text {
color: #85888f;
width: calc(100% - 90rpx);
text{
font-size: 24rpx;
background-color: #f5f5f5;
color: #9f9f9f;
display: inline-block;
margin: 0 0 15rpx 20rpx;
padding: 0 15rpx;
border-radius: 10rpx;
line-height: 42rpx;
}
}
}
.white-title {
font-size: 32rpx;
margin-bottom: 20rpx;
font-weight: 600;
color: $text-color;
}
.brief-label {
display: flex;
margin: $margin + 10 0 10rpx;
width: 100%;
.brief-icon {
width: 54rpx;
height: 54rpx;
margin-right: 20rpx;
}
.brief-cont {
font-size: $title-size-m;
width: 100%;
.brief-name {
margin-bottom: 10rpx;
color: $text-color;
}
.brief-text {
font-size: $title-size-sm;
line-height: 44rpx;
color: #666;
}
}
}
}
.lawyerBtn {
background-color: #ffffff;
position: fixed;
z-index: 99;
left: 0;
bottom: 0;
width: 100%;
height: 130rpx;
padding: $padding - 10 $padding;
box-sizing: border-box;
.btn {
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-m;
text-align: center;
line-height: 90rpx;
font-size: $title-size-lg;
}
}
</style>

228
pages/index/sortInfo.vue Normal file
View File

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

162
pages/index/sortPay.vue Normal file
View File

@@ -0,0 +1,162 @@
<template>
<view class="content">
<view class="paymentTop">
<view class="paymentTop-name">
需支付金额
</view>
<view class="paymentTop-price">
<text></text>{{total}}
</view>
</view>
<view class="paymentList">
<view class="paymentList-label">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/payWechat.png" mode="widthFix"></image>微信支付
</view>
<view class="paymentList-right">
<image class="paymentList-img" src="@/static/imgs/payCheck.png" mode="widthFix"></image>
</view>
</view>
</view>
<view class="paymentBtn">
<view class="paymentBtn-go" @click="$Router.replace({name: 'sortPoint'})">
去支付 {{total}}
</view>
</view>
</view>
</template>
<script>
import { lawyerOrder, businessOrder } from '@/apis/interfaces/index'
export default {
data() {
return {
total: '', //支付金额
}
},
onLoad() {
},
onShow() {
// 获取订单
this.payInfo()
},
methods: {
payInfo () {
// 律师订单
if(this.$Route.query.type == 'lawyer') {
lawyerOrder(this.$Route.query.id).then(res => {
this.total = res.total
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
return
}
//律师业务订单
businessOrder(this.$Route.query.id).then(res => {
this.total = res.total
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content{
background: #f4f4f4;
height: 100vh;
overflow-y: scroll;
}
.paymentTop {
padding: $padding * 4 $padding $padding * 3;
box-sizing: border-box;
text-align: center;
color: #666666;
.paymentTop-name {
padding-left: $padding;
box-sizing: border-box;
}
.paymentTop-price {
color: $mian-color;
font-size: $title-size + 40;
font-weight: 600;
margin: $margin - 10 0;
text {
font-size: $title-size + 10;
}
}
}
.paymentList {
padding: 0 $padding;
box-sizing: border-box;
.paymentList-label {
background-color: #ffffff;
border-radius: $radius;
padding: $padding + 10 $padding;
box-sizing: border-box;
margin-bottom: $margin + 10;
display: flex;
.paymentList-left {
flex: 1;
display: flex;
line-height: 40rpx;
.paymentList-icon {
width: 40rpx;
height: 40rpx;
margin-right: $margin - 10;
}
}
.paymentList-right {
display: flex;
.paymentList-tips {
background-image: linear-gradient(to left, #FF4646, #FF7676);
height: 44rpx;
line-height: 44rpx;
font-size: $title-size-sm;
color: #ffffff;
opacity: .9;
border-radius: $radius * 2;
padding: 0 10rpx;
}
.paymentList-arrow {
width: 14rpx;
margin: 10rpx 0 0 20rpx;
}
.paymentList-img {
width: 32rpx;
height: 32rpx;
margin-top: 4rpx;
}
}
}
}
.paymentBtn {
position: fixed;
bottom: $margin * 2;
left: 0;
text-align: center;
padding: 0 $padding;
box-sizing: border-box;
width: 100%;
.paymentBtn-go {
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-m;
line-height: 100rpx;
font-size: $title-size + 2;
}
}
</style>

75
pages/index/sortPoint.vue Normal file
View File

@@ -0,0 +1,75 @@
<template>
<view class="content">
<view class="point">
<img class="point-img" src="@/static/imgs/payImg.png">
<view class="point-text">
<view class="point-name">
支付成功
</view>
<view class="point-tips">
<text>尊敬的客户已经成功支付咨询费用请保持电话畅通相关负责人将会与您联系感谢您的支持</text>
</view>
<view class="point-btn">
<view class="btn" @click="$Router.push({name: 'User'})">
我知道了
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {}
},
onLoad() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.point {
text-align: center;
padding: 40% 0;
.point-img {
width: 240rpx;
height: 240rpx;
margin: 0 auto 10rpx;
}
.point-text {
.point-name {
color: $mian-color;
font-size: $title-size + 14;
}
.point-tips{
margin: $margin + 20 0 $margin*3;
padding: 0 $padding * 4;
box-sizing: border-box;
line-height: 52rpx;
font-size: $title-size-m;
text {
display: block;
color: #999999;
}
}
}
.point-btn {
text-align: center;
.btn {
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
border-radius: $radius * 4;
padding: 0 $padding * 2.5;
line-height: 90rpx;
}
}
}
</style>

207
pages/index/workSearch.vue Normal file
View File

@@ -0,0 +1,207 @@
<template>
<view class="content">
<view class="workTitle">
<view class="workTitle-name">
{{index == 0 ? '手机号' : '邀请码'}}
</view>
<view class="workTitle-text">
{{index == 0 ? '请输入好友的手机号' : '请输入好友的邀请码'}}
</view>
</view>
<view class="workCont">
<view class="workPicker">
<picker class="workPicker-picker" @change="bindPickerChange" :value="index" :range="array" range-key="name">
<view class="uni-input">{{array[index].name}}</view>
</picker>
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
<view class="workPicker">
<input class="workPicker-input" type="tel" maxlength="11" :placeholder="placeholder" v-model="invite" v-if="index == 0">
<input class="workPicker-input" type="text" :placeholder="placeholder" v-model="invite" v-else>
</view>
<button class="idcardBtn" @click="basicSubmit">
{{index == 0 ? '校验手机号' : '校验邀请码'}}
</button>
<view class="workUser" v-if="userData">
<image class="workUser-head" :src="userData.avatar ? userData.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
<view class="workUser-cont">
<view class="workUser-cont-name">{{userData.nickname}}</view>
<view class="workUser-cont-btn" @click="binding">
立即绑定
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { Verify, Bind } from '@/apis/interfaces/index'
export default {
data() {
return {
array: [
{
name: '手机号',
type: 'mobile'
},
{
name: '邀请码',
type: 'verify'
}
],
index: 0,
placeholder: '输入手机号',
invite : '',
userData: ''
}
},
onShow() {},
methods: {
bindPickerChange(e) {
this.index = e.detail.value
if(e.detail.value == 0) {
this.placeholder = '输入手机号'
} else {
this.placeholder = '输入邀请码'
}
},
// 提交
basicSubmit() {
Verify({
invite : this.invite,
type : this.array[this.index].type
}).then(res => {
this.userData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 立即绑定
binding() {
Bind({
invite : this.invite,
type : this.array[this.index].type
}).then(res => {
uni.showToast({
title: '绑定成功',
icon : 'none'
})
setTimeout(()=>{
// 跳到业务员搜索
this.$Router.push({name: 'Index'})
},3000)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
},
}
</script>
<style lang="scss" scoped>
.content {
padding: $padding*4 $padding*3;
box-sizing: border-box;
}
.workTitle {
text-align: center;
.workTitle-name {
font-weight: 600;
font-size: $title-size + 6;
line-height: 80rpx;
}
.workTitle-text {
color: $text-color;
font-size: $title-size-m;
}
}
.workCont {
margin: $margin * 2 0;
.workPicker {
background-color: #fbfbfb;
border-radius: $radius-m;
padding: 0 $padding;
margin-bottom: $margin + 10;
height: 88rpx;
line-height: 88rpx;
box-sizing: border-box;
position: relative;
image {
width: 28rpx;
height: 28rpx;
position: absolute;
right: $padding;
top: $padding - 5;
}
picker {
width: 100%;
height: 100%;
}
.workPicker-input {
height: 88rpx;
width: 100%;
}
}
}
.workUser {
background-color: #fbfbfb;
border-radius: $radius-m;
padding: $padding;
box-sizing: border-box;
display: flex;
margin-top: $margin * 2;
.workUser-head {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
}
.workUser-cont {
line-height: 80rpx;
width: calc(100% - 80rpx);
padding-left: $padding;
box-sizing: border-box;
display: flex;
.workUser-cont-name {
font-size: $title-size-m;
flex: 1;
font-weight: 600;
}
.workUser-cont-btn {
font-size: $title-size-sm;
padding: 0 20rpx;
background-color: #007df5;
display: inline-block;
color: #ffffff;
border-radius: $radius-m;
height: 62rpx;
line-height: 62rpx;
margin-top: 10rpx;
}
}
}
.idcardBtn {
margin: $margin*2 0 0;
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-lg;
line-height: 90rpx;
text-align: center;
&[disabled] {
background-color: #eba5a5;
}
}
</style>

28
pages/login/agreement.vue Normal file
View File

@@ -0,0 +1,28 @@
<template>
<view class="agreement-content">
<view v-html="content"></view>
</view>
</template>
<script>
import { registeragree } from '@/apis/interfaces/auth'
export default {
data() {
return {
content: ''
};
},
onShow() {
registeragree(this.$Route.query.page).then(res=> {
this.content = res.content
})
}
}
</script>
<style lang="scss" scoped>
.agreement-content{
padding: $padding * 2;
font-size: $title-size;
}
</style>

408
pages/login/forget.vue Normal file
View File

@@ -0,0 +1,408 @@
<template>
<view class="content">
<img class="loginBack" src="@/static/imgs/login_back.png">
<img class="loginBottom" src="@/static/imgs/login_bottom.png">
<view class="title">
<view class="title-name">
找回密码
</view>
<view class="title-tips">
请输入新密码并验证手机号密码规则密码+数字
</view>
</view>
<view class="info">
<!-- 输入手机号相关 -->
<view class="inputs">
<input type="number" placeholder="请输入手机号" maxlength="11" v-model="phone" />
</view>
<!-- 获取验证码 -->
<view class="inputs">
<input type="text" placeholder="请输入验证码" maxlength="4" v-model="code" />
<button @click="getPhoneCode" class="sms-btn ":disabled="phone == ''" type="default" size="mini">{{getSms ? '重新发送' + smsTime + 's': '发送验证码'}}</button>
</view>
<!-- 输入密码 -->
<view class="inputs">
<input type="text" placeholder="请输入新密码" password v-model="password" />
</view>
<!-- 再次确认密码 -->
<view class="inputs">
<input type="text" placeholder="再次输入新密码" password v-model="confirmation" />
</view>
<button class="btn" type="default" :disabled="phone == '' || getSms == ''" @click="gainSms">确认修改</button>
<view class="forget">
<view class="forget-label" @click="$Router.push({name: 'Login'})">密码登录</view>
</view>
</view>
<!-- 图文验证码 -->
<view class="graphBack" v-if="graphState"></view>
<view class="graphCont" v-if="graphState">
<view class="graphWhite">
<view class="graphWhite-title">
请完成验证码
</view>
<view class="inputs">
<input class="inputs-input" type="text" placeholder="输入图片中的字符" v-model="newCaptcha" />
<view class="graph-img" @click="replaceClick">
<image :src="graphImg" mode="widthFix"></image>
<view class="graph-tips">看不清换一张</view>
</view>
</view>
<view class="graphBtn">
<view class="graphBtn-lable" @click="graphState = false">
取消
</view>
<view class="graphBtn-lable" @click="checkCaptcha">
确定
</view>
</view>
</view>
</view>
<!-- 修改成功弹出框 -->
<view class="modifyBack" v-if="modifyPop"></view>
<view class="modifyCont" v-if="modifyPop">
<view class="modifyWhite">
<image class="modifyWhite-img" src="@/static/imgs/modifySuccess.png" mode="aspectFill"></image>
<view class="modifyWhite-title">
修改成功
</view>
<view class="modifyWhite-text">
您的密码已经修改生效请重新登录
</view>
<view class="modifyWhite-btn" @click="loginClick">
去登录
</view>
</view>
</view>
</view>
</template>
<script>
import { Captcha, smsAuth, resetPassword } from '@/apis/interfaces/auth'
export default {
data() {
return {
graphImg : '', // 图形码
captchaKey : '', // 校验图形码传回去的值
newCaptcha : '', // 填写图形码
phone : '', // 手机号码
password : '', // 密码
confirmation: '', // 再次输入密码
code : '', // 短信验证码
getSms : '',
smsTime : 60,
graphState : false, // 图文弹出层
modifyPop : false // 修改成功弹出框
}
},
methods: {
// 第一步 获取图形码
getPhoneCode() {
if(this.phone) {
this.CaptchaData();
this.graphState = true
return
}
uni.showToast({
title: '请输入手机号',
icon: "none"
})
},
// 图形码数据
CaptchaData() {
Captcha().then(res => {
this.graphImg = res.img
this.captchaKey= res.key
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 看不清,换一张 - 图形码数据
replaceClick() {
this.CaptchaData();
// 清除图形码数据
this.newCaptcha = ''
},
// 需校验图形验证码
checkCaptcha() {
let outTime
smsAuth({
mobileNo : this.phone,
captcha : this.newCaptcha,
captcha_key: this.captchaKey
}).then(res => {
uni.showToast({
title: res.message,
icon: "none"
})
// 关闭弹框
this.graphState = false
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"
})
})
},
// 重置密码并登录
gainSms() {
resetPassword({
username : this.phone,
password : this.password,
password_confirmation: this.confirmation,
code : this.code
}).then(res => {
// 修改成功弹出框
this.modifyPop = true
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 去登录
loginClick() {
this.$Router.replaceAll({name: 'Login'})
// 修改成功弹出框
this.modifyPop = false
}
}
}
</script>
<style lang="scss" scoped>
.loginBack {
width: 35%;
position: fixed;
top: 0;
right: 0;
}
.loginBottom {
width: 60%;
position: fixed;
bottom: 0;
left: 0;
}
.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;
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;
overflow: hidden;
input {
font-weight: normal;
height: 100%;
}
.sms-btn {
position: absolute;
right: 0;
top: 0;
background-color: #da2b56;
height: 100rpx;
line-height: 100rpx;
color: #ffffff;
border-radius: 0;
font-size: $title-size-lg;
border: none !important;
&[disabled] {
background-color: #ff8da9;
}
}
}
.btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff;
border-radius: $radius-m;
height: 100rpx;
line-height: 100rpx;
padding: 0;
margin: $margin * 3 0 0;
&[disabled] {
background-image: linear-gradient(to right, #ff8da9, #ffd0a2);
}
}
.forget {
line-height: 120rpx;
font-size: $title-size-m;
text-align: right;
color: #7f8391;
}
}
// 图文
.graphBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .5);
}
.graphCont {
position: absolute;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 $padding*2.5;
box-sizing: border-box;
.graphWhite {
background-color: #ffffff;
border-radius: $radius-m;
.graphWhite-title {
text-align: center;
line-height: 110rpx;
font-size: $title-size + 4;
}
.inputs {
display: flex;
padding: 10rpx $padding $padding;
box-sizing: border-box;
.inputs-input {
border: 2rpx solid #d2d2d2;
border-radius: $radius-m;
height: 82rpx;
line-height: 82rpx;
padding: 0 $padding - 10;
box-sizing: border-box;
font-size: $title-size-lg;
width: calc(100% - 230rpx);
}
.graph-img {
width: 200rpx;
margin-left: 30rpx;
image {
width: 100%;
}
.graph-tips {
font-size: $title-size-sm;
color: #9a9a9a;
text-align: center;
line-height: 48rpx;
}
}
}
.graphBtn {
display: flex;
line-height: 90rpx;
border-top: 2rpx solid #d2d2d2;
.graphBtn-lable {
text-align: center;
flex: 2;
border-right: 2rpx solid #d2d2d2;
font-size: $title-size-lg;
color: $mian-color;
&:last-child {
border-color: transparent;
}
}
}
}
}
// 修改成功弹出框
.modifyBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .8);
}
.modifyCont {
position: absolute;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 $padding*2.5;
box-sizing: border-box;
.modifyWhite {
padding: $padding + 10 $padding * 2;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
text-align: center;
.modifyWhite-img {
width: 260rpx;
height: 260rpx;
margin: 0 atuo;
}
.modifyWhite-title {
line-height: 80rpx;
font-weight: 600;
font-size: $title-size + 4;
}
.modifyWhite-text {
font-size: $title-size-m;
}
.modifyWhite-btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff;
border-radius: $radius-m;
height: 90rpx;
line-height: 90rpx;
padding: 0;
margin: $margin * 2 0 0;
text-align: center;
}
}
}
</style>

218
pages/login/login.vue Normal file
View File

@@ -0,0 +1,218 @@
<template>
<view class="content">
<img class="loginBack" src="@/static/imgs/login_back.png">
<img class="loginBottom" src="@/static/imgs/login_bottom.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">
<view class="forget-label" @click="$Router.push({name: 'Register'})">我要注册</view>
<view class="forget-label forget-after" @click="$Router.push({name: 'Forget'})">忘记密码?</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: #7f8391;
}
.forget-after {
position: relative;
&::after {
position: absolute;
content: '';
left: 0;
bottom: calc(50% - 15rpx);
width: 2rpx;
height: 30rpx;
background-color: #f6f6f6;
}
}
}
}
</style>

422
pages/login/modify.vue Normal file
View File

@@ -0,0 +1,422 @@
<template>
<view class="content">
<img class="loginBack" src="@/static/imgs/login_back.png">
<img class="loginBottom" src="@/static/imgs/login_bottom.png">
<view class="title">
<view class="title-name">
修改密码
</view>
<view class="title-tips">
{{nextState ? '密码格式可以是字母与数字的组合' : '请先输入手机号并填写验证码'}}
</view>
</view>
<view class="info" v-if="!nextState">
<!-- 输入手机号相关 -->
<view class="inputs">
<input type="number" placeholder="请输入手机号" maxlength="11" v-model="phone" />
</view>
<!-- 获取验证码 -->
<view class="inputs">
<input type="text" placeholder="请输入验证码" maxlength="4" v-model="code" />
<button @click="getPhoneCode" class="sms-btn ":disabled="phone == ''" type="default" size="mini">{{getSms ? '重新发送' + smsTime + 's': '发送验证码'}}</button>
</view>
<!-- 输入密码 -->
<view class="inputs" style="display: block;">
<input type="text" placeholder="请输入新密码" password v-model="password" />
</view>
<!-- 输入密码 -->
<view class="inputs">
<input type="text" placeholder="请再次输入密码" password v-model="confirmation" />
</view>
<button class="btn" type="default" :disabled="password == '' || confirmation == ''" @click="modifyClick">确认修改</button>
<!-- <button class="btn" type="default" :disabled="phone == '' || getSms == ''" @click="nextStep">下一步</button> -->
</view>
<!-- <block v-else>
<view class="info">
</view>
</block>
-->
<!-- 图文验证码 -->
<view class="graphBack" v-if="graphState"></view>
<view class="graphCont" v-if="graphState">
<view class="graphWhite">
<view class="graphWhite-title">
请完成验证码
</view>
<view class="inputs">
<input class="inputs-input" type="text" placeholder="输入图片中的字符" v-model="newCaptcha" />
<view class="graph-img" @click="replaceClick">
<image :src="graphImg" mode="widthFix"></image>
<view class="graph-tips">看不清换一张</view>
</view>
</view>
<view class="graphBtn">
<view class="graphBtn-lable" @click="graphState = false">
取消
</view>
<view class="graphBtn-lable" @click="checkCaptcha">
确定
</view>
</view>
</view>
</view>
<!-- 修改成功弹出框 -->
<view class="modifyBack" v-if="modifyPop"></view>
<view class="modifyCont" v-if="modifyPop">
<view class="modifyWhite">
<image class="modifyWhite-img" src="@/static/imgs/modifySuccess.png" mode="aspectFill"></image>
<view class="modifyWhite-title">
修改成功
</view>
<view class="modifyWhite-text">
您的密码已经修改生效请重新登录
</view>
<view class="modifyWhite-btn" @click="loginClick">
去登录
</view>
</view>
</view>
</view>
</template>
<script>
import { Captcha, smsAuth, modifyPassword } from '@/apis/interfaces/auth'
export default {
data() {
return {
graphImg : '', // 图形码
captchaKey : '', // 校验图形码传回去的值
newCaptcha : '', // 填写图形码
phone : '', // 手机号码
password : '', // 密码
confirmation: '', // 再次输入密码
code : '', // 短信验证码
getSms : '',
smsTime : 60,
graphState : false, // 图文弹出层
nextState : false, // 是否进行下一步
modifyPop : false // 修改成功弹出框
}
},
methods: {
// 第一步 获取图形码
getPhoneCode() {
if(this.phone) {
this.CaptchaData();
this.graphState = true
return
}
uni.showToast({
title: '请输入手机号',
icon: "none"
})
},
// 图形码数据
CaptchaData() {
Captcha().then(res => {
this.graphImg = res.img
this.captchaKey= res.key
// 清除图形码数据
this.newCaptcha = ''
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 看不清,换一张 - 图形码数据
replaceClick() {
this.CaptchaData();
// 清除图形码数据
this.newCaptcha = ''
},
// 需校验图形验证码
checkCaptcha() {
let outTime
smsAuth({
mobileNo : this.phone,
captcha : this.newCaptcha,
captcha_key: this.captchaKey
}).then(res => {
uni.showToast({
title: res.message,
icon: "none"
})
// 关闭弹框
this.graphState = false
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"
})
})
},
// 下一步
nextStep() {
this.nextState = true
},
// 修改密码
modifyClick() {
modifyPassword({
password : this.password,
password_confirmation: this.confirmation,
code : this.code
}).then(res => {
// 修改成功弹出框
this.modifyPop = true
// 清除数据,退出登录
this.$store.commit('setToken', '')
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 去登录
loginClick() {
this.$Router.replace({name: 'Login'})
// 修改成功弹出框
this.modifyPop = false
}
}
}
</script>
<style lang="scss" scoped>
.loginBack {
width: 30%;
position: fixed;
top: 0;
right: 0;
}
.loginBottom {
width: 60%;
position: fixed;
bottom: 0;
left: 0;
}
.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;
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;
overflow: hidden;
input {
font-weight: normal;
height: 100%;
}
.sms-btn {
position: absolute;
right: 0;
top: 0;
background-color: #da2b56;
height: 100rpx;
line-height: 100rpx;
color: #ffffff;
border-radius: 0;
font-size: $title-size-lg;
border: none !important;
&[disabled] {
background-color: #ff8da9;
}
}
}
.btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff;
border-radius: $radius-m;
height: 100rpx;
line-height: 100rpx;
padding: 0;
margin: $margin * 3 0 0;
&[disabled] {
background-image: linear-gradient(to right, #ff8da9, #ffd0a2);
}
}
.forget {
line-height: 120rpx;
font-size: $title-size-m;
text-align: right;
color: #7f8391;
}
}
// 图文
.graphBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .5);
}
.graphCont {
position: absolute;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 $padding*2.5;
box-sizing: border-box;
.graphWhite {
background-color: #ffffff;
border-radius: $radius-m;
.graphWhite-title {
text-align: center;
line-height: 110rpx;
font-size: $title-size + 4;
}
.inputs {
display: flex;
padding: 10rpx $padding $padding;
box-sizing: border-box;
.inputs-input {
border: 2rpx solid #d2d2d2;
border-radius: $radius-m;
height: 82rpx;
line-height: 82rpx;
padding: 0 $padding - 10;
box-sizing: border-box;
font-size: $title-size-lg;
width: calc(100% - 230rpx);
}
.graph-img {
width: 200rpx;
margin-left: 30rpx;
image {
width: 100%;
}
.graph-tips {
font-size: $title-size-sm;
color: #9a9a9a;
text-align: center;
line-height: 48rpx;
}
}
}
.graphBtn {
display: flex;
line-height: 90rpx;
border-top: 2rpx solid #d2d2d2;
.graphBtn-lable {
text-align: center;
flex: 2;
border-right: 2rpx solid #d2d2d2;
font-size: $title-size-lg;
color: $mian-color;
&:last-child {
border-color: transparent;
}
}
}
}
}
// 修改成功弹出框
.modifyBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .8);
}
.modifyCont {
position: absolute;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 $padding*2.5;
box-sizing: border-box;
.modifyWhite {
padding: $padding + 10 $padding * 2;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
text-align: center;
.modifyWhite-img {
width: 260rpx;
height: 260rpx;
margin: 0 atuo;
}
.modifyWhite-title {
line-height: 80rpx;
font-weight: 600;
font-size: $title-size + 4;
}
.modifyWhite-text {
font-size: $title-size-m;
}
.modifyWhite-btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff;
border-radius: $radius-m;
height: 90rpx;
line-height: 90rpx;
padding: 0;
margin: $margin * 2 0 0;
text-align: center;
}
}
}
</style>

419
pages/login/register.vue Normal file
View File

@@ -0,0 +1,419 @@
<template>
<view class="content">
<img class="loginBack" src="@/static/imgs/login_back.png">
<img class="loginBottom" src="@/static/imgs/login_bottom.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="number" placeholder="请输入验证码" maxlength="4" v-model="code" />
<button @click="getPhoneCode" class="sms-btn" :disabled="phone == '' || getSms != ''" type="default" size="mini">{{getSms ? '重新发送' + smsTime + 's': '发送验证码'}}</button>
</view>
<!-- 输入密码 -->
<view class="inputs">
<input type="text" :password="passwordState" placeholder="密码须包含大小写最少8位" v-model="password" />
<image class="inputs-see" @click="seeClick" :src="seeState ? '../../static/icon/see_active.png' : '../../static/icon/see.png'" mode="aspectFill"></image>
</view>
<!-- 输入密码 -->
<view class="inputs">
<input type="text" :password="passwordAgain" placeholder="请再次输入密码" v-model="confirmation" />
<image class="inputs-see" @click="seeAgain" :src="againState ? '../../static/icon/see_active.png' : '../../static/icon/see.png'" mode="aspectFill"></image>
</view>
<!-- 输入邀請碼 -->
<view class="inputs" v-if="newUser">
<input type="text" placeholder="请输入邀请码" v-model="parentId" />
</view>
<button class="btn" type="default" :disabled="phone == '' || code == ''" @click="gainSms">立即注册</button>
<view class="forget">
<view class="forget-label" @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: {name : 'secret'}})">隐私协议</view><view @click="$Router.push({name: 'Agreement', params: {name : 'protocol'}})">服务协议</view>
</view>
</view>
</view>
<!-- 图文验证码 -->
<view class="graphBack" v-if="graphState"></view>
<view class="graphCont" v-if="graphState">
<view class="graphWhite">
<view class="graphWhite-title">
请完成验证码
</view>
<view class="inputs">
<input class="inputs-input" type="text" placeholder="输入图片中的字符" v-model="newCaptcha" />
<view class="graph-img" @click="replaceClick">
<image :src="graphImg" mode="widthFix"></image>
<view class="graph-tips">看不清换一张</view>
</view>
</view>
<view class="graphBtn">
<view class="graphBtn-lable" @click="graphState = false">
取消
</view>
<view class="graphBtn-lable" @click="checkCaptcha">
确定
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { Captcha, smsAuth, Register } from '@/apis/interfaces/auth'
export default {
data() {
return {
graphImg : '', // 图形码
newCaptcha : '', // 填写图形码
captchaKey : '', // 校验图形码传回去的值
phone : '', // 手机号码
password : '', // 密码
confirmation: '', // 再次输入密码
code : '', // 短信验证码
parentId : '', // 是否有上级id 邀请码
checked : false, // 勾选协议
getSms : '',
smsTime : 60,
graphState : false, // 图文弹出层
newUser : '',
seeState : false, //小眼睛
againState : false, //小眼睛-再次输入密码
passwordState: true,
passwordAgain: true
}
},
mounted(){
this.parentId = this.$Route.query.invite_code || ''
},
methods: {
// 第一步 获取图形码
getPhoneCode() {
if(this.phone) {
this.CaptchaData();
this.graphState = true
return
}
uni.showToast({
title: '请输入手机号',
icon: "none"
})
},
// 图形码数据
CaptchaData() {
Captcha().then(res => {
this.graphImg = res.img
this.captchaKey= res.key
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 看不清,换一张 - 图形码数据
replaceClick() {
this.CaptchaData();
// 清除图形码数据
this.newCaptcha = ''
},
// 需校验图形验证码
checkCaptcha() {
let outTime
smsAuth({
mobileNo : this.phone,
captcha : this.newCaptcha,
captcha_key: this.captchaKey,
type : 'register'
}).then(res => {
uni.showToast({
title: res.message,
icon: "none"
})
// 关闭弹框
this.graphState = false
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"
})
})
},
// 用户注册
gainSms() {
if(this.checked) {
Register({
username : this.phone,
password : this.password,
password_confirmation: this.confirmation,
code : this.code,
parent_id : this.parentId
}).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
},
// 查看密码-再次
seeAgain() {
this.againState = !this.againState
this.passwordAgain = !this.passwordAgain
}
}
}
</script>
<style lang="scss" scoped>
.loginBack {
width: 35%;
position: fixed;
top: 0;
right: 0;
}
.loginBottom {
width: 60%;
position: fixed;
bottom: 0;
left: 0;
}
.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;
overflow: hidden;
.inputs-see {
position: absolute;
right: $padding;
top: $padding;
width: 38rpx;
height: 38rpx;
}
input {
font-weight: normal;
height: 100%;
}
.sms-btn {
position: absolute;
right: 0;
top: 0;
background-color: #da2b56;
height: 100rpx;
line-height: 100rpx;
color: #ffffff;
border-radius: 0;
font-size: $title-size-lg;
border: none !important;
&[disabled] {
background-color: #ff8da9;
}
}
}
.btn {
background-image: linear-gradient(to right, #da2b56, #FBAF3B);
color: #ffffff;
border-radius: $radius-m;
height: 100rpx;
line-height: 100rpx;
padding: 0;
margin: $margin * 3 0 0;
&[disabled] {
background-image: linear-gradient(to right, #ff8da9, #ffd0a2);
}
}
.forget {
line-height: 120rpx;
font-size: $title-size-m;
text-align: right;
color: #7f8391;
}
}
.graphBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 9;
background-color: rgba(0, 0, 0, .5);
}
.graphCont {
position: absolute;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 10;
padding: 0 $padding*2.5;
box-sizing: border-box;
.graphWhite {
background-color: #ffffff;
border-radius: $radius-m;
.graphWhite-title {
text-align: center;
line-height: 110rpx;
font-size: $title-size + 4;
}
.inputs {
display: flex;
padding: 10rpx $padding $padding;
box-sizing: border-box;
.inputs-input {
border: 2rpx solid #d2d2d2;
border-radius: $radius-m;
height: 82rpx;
line-height: 82rpx;
padding: 0 $padding - 10;
box-sizing: border-box;
font-size: $title-size-lg;
width: calc(100% - 230rpx);
}
.graph-img {
width: 200rpx;
margin-left: 30rpx;
image {
width: 100%;
}
.graph-tips {
font-size: $title-size-sm;
color: #9a9a9a;
text-align: center;
line-height: 48rpx;
}
}
}
.graphBtn {
display: flex;
line-height: 90rpx;
border-top: 2rpx solid #d2d2d2;
.graphBtn-lable {
text-align: center;
flex: 2;
border-right: 2rpx solid #d2d2d2;
font-size: $title-size-lg;
color: $mian-color;
&:last-child {
border-color: transparent;
}
}
}
}
}
.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;
}
}
}
</style>

View File

@@ -0,0 +1,657 @@
<template>
<view class="content">
<view class="top">
<view class="base">
<view class="base-tab">
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon//bankIcon_01_active.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
银行信息
</view>
<view class="base-tab-tips">
待完善
</view>
</view>
</view>
<view class="base-tab-spot">
<text></text>
<text></text>
<text></text>
</view>
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon/bankIcon_02.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
其他信息
</view>
<view @click="nextStep" class="base-tab-tips">
去完善 >
</view>
</view>
</view>
</view>
<view class="white">
<view class="base-title">
<view class="base-name">
基本信息
</view>
<!-- <view class="base-number">
6/12
</view> -->
</view>
<view class="base-list">
<!-- items.type === 'text' || items.type === 'textarea' -->
<view class="base-block" :class="{baseAline : items.flex == 100, radioAline : items.type == 'radio'}" v-for="(items, itemsIndex) in backParams" :key="itemsIndex" v-if="items.pre_key != null ? isShowBlock(backParams, items): true">
<view class="base-block-name" v-if="items.label == 1">
<text>*</text>{{items.title}}
<image class="base-notesIcon" v-if="items.reason != ''" @click="seeTips('驳回原因', items.reason.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<!-- 单输入框 -->
<view class="base-block-write" v-if="items.type === 'price' || items.type === 'number' || items.type === 'text' || items.type === 'password' || items.type === 'mobile' || items.type === 'day'">
<mouldInput class="idcardAdd-input" :blur-value="items.value" :input-type="items.type" :input-key="items.key" @onValue="($event) => {items.value = $event}"></mouldInput>
</view>
<!-- 单选 -->
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="items.type === 'radio'">
<radio-group @change="items.value = parseFloat($event.detail.value)">
<label class="idcardAdd-aline-write" v-for="(limitItem, limitIndex) in items.options" :key="limitIndex">
<radio :value="String(limitIndex)" :checked="items.value === limitIndex" color="#4e7bfe" style="transform:scale(.65)"/>
<text>{{limitItem}}</text>
</label>
</radio-group>
</view>
<!-- 多选 -->
<block v-if="items.type === 'checkbox'">
<mouldCheckbox :checkbox-list="items.options" :checkboxVlaue="items.value || []" @onCheckbox="($event) => {items.value = $event}"></mouldCheckbox>
</block>
<!-- 办卡城市 -->
<view class="base-block-write" v-if="items.type === 'city'">
<mouldInput class="idcardAdd-input" :blur-value="items.value" :input-type="items.type" :input-key="items.key" @onValue="($event) => {items.value = $event}"></mouldInput>
</view>
<!-- 描述 -->
<block v-if="items.label == 1">
<view class="base-block-textarea" v-if="items.type === 'textarea'">
<mouldText class="idcardAdd-depict-textarea" :blur-value="items.value" @onTextarea="($event) => {items.value = $event}"></mouldText>
</view>
</block>
<!-- 下拉框 -->
<view class="base-block-write" v-if="items.type === 'select'">
<mouldSelect class="idcardAdd-picker" :select-value="items.value.toString()" :select-list="items.options" @bankPicker="($event) => {items.value = $event}"></mouldSelect>
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
<!-- 日期选择 -->
<view class="base-block-write" v-if="items.type === 'date'">
<!-- <picker mode="date" :value-date="values[items.key]" :start="startDate" :end="endDate" @change="($event) => {values[items.key] = $event.detail.value}">
<view class="uni-input">{{values[items.key]}}</view>
</picker> -->
<mouldDate :value-date="items.value || '请选择日期'" class="idcardAdd-picker" @onDate="($event) => {items.value = $event}"></mouldDate>
<image src="@/static/imgs/basic_date.png" mode="aspectFill"></image>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="introduce-btn">
<button class="btn" size="mini" @click="cacheSave">暂时保存</button>
<!-- -->
<view @click="nextStep" class="btn" size="mini">下一步</view>
</view>
<!-- 驳回提示 -->
<mouldTips :see-data="seeData" @tipsClose="($event) => {seeData.seeShow = $event}"></mouldTips>
<!-- 是否使用首次录入信息 -->
<view class="backFirst" v-if="popFirst"></view>
<view class="contFirst" v-if="popFirst">
<view class="tipsWhite">
<view class="tipsWhite-top">
<view class="tipsWhite-name">
温馨提示
</view>
<view class="tipsWhite-text">
是否使用首次录入信息
</view>
</view>
<view class="tipsWhite-btn">
<view class="idcardBtn-go active" @click="popFirst = false">
暂不使用
</view>
<view class="idcardBtn-go" @click="goFirst">
立即使用
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { userBank, cacheBank, cacheBankPut } from '@/apis/interfaces/user'
import mouldCheckbox from '@/components/mould-checkbox.vue'
import mouldInput from '@/components/mould-input.vue'
import mouldRadio from '@/components/mould-radio.vue'
import mouldText from '@/components/mould-text.vue'
import mouldSelect from '@/components/mould_select.vue'
import mouldDate from '@/components/mould-date.vue'
import mouldTips from '@/components/mould-tips.vue'
export default {
components: {
mouldCheckbox,
mouldInput,
mouldRadio,
mouldText,
mouldSelect,
mouldDate,
mouldTips
},
data() {
return {
popFirst : false, // 首次录入信息状态
disabled : false, // 按钮状态
bankData : '', // 基础信息
backParams: [], // 字段数组
// 查看提示组件
seeData : {
seeShow : false,
seeTitle: '',
seeText : '',
},
values : '',
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
userId : '', // 第二个id
baseId : '' ,// 第二个id
institutionId: '',
cacheData: '' //缓存数据
}
},
computed: {
// isChecked(){
// return (val, vals) => {
// let valsArr = vals || []
// return valsArr.findIndex(v => v == val) >= 0
// }
// },
isShowBlock(){
return (backParams, items) => {
if(items.pre_key != null){
let paramsValue = backParams.find(v => v.key == items.pre_key)
return paramsValue.value == items.pre_value
}
return true
}
}
},
onShow() {
// 获取基础信息
this.baseInfo();
},
methods: {
// 基础信息
baseInfo() {
uni.showLoading({
title: '加载中...',
mask : true
})
userBank(this.$Route.query.id).then(res => {
// 是否使用首次录入信息
// if(res.is_finish == 0 && res.user_bank) {
// this.popFirst = true
// this.baseId = res.user_bank.user_bank_id
// }
let { item, params, business_order_user_bank_id } = res;
cacheBank(business_order_user_bank_id).then(StorageRes => {
this.userId = res.business_order_user_bank_id
uni.hideLoading()
if(StorageRes === ''){
this.backParams = params
return
}
let storageParams = []
storageParams = params.map(val => {
if(val.type == 'checkbox' && StorageRes[val.key].length > 0){
val.value = StorageRes[val.key]
return val
}
if(val.type == 'select' && StorageRes[val.key] === null){
val.value = 0
return val
}
val.value = StorageRes[val.key] === null ? "" : StorageRes[val.key]
return val;
})
this.backParams = storageParams
}).catch(StorageErr => {
uni.showToast({
title: StorageErr.message,
icon : 'none'
})
})
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 线上保存 - 缓存
cacheSave() {
let SaveArr = new Object;
this.backParams.map(val => {
SaveArr[val.key] = val.value
})
cacheBankPut(this.$Route.query.id, {...SaveArr}).then(res => {
uni.showToast({
title: '保存成功',
icon: "none"
})
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 下一步
nextStep(){
// 本地保存备份
// let newSaveArr = this.backParams.map(val => {
// return {
// key: val.key,
// value: val.value == null ? '' : val.value
// }
// })
let newSaveArr = new Object;
this.backParams.map(val => {
newSaveArr[val.key] = val.value
// 本地保存备份
// SaveArr.push({
// key: val.key,
// value: val.value
})
// 线上保存
cacheBankPut(this.$Route.query.id, {...newSaveArr}).then(res => {
// 跳转
this.$router.push({
name: 'ModifyOther',
params: {
id: this.$Route.query.id
}
})
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 提示组件 -- 赋值
seeTips(title, text) {
this.seeData.seeShow = true
this.seeData.seeTitle = title
this.seeData.seeText = text
},
// 跳转新页面-首次录入信息
goFirst() {
this.popFirst = false
this.$Router.replace({name: 'userBank', params: {userId: this.userId, id: this.baseId, type: 'first'}})
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
border-bottom: transparent 140rpx solid;
position: relative;
height: 100vh;
overflow-y: scroll;
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: absolute;
z-index: 9;
padding: $padding + 20 $padding;
box-sizing: border-box;
.base-tab {
overflow: hidden;
display: flex;
padding: 0 $padding 20rpx 10rpx;
position: relative;
.base-tab-item {
color: #ffffff;
position: relative;
display: flex;
.base-tab-img {
width: 120rpx;
height: 120rpx;
}
.base-tab-cont {
padding-top: $padding - 15;
box-sizing: border-box;
.base-tab-name {
font-size: $title-size-sm;
}
.base-tab-tips {
font-size: $title-size-sm - 2;
border: 2rpx solid #ffeaea;
border-radius: $radius * 4;
width: 110rpx;
text-align: center;
opacity: .8;
margin-top: 10rpx;
}
}
}
.base-tab-spot {
text-align: center;
width: 180rpx;
float: left;
margin-top: $margin;
text {
border-radius: 50%;
background-color: #ffffff;
display: inline-block;
margin-left: 15rpx;
&:nth-child(1) {
width: 10rpx;
height: 10rpx;
opacity: .5;
}
&:nth-child(2) {
width: 14rpx;
height: 14rpx;
opacity: .8;
}
&:nth-child(3) {
width: 16rpx;
height: 16rpx;
}
}
}
}
.white {
padding: $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 0 -10rpx 0;
overflow: hidden;
.base-block {
width: calc(50% - 20rpx);
// width: calc(100% - 20rpx);
margin: 20rpx 10rpx;
float: left;
.base-block-name {
// margin: $margin + 20 0 $margin - 10;
color: #111111;
display: flex;
text {
color: $mian-color;
padding-right: 10rpx;
}
.base-notesIcon {
width: 32rpx;
height: 32rpx;
margin: 6rpx 0 0 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #111111;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: 0 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-m;
height: 84rpx;
line-height: 84rpx;
margin-top: $margin - 10;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.idcardAdd-input {
display: flex;
flex: 1;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
.idcardAdd-aline {
font-size: $title-size-m;
color: #999999;
.idcardAdd-aline-write {
margin-right: $margin;
}
}
&.baseAline {
width: calc(100% - 20rpx);
}
&.radioAline {
display: flex;
.base-block-name {
flex: 1;
}
}
}
}
}
}
}
.introduce-btn {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background-color: #f5f5f5;
text-align: center;
padding: $padding $padding - 20;
box-sizing: border-box;
z-index: 9;
.btn {
background-color: $mian-color;
border: 2rpx solid transparent;
box-sizing: border-box;
color: #ffffff;
border-radius: $radius-sm;
width: calc(50% - 30rpx);
margin: 0 15rpx;
line-height: 90rpx;
font-size: $title-size;
float: left;
&:first-child {
background-color: transparent;
border-color: $mian-color;
color: $mian-color;
}
}
}
.backFirst {
position: fixed;
width: 100%;
height: 100vh;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
left: 0;
top: 0;
}
.contFirst {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
overflow: hidden;
}
.tipsWhite-top {
padding: 30rpx;
box-sizing: border-box;
}
.tipsWhite-name {
text-align: center;
color: #111111;
font-size: 34rpx;
font-weight: 600;
margin-bottom: 30rpx;
padding-bottom: $padding;
border-bottom: solid #F6F6F6 2rpx;
}
.tipsWhite-text {
font-size: 30rpx;
color: #666666;
line-height: 48rpx;
text-align: center;
padding: $padding + 10 0;
}
.tipsWhite-btn {
line-height: 90rpx;
border-top: 2rpx solid #F6F6F6;
display: flex;
box-sizing: border-box;
.idcardBtn-go {
width: 50%;
background-color: $mian-color;
color: #ffffff;
height: 90rpx;
line-height: 90rpx;
font-size: $title-size;
text-align: center;
&.active {
background-color: #ffffff;
color: $mian-color;
}
}
}
}
</style>

View File

@@ -0,0 +1,927 @@
<template>
<view class="content">
<view class="top">
<view class="base">
<view class="white">
<view class="base-title">
<view class="base-name">
基本信息
</view>
<view class="base-number">
<!-- 6/12 -->
</view>
</view>
<view class="base-list">
<view class="base-block">
<view class="base-block-name">
<text>*</text>姓名
</view>
<view class="base-block-write prohibit">
{{baseData.name}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>性别
</view>
<view class="base-block-write prohibit">
{{baseData.sex}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>年龄
</view>
<view class="base-block-write prohibit">
{{baseData.age}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>属相
</view>
<view class="base-block-write prohibit">
{{baseData.zodiak}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>身份证号
</view>
<view class="base-block-write prohibit">
{{baseData.id_card}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>身份证地址
</view>
<view class="base-block-write prohibit">
{{baseData.address}}
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>婚姻<image v-if="baseData.check_params.marriage" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.marriage.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<picker class="idcardAdd-picker" @change="marriageChange($event)" :range="marriage">
<view class="uni-input">{{marriage[marriageIndex]}}</view>
</picker>
<image src="/static/imgs/basic_down.png"></image>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.marriage">
<picker class="idcardAdd-picker" @change="marriageChange($event)" :range="marriage">
<view class="uni-input">{{marriage[marriageIndex]}}</view>
</picker>
<image src="/static/imgs/basic_down.png"></image>
</block>
<view class="idcardAdd-picker" v-else>
<view class="uni-input grey">{{marriage[marriageIndex]}}</view>
</view>
</block>
</view>
</view>
<view class="base-block" v-if="marriageIndex == 1">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>配偶 <image v-if="baseData.check_params.mate" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.mate.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="mate" maxlength="4" type="text" placeholder="请输入配偶姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'mate')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.mate">
<input class="base-block-input" :value="mate" maxlength="4" type="text" placeholder="请输入配偶姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'mate')"/>
</block>
<block v-else-if="marriageIndex == 1 && baseData.check_params.marriage">
<input class="base-block-input" :value="mate" maxlength="4" type="text" placeholder="请输入配偶姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'mate')"/>
</block>
<view class="idcardAdd-picker" v-else>
<input class="base-block-input grey" disabled :value="mate" maxlength="4" type="text" placeholder="请输入配偶姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'mate')"/>
</view>
</block>
</view>
</view>
<view class="base-block" :class="{baseAline : marriageIndex == 1}">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>学历 <image v-if="baseData.check_params.education" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.education.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<picker class="idcardAdd-picker" @change="educationChange($event)" :range="education">
<view class="uni-input">{{education[educationIndex]}}</view>
</picker>
<image src="/static/imgs/basic_down.png"></image>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.education">
<picker class="idcardAdd-picker" @change="educationChange($event)" :range="education">
<view class="uni-input">{{education[educationIndex]}}</view>
</picker>
<image src="/static/imgs/basic_down.png"></image>
</block>
<view class="idcardAdd-picker" v-else>
<view class="grey">{{education[educationIndex]}}</view>
</view>
</block>
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>毕业学院 <image v-if="baseData.check_params.school" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.school.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" type="text" :value="school" placeholder="请输入毕业学院" placeholder-class="placeholderClass" @input="blurInput($event, 'school')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.school">
<input class="base-block-input" type="text" :value="school" placeholder="请输入毕业学院" placeholder-class="placeholderClass" @input="blurInput($event, 'school')"/>
</block>
<input v-else disabled class="base-block-input grey" type="text" :value="school" placeholder="请输入毕业学院" placeholder-class="placeholderClass" @input="blurInput($event, 'school')"/>
</block>
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>联系电话 <image v-if="baseData.check_params.mobile" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.mobile.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" maxlength="11" :value="mobile" type="tel" placeholder="请输入联系电话" placeholder-class="placeholderClass" @input="blurInput($event, 'mobile')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.mobile">
<input class="base-block-input" maxlength="11" :value="mobile" type="tel" placeholder="请输入联系电话" placeholder-class="placeholderClass" @input="blurInput($event, 'mobile')"/>
</block>
<input v-else disabled class="base-block-input grey" maxlength="11" :value="mobile" type="tel" placeholder="请输入联系电话" placeholder-class="placeholderClass" @input="blurInput($event, 'mobile')"/>
</block>
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>联系地址 <image v-if="baseData.check_params.contact_address" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.contact_address.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<block v-if="baseData.is_finish == 0">
<view class="base-block-write from-city-picker">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
v-model="baseData.province_id"
@change="onCityPicker"
></uni-data-picker>
</view>
</block>
<block v-else-if="baseData.is_finish == 2">
<view class="base-block-write from-city-picker" v-if="baseData.check_params.contact_address">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
v-model="baseData.province_id"
@change="onCityPicker"
></uni-data-picker>
</view>
<view class="base-block-textarea" style="color: #999;" v-else>
<textarea disabled placeholder-style="font-size: 30rpx; color: #999999" maxlength="500" :value="baseData.contact_address"/>
</view>
</block>
</view>
<view class="base-block baseAline">
<view class="base-block-textarea" v-if="baseData.is_finish == 0">
<textarea placeholder-style="color:#999999; font-size: 30rpx" maxlength="500" :value="address" @input="blurInput($event, 'address')" placeholder="请填写详细地址..."/>
</view>
<block v-else-if="baseData.is_finish == 2">
<view class="base-block-textarea" v-if="baseData.check_params.contact_address">
<textarea placeholder-style="font-size: 30rpx; color: #999999" maxlength="500" :value="address" @input="blurInput($event, 'address')" placeholder="请填写详细地址..."/>
</view>
</block>
</view>
<!-- 现单位名称 -->
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>现单位名称 <image v-if="baseData.check_params.now_company_name" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.now_company_name.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-textarea">
<block v-if="baseData.is_finish == 0">
<textarea placeholder-style="color:#999999; font-size: 30rpx" :value="companyName" @input="blurInput($event, 'companyName')" placeholder="请填写现单位名称"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.now_company_name">
<textarea placeholder-style="font-size: 30rpx; color: #999999" :value="companyName" @input="blurInput($event, 'companyName')" placeholder="请填写现单位名称"/>
</block>
<textarea v-else disabled style="color: #999999" placeholder-style="font-size: 30rpx; color: #999999" :value="companyName" @input="blurInput($event, 'companyName')" placeholder="请填写现单位名称"/>
</block>
</view>
</view>
<!-- 现单位地址 -->
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>现单位地址 <image v-if="baseData.check_params.now_company_address" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.now_company_address.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-textarea">
<block v-if="baseData.is_finish == 0">
<textarea placeholder-style="color:#999999; font-size: 30rpx" :value="companyAddress" @input="blurInput($event, 'companyAddress')" placeholder="请填写现单位地址"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.now_company_address">
<textarea placeholder-style="font-size: 30rpx; color: #999999" :value="companyAddress" @input="blurInput($event, 'companyAddress')" placeholder="请填写现单位地址"/>
</block>
<textarea v-else disabled style="color: #999999" placeholder-style="font-size: 30rpx; color: #999999" :value="companyAddress" @input="blurInput($event, 'companyAddress')" placeholder="请填写现单位地址"/>
</block>
</view>
</view>
<!-- 现居住地址 -->
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>现居住地址 <image v-if="baseData.check_params.now_domicile" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.now_domicile.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-textarea">
<block v-if="baseData.is_finish == 0">
<textarea placeholder-style="color:#999999; font-size: 30rpx" :value="domicile" @input="blurInput($event, 'domicile')" placeholder="请填写现居住地址"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.now_domicile">
<textarea placeholder-style="font-size: 30rpx; color: #999999" :value="domicile" @input="blurInput($event, 'domicile')" placeholder="请填写现居住地址"/>
</block>
<textarea v-else disabled style="color: #999999" placeholder-style="font-size: 30rpx; color: #999999" :value="domicile" @input="blurInput($event, 'domicile')" placeholder="请填写现居住地址"/>
</block>
</view>
</view>
<!-- 新增联系人 2021-04-12 -->
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>联系人1<image v-if="baseData.check_params.one_contact" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.one_contact.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="oneContact" type="text" placeholder="预留联系人1姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'one_contact')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.one_contact">
<input class="base-block-input" :value="oneContact" type="text" placeholder="预留联系人1姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'one_contact')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="oneContact" type="text" placeholder="预留联系人1姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'one_contact')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>关系<image v-if="baseData.check_params.one_contact_relation" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.one_contact_relation.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="oneContactRelation" type="text" placeholder="预留联系人1关系" placeholder-class="placeholderClass" @input="blurInput($event, 'one_contact_relation')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.one_contact_relation">
<input class="base-block-input" :value="oneContactRelation" type="text" placeholder="预留联系人1关系" placeholder-class="placeholderClass" @input="blurInput($event, 'one_contact_relation')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="oneContactRelation" type="text" placeholder="预留联系人关系" placeholder-class="placeholderClass" @input="blurInput($event, 'one_contact_relation')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text></text>联系人2<image v-if="baseData.check_params.two_contact" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.two_contact.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="twoContact" type="text" placeholder="预留联系人2姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'two_contact')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.two_contact">
<input class="base-block-input" :value="twoContact" type="text" placeholder="预留联系人2姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'two_contact')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="twoContact" type="text" placeholder="预留联系人2姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'two_contact')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text></text>关系<image v-if="baseData.check_params.two_contact_relation" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.two_contact_relation.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="twoContactRelation" type="text" placeholder="预留联系人2关系" placeholder-class="placeholderClass" @input="blurInput($event, 'two_contact_relation')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.two_contact_relation">
<input class="base-block-input" :value="twoContactRelation" type="text" placeholder="预留联系人2关系" placeholder-class="placeholderClass" @input="blurInput($event, 'two_contact_relation')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="twoContactRelation" type="text" placeholder="预留联系人2关系" placeholder-class="placeholderClass" @input="blurInput($event, 'two_contact_relation')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text></text>联系人3<image v-if="baseData.check_params.three_contact" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.three_contact.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="threeContact" type="text" placeholder="预留联系人3姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'three_contact')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.three_contact">
<input class="base-block-input" :value="threeContact" type="text" placeholder="预留联系人3姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'three_contact')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="threeContact" type="text" placeholder="预留联系人3姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'three_contact')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text></text>关系<image v-if="baseData.check_params.three_contact_relation" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.three_contact_relation.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="threeContactRelation" type="text" placeholder="预留联系人3关系" placeholder-class="placeholderClass" @input="blurInput($event, 'three_contact_relation')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.three_contact_relation">
<input class="base-block-input" :value="threeContactRelation" type="text" placeholder="预留联系人3关系" placeholder-class="placeholderClass" @input="blurInput($event, 'three_contact_relation')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="threeContactRelation" type="text" placeholder="预留联系人3关系" placeholder-class="placeholderClass" @input="blurInput($event, 'three_contact_relation')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text></text>联系人4<image v-if="baseData.check_params.four_contact" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.four_contact.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="fourContact" type="text" placeholder="预留联系人4姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'four_contact')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.four_contact">
<input class="base-block-input" :value="fourContact" type="text" placeholder="预留联系人4姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'four_contact')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="fourContact" type="text" placeholder="预留联系人4姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'four_contact')"/>
</block>
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text></text>关系<image v-if="baseData.check_params.four_contact_relation" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.four_contact_relation.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<block v-if="baseData.is_finish == 0">
<input class="base-block-input" :value="fourContactRelation" type="text" placeholder="预留联系人4关系" placeholder-class="placeholderClass" @input="blurInput($event, 'four_contact_relation')"/>
</block>
<block v-else-if="baseData.is_finish == 2">
<block v-if="baseData.check_params.four_contact_relation">
<input class="base-block-input" :value="fourContactRelation" type="text" placeholder="预留联系人4关系" placeholder-class="placeholderClass" @input="blurInput($event, 'four_contact_relation')"/>
</block>
<input v-else disabled class="base-block-input grey" :value="fourContactRelation" type="text" placeholder="预留联系人4关系" placeholder-class="placeholderClass" @input="blurInput($event, 'four_contact_relation')"/>
</block>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="introduce-btn">
<button class="btn" size="mini" :disabled="disabled" @click="infoSubmit">提交审核</button>
</view>
<!-- 驳回提示 -->
<mouldTips :see-data="seeData" @tipsClose="($event) => {seeData.seeShow = $event}"></mouldTips>
<!-- 是否使用首次录入信息 -->
<view class="backFirst" v-if="popFirst"></view>
<view class="contFirst" v-if="popFirst">
<view class="tipsWhite">
<view class="tipsWhite-top">
<view class="tipsWhite-name">
温馨提示
</view>
<view class="tipsWhite-text">
是否使用首次录入信息
</view>
</view>
<view class="tipsWhite-btn">
<view class="idcardBtn-go active" @click="popFirst = false">
暂不使用
</view>
<view class="idcardBtn-go" @click="goFirst">
立即使用
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import uniDataPicker from '@/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js';
import mouldTips from '@/components/mould-tips.vue'
import { userBase, basePut, create, createAll } from '@/apis/interfaces/user'
export default {
components: {
mouldTips
},
data() {
return {
popFirst: false, // 首次录入信息状态
disabled: false, // 按钮状态
baseData: '', // 基础信息
mobile : '', // 联系方式
mate : '', // 配偶名称
school : '', // 毕业学院
address : '', // 联系地址
companyName : '', // 现单位名称
companyAddress : '', // 现单位地址
domicile : '', // 现居住地址
oneContact : '', // 预留联系人1姓名
oneContactRelation : '', // 预留联系人1姓名-关系
twoContact :'', // 预留联系人2姓名
twoContactRelation : '', // 预留联系人2姓名-关系
threeContact : '', // 预留联系人3姓名
threeContactRelation : '', // 预留联系人4姓名-关系
fourContact : '', // 预留联系人4姓名
fourContactRelation : '', // 预留联系人4姓名-关系
// 查看提示组件
seeData : {
seeShow : false,
seeTitle: '',
seeText : '',
},
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
cityPicker : [],
}
},
onLoad() {},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
createAll().then(res => {
this.cityPicker = res;
// 获取基础信息
this.baseInfo();
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
methods: {
// 基础信息
baseInfo() {
userBase(this.$Route.query.id).then(res => {
this.userId = res.base.business_order_user_id
this.baseData = res.base
this.education = res.base.educations
this.marriage = res.base.marriages
this.mobile = res.base.mobile || '' // 联系方式
this.mate = res.base.mate || '' // 配偶名称
this.school = res.base.school || '' // 毕业学院
this.address = res.base.tmp_address || '' // 联系地址
this.companyName = res.base.now_company_name || '' // 现单位名称
this.companyAddress = res.base.now_company_address || '' // 现单位地址
this.domicile = res.base.now_domicile || '' // 现居住地址
this.oneContact = res.base.one_contact || '' // 预留联系人1姓名
this.oneContactRelation = res.base.one_contact_relation || '' // 预留联系人1姓名-关系
this.twoContact = res.base.two_contact || '' // 预留联系人2姓名
this.twoContactRelation = res.base.two_contact_relation || '' // 预留联系人2姓名-关系
this.threeContact = res.base.three_contact || '' // 预留联系人3姓名
this.threeContactRelation = res.base.three_contact_relation || '' // 预留联系人4姓名-关系
this.fourContact = res.base.four_contact || '' // 预留联系人4姓名
this.fourContactRelation = res.base.four_contact_relation || '' // 预留联系人4姓名-关系
this.marriageIndex = res.base.marriage // 婚姻选择index
this.educationIndex = res.base.education // 婚姻选择index
// 是否使用首次录入信息
// if(res.base.is_finish == 0 && res.userBase) {
// this.popFirst = true
// this.baseId = res.userBase.user_base_id
// }
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 跳转新页面-首次录入信息
goFirst() {
this.popFirst = false
this.$Router.replace({name: 'userBase', params: {userId: this.userId, baseId: this.baseId, type: 'first'}})
},
// 婚姻选择
marriageChange(e) {
this.marriageIndex = e.detail.value
},
// 学历选择
educationChange(e) {
this.educationIndex = e.detail.value
},
// 输入框
blurInput(e, name) {
let value = e.detail.value
switch(name)
{
case 'mobile':{
this.mobile = value
break;
}
case 'mate':{
this.mate = value
break;
}
case 'school':{
this.school = value
break;
}
case 'address':{
this.address = value
break;
}
case 'companyName':{
this.companyName = value
break;
}
case 'companyAddress':{
this.companyAddress = value
break;
}
case 'domicile':{
this.domicile = value
break;
}
case 'one_contact':{
this.oneContact = value
break;
}
case 'one_contact_relation':{
this.oneContactRelation = value
break;
}
case 'two_contact':{
this.twoContact = value
break;
}
case 'two_contact_relation':{
this.twoContactRelation = value
break;
}
case 'three_contact':{
this.threeContact = value
break;
}
case 'three_contact_relation':{
this.threeContactRelation = value
break;
}
case 'four_contact':{
this.fourContact = value
break;
}
case 'four_contact_relation':{
this.fourContactRelation = value
break;
}
}
},
// 选择城市
onCityPicker(e){
let { value } = e.detail
this.baseData.district_id = value[0].value
this.baseData.city_id = value[1].value
this.baseData.province_id = value[2].value
this.btnSee = false
},
// 修改基础信息 - 提交
infoSubmit() {
let data = {
mobile : this.mobile, //联系方式
mate : this.mate, //配偶姓名
school : this.school, //毕业学院
tmp_address : this.address, //联系地址
now_company_name: this.companyName, // 现单位名称
now_company_address: this.companyAddress, // 现单位地址
now_domicile : this.domicile, // 现居住地址
province_id : this.baseData.province_id,
city_id : this.baseData.city_id,
district_id : this.baseData.district_id,
education : this.educationIndex, //学历
marriage : this.marriageIndex ,//婚姻状态
one_contact : this.oneContact, // 预留联系人1姓名
one_contact_relation : this.oneContactRelation, // 预留联系人1姓名-关系
two_contact : this.twoContact, // 预留联系人2姓名
two_contact_relation : this.twoContactRelation, // 预留联系人2姓名-关系
three_contact : this.threeContact, // 预留联系人3姓名
three_contact_relation : this.threeContactRelation,// 预留联系人4姓名-关系
four_contact : this.fourContact, // 预留联系人4姓名
four_contact_relation : this.fourContactRelation // 预留联系人4姓名-关系
}
basePut(this.baseData.business_order_user_id,data).then(res=>{
this.disabled = true
uni.showToast({
title: res,
icon: "none"
})
setTimeout(() => {
uni.navigateBack(1)
uni.hideLoading()
}, 1500)
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 提示组件 -- 赋值
seeTips(title, text) {
this.seeData.seeShow = true
this.seeData.seeTitle = title
this.seeData.seeText = text
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
border-bottom: transparent 140rpx solid;
position: relative;
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: relative;
z-index: 1;
padding: $padding + 20 $padding;
box-sizing: border-box;
.white {
padding: $padding $padding 0;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 40rpx -10rpx 0;
overflow: hidden;
.base-block {
width: calc(50% - 20rpx);
margin: 0 10rpx $margin + 10;
float: left;
.base-block-name {
margin-bottom: $margin - 10;
color: #111111;
display: flex;
text {
color: $mian-color;
padding-right: 10rpx;
}
.base-notesIcon {
width: 32rpx;
height: 32rpx;
margin: 6rpx 0 0 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #111111;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding - 10 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-lg;
line-height: 44rpx;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.grey {
color: #999999;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
/deep/ .uni-data-tree-dialog {
bottom: 150rpx;
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
}
.baseAline {
width: calc(100% - 20rpx);
}
}
}
}
}
.introduce-btn {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background-color: #f5f5f5;
text-align: center;
padding: $padding;
box-sizing: border-box;
z-index: 2;
.btn {
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-sm;
width: 100%;
line-height: 90rpx;
font-size: $title-size;
&[disabled] {
background-color: #eba5a5;
}
}
}
.backFirst {
position: fixed;
width: 100%;
height: 100vh;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
left: 0;
top: 0;
}
.contFirst {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
overflow: hidden;
}
.tipsWhite-top {
padding: 30rpx;
box-sizing: border-box;
}
.tipsWhite-name {
text-align: center;
color: #111111;
font-size: 34rpx;
font-weight: 600;
margin-bottom: 30rpx;
padding-bottom: $padding;
border-bottom: solid #F6F6F6 2rpx;
}
.tipsWhite-text {
font-size: 30rpx;
color: #666666;
line-height: 48rpx;
text-align: center;
padding: $padding + 10 0;
}
.tipsWhite-btn {
line-height: 90rpx;
border-top: 2rpx solid #F6F6F6;
display: flex;
box-sizing: border-box;
.idcardBtn-go {
width: 50%;
background-color: $mian-color;
color: #ffffff;
height: 90rpx;
line-height: 90rpx;
font-size: $title-size;
text-align: center;
&.active {
background-color: #ffffff;
color: $mian-color;
}
}
}
}

View File

@@ -0,0 +1,480 @@
<template>
<view class="content">
<view class="top">
<view class="base">
<view class="base-tab">
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon//bankIcon_01_active.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
银行信息
</view>
<view class="base-tab-tips" @click="$Router.replace({name: 'ModifyBank', params: {id: baseId}})">
去完善 >
</view>
</view>
</view>
<view class="base-tab-spot">
<text></text>
<text></text>
<text></text>
</view>
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon/bankIcon_02.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
其他信息
</view>
<view class="base-tab-tips">
待完善
</view>
</view>
</view>
</view>
<view class="white">
<view class="base-title">
<view class="base-name">
基本信息
</view>
<!-- <view class="base-number">
6/12
</view> -->
</view>
<view class="base-list">
<view class="base-block" :class="{baseAline : items.type === 'text' || items.type === 'textarea' }" v-for="(items, itemsIndex) in backParams" :key="itemsIndex">
<view class="base-block-name" v-if="items.label == 2">
<text>*</text>{{items.title}}
<image class="base-notesIcon" v-if="items.reason != ''" @click="seeTips('驳回原因', items.reason.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<!-- 描述 -->
<block v-if="items.label == 2">
<view class="base-block-textarea" v-if="items.type === 'textarea'">
<mouldText class="idcardAdd-depict-textarea" :blur-placeholder="items.placeholder" :blur-value="items.value" @onTextarea="($event) => {items.value = $event}"></mouldText>
</view>
</block>
</view>
</view>
</view>
</view>
</view>
<view class="introduce-btn">
<view @click="$Router.replace({name: 'ModifyBank', params: {id: baseId}})" class="btn" size="mini">上一步</view>
<button class="btn" size="mini" :disabled="disabled" @click="infoSubmit">提交审核</button>
</view>
<!-- 驳回提示 -->
<mouldTips :see-data="seeData" @tipsClose="($event) => {seeData.seeShow = $event}"></mouldTips>
</view>
</template>
<script>
import { userBank, cacheBank, bankPut, cacheBankPut } from '@/apis/interfaces/user'
import mouldCheckbox from '@/components/mould-checkbox.vue'
import mouldInput from '@/components/mould-input.vue'
import mouldRadio from '@/components/mould-radio.vue'
import mouldText from '@/components/mould-text.vue'
import mouldSelect from '@/components/mould_select.vue'
import mouldDate from '@/components/mould-date.vue'
import mouldTips from '@/components/mould-tips.vue'
export default {
components: {
mouldCheckbox,
mouldInput,
mouldRadio,
mouldText,
mouldSelect,
mouldDate,
mouldTips
},
data() {
return {
baseId : '', // 银行id
businessId: '',
disabled : false, // 按钮状态
backParams: '', // 基础信息
// 查看提示组件
seeData : {
seeShow : false,
seeTitle: '',
seeText : '',
},
values : '',
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
cacheData: [] ,//缓存数据
}
},
onShow() {
this.baseId = this.$Route.query.id
// 获取基础信息
this.baseInfo();
},
methods: {
// 基础信息
baseInfo() {
uni.showLoading({
title: '加载中...',
mask : true
})
userBank(this.$Route.query.id).then(res => {
// 是否使用首次录入信息
// if(res.is_finish == 0 && res.user_bank) {
// this.popFirst = true
// this.baseId = res.user_bank.user_bank_id
// }
let { item, params, business_order_user_bank_id } = res;
cacheBank(business_order_user_bank_id).then(StorageRes => {
this.userId = res.business_order_user_bank_id
uni.hideLoading()
if(StorageRes === ''){
this.backParams = params
return
}
let storageParams = []
storageParams = params.map(val => {
if(val.type == 'checkbox' && StorageRes[val.key].length > 0){
val.value = StorageRes[val.key]
return val
}
if(val.type == 'select' && StorageRes[val.key] === null){
val.value = 0
return val
}
val.value = StorageRes[val.key] === null ? "" : StorageRes[val.key]
return val;
})
this.backParams = storageParams
}).catch(StorageErr => {
uni.showToast({
title: StorageErr.message,
icon : 'none'
})
})
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 线上保存 - 缓存
cacheSave() {
let SaveArr = new Object;
this.backParams.map(val => {
SaveArr[val.key] = val.value
})
cacheBankPut(this.$Route.query.id, {...SaveArr}).then(res => {}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 提交信息
infoSubmit() {
let SaveArr = this.backParams.map(val => {
return {
key: val.key,
value: val.value
}
})
bankPut(this.$Route.query.id, {
data: SaveArr
}).then(res => {
// 保存
this.cacheSave();
uni.showToast({
title: res,
icon: "none"
})
this.disabled = true
setTimeout(() => {
this.$Router.replace({name: 'User'})
uni.hideLoading()
// uni.removeStorage({//通过key键值名来删除对应数据
// key:"saveArr" + this.$Route.query.id,
// success() {}
// })
}, 1500)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 提示组件 -- 赋值
seeTips(title, text) {
this.seeData.seeShow = true
this.seeData.seeTitle = title
this.seeData.seeText = text
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
border-bottom: transparent 140rpx solid;
position: relative;
height: 100vh;
overflow-y: scroll;
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: absolute;
z-index: 9;
padding: $padding + 20 $padding;
box-sizing: border-box;
.base-tab {
overflow: hidden;
display: flex;
padding: 0 $padding 20rpx 10rpx;
position: relative;
.base-tab-item {
color: #ffffff;
position: relative;
display: flex;
.base-tab-img {
width: 120rpx;
height: 120rpx;
}
.base-tab-cont {
padding-top: $padding - 15;
box-sizing: border-box;
.base-tab-name {
font-size: $title-size-sm;
}
.base-tab-tips {
font-size: $title-size-sm - 2;
border: 2rpx solid #ffeaea;
border-radius: $radius * 4;
width: 110rpx;
text-align: center;
opacity: .8;
margin-top: 10rpx;
}
}
}
.base-tab-spot {
text-align: center;
width: 180rpx;
float: left;
margin-top: $margin;
text {
border-radius: 50%;
background-color: #ffffff;
display: inline-block;
margin-left: 15rpx;
&:nth-child(1) {
width: 10rpx;
height: 10rpx;
opacity: .5;
}
&:nth-child(2) {
width: 14rpx;
height: 14rpx;
opacity: .8;
}
&:nth-child(3) {
width: 16rpx;
height: 16rpx;
}
}
}
}
.white {
padding: $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 0 -10rpx 0;
overflow: hidden;
.base-block {
// width: calc(50% - 20rpx);
width: calc(100% - 20rpx);
margin: 0 10rpx 0;
float: left;
.base-block-name {
margin: $margin + 20 0 $margin - 10;
color: #111111;
display: flex;
text {
color: $mian-color;
padding-right: 10rpx;
}
.base-notesIcon {
width: 32rpx;
height: 32rpx;
margin: 6rpx 0 0 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #111111;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: 0 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-m;
height: 84rpx;
line-height: 84rpx;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.idcardAdd-input {
display: flex;
flex: 1;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
.idcardAdd-aline {
font-size: $title-size-m;
color: #999999;
}
}
.baseAline {
width: calc(100% - 20rpx);
}
}
}
}
}
.introduce-btn {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background-color: #f5f5f5;
text-align: center;
padding: $padding $padding - 20;
box-sizing: border-box;
z-index: 9;
.btn {
background-color: $mian-color;
border: 2rpx solid transparent;
box-sizing: border-box;
color: #ffffff;
border-radius: $radius-sm;
width: calc(50% - 30rpx);
margin: 0 15rpx;
line-height: 90rpx;
font-size: $title-size;
float: left;
&:first-child {
background-color: transparent;
border-color: $mian-color;
color: $mian-color;
}
&[disabled] {
background-color: #eba5a5;
}
}
}

209
pages/sheet/authSuccess.vue Normal file
View File

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

207
pages/sheet/bale.vue Normal file
View File

@@ -0,0 +1,207 @@
<template>
<view class="content">
<!-- 推荐 -->
<view class="recommend">
<view class="item">
<image class="loanBack" src="@/static/imgs/loanBack.png" mode="widthFix"></image>
<image class="loanIcon" src="@/static/imgs/loanIcon.png" mode="widthFix"></image>
<view class="loanTips">
优选推荐
</view>
<block v-for="(item, index) in baleData" :key="index">
<view class="title">
<view class="title-left">
{{item.title}}
</view>
<view class="title-right">
<view class="title-price">
<text></text>{{item.price}}
</view>
</view>
</view>
<view class="exhibition">
<view class="label" v-for="(items, itemsIndex) in item.items" :key="itemsIndex">
<view class="label-title">
<view class="label-name">
{{items.business}}
</view>
<view class="label-tips">
<text>{{items.title}}</text>
</view>
</view>
<view class="label-text">
<view class="nowrap label-show">
{{items.type}}
</view>
<view class="label-price">
{{items.price}}
</view>
</view>
</view>
</view>
</block>
</view>
</view>
</view>
</template>
<script>
import { baleSee } from '@/apis/interfaces/user'
export default {
data() {
return {
baleData: [], // 服务包列表
}
},
onShow() {
// 获取服务包
this.baleInfo()
},
methods: {
// 服务包
baleInfo(){
baleSee(this.$Route.query.id).then(res => {
this.baleData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f6f6f6;
height: 100vh;
// height: calc(100vh - 44px);
overflow-y: scroll;
padding: $padding;
box-sizing: border-box;
}
.item {
background-color: #ffffff;
padding: $padding;
box-sizing: border-box;
border-radius: $radius;
margin-bottom: $margin;
box-shadow: 0 0 10rpx rgba(0, 0, 0, .05);
.title {
display: flex;
line-height: 48rpx;
font-size: $title-size + 2;
font-weight: 600;
margin: $margin 0 $margin - 15;
.title-left {
flex: 1;
text {
font-size: $title-size-m;
padding: 0 10rpx;
}
}
.title-right {
display: flex;
color: #111111;
text {
font-size: $title-size-sm;
}
.title-price {
font-size: $title-size + 4;
}
}
}
.exhibition {
background: #FFF5F9;
padding: $padding;
box-sizing: border-box;
border-radius: $radius;
.label {
margin-bottom: $margin + 25;
&:last-child {
margin-bottom: 0;
}
.label-title {
display: flex;
margin-bottom: $margin - 10;
.label-name {
line-height: 38rpx;
color: #111111;
}
.label-tips {
display: flex;
text {
display: flex;
border: 2rpx solid $mian-color;
color: $mian-color;
font-size: $title-size-sm - 2;
border-radius: $radius * 2;
padding: 0 10rpx;
margin-left: 10rpx;
height: 38rpx;
line-height: 38rpx;
}
}
}
.label-text {
display: flex;
font-size: $title-size-m;
.label-show {
color: #999999;
flex: 1;
margin-right: 20rpx;
}
.label-price {
color: $mian-color;
}
}
}
}
}
// 推荐位
.recommend {
.item {
padding-top: $padding * 3;
position: relative;
border: 4rpx solid $mian-color;
box-shadow: 0 0 10rpx rgba(3, 55, 190, .05);
.loanBack {
width: 220rpx;
position: absolute;
left: -16rpx;
top: 30rpx;
}
.loanTips {
width: 180rpx;
position: absolute;
left: 0;
top: 30rpx;
height: 60rpx;
line-height: 60rpx;
text-align: center;
color: #ffffff;
z-index: 2;
font-size: $title-size + 2;
}
.loanIcon {
width: 74rpx;
position: absolute;
top: 30rpx;
right: 30rpx;
}
.title-right {
color: $mian-color !important;
}
}
}
</style>

View File

@@ -0,0 +1,630 @@
<template>
<view class="content">
<view class="idcard">
<view class="idcardInfo-name">
张曼曼
</view>
<view class="idcardInfo-label">
13836142496
</view>
</view>
<view class="idcardBorder">
<view class="idcardTitle">
添加基本信息
</view>
<!-- 信用卡信息 -->
<block v-if="publicArr.length > 0">
<view class="idcardAdd" v-for="(item, index) in publicArr" :key="index">
<!-- :class="{active : item.openState}" -->
<view class="idcardBottom active">
<view class="idcardAdd-block">
<view class="idcardAdd-block-name" @click="lsa">
<text>*</text>银行
</view>
<view class="idcardAdd-block-write">
<picker class="idcardAdd-picker" @change="bankChange($event, index)" :range="workOneArr" range-key="title">
<view class="uni-input">{{workOneArr[workOneIndex].title}}</view>
</picker>
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
</view>
<view class="idcardAdd-block" v-if="item.institution.length > 0">
<view class="idcardAdd-block-name">
<text>*</text>业务类型
</view>
<view class="idcardAdd-block-write">
<mouldPicker class="idcardAdd-picker" ref="child" :bank-list="item.institution" @bankPicker="workChange($event, index)"></mouldPicker>
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
</view>
<block v-for="(keyItem, keyIndex) in item.rootData" :key="keyIndex">
<view class="idcardAdd-block">
<view class="idcardAdd-block-name" v-if="keyItem.pre_key == null || keyItem.pre_value == item.subVal[keyItem.pre_key]">
<text>*</text>{{keyItem.title}}
</view>
<!-- 单输入框 -->
<block v-if="keyItem.pre_key == null || keyItem.pre_value == item.subVal[keyItem.pre_key]">
<view class="idcardAdd-block-write" v-if="keyItem.type === 'price' || keyItem.type === 'number'">
<!-- <mouldInput class="idcardAdd-input" @onValue="($event) => {item.subVal[keyItem.key] = $event.detail.value}"></mouldInput> -->
<mouldInput class="idcardAdd-input" :input-type="keyItem.type" @onValue="($event) => {item.subVal[keyItem.key] = $event}"></mouldInput>
</view>
</block>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="keyItem.type === 'radio'">
<mouldRadio :radio-list="keyItem.options" @onRadio="($event) => {item.subVal[keyItem.key] = $event}"></mouldRadio>
</view>
<!-- 多选 -->
<block v-if="keyItem.type === 'checkbox'">
<mouldCheckbox :checkbox-list="keyItem.options" @onCheckbox="($event) => {item.subVal[keyItem.key] = $event}"></mouldCheckbox>
</block>
<!-- 描述 -->
<view class="idcardAdd-block-write idcardAdd-depict" v-if="keyItem.type === 'textarea'">
<mouldText class="idcardAdd-depict-textarea" @onTextarea="($event) => {item.subVal[keyItem.key] = $event}"></mouldText>
</view>
</view>
</block>
</view>
<view class="open">
<view class="open-text" @click="recordTap(index)">
<image src="@/static/imgs/openArrow.png" mode="widthFix" :class="{active : item.openState}"></image>{{item.openState ? '收起' : '展开'}}
</view>
</view>
</view>
</block>
<block v-else>
<view class="noContent">
<image class="noContent-img" src="@/static/imgs/basic_tips.png" mode="widthFix"></image>
<view class="noContent-name">
什么都没有好无聊......
</view>
<view class="noContent-btn" @click="addTypePop = true">
添加新信息
</view>
</view>
</block>
</view>
<view class="reminder">
<image class="reminder-img" src="@/static/imgs/reminderIcon.png"></image>
<view class="reminder-text">温馨提示为给您匹配最准确方案请您如实填写以上信息</view>
</view>
<view class="idcardBtn">
<view class="idcardBtn-go active" @click="addTypePop = true">
添加新信息
</view>
<view class="idcardBtn-go" @click="basicSubmit">
确认提交
</view>
</view>
<!-- 选择添加类型 -->
<view class="addType-back" v-if="addTypePop"></view>
<view class="addType-cont" v-if="addTypePop">
<view class="addType-white">
<view class="addType-title">
请选择业务类型
</view>
<scroll-view class="addType-list" scroll-x="true" show-scrollbar="false">
<view class="addType-item" :class="{active : workId == item.business_id}" @click="addClick(item.business_id)" v-for="(item, index) in workArr" :key="index">
<image class="addType-img" :src="item.business_id == 1 ? '/static/imgs/addType_icon1.png' : '/static/imgs/addType_icon2.png'" mode="widthFix"></image>
<view class="addType-name">
{{item.title}}
</view>
</view>
</scroll-view>
<view class="addType-btn">
<view class="addType-labor" @click="addTypePop = false">
取消
</view>
<view class="addType-labor" @click="addCard">
确定
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { workIndex, workOne, workLevel, workStore } from '@/apis/interfaces/index'
import mouldCheckbox from '@/components/mould-checkbox.vue'
import mouldInput from '@/components/mould-input.vue'
import mouldRadio from '@/components/mould-radio.vue'
import mouldText from '@/components/mould-text.vue'
import mouldPicker from '@/components/mould-picker.vue'
export default {
components: {
mouldCheckbox,
mouldInput,
mouldRadio,
mouldText,
mouldPicker
},
data() {
return {
workArr : [], // 主业务数组
workId : 1, // 主业务类型 1为信用卡 2为网贷
addTypePop : false, // 业务类型弹框
wayState : false, // 催收状况是否显示
// 主业务机构选项
workOneArr : [],
workOneIndex : 0,
// 二级业务类型选项
workTwoIndex : 0,
// 添加信息卡片数组
publicArr : [],
business_orderId: '' // 临时方案id
}
},
onLoad() {
// 获取主业务
this.workData();
},
methods: {
// 主业务数据
workData() {
workIndex().then(res => {
this.workArr = res
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择主业务类型 -- 弹出
addClick(e) {
this.workId = e
},
// 添加业务卡片
addCard(){
// 获取主业务机构
this.oneData();
},
// 主业务机构
oneData(){
workOne(this.workId).then(res => {
// res.unshift({
// institution_id: 0,
// title: "请选择"
// })
this.addTypePop = false;
this.workOneArr = res;
const dataArrItem = res[this.workOneIndex]
this.twoData(dataArrItem.institution_id);
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 二级业务类型
twoData(id) {
workLevel(id).then(res => {
const dataArrItem = res[this.workTwoIndex].params
let dataKeys = {
rootData : dataArrItem,
subVal : {}, // 活数据 -填写
institution : res,// 业务列表
typeId : res[this.workTwoIndex].type_id, // 业务类型id
bankId : this.workOneArr[this.workOneIndex].institution_id, // 银行/机构-类型
businessId : this.workId
}
dataArrItem.map(val => {
dataKeys.subVal[val.key] = '';
})
this.publicArr.push(dataKeys)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 业务选择
bankChange(e, index) {
this.workTwoIndex = e.detail.value
},
// 机构/银行选择 子组件返回值
bankShow(e, index) {
let { detail } = e;
},
// 删除卡片
removeCard(index){
if(index === 0) return
this.symptomsArr.splice(index, 1)
},
// 展开全部
recordTap(index){
// let itemObj = this.symptomsArr[index]
// itemObj.recordShow = !itemObj.recordShow
},
// 提交信息
basicSubmit(){
let newArr = this.publicArr.map(val => {
val.subVal.institution_id = val.bankId
val.subVal.type_id = val.typeId
val.subVal.business_id = val.businessId
return val.subVal
})
workStore({
type: 'self',
data: newArr
}).then(res => {
// 临时的id,为了做跳转
this.$Router.push({name: 'sheetEstimate', params: {id: res.business_order_id}})
// this.business_orderId = res.business_order_id
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
// this.$Router.push({name: 'sheetEstimate'})
},
}
}
</script>
<style lang="scss" scoped>
.idcardBorder {
border-bottom: 200rpx solid transparent;
background-color: #ffffff;
border-radius: $radius * 2 $radius * 2 0 0;
position: relative;
padding: $padding;
box-sizing: border-box;
top: -100rpx;
}
.idcard {
margin-bottom: $margin * 2;
background-color: #446EFE;
color: #ffffff;
display: flex;
padding: $padding * 2 $padding $padding * 3;
.idcardInfo-name {
flex: 1;
}
}
.idcardTitle {
color: #446EFE;
font-size: $title-size + 4;
font-weight: 600;
margin-bottom: $margin;
}
.idcardAdd {
background-color: #ffffff;
box-shadow: 0 0 20rpx rgba(0, 0, 0, .1);
border-radius: $radius;
padding: $padding;
box-sizing: border-box;
margin-bottom: $margin;
overflow: hidden;
position: relative;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-title {
display: flex;
.idcardAdd-name {
flex: 1;
color: #446EFE;
font-weight: 600;
}
.idcardAdd-tel {
display: flex;
font-size: $title-size-sm;
background-color: #ffeded;
color: #FF0000;
border-radius: $radius;
padding: 0 15rpx 0 10rpx;
line-height: 44rpx;
.idcardAdd-btn {
width: 32rpx;
height: 32rpx;
margin: 7rpx 6rpx 0 0;
}
}
}
.idcardBottom {
height: 340rpx;
transition: .5s;
border-bottom: 100rpx solid transparent;
&.active {
height: auto;
}
}
.idcardAdd-block {
margin-top: $margin + 10;
position: relative;
.idcardAdd-block-name {
margin-bottom: $margin - 10;
color: #111111;
text {
color: #FF0000;
padding-right: 10rpx;
}
}
.idcardAdd-block-write {
background-color: #F6F6F6;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 $padding;
box-sizing: border-box;
position: relative;
display: flex;
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
}
.open {
text-align: center;
margin-top: $margin;
position: absolute;
width: 100%;
background-color: #ffffff;
z-index: 2;
left: 0;
bottom: 0;
padding: $padding 0;
.open-text {
background-color: #ecf0ff;
display: inline-block;
color: #446EFE;
padding: 0 $padding - 10;
line-height: 58rpx;
font-size: $title-size-m;
border-radius: $radius-sm;
image {
width: 22rpx;
height: 22rpx;
margin-right: 10rpx;
transition: .2s;
&.active {
transform:rotate(180deg)
}
}
}
}
.idcardAdd-aline {
display: flex;
position: absolute;
right: 0;
top: 0;
}
.idcardAdd-aline-name {
flex: 1;
text {
color: #FF0000;
padding-right: 10rpx;
}
}
.idcardAdd-depict {
line-height: 28rpx !important;
height: auto !important;
position: relative;
.idcardAdd-depict-number {
position: absolute;
text-align: right;
bottom: $padding;
right: $padding;
color: #999999;
font-size: $title-size-sm;
}
.idcardAdd-depict-textarea {
padding: $padding 0;
box-sizing: border-box;
}
}
}
.noContent {
text-align: center;
padding-top: $padding * 5;
.noContent-img {
width: 43%;
margin: 0 auto;
}
.noContent-name {
line-height: 60rpx;
color: #999999;
font-size: $title-size-lg;
}
.noContent-btn {
display: inline-block;
background-color: #FEA044;
color: #ffffff;
border-radius: $radius * 5;
text-align: center;
font-size: $title-size-lg;
padding: 0 $padding + 10;
line-height: 78rpx;
margin-top: $margin + 10;
}
}
.reminder {
position: fixed;
left: 0;
bottom: 150rpx;
background-color: #ffffff;
z-index: 10;
width: 100%;
height: 140rpx;
box-sizing: border-box;
padding: 25rpx $padding;
box-sizing: border-box;
display: flex;
color: #FEA044;
font-size: $title-size-lg;
border-bottom: 2rpx solid #f5f5f5;
.reminder-img {
width: 32rpx;
height: 32rpx;
margin-top: 8rpx;
}
.reminder-text {
width: calc(100% - 52rpx);
margin-left: 20rpx;
line-height: 42rpx;
}
}
.idcardBtn {
position: fixed;
left: 0;
bottom: 0;
background-color: #ffffff;
z-index: 9;
width: 100%;
height: 150rpx;
padding: 0 20rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: calc(50% - 20rpx);
margin: $margin 10rpx;
background-color: #446EFE;
color: #ffffff;
border-radius: $radius-lg;
height: 90rpx;
line-height: 90rpx;
font-size: $title-size;
text-align: center;
border: 2rpx solid #ffffff;
&.active {
background-color: #ffffff;
border-color: #446EFE;
color: #446EFE;
}
}
}
// 业务类型
.addType-back {
background-color: rgba(0, 0, 0, .6);
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
}
.addType-cont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 $padding * 2;
box-sizing: border-box;
.addType-white {
background-color: #ffffff;
border-radius: $radius-m;
padding: $padding 0;
.addType-title {
line-height: 60rpx;
text-align: center;
margin-bottom: $margin;
font-size: $title-size + 2;
}
.addType-list {
background-color: #fafafa;
padding: $padding + 10 $padding + 10 $padding;
box-sizing: border-box;
text-align: center;
white-space: nowrap;
.addType-item {
display: inline-block;
border: 2rpx solid #f2f2f2;
overflow: hidden;
padding: $padding $padding + 10;
border-radius: $radius-m;
background-color: #ffffff;
margin-right: $margin + 10;
&.active {
border-color: #FEA044;
}
.addType-img {
width: 140rpx;
}
.addType-name {
margin-top: 10rpx;
color: #787878;
font-size: $title-size-m;
}
&.active {
.addType-name {
color: #FEA044;
}
}
}
}
.addType-btn {
display: flex;
padding: $padding + 10 $padding - 10 10rpx;
box-sizing: border-box;
.addType-labor {
flex: 2;
margin: 0 $margin - 10;
text-align: center;
background-color: #FEA044;
color: #ffffff;
border-radius: $radius-m;
line-height: 74rpx;
font-size: $title-size-lg;
border: 2rpx solid #FEA044;
&:first-child {
background-color: #ffffff;
color: #FEA044;
}
}
}
}
}
</style>

827
pages/sheet/basic.vue Normal file
View File

@@ -0,0 +1,827 @@
<template>
<view class="content">
<view class="idcard">
<view class="idcardInfo-name">
{{userData.nickname}}
</view>
<view class="idcardInfo-label">
{{userData.username}}
</view>
</view>
<view class="idcardBorder">
<view class="idcardTitle">
添加基本信息
</view>
<!-- 信用卡信息 -->
<block v-if="serviceArr.length > 0">
<view class="idcardAdd" v-for="(item, index) in serviceArr" :key="index">
<view class="idcardBottom" :class="{active : item.openState}">
<!-- 机构 -->
<view class="idcardAdd-block">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text>*</text>{{item.subVal.business_id == 1 ? '信用卡' : '贷款'}}
</view>
<view class="locationActive" v-if="!item.openState">
<text>{{item.institution[item.institutionIndex].title}}</text>
<text>{{item.fromType[item.fromIndex].title}}</text>
</view>
</view>
<view class="idcardAdd-block-write">
<!-- 新筛选 带搜索 -->
<view class="idcardAdd-picker" style="width: 100%;" @click="onShowInstitution(item.institution, item, index)">
<view class="institution-picker-text nowrap">{{item.institution[item.institutionIndex].title}}</view>
<u-icon size="12" color="#999" name="arrow-down-fill"></u-icon>
</view>
<!-- 老筛选备份 -->
<!-- <picker :value="item.institutionIndex" @change="institutionChange($event, item, index)" :range="item.institution" range-key="title">
<view class="uni-input">{{item.institution[item.institutionIndex].title}}</view>
</picker> -->
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
<view class="idcardAdd-block-remove" @click="onRemove(index)" v-if="serviceArr.length > 1">
<image src="@/static/imgs/removeIcon.png" mode="widthFix"></image>移出
</view>
</view>
<!-- 业务类型 -->
<view class="idcardAdd-block">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text>*</text>业务类型
</view>
</view>
<view class="idcardAdd-block-write">
<picker class="idcardAdd-picker" :range="item.fromType" range-key="title" :value="item.fromIndex" @change="businessChange($event, item, index)">
<view class="institution-picker-text nowrap">{{item.fromType[item.fromIndex].title}}</view>
</picker>
<!-- <mouldPicker class="idcardAdd-picker" ref="child" :bank-list="item.fromType" :bank-value="item.fromIndex" @bankPicker="businessChange($event, item, index)"></mouldPicker> -->
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
</view>
<!-- 表单部分 -->
<block v-for="(keyItem, keyIndex) in item.froms" :key="keyIndex" v-if="item.subVal[keyIndex.pre_key] == keyIndex.pre_value">
<view class="idcardAdd-block" v-if="keyItem.pre_key == null || keyItem.pre_value == item.subVal[keyItem.pre_key]">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text>*</text>{{keyItem.title}}
</view>
</view>
<!-- 单输入框 -->
<view class="idcardAdd-block-write" v-if="keyItem.type === 'price' || keyItem.type === 'number' || keyItem.type === 'day' || keyItem.type === 'text'">
<mouldInput :blur-value="item.subVal[keyItem.key]" class="idcardAdd-input" :input-type="keyItem.type" @onValue="($event) => {item.subVal[keyItem.key] = $event}"></mouldInput>
</view>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="keyItem.type === 'radio'">
<radio-group @change="item.subVal[keyItem.key] = $event.detail.value">
<label class="idcardAdd-aline-write" v-for="(radioItem, radioIndex) in keyItem.options" :key="radioIndex">
<radio class="radio-input" color="#446EFE" style="transform:scale(.65)" :checked="radioIndex === item.subVal[keyItem.key]" :value="radioIndex"/>{{radioItem}}
</label>
</radio-group>
<!-- <mouldRadio :radio-list="keyItem.options" @onRadio="($event) => {item.subVal[keyItem.key] = $event}"></mouldRadio> -->
</view>
<!-- 多选 -->
<block v-if="keyItem.type === 'checkbox'">
<!-- <checkbox-group @change="item.subVal[keyItem.key] = $event.detail.value">
<view class="idcardAdd-multi-write" v-for="(letterItem, letterIndex) in keyItem.options" :key="letterIndex">
<checkbox :value="letterIndex.toString()" color="#4e7bfe" style="transform:scale(.6); margin-top: -3rpx;"/>
<text>{{letterItem}}</text>
</view>
</checkbox-group> -->
<mouldCheckbox :checkbox-list="keyItem.options" :checkbox-vlaue="item.subVal[keyItem.key] || []" @onCheckbox="($event) => {item.subVal[keyItem.key] = $event}"></mouldCheckbox>
</block>
<!-- 下拉框 -->
<view class="idcardAdd-block-write" v-if="keyItem.type === 'select'">
<picker class="idcardAdd-picker" :value="item.subVal[keyItem.key] ? item.subVal[keyItem.key] : '0'" :range="keyItem.options" @change="item.subVal[keyItem.key] = $event.detail.value">
<view class="uni-input" v-if="item.subVal[keyItem.key]">{{keyItem.options[item.subVal[keyItem.key]]}}</view>
<view class="uni-input" v-else>{{keyItem.options[0]}}</view>
</picker>
<image src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</view>
<!-- 描述 -->
<view class="idcardAdd-block-write idcardAdd-depict" v-if="keyItem.type === 'textarea'">
<mouldText class="idcardAdd-depict-textarea" :blur-value="item.subVal[keyItem.key]" @onTextarea="($event) => {item.subVal[keyItem.key] = $event}"></mouldText>
</view>
</view>
</block>
</view>
<view class="open">
<view class="open-text" @click="recordTap(index)">
<image src="@/static/imgs/openArrow.png" mode="widthFix" :class="{active : item.openState}"></image>{{item.openState ? '收起' : '展开'}}
</view>
</view>
</view>
</block>
<block v-else>
<view class="noContent">
<image class="noContent-img" src="@/static/imgs/basic_tips.png" mode="widthFix"></image>
<view class="noContent-name">
什么都没有好无聊......
</view>
<view class="noContent-btn" @click="addTypePop = true">
添加新信息
</view>
</view>
</block>
</view>
<view class="reminder">
<image class="reminder-img" src="@/static/imgs/reminderIcon.png"></image>
<view class="reminder-text">温馨提示为了匹配最准确方案请如实填写信息</view>
</view>
<view class="idcardBtn">
<view class="idcardBtn-go active" @click="addTypePop = true">
添加新信息
</view>
<view class="idcardBtn-go" @click="onSubmit">
确认提交
</view>
</view>
<!-- 选择添加类型 -->
<view class="addType-back" v-if="addTypePop"></view>
<view class="addType-cont" v-if="addTypePop">
<view class="addType-title">
请选择业务类型
</view>
<block v-for="(item, index) in businessArr" :key="index">
<view class="create-type-item" :class="{'active': item.business_id == businessId}" @click="onAdd(item.business_id, item.title)">
<image class="create-type-icon" :src="item.cover_url" mode="aspectFill"></image>
<view class="create-type-text">
<view class="title nowrap">{{item.title || '-'}}</view>
<view class="submit nowrap">{{item.subtitle || '-'}}</view>
</view>
</view>
</block>
<image class="addType-close" src="/static/imgs/payClose.png" mode="aspectFill" @click="addTypePop = false"></image>
</view>
<!-- 机构筛选弹出层 -->
<oct-mechanism-picker
ref="institutionPicker"
title="选择办理机构"
:columns="columns"
@choose="institutionChange"
/>
</view>
</template>
<script>
import { workIndex, workOne, workLevel, workStore } from '@/apis/interfaces/index'
import { userBasic } from '@/apis/interfaces/user'
import mouldCheckbox from '@/components/mould-checkbox.vue'
import mouldInput from '@/components/mould-input.vue'
import mouldRadio from '@/components/mould-radio.vue'
import mouldText from '@/components/mould-text.vue'
import mouldPicker from '@/components/mould-picker.vue'
export default {
components: {
mouldCheckbox,
mouldInput,
mouldRadio,
mouldText,
mouldPicker
},
data() {
return {
businessArr: [],
businessId : '',
serviceArr : [],
addTypePop : false,
userData : '',
reminder : '', // 温馨提示
// 新增部分-机构筛选
columns : [],
old : {},
cIndex : 0
}
},
created() {
let { businessId, businessTitle } = this.$Route.query
this.getInstitution(businessId, businessTitle)
this.getBusiness()
},
onShow() {
// 获取用户姓名手机号性别
userBasic().then(res => {
this.userData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
// 显示选择机构 -- 带搜索
onShowInstitution(e, item, index){
console.log(this.$refs.institutionPicker)
this.columns = e
this.old = item
this.cIndex = index
this.$refs.institutionPicker.open()
},
// 获取主业务
getBusiness(){
workIndex().then(res => {
this.businessArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 获取主业务机构
getInstitution(businessId, businessTitle){
uni.showLoading({
title: '加载中...'
})
workOne(businessId).then(institutionArr => {
let forms = this.getForms(institutionArr[0].institution_id)
forms.then(val => {
this.servicePush( val, institutionArr, businessTitle, businessId )
})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 获取业务类型
async getForms(businessId){
return await workLevel(businessId)
},
// 组织业务表单数据
servicePush( vals, institutionArr, businessTitle, businessId ){
let fromType = [],
fromsVal = {},
froms = vals[0].params
fromType = vals.map((val) => {
return {
type_id: val.type_id,
title : val.title
}
})
froms.map(val => {
fromsVal[val.key] = ''
})
// 新增卡片
this.serviceArr.push({
title : businessTitle,
institution : institutionArr,
allInstitution : vals,
institutionIndex: 0,
fromType : fromType,
openState : false,
fromIndex : 0,
froms : froms,
subVal : {
business_id : Number(businessId),
institution_id : institutionArr[0].institution_id,
type_id : fromType[0].type_id,
...fromsVal
}
})
this.serviceArr.forEach((item, index) => {
return index == (this.serviceArr.length - 1) ? item.openState = true : item.openState = false
})
},
// 机构变更更新业务
institutionChange(e){
let index = this.cIndex
let old = this.old
let value = old.institution.findIndex(val => val.institution_id === e.val.institution_id);
let businessId = old.subVal.business_id
// 获取机构的子业务类型
let forms = this.getForms(old.institution[value].institution_id)
forms.then(institutionVal => {
let newObj = old
let fromType = []
let params = institutionVal[0].params
let paramsVal = []
// 业务类型
fromType = institutionVal.map(val => {
return {
type_id: val.type_id,
title : val.title
}
})
// 提交字段
params.map(val => {
paramsVal[val.key] = ''
})
// 更新数据
newObj.allInstitution = institutionVal;
newObj.institutionIndex = value;
newObj.fromType = fromType;
newObj.fromIndex = 0;
newObj.froms = params;
newObj.subVal = {
business_id : old.subVal.business_id,
institution_id : old.institution[value].institution_id,
type_id : fromType[0].type_id,
...paramsVal
}
this.$set(this.serviceArr, index, newObj)
})
},
// 业务变更
businessChange(e, old, index){
let { value } = e.detail;
let businessId = old.subVal.business_id;
let allInstitution = old.allInstitution
let newObj = old
let params = allInstitution[value].params
let paramsVal = {}
params.map(val => {
paramsVal[val.key] = ''
})
newObj.fromIndex = value;
newObj.froms = params;
newObj.subVal = {
business_id : old.subVal.business_id,
institution_id : old.subVal.institution_id,
type_id : allInstitution[value].type_id,
...paramsVal
}
this.$set(this.serviceArr, index, newObj)
},
// 添加主业务
onAdd(id, title){
this.addTypePop = false
this.getInstitution(id, title)
},
// 列表展开
recordTap(index) {
var listData = this.serviceArr
var helpFlag = this.serviceArr[index].openState
listData.forEach((item) => {
item.openState = false
})
listData[index].openState = !helpFlag
this.serviceArr = listData
},
// 移出选项
onRemove(index){
this.serviceArr.splice(index, 1)
},
// 提交订单数据
onSubmit(){
let dataVal = this.serviceArr.map(val => {
return val.subVal
})
workStore({
type : 'self',
data : dataVal,
channel: 'h5'
}).then(res => {
this.$Router.push({name: 'sheetPay', params: {id: res.business_order_id}})
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 多选
checkboxChange() {
}
}
}
</script>
<style lang="scss" scoped>
.idcardBorder {
border-bottom: 200rpx solid transparent;
background-color: #ffffff;
border-radius: $radius * 2 $radius * 2 0 0;
position: relative;
padding: $padding;
box-sizing: border-box;
top: -100rpx;
}
.idcard {
margin-bottom: $margin * 2;
background-color: $mian-color;
color: #ffffff;
display: flex;
padding: $padding * 2 $padding $padding * 3;
.idcardInfo-name {
flex: 1;
}
}
.idcardTitle {
color: $mian-color;
font-size: $title-size + 4;
font-weight: 600;
margin-bottom: $margin;
}
.idcardAdd {
background-color: #ffffff;
box-shadow: 0 0 20rpx rgba(0, 0, 0, .1);
border-radius: $radius;
padding: $padding;
box-sizing: border-box;
margin-bottom: $margin;
overflow: hidden;
position: relative;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-title {
display: flex;
.idcardAdd-name {
flex: 1;
color: #446EFE;
font-weight: 600;
}
.idcardAdd-tel {
display: flex;
font-size: $title-size-sm;
background-color: #ffeded;
color: #FF0000;
border-radius: $radius;
padding: 0 15rpx 0 10rpx;
line-height: 44rpx;
.idcardAdd-btn {
width: 32rpx;
height: 32rpx;
margin: 7rpx 6rpx 0 0;
}
}
}
.idcardBottom {
height: 45rpx;
transition: .5s;
border-bottom: 100rpx solid transparent;
&.active {
height: auto;
}
}
.idcardAdd-block {
margin-bottom: $margin + 10;
position: relative;
.idcardAdd-block-name {
margin-bottom: $margin;
display: flex;
.idcardAdd-block-see {
color: $text-color;
font-weight: 600;
margin-right: $margin;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
}
.idcardAdd-block-write {
background-color: #F6F6F6;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 $padding;
box-sizing: border-box;
position: relative;
display: flex;
width: 100%;
picker {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
padding: 0 $padding;
box-sizing: border-box;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
&:last-child {
margin-bottom: 0;
}
.idcardAdd-block-remove {
background-color: #FBE7EE;
display: inline-block;
color: $mian-color;
position: absolute;
font-size: $title-size-sm;
padding: 0 $padding - 10;
line-height: 44rpx;
border-radius: 50rpx;
top: 0;
right: 0;
image {
width: 24rpx;
height: 24rpx;
margin-right: 10rpx;
vertical-align: -2rpx;
}
}
}
.open {
text-align: center;
position: absolute;
width: 100%;
background-color: #ffffff;
z-index: 2;
left: 0;
bottom: 0;
padding: $padding 0;
.open-text {
background-color: #FBE7EE;
display: inline-block;
color: $mian-color;
padding: 0 $padding - 10;
line-height: 58rpx;
font-size: $title-size-m;
border-radius: $radius-sm;
image {
width: 22rpx;
height: 22rpx;
margin-right: 10rpx;
transition: .2s;
&.active {
transform:rotate(180deg)
}
}
}
}
.idcardAdd-aline {
display: flex;
position: absolute;
right: 0;
top: 0;
.idcardAdd-picker {
width: 100%;
height: 100%;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
.idcardAdd-aline-name {
flex: 1;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
.idcardAdd-depict {
line-height: 28rpx !important;
height: auto !important;
position: relative;
.idcardAdd-depict-number {
position: absolute;
text-align: right;
bottom: $padding;
right: $padding;
color: #999999;
font-size: $title-size-sm;
}
.idcardAdd-depict-textarea {
padding: $padding 0;
box-sizing: border-box;
}
}
}
.noContent {
text-align: center;
padding-top: $padding * 5;
.noContent-img {
width: 43%;
margin: 0 auto;
}
.noContent-name {
line-height: 60rpx;
color: #999999;
font-size: $title-size-lg;
}
.noContent-btn {
display: inline-block;
background-color: #ff7331;
color: #ffffff;
border-radius: $radius * 5;
text-align: center;
font-size: $title-size-lg;
padding: 0 $padding + 10;
line-height: 78rpx;
margin-top: $margin + 10;
}
}
.reminder {
position: fixed;
left: 0;
bottom: 150rpx;
background-color: #ffffff;
z-index: 10;
width: 100%;
box-sizing: border-box;
padding: 25rpx $padding;
box-sizing: border-box;
display: flex;
color: #FEA044;
font-size: $title-size-lg;
border-bottom: 2rpx solid #f5f5f5;
.reminder-img {
width: 32rpx;
height: 32rpx;
margin-top: 8rpx;
}
.reminder-text {
width: calc(100% - 52rpx);
font-size: $title-size-m;
margin-left: 20rpx;
line-height: 42rpx;
}
}
.idcardBtn {
position: fixed;
left: 0;
bottom: 0;
background-color: #ffffff;
z-index: 9;
width: 100%;
height: 150rpx;
padding: 0 20rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: calc(50% - 20rpx);
margin: $margin 10rpx;
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-lg;
height: 90rpx;
line-height: 90rpx;
font-size: $title-size;
text-align: center;
border: 2rpx solid #ffffff;
&.active {
background-color: #ffffff;
border-color: $mian-color;
color: $mian-color;
}
}
}
// 业务类型
.addType-back {
background-color: rgba(0, 0, 0, .6);
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
}
.addType-cont {
position: fixed;
left: 0;
bottom: 0;
z-index: 100;
width: 100%;
background-color: #ffffff;
padding: $padding $padding + 10;
box-sizing: border-box;
transition: .2s;
.addType-close {
position: absolute;
right: 30rpx;
top: 40rpx;
width: 38rpx;
height: 38rpx;
}
.addType-title {
line-height: 60rpx;
margin-bottom: $margin + 10;
font-size: $title-size + 2;
}
.addType-type {
padding: $padding;
box-sizing: border-box;
}
.create-type-item {
border-radius: $radius-m;
padding: $padding;
box-sizing: border-box;
margin-bottom: 30rpx;
border:solid 1rpx #f8f8f8;
box-sizing: border-box;
display: flex;
align-items: center;
box-shadow: 0 0 5rpx rgba(0, 0, 0, .05);
position: relative;
.create-type-icon{
width: 88rpx;
height: 88rpx;
margin-right: $margin;
background-color: white;
border-radius: $radius;
}
.create-type-text{
line-height: 50rpx;
.title{
font-size: 30rpx;
}
.submit{
color: gray;
font-size: 26rpx;
}
}
}
.addType-btn {
display: flex;
padding: $padding + 10 $padding - 10 10rpx;
box-sizing: border-box;
.addType-labor {
flex: 2;
margin: 0 $margin - 10;
text-align: center;
background-color: #FEA044;
color: #ffffff;
border-radius: $radius-m;
line-height: 74rpx;
font-size: $title-size-lg;
border: 2rpx solid #FEA044;
&:first-child {
background-color: #ffffff;
color: #FEA044;
}
}
}
}
// 收起定位样式
.locationActive {
display: inline-block;
text {
display: inline-block;
background-color: #FFF7EB;
color: #FBAF3B !important;
font-weight: normal;
font-size: $title-size-sm;
margin-left: $margin - 10;
border-radius: $radius*3;
padding: 0 $padding - 10 !important;
height: 48rpx;
line-height: 48rpx;
}
}
</style>

View File

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

200
pages/sheet/create.vue Normal file
View File

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

446
pages/sheet/estimate.vue Normal file
View File

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

338
pages/sheet/express.vue Normal file
View File

@@ -0,0 +1,338 @@
<template>
<view class="content">
<img class="expressImg" src="@/static/imgs/express-img.png">
<view class="expressCont">
<view class="express-write">
<view class="express-block express-adderss">
<view class="express-block-name">
邮寄地址
</view>
<view class="express-block-write express-block-grey">
{{adderss.full_address}}
</view>
</view>
<view class="express-block">
<view class="express-block-name">
物流公司
</view>
<view class="express-block-write">
<picker @change="companyChange" :value="companyIndex" :range="companyArray" range-key="name">
<view class="uni-input" v-if="companyArray[companyIndex]">{{companyArray[companyIndex].name}}</view>
</picker>
<img src="@/static/imgs/basic_down.png">
</view>
</view>
<view class="express-block">
<view class="express-block-name">
订单类型
</view>
<checkbox-group @change="typeChange" class="express-check">
<view class="express-block-check" v-for="(letterItem, typeIndex) in typeArray" :key="typeIndex">
<checkbox :value="letterItem.type.toString()" color="#4e7bfe" style="transform:scale(.6); margin-top: -3rpx;"/>
<text>{{letterItem.name}}</text>
</view>
</checkbox-group>
<!-- <view class="express-block-write">
<picker @change="typeChange" :value="typeIndex" :range="typeArray" range-key="name">
<view class="uni-input" v-if="typeArray[typeIndex]">{{typeArray[typeIndex].name}}</view>
</picker>
<img src="@/static/imgs/basic_down.png">
</view> -->
</view>
<view class="express-block">
<view class="express-block-name">
物流单号
</view>
<input class="express-block-write" v-model="number" type="text" placeholder="填写物流单号" placeholder-class="placeholderClass"/>
</view>
<view class="express-block">
<view class="express-block-name">
备注信息
</view>
<view class="express-block-textarea">
<textarea placeholder-style="color:#999999; font-size: 30rpx" maxlength="500" name="remark" placeholder="可将您的详细情况及诉求进行描述..." @input="remarkInput"/>
<text>{{cursor}}/500</text>
</view>
</view>
<!-- <view class="express-block">
<view class="express-block-name">
上传凭证
</view>
<view class="express-photo">
<img class="camera" src="@/static/icon/cameraImg.png">
<view class="express-tips">上传图片</view>
</view>
</view>
-->
<!-- <view class="album-list">
<view class="album-list-li">
<image class="album-list-img" src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic17.997788.com%2F_pic_search%2F00%2F04%2F13%2F26%2F4132653.jpg&refer=http%3A%2F%2Fpic17.997788.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1670402044&t=c3a80087befa0d7db313ca904c870f23" mode="aspectFill"></image>
<view class="album-remove">删除
</view>
</view>
</view> -->
<button class="idcardBtn" :disabled="disabled" @click="basicSubmit" >
确认提交
</button>
</view>
</view>
</view>
</template>
<script>
import { getExpress, Send } from '@/apis/interfaces/user'
import { config } from '../../apis'
export default {
data() {
return {
disabled : false, // 按钮状态
companyArray : [],
companyIndex : 0,
typeArray : [],
typeIndex : [],
number : '',
remark : '',
cursor : 0,
adderss : '',
newMobile : '',
newmetarial : ''
}
},
onShow() {
// 获取物流公司
this.expressInfo()
this.adderss = this.$Route.query.adderss
this.newMobile = this.$Route.query.mobile
this.newmetarial = this.$Route.query.metarial
let newtypeArray = []
if(!this.$Route.query.mobile){
newtypeArray.push({
type: 1,
name: '电话卡'
})
}
if(!this.$Route.query.metarial){
newtypeArray.push({
type: 2,
name: '征信资料'
})
}
this.typeArray = newtypeArray
},
methods: {
// 物流公司选择
companyChange(e) {
this.companyIndex = e.detail.value
},
// 订单类型选择
typeChange(e) {
this.typeIndex = e.detail.value
},
// 备注信息
remarkInput(val) {
this.remark = val.detail.value
this.cursor = val.detail.cursor
},
// 物流公司
expressInfo(){
getExpress().then(res => {
this.companyArray = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 提交
basicSubmit() {
let data = {
business_order_id: this.$Route.query.id,
express_id : this.companyArray[this.companyIndex].express_id,
staff_address_id : this.adderss.address_id,
number : this.number,
type : this.typeIndex,
remark : this.remark
}
Send(this.$Route.query.id, data).then(res => {
uni.showToast({
title: '提交成功',
icon: "none"
})
this.disabled = true
setTimeout(() => {
uni.navigateBack(1)
uni.hideLoading()
}, 1500)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f4f6fa;
height: 100vh;
overflow-y: scroll;
}
.expressImg {
width: 100%;
}
.expressCont {
padding: 0 $padding $padding;
box-sizing: border-box;
position: relative;
margin-top: -($margin + 10);
.express-write {
background-color: #ffffff;
padding: $padding + 10 $padding + 20;
box-sizing: border-box;
border-radius: $radius;
}
}
.express-block {
margin-bottom: $margin + 20;
.express-block-name {
margin-bottom: $margin;
font-weight: 600;
}
.express-check {
display: flex;
width: 100%;
.express-block-check {
margin-right: $margin + 10;
height: 48rpx;
line-height: 48rpx;
display: flex;
font-size: $title-size-m;
}
}
.express-block-write {
background-color: #ffffff;
display: flex;
height: 90rpx;
line-height: 90rpx;
padding: 0 $padding;
border: 2rpx solid #ededed;
box-sizing: border-box;
border-radius: $radius-sm;
position: relative;
img {
width: 28rpx;
height: 28rpx;
position: absolute;
right: $padding;
top: $padding;
}
picker {
width: 100%;
height: 100%;
}
}
.express-block-grey {
color: $text-gray;
height: auto;
line-height: 44rpx;
padding: $padding - 10 $padding;
box-sizing: border-box;
font-size: $title-size-m;
text-align: justify;
}
.express-block-textarea {
background-color: #ffffff;
padding: $padding;
box-sizing: border-box;
border: 2rpx solid #ededed;
border-radius: $radius-sm;
textarea {
width: 100%;
font-size: $title-size-m;
text-align: justify;
}
text {
color: #999999;
font-size: $title-size-sm;
width: 100%;
text-align: right;
display: block;
margin-top: 20rpx;
}
}
}
.express-photo {
border-radius: $radius-sm;
border: 2rpx solid #ededed;
padding: 0 $padding;
position: relative;
height: 90rpx;
line-height: 90rpx;
display: flex;
img {
width: 46rpx;
height: 46rpx;
margin-top: 24rpx;
}
.express-tips {
position: absolute;
right: $padding;
top: 0;
font-size: $title-size-m;
color: #999999;
}
}
.album-list {
margin: $margin -10rpx 0;
display: flex;
.album-list-li {
position: relative;
width: calc(33.33% - 20rpx);
padding-top: calc(33.33% - 20rpx);
margin: 0 10rpx;
box-sizing: border-box;
.album-list-img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #f5f5f5;
border-radius: 6rpx;
}
.album-remove{
position: absolute;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, .5);
color: white;
font-size: 28rpx;
text-align: center;
line-height: 50rpx;
width: 100%;
z-index: 9;
}
}
}
.idcardBtn {
margin: $margin*2 0 0;
background-image: linear-gradient(to right, #ff660b, #ff4330);
color: #ffffff;
border-radius: $radius-lg;
line-height: 90rpx;
text-align: center;
&[disabled] {
background-color: #eba5a5;
}
}
</style>

310
pages/sheet/handle.vue Normal file
View File

@@ -0,0 +1,310 @@
<template>
<view class="content">
<!-- <view class="handleTop">
<view class="handleTop-label">
<view class="handleTop-number">1</view>
<view class="handleTop-text">提交成功</view>
</view>
<view class="handleTop-label handleTop-label-active">
<view class="handleTop-number-active"></view>
<view class="handleTop-text-active">办理中</view>
</view>
<view class="handleTop-label">
<view class="handleTop-number">3</view>
<view class="handleTop-text">办理完成</view>
</view>
</view>
<view class="pack-white">
<view class="pack-cont">
<img class="process-img" src="@/static/imgs/handleImg.png">
<view class="process-text">
<view class="process-name">
正在办理中...
</view>
<view class="process-tips">
请您耐心等待,我们会尽快进行办理
</view>
</view>
<view class="process-btn">
<view class="btn" @click="clickBack">
知道了
</view>
</view>
</view>
</view> -->
<!-- 列表 -->
<view class="list" v-if="logsArr.length > 0">
<view class="item" v-for="(items, index) in logsArr" :key="index">
<view class="itemName" v-if="items.operate">
{{items.operate.name}}
<view class="itemName-tips">
{{items.operate.type}}
</view>
</view>
<view class="itemLabel">
<view class="label">
<view class="label-name">
所属机构
</view>
<view class="label-text">
{{items.item}}
</view>
</view>
<view class="label">
<view class="label-name">
备注信息
</view>
<view class="label-text">
{{items.description}}
</view>
</view>
<view class="label">
<view class="label-name">
操作时间
</view>
<view class="label-text">
{{items.do_at}}
</view>
</view>
</view>
</view>
<view class="pagesLoding" v-if="lodingStats">
<block v-if="page.has_more">
<image class="pagesLodingIcon" src="/static/icons/refresh_loding.gif" mode="widthFix"></image>加载中...
</block>
<block v-else>
没有更多了~
</block>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无数据</view>
</view>
</view>
</template>
<script>
import { doLogs } from '@/apis/interfaces/user'
export default {
data() {
return {
logsArr : [],
page : {}, // 分页信息
lodingStats : false, // 加载状态
}
},
onShow() {
// 获取列表信息
this.logsInfo();
},
methods: {
// 返回上一页
// clickBack() {
// uni.navigateBack(1)
// }
// 列表信息
logsInfo(page) {
doLogs(this.$Route.query.id, {
page : page || 1
}).then(res => {
let esArr = res.data
let list = this.logsArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.logsArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取列表信息
this.logsInfo();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取列表信息
this.logsInfo(pageNumber);
}
}
}
}
</script>
<style lang="scss" scoped>
// .content {
// background-image: linear-gradient(to top, #f5f6f7, #e5f2ff);
// padding: $padding * 3 0 $padding;
// box-sizing: border-box;
// height: 100vh;
// overflow-y: scroll;
// }
.content {
background-color: #f4f6f7;
}
.list {
padding: $padding;
box-sizing: border-box;
.item {
padding: $padding;
box-sizing: border-box;
border-radius: $radius;
background-color: #ffffff;
margin-bottom: $margin;
.itemName {
display: flex;
font-weight: 600;
.itemName-tips {
font-weight: normal;
font-size: $title-size-sm - 2;
background-color: #da2b56;
color: #ffffff;
border-radius: 8rpx;
line-height: 40rpx;
padding: 0 10rpx;
margin-left: $margin - 10;
}
}
.itemLabel {
border-top: 2rpx solid #f4f6f7;
padding-top: $padding - 10;
margin-top: $padding;
.label {
color: #8b8b8b;
font-size: $title-size-m;
display: flex;
line-height: 46rpx;
padding: 10rpx 0;
.label-name {
flex: 1;
}
.label-text {
width: 70%;
text-align: right;
}
}
}
}
}
.handleTop {
display: flex;
.handleTop-label {
text-align: center;
flex: 3;
.handleTop-number {
width: 28rpx;
height: 28rpx;
line-height: 28rpx;
border-radius: 50%;
background-color: #7a88a1;
border: 15rpx solid #7a88a1;
text-align: center;
color: #ffffff;
margin: 5rpx auto 20rpx;
font-size: $title-size-m;
}
.handleTop-text {
font-size: $title-size-lg;
color: #6b7894;
margin-top: 30rpx;
}
}
.handleTop-label-active {
position: relative;
&::after,
&::before {
position: absolute;
content: '';
top: calc(25% - 5rpx);
background-color: #d5e4f8;
width: 50%;
height: 10rpx;
border-radius: $radius;
}
&::after {
left: -25%;
}
&::before {
right: -25%;
}
.handleTop-number-active {
width: 28rpx;
height: 28rpx;
line-height: 28rpx;
border-radius: 50%;
background-color: $mian-color;
border: 20rpx solid #ffe8e5;
text-align: center;
color: #ffffff;
margin: 0 auto 20rpx;
}
.handleTop-text-active {
font-size: $title-size-lg;
color: #25345a;
font-weight: 600;
}
}
}
.pack-white {
padding: $padding;
box-sizing: border-box;
margin-top: $margin * 2;
.pack-cont {
background-color: #ffffff;
border-radius: $radius;
overflow: hidden;
padding: $padding * 3;
box-sizing: border-box;
text-align: center;
.process-img {
width: 80%;
margin: 0 auto;
}
.process-name {
color: $mian-color;
font-size: $title-size + 8;
margin-bottom: $margin;
}
.process-tips {
font-size: $title-size;
color: #99a5b4;
}
}
}
.process-btn {
text-align: center;
margin-top: $margin * 2;
width: 100%;
.btn {
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
border-radius: $radius-m;
width: 100%;
line-height: 90rpx;
}
}
</style>

251
pages/sheet/idcard.vue Normal file
View File

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

961
pages/sheet/index.vue Normal file
View File

@@ -0,0 +1,961 @@
<template>
<view class="content">
<!-- @click="$Router.push({name: 'sheetSpeed'})" -->
<view class="model">
<image class="model-back" src="@/static/imgs/01@3x.png" mode="aspectFill"></image>
<view class="model-list">
<view class="model-label">
<view class="model-number">
{{count.all}}<text></text>
</view>
<view class="model-name">
预约咨询
</view>
</view>
<view class="model-label">
<view class="model-number">
{{count.b_complete}}<text></text>
</view>
<view class="model-name">
成功办理
</view>
</view>
</view>
</view>
<!-- 筛选 -->
<view class="screen" :class="{active : dropDown == true}">
<view class="screen-lable">
<view class="screen-lable-item" :class="{active : status == ''}" @click="screenClick('')">
<text>全部订单</text>
</view>
<view class="screen-lable-item" :class="{active : status == '0'}" @click="screenClick('0')">
<text>待预约</text>
</view>
<view class="screen-lable-item" :class="{active : status == '2'}" @click="screenClick('2')" v-if="dropDownSee">
<text>已预约</text>
</view>
<block v-else>
<!-- <view v-if="status == '1'" class="screen-lable-item" :class="{active : status == '1'}" @click="screenClick('2')">
<text>待评估</text>
</view> -->
<view v-if="status == '2'" class="screen-lable-item" :class="{active : status == '2'}" @click="screenClick('2')">
<text>已预约</text>
</view>
<view v-else-if="status == '3'" class="screen-lable-item" :class="{active : status == '3'}" @click="screenClick('3')">
<text>待缴服务费</text>
</view>
<view v-else-if="status == '4'" class="screen-lable-item" :class="{active : status == '4'}" @click="screenClick('4')">
<text>待签约</text>
</view>
<view v-else-if="status == '5'" class="screen-lable-item" :class="{active : status == '5'}" @click="screenClick('5')">
<text>待完善资料</text>
</view>
<view v-else-if="status == '6'" class="screen-lable-item" :class="{active : status == '6'}" @click="screenClick('6')">
<text>初审中</text>
</view>
<view v-else-if="status == '7'" class="screen-lable-item" :class="{active : status == '7'}" @click="screenClick('7')">
<text>复审中</text>
</view>
<view v-else-if="status == '8'" class="screen-lable-item" :class="{active : status == '8'}" @click="screenClick('8')">
<text>办理中</text>
</view>
<view v-else-if="status == '9'" class="screen-lable-item" :class="{active : status == '9'}" @click="screenClick('9')">
<text>待确认</text>
</view>
<view v-else-if="status == '10'" class="screen-lable-item" :class="{active : status == '10'}" @click="screenClick('10')">
<text>办理完成</text>
</view>
<view v-else-if="status == '11'" class="screen-lable-item" :class="{active : status == '11'}" @click="refundClick">
<text>退款完成</text>
</view>
</block>
<view class="screen-lable-item" @click="screenDrop">
<text>其他选项</text>
</view>
</view>
<!-- <image class="screen-arrow" src="/static/imgs/basic_down_black.png" mode="aspectFill"></image> -->
<view class="screen-drop" v-if="dropDown">
<view class="screen-list">
<view class="screen-list-item" :class="{active : status == '0'}" @click="screenClick('0')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.a_init > 0">{{ordersCount.a_init}}</view>
<image src="/static/icon/dropDown_01.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
待预约
</view>
</view>
<!-- <view class="screen-list-item" :class="{active : status == '1'}" @click="screenClick('1')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.a_payed > 0">{{ordersCount.a_payed}}</view>
<image src="/static/icon/dropDown_02.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
待评估
</view>
</view> -->
<view class="screen-list-item" :class="{active : status == '2'}" @click="screenClick('2')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.a_service > 0">{{ordersCount.a_service}}</view>
<image src="/static/icon/dropDown_03.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
已预约
</view>
</view>
<view class="screen-list-item" :class="{active : status == '3'}" @click="screenClick('3')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.a_serviced > 0">{{ordersCount.a_serviced}}</view>
<image src="/static/icon/dropDown_04.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
待缴服务费
</view>
</view>
<view class="screen-list-item" :class="{active : status == '4'}" @click="screenClick('4')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.b_sign > 0">{{ordersCount.b_sign}}</view>
<image src="/static/icon/dropDown_06.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
待签约
</view>
</view>
<view class="screen-list-item" :class="{active : status == '5'}" @click="screenClick('5')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.a_bank > 0">{{ordersCount.a_bank}}</view>
<image src="/static/icon/dropDown_10.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
待完善资料
</view>
</view>
<view class="screen-list-item" :class="{active : status == '6'}" @click="screenClick('6')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.b_check > 0">{{ordersCount.b_check}}</view>
<image src="/static/icon/dropDown_05.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
初审中
</view>
</view>
<!-- <view class="screen-list-item" :class="{active : status == '7'}" @click="screenClick('7')">
<image class="screen-list-img" src="/static/icon/dropDown_07.png" mode="aspectFill"></image>
<view class="screen-list-name">
待邮寄资料
</view>
</view> -->
<view class="screen-list-item" :class="{active : status == '7'}" @click="screenClick('7')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.b_recheck > 0">{{ordersCount.b_recheck}}</view>
<image src="/static/icon/dropDown_08.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
复审中
</view>
</view>
<view class="screen-list-item" :class="{active : status == '8'}" @click="screenClick('8')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.b_process > 0">{{ordersCount.b_process}}</view>
<image src="/static/icon/dropDown_09.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
办理中
</view>
</view>
<view class="screen-list-item" :class="{active : status == '9'}" @click="screenClick('9')">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.b_confirm > 0">{{ordersCount.b_confirm}}</view>
<image src="/static/icon/dropDown_10.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
待确认
</view>
</view>
<view class="screen-list-item" :class="{active : status == '10'}" @click="screenClick('10')">
<view class="screen-list-img">
<!-- <view class="screen-list-number" v-if="ordersCount.b_complete > 0">{{ordersCount.b_complete}}</view> -->
<image src="/static/icon/dropDown_11.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
办理完成
</view>
</view>
<view class="screen-list-item" :class="{active : status == '11'}" @click="refundClick()">
<view class="screen-list-img">
<view class="screen-list-number" v-if="ordersCount.refund > 0">{{ordersCount.refund}}</view>
<image src="/static/icon/dropDown_07.png" mode="aspectFill"></image>
</view>
<view class="screen-list-name">
退款完成
</view>
</view>
</view>
<view class="screen-btn">
<view class="screen-btn-handle" @click="dropDown = false">
取消
</view>
<!-- <view class="screen-btn-handle screen-btn-go">
确定
</view> -->
</view>
</view>
</view>
<!-- 弹出背景 -->
<view class="screen-back" v-if="dropDown"></view>
<!-- 列表 -->
<view class="reveal">
<block v-if="orderArr.length > 0">
<view class="list" v-for="(item, index) in orderArr" :key="index">
<view class="item borderBottom">
<view class="item-name">
<!-- 订单号 -->
{{item.order_no}}
</view>
<view class="item-status">
<block v-if="status == '11'">
<block v-if="item.refund_status">{{item.refund_status.text}}</block>
</block>
<block v-else>
{{item.status.text}}
</block>
</view>
</view>
<!-- start 待判断 -->
<view class="item">
<view class="item-label">
业务类型
</view>
<view class="item-text" @click="typeState(index)">
<block v-for="(typeItem, index) in item.item_type">
<block v-if="typeItem.number > 0">
{{typeItem.title}}x{{typeItem.number}}
</block>
</block>
<image class="item-text-arrow" src="@/static/imgs/openArrow_grey.png" mode="widthFix"></image>
</view>
</view>
<view class="baleShow" v-if="item.typeShow">
<view class="baleColor">
<view class="baleShow-label" v-for="(businessItem, index) in item.items">
<view class="baleShow-name">
{{businessItem.institution.title}}{{businessItem.business_type.title}}
</view>
<view class="baleShow-number">
{{businessItem.price}}
</view>
</view>
</view>
</view>
<view class="item" v-if="item.service_count > 0">
<view class="item-label">
服务包
</view>
<view class="item-text">
<view class="item-text-go" @click="$Router.push({name: 'sheetBale', params: {id: item.business_order_id}})">查看</view>
<text>x</text>{{item.service_count}}
</view>
</view>
<view class="item" v-if="item.pay.service_pay">
<view class="item-label">
咨询服务费
</view>
<view class="item-quantity" :class="{ gery : item.pay.service_pay}">
{{item.pay.service_pay ? '已缴' : '未缴'}}
</view>
<view class="item-text">
<text></text>{{item.total}}
</view>
</view>
<view class="item" v-if="item.diff_prices > 0">
<view class="item-label">
补差价
</view>
<view class="item-quantity">
未缴
</view>
<view class="item-text">
<text></text>{{item.diff_prices}}
</view>
</view>
<view class="item" v-if="item.diff_prices_pays > 0">
<view class="item-label">
补差价
</view>
<view class="item-quantity gery">
已缴
</view>
<view class="item-text">
<text></text>{{item.diff_prices_pays}}
</view>
</view>
<!-- 邮寄 -->
<block v-if="item.deliver_count.can">
<view class="item">
<view class="item-label">
邮寄材料
</view>
<block v-if="item.deliver_count">
<view class="item-express" v-if="item.deliver_count.num < item.deliver_count.all" @click="$Router.push({name: 'sheetExpress', params: {id: item.business_order_id, adderss: item.adderss, metarial: item.deliver_count.metarial, mobile: item.deliver_count.mobile}})">
去邮寄({{item.deliver_count.num}}/{{item.deliver_count.all}})
</view>
<view class="item-express active" v-else>
已邮寄({{item.deliver_count.num}}/{{item.deliver_count.all}})
</view>
</block>
</view>
<view class="item" v-if="item.deliver_count.num > 0">
<view class="item-label">
物流信息
</view>
<view class="item-express" v-if="item.deliver_count.num > 0" @click="expressSheet(item.business_order_id)">
去查看
</view>
</view>
</block>
<!-- end 待判断 -->
<view class="item">
<view class="item-label">
下单日期
</view>
<view class="item-text">
{{item.created_at}}
</view>
</view>
<view class="btn">
<view class="btn-user" @click="callPhone(item.manager.username)">
<image class="btn-user-head" :src="item.manager.avatar ? item.manager.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
<view class="btn-user-cont">
<view class="btn-user-name">{{item.manager.nickname}}</view>
<view class="btn-user-tips">业务咨询</view>
</view>
</view>
<view class="btn-lable">
<view class="btn-lable-go" @click="$Router.push({name: 'sheetSpeed', params: {id: item.business_order_id}})">
查看进度
</view>
<view class="btn-lable-go" v-if="item.status.value == 2" @click="$Router.push({name: 'sheetEstimate', params: {id: item.business_order_id}})">
预估方案
</view>
<view class="btn-lable-go" v-else-if="item.status.value == 3" @click="$Router.push({name: 'sheetPayment', params: {id: item.business_order_id, price: item.total, style: 'daijiao'}})">
去缴费
</view>
<view class="btn-lable-go" v-else-if="item.status.value == 4" @click="contractClick(item.business_order_id)">
去签约
</view>
<view class="btn-lable-go" v-else-if="item.status.value == 5" @click="$Router.push({name: 'sheetSpeed', params: {id: item.business_order_id}})">
去完善
</view>
<block v-else-if="item.status.value == 6 || item.status.value == 8">
<view class="btn-lable-go" v-if="item.can.diff" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, remark: item.diff.remark, style: 'chajia'}})">
补差价
</view>
<block v-else>
<view class="btn-lable-go" v-if="item.status.value == 8" @click="$Router.push({name: 'sheetHandle', params: {id: item.business_order_id}})">
查看记录
</view>
<view class="btn-lable-go active" v-else>{{item.status.text}}</view>
</block>
</block>
<view class="btn-lable-go active" v-else-if="item.status.value == 7">
{{item.status.text}}
</view>
<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>
</block>
<!-- <view class="btn-lable-go" v-else-if="item.status.value == 8" @click="$Router.push({name: 'sheetHandle'})">
{{item.status.text}}
</view> -->
<block v-else-if="item.status.value == 10">
<view class="btn-lable-go" v-if="item.can.diff" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, remark: item.diff.remark, style: 'chajia'}})">
补差价
</view>
<view class="btn-lable-go active" v-else>{{item.status.text}}</view>
</block>
<view v-else class="btn-lable-go" @click="$Router.push({name: 'sheetSpeed', params: {id: item.business_order_id}})">
{{item.status.text}}
</view>
</view>
</view>
</view>
<view class="pagesLoding" v-if="lodingStats">
<block v-if="page.has_more">
<image class="pagesLodingIcon" src="/static/icons/refresh_loding.gif" mode="widthFix"></image>加载中...
</block>
<block v-else>
没有更多了~
</block>
</view>
</block>
<view class="reveal-no pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无订单</view>
</view>
</view>
</view>
</template>
<script>
import { myOrders, contractGo, userIndex, expressList, myRefund } from '@/apis/interfaces/user'
export default {
data() {
return {
count : '', // 订单数量
dropDown : false, // 订单下拉
status : '', // 订单状态 0 待预约 1 待评估 2待匹配服务包 3 待缴服务费 4 待完善资料 5 待初审
orderArr : [], // 订单列表
baleState : false, // 展开收起
page : {}, // 分页信息
lodingStats : false, // 加载状态
dropDownSee : '0',
ordersCount : '', // 数字
}
},
onShow() {
// 获取用户信息
this.userInfo();
if(this.status == '11') {
// 退款列表
this.refundClick()
} else {
// 获取基础信息
this.orderInfo();
}
},
methods: {
// 用户信息
userInfo() {
userIndex().then(res => {
this.ordersCount = res.business_orders_count
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 基础信息
orderInfo(page) {
myOrders({
status: this.status || null,
page : page || 1
}).then(res => {
let esArr = res.lists.data
esArr.forEach((item, index) => {
item.typeShow = false
})
let list = this.orderArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.orderArr = newData
this.page = res.lists.page
this.count = res.count
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
//tab更改
screenClick(e) {
this.status = e
this.dropDown = false
// 获取基础信息
this.orderInfo();
if(e == 0) {
this.dropDownSee = '0'
return
}
this.dropDownSee = ''
},
//退款成功
refundClick(page) {
this.dropDown = false
this.status = '11'
if(this.status == 0) {
this.dropDownSee = '0'
return
}
this.dropDownSee = ''
myRefund({
page : page || 1
}).then(res => {
let esArr = res.data
esArr.forEach((item, index) => {
item.typeShow = false
})
let list = this.orderArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.orderArr = newData
this.page = res.page
// this.count = res.count
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
//查看更多
screenDrop() {
this.dropDown = true
},
// 列表展开
typeState(index) {
var listData = this.orderArr
var helpFlag = this.orderArr[index].typeShow
listData.forEach((item) => {
item.typeShow = false
})
listData[index].typeShow = !helpFlag
this.orderArr = listData
},
// 拨打电话
callPhone(e) {
uni.makePhoneCall({
phoneNumber: e
})
},
// 去签约
contractClick(id) {
contractGo(id, {
// redirect_url: "https://web.douhuofalv.com/user/index",
redirect_url: "https://web.douhuotest.douhuofalv.com/user/index",
app_scheme : ''
}).then(res => {
// let faceUrl = encodeURIComponent(res.sign_url)
window.location.href= res.sign_url
// uni.navigateTo({
// url: '/webview/webview?faceUrl=' + faceUrl
// });
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 获取邮寄列表弹出
expressSheet(id) {
expressList(id).then(res => {
let nameArr = []
nameArr = res.map(val => {
return val.type
})
uni.showActionSheet({
itemList: nameArr,
success: sheetRes => {
this.$Router.push({name: 'sheetLogistic', params: {express: res[sheetRes.tapIndex].business_order_express_id}})
},
fail: sheetFail => {}
})
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取基础信息
this.orderInfo();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取基础信息
this.orderInfo(pageNumber);
}
}
}
}
</script>
<style lang="scss">
.content{
background: #f4f4f4;
// height: calc(100vh - 44px);
overflow: hidden;
overflow-y: scroll;
}
.model {
position: fixed;
width: 100%;
z-index: 99;
height: 280rpx;
.model-back,
.model-list {
position: absolute;
left: 0;
top: 0;
width: 100%;
}
.model-back {
height: 100%;
}
.model-list {
z-index: 1;
display: flex;
padding-top: $padding * 3;
color: #ffffff;
.model-label {
flex: 2;
text-align: center;
.model-number {
font-size: $title-size + 18;
text {
font-size: $title-size-m;
padding-left: 5rpx;
}
}
.model-name {
opacity: .9;
font-size: $title-size-lg;
margin-top: 10rpx;
}
}
}
}
// 弹出背景
.screen-back {
position: fixed;
background-color: rgba(0, 0, 0, .5);
width: 100%;
height: 100vh;
top: 0;
left: 0;
z-index: 99;
}
.screen {
width: 100%;
display: flex;
height: 100rpx;
transition: .2s;
z-index: 99;
top: 188px;
left: 0;
position: fixed;
background: #f4f4f4;
padding: 20rpx 0;
box-sizing: border-box;
&.active {
background-color: #ffffff;
position: fixed;
top: 0;
left: 0;
z-index: 999;
}
.screen-drop {
border-top: 2rpx solid #f7f7f7;
position: absolute;
top: 100rpx;
left: 0;
width: 100%;
z-index: 99;
background-color: #ffffff;
box-sizing: border-box;
border-radius: 0 0 $radius $radius;
overflow: hidden;
.screen-list {
padding: $padding 0 $padding - 20;
overflow: hidden;
.screen-list-item {
width: 25%;
float: left;
text-align: center;
font-size: $title-size-sm;
color: #111111;
margin-bottom: $margin;
.screen-list-img {
position: relative;
image {
width: 44rpx;
height: 44rpx;
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
.screen-list-number {
position: absolute;
top: -10rpx;
right: 25%;
background-color: $mian-color;
border-radius: $radius;
color: #ffffff;
padding: 0 10rpx;
font-size: $title-size-sm - 2;
}
}
&.active {
color: $mian-color;
}
&.active .screen-list-img image {
-webkit-filter: grayscale(0%);
filter: grayscale(0%);
}
}
}
.screen-btn {
display: flex;
.screen-btn-handle {
flex: 2;
text-align: center;
line-height: 90rpx;
background-color: #FBE7EE;
color: $mian-color;
&.screen-btn-go {
background-color: $mian-color;
color: #ffffff;
}
}
}
}
.screen-lable {
display: flex;
width: 100%;
.screen-lable-item {
width: 25%;
text-align: center;
display: inline-block;
font-size: $title-size-m;
color: #999999;
height: 54rpx;
line-height: 54rpx;
text {
background-color: transparent;
display: block;
display: inline-block;
padding: 0 $padding - 10;
border-radius: $radius * 2;
}
&.active text {
background-color: $mian-color;
color: #ffffff;
}
&:last-child {
margin-right: 0;
}
}
}
.screen-arrow {
width: 30rpx;
height: 30rpx;
margin-top: 16rpx;
-moz-transform:rotate(-180deg);
-webkit-transform:rotate(-180deg);
}
}
.reveal {
padding: 0 $padding $padding;
box-sizing: border-box;
width: 100%;
margin-top: 380rpx;
.list {
border-radius: $radius-lg;
background-color: #ffffff;
margin-bottom: 30rpx;
&:last-child {
margin-bottom: 0;
}
.borderBottom {
border-bottom: 2rpx solid #f7f7f7;
}
.baleShow {
padding: 0 $padding;
box-sizing: border-box;
.baleColor {
background-color: #FFF5F9;
padding: 10rpx $padding;
box-sizing: border-box;
border-radius: $radius-m;
.baleShow-label {
display: flex;
font-size: $title-size-sm;
line-height: 54rpx;
color: #111111;
.baleShow-name {
flex: 1;
}
}
}
}
.item {
padding: $padding;
box-sizing: border-box;
padding-bottom: $padding;
display: flex;
font-size: $title-size-lg;
line-height: 44rpx;
.item-name {
font-size: $title-size-lg;
flex: 1;
}
.item-status {
color: $mian-color;
font-size: $title-size-m;
}
.item-label {
flex: 1;
color: #999999;
}
.item-express {
font-size: $title-size-m;
color: $mian-color;
border-radius: $radius-m;
height: 50rpx;
line-height: 50rpx;
text-align: right;
&.active {
color: #999999;
}
}
.item-quantity {
background-color: #FFF5EA;
color: #FFA031;
font-size: $title-size-sm;
padding: 0 20rpx;
border-radius: $radius;
&.gery {
background-color: #f5f5f5;
color: #999999;
}
}
.item-text {
text-align: right;
display: flex;
.item-text-go {
font-size: $title-size-sm - 2;
border: 2rpx solid $mian-color;
color: $mian-color;
padding: 0 10rpx;
border-radius: $radius-m;
margin: 3rpx 10rpx 0 0;
height: 38rpx;
line-height: 38rpx;
}
text {
font-size: $title-size-m;
padding-left: 10rpx;
}
}
.item-text-arrow {
width: 22rpx;
margin-left: 10rpx;
margin-top: 10rpx;
}
}
.btn {
display: flex;
padding: $padding $padding - 10;
box-sizing: border-box;
border-top: 2rpx solid #f7f7f7;
.btn-user {
flex: 1;
line-height: 54rpx;
display: flex;
.btn-user-head {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
}
.btn-user-cont {
display: flex;
font-size: $title-size-sm;
.btn-user-name {
padding: 0 $padding - 10;
line-height: 60rpx;
}
.btn-user-tips {
background-color: #FBE7EE;
color: $mian-color;
height: 44rpx;
line-height: 44rpx;
font-size: $title-size-sm - 2;
border-radius: $radius * 2;
padding: 0 15rpx;
margin-top: 8rpx;
}
}
}
.btn-lable {
font-size: $title-size-sm;
display: flex;
.btn-lable-go {
height: 54rpx;
line-height: 54rpx;
text-align: center;
background-color: #FBAF3B;
border: 2rpx solid transparent;
color: #ffffff;
border-radius: $radius * 2;
width: 140rpx;
&:first-child {
background-color: #ffffff;
color: #111111;
border-color: #999999;
margin-right: 15rpx;
}
&.active {
background-color: #ededed;
color: #727272;
}
}
}
}
}
}
// 暂无内容
.reveal-no {
padding: 200rpx 0;
}
</style>

217
pages/sheet/loan.vue Normal file
View File

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

206
pages/sheet/logistic.vue Normal file
View File

@@ -0,0 +1,206 @@
<template>
<view class="content">
<block v-if="logisticArr.length > 0">
<view class="top">
<view class="top-logo">
<image :src="orderExpress.cover ? orderExpress.cover : '/static/imgs/Nologistic.png'" mode="aspectFill"></image>
</view>
<view class="top-cont">
<view class="top-name">
{{orderExpress.express_name}}
<view class="top-no">
{{orderExpress.express_number}}
</view>
</view>
<view class="top-type">
[邮寄资料] <text>{{orderExpress.type}}</text>
</view>
</view>
</view>
<view class="white">
<view class="address">
<view class="address-tips">
</view>
<view class="address-text">
{{address.full_address}}
</view>
</view>
<view class="list">
<view class="item" v-for="(item, index) in logisticArr" :key="index">
<view class="item-name">
<view class="item-status">
{{item.status}}
</view>
<view class="item-time">
{{item.time}}
</view>
</view>
<view class="item-text">
{{item.context}}
</view>
</view>
</view>
</view>
</block>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Nologistic.png"></image>
<view>暂无物流信息</view>
</view>
</view>
</template>
<script>
import { logistic } from '@/apis/interfaces/user'
export default {
data() {
return {
logisticArr: [], // 物流列表
orderExpress: '',
address: ''
}
},
onShow() {
// 获取物流列表
this.logisticInfo()
},
methods: {
// 物流列表
logisticInfo(){
logistic(this.$Route.query.express).then(res => {
this.logisticArr = res.logistics
this.orderExpress = res.orderExpress
this.address = res.address
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: $mian-color;
padding: $padding + 10 $padding $padding * 2;
box-sizing: border-box;
display: flex;
.top-logo {
background-color: #ffffff;
border-radius: $radius-m;
width: 100rpx;
height: 100rpx;
padding: 10rpx;
box-sizing: border-box;
image {
width: 100%;
height: 100%;
}
}
.top-cont {
color: #ffffff;
width: calc(100% - 130rpx);
margin-left: 30rpx;
.top-name {
display: flex;
padding: 10rpx 0;
.top-no {
font-size: $title-size-m;
padding-left: $padding;
opacity: .9;
}
}
.top-type {
font-size: $title-size-m;
text {
padding-left: 20rpx;
}
}
}
}
.address {
color: #333333;
font-size: $title-size-m;
display: flex;
padding: $padding $padding 0;
.address-tips {
width: 54rpx;
text-align: center;
height: 54rpx;
line-height: 54rpx;
border-radius: 50%;
background-color: #EEEEEE;
margin-left: -15rpx;
font-size: $title-size-sm;
}
.address-text {
width: calc(100% - 74rpx);
margin-left: 20rpx;
padding-top: 10rpx;
}
}
.white {
margin-top: -30rpx;
background-color: #ffffff;
border-radius: $radius;
}
.list {
padding: 0 $padding;
box-sizing: border-box;
.item {
padding-bottom: $padding + 10;
padding-left: $padding + 10;
box-sizing: border-box;
position: relative;
&:first-child {
padding-top: $padding;
}
&::after {
position: absolute;
content: '';
background-color: #DDDDDD;
width: 14rpx;
height: 14rpx;
border-radius: 50%;
left: 0;
top: calc(50% - 6rpx);
z-index: 3;
border: 2rpx solid #ffffff;
}
&::before {
position: absolute;
content: '';
background-color: #F0F0F0;
width: 2rpx;
height: 100%;
border-radius: 50%;
left: 8rpx;
top: 0;
}
.item-name {
display: flex;
.item-status {
font-weight: 600;
padding-right: 20rpx;
}
.item-time {
color: #868686;
}
}
.item-text {
color: #868686;
font-size: $title-size-sm;
line-height: 40rpx;
margin-top: 20rpx;
}
}
}
</style>

618
pages/sheet/pay.vue Normal file
View File

@@ -0,0 +1,618 @@
<template>
<view class="content">
<view class="paymentTop">
<view class="paymentTop-name">
需支付金额
</view>
<view class="paymentTop-price">
<text></text>{{applyData.price}}
</view>
<view class="paymentTop-text">
与人方便,与己方便,珍惜时间,请先付款
</view>
</view>
<view class="paymentList">
<view class="paymentList-label" v-if="couponData" @click="payType('coupon')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/payCoupon.png" mode="widthFix"></image>抵值券
</view>
<view class="paymentList-right" @click="couponState = true">
<view class="paymentList-tips" v-if="Payment == 'wechat'">
使用优惠券
</view>
<view class="paymentList-price" v-else>{{couponData.price}}</view>
<image class="paymentList-img" :src="Payment == 'coupon' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('wechat')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/payWechat.png" mode="widthFix"></image>微信支付
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'wechat' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('umsMp')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/minPay.png" mode="widthFix"></image>微信支付银联商务
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'umsMp' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('dgwx')" >
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/minPay.png" mode="widthFix"></image>微信支付汇付
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'dgwx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('umsAli')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/aliPay.png" mode="widthFix"></image>支付宝银联商务
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'umsAli' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('dgAli')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/aliPay.png" mode="widthFix"></image>支付宝汇付
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'dgAli' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
</view>
<view class="paymentBtn" v-if="Payment == 'umsMp'">
<!-- web.douhuotest.douhuofalv dev=0是线上 dev=1是线下 -->
<wx-open-launch-weapp
username="gh_918c81628d6f"
:path="'pages/pay/pay?type=h5&dev=1&trade_id=' + tradeId + '&token=' + token"
>
<script type="text/wxtag-template">
<style>
.gobtn {
width: 280px;
background-color: #da2b56;
color: #ffffff;
border-radius: 5px;
height: 50px;
line-height: 50px;
font-size: 18px;
border: none;
}
</style>
<button type="default" class="gobtn">打开小程序收银台</button>
</script>
</wx-open-launch-weapp>
</view>
<view class="paymentBtn" v-else-if="Payment == 'dgwx'">
<button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChickDg">
打开小程序收银台
</button>
</view>
<view class="paymentBtn" v-else>
<button class="paymentBtn-go" type="default" @click="payClick" :disabled="disabled">立即支付</button>
</view>
<!-- 抵值券选择 -->
<view class="couponPop" v-if="couponState"></view>
<view class="couponEject" :class="{active: couponState}">
<image class="couponClose" src="@/static/imgs/payClose.png" mode="widthFix" @click="couponState = false"></image>
<view class="couponEject-title">
抵值券选择
</view>
<scroll-view class="couponEject-list" scroll-y="true" show-scrollbar="false">
<view class="couponEject-label" v-for="(item, index) in couponArr" :key="index" @click="selectClick(index)">
<image class="couponSelect" :src="!item.state ? '/static/imgs/paySelect.png' : '/static/imgs/paySelect_active.png'" mode="aspectFill"></image>
<view class="couponEject-top">
<view class="couponEject-number">
{{item.price}}<text></text>
</view>
<view class="couponEject-head">
{{item.title}}
<view class="couponEject-clue">{{item.price_text}}</view>
</view>
</view>
<view class="couponEject-bottom">
<view class="couponEject-tips">
抵值券
</view>
<view class="couponEject-time">
{{item.time.interval}}
</view>
</view>
</view>
</scroll-view>
<view class="couponBtn" @click="couponGo">
确定
</view>
</view>
</view>
</template>
<script>
import { Apply, Wechat } from '@/apis/interfaces/index'
import { ums, umsState, umsDg } from '@/apis/interfaces/pay'
export default {
data() {
return {
token : '', // 登录token
tradeId : '', // 微信支付id
jumpUrlDg : '', // 抖巩支付
Payment : 'wechat', // 支付类型
applyData : '', // 支付数据
orderNo : '', // 订单
couponState : false, // 优惠券弹出层
couponData : '', // 优惠券
couponArr : [], // 优惠券列表
disabled : false, // 按钮状态
getState : false, // 获取订单状态
}
},
onShow() {
if(this.getState && this.tradeId != ''){
this.getUmsState(this.tradeId)
}
this.token = this.$store.getters.getToken
this.applyInfo();
},
methods: {
// 查询支付状态
getUmsState(tradeId){
uni.showLoading({
title: '查询支付结果...',
mask : true
})
let outTime;
let resNumb = 0;
outTime = setInterval(() => {
if(resNumb >= 3){
clearInterval(outTime)
uni.hideLoading()
uni.showToast({
title: "查询支付结果失败",
icon : "none",
mask : true
})
return
}
umsState(tradeId).then(res => {
resNumb++
if(res.state === 'success'){
clearInterval(outTime)
uni.hideLoading()
this.$Router.replace({name: 'sheetPoint'})
}
}).catch(err => {
clearInterval(outTime)
uni.showToast({
title: err.message,
icon : 'none'
})
})
}, 2000)
},
// 获取9.9预约
applyInfo() {
Apply(this.$Route.query.id).then(res => {
let newCoupons = res.coupons
newCoupons.forEach((item, index) => {
item.state = false
})
this.couponData = res.coupon
this.couponArr = newCoupons
this.applyData = res.apply
this.orderNo = res.apply.order_no
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择支付方式
payType(type) {
if(this.Payment === type) return
this.Payment = type
if(type === 'umsMp'){
uni.showLoading({
title: '加载中...',
mask : true
})
this.UMSPay()
} else if(type === 'dgwx') {
uni.showLoading({
title: '加载中...',
mask : true
})
this.dgwxPay()
}
},
// 斗拱微信支付
dgwxPay(){
let payType = this.Payment == 'dgwx' ? 'mp' : 'mp_alipay'
umsDg(this.orderNo, {type: payType, app_schema: 'weixin://'}).then(res => {
let { params, trade_id } = res;
this.getState = true
switch (payType){
case 'mp':
this.tradeId = trade_id
this.jumpUrlDg = JSON.parse(params.miniapp_data)
this.Payment = 'dgwx'
break;
case 'mp_alipay':
this.tradeId = trade_id
window.location.href = `https://ds.alipay.com/?scheme=` + encodeURIComponent(params.jump_url)
this.Payment = 'dgwxalipay'
break;
}
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 新银联商务支付
UMSPay(){
let payType = this.Payment == 'umsMp' ? 'mp' : 'mp_alipay'
ums(this.orderNo, {type: payType}).then(res => {
this.getState = true
switch (payType){
case 'mp':
this.tradeId = res.trade_id
break;
case 'mp_alipay':
this.tradeId = res.trade_id
window.location.href = res.alipay
break;
}
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 抖供支付
payChickDg() {
window.location.href = this.jumpUrlDg.scheme_code
},
// 微信支付
payClick() {
if(this.Payment === 'umsMp' || this.Payment === 'umsAli'){
this.UMSPay()
return
} else if (this.Payment === 'dgwx' || this.Payment === 'dgAli') {
this.dgwxPay()
return
}
let newCouponid
if(this.Payment == 'coupon') {
newCouponid = this.couponData.coupon_grant_id
} else {
newCouponid = ''
}
Wechat(this.orderNo, {
coupon_grant_id : newCouponid,
openid : this.$store.getters.getOpenId
}).then(res => {
// 直接跳到列表
if(res.canPay == false) {
this.disabled = true
uni.showToast({
title: '支付成功',
icon: "none"
})
setTimeout(()=>{
this.$Router.replace({name: 'User'})
},3000)
return
}
// 跳支付
let wxConfig = JSON.parse(res.wechat)
this.$wx.chooseWXPay({
timestamp: wxConfig.timeStamp,
nonceStr: wxConfig.nonceStr,
package: wxConfig.package,
signType: wxConfig.signType,
paySign: wxConfig.paySign,
success: payRes => {
uni.showToast({
title: '支付成功',
icon: "none"
})
this.disabled = true
// 先跳支付成功
setTimeout(()=>{
this.$Router.replace({name: 'sheetPoint'})
},2000)
},
cancel: payCancel => {
// 跳到个人中心
this.$Router.replace({name: 'User'})
this.disabled = true
},
fail: payfail => {
uni.showToast({
title: '取消支付',
icon: 'none'
})
this.disabled = true
setTimeout(()=>{
this.$Router.replace({name: 'User'})
},1000)
}
});
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 优惠券-点击
selectClick(index) {
var listData = this.couponArr
var helpFlag = this.couponArr[index].state
listData.forEach((item) => {
item.state = false
})
listData[index].state = !helpFlag
this.couponArr = listData
this.couponIndex = index
},
// 选择优惠券
couponGo() {
if(this.couponArr[this.couponIndex]) {
this.couponData = this.couponArr[this.couponIndex]
this.couponState = false
return
}
uni.showToast({
title: '请选择抵值券',
icon: "none"
})
}
}
}
</script>
<style lang="scss" scoped>
.content{
background: #f4f4f4;
height: 100vh;
// height: calc(100vh - 44px);
overflow-y: scroll;
}
.paymentTop {
padding: $padding * 4 $padding;
box-sizing: border-box;
text-align: center;
color: #666666;
.paymentTop-name {
padding-left: $padding;
box-sizing: border-box;
}
.paymentTop-price {
color: $mian-color;
font-size: $title-size + 40;
font-weight: 600;
margin: $margin - 10 0;
text {
font-size: $title-size + 10;
}
}
}
.paymentList {
padding: 0 $padding;
box-sizing: border-box;
.paymentList-label {
background-color: #ffffff;
border-radius: $radius;
padding: $padding + 10 $padding;
box-sizing: border-box;
margin-bottom: $margin + 10;
display: flex;
.paymentList-left {
flex: 1;
display: flex;
line-height: 40rpx;
.paymentList-icon {
width: 40rpx;
height: 40rpx;
margin-right: $margin - 10;
}
}
.paymentList-right {
display: flex;
.paymentList-price {
color: $mian-color;
font-weight: 600;
}
.paymentList-tips {
background-image: linear-gradient(to left, #FF4646, #FF7676);
height: 44rpx;
line-height: 44rpx;
font-size: $title-size-sm;
color: #ffffff;
opacity: .9;
border-radius: $radius * 2;
padding: 0 10rpx;
}
.paymentList-arrow {
width: 14rpx;
margin: 10rpx 0 0 20rpx;
}
.paymentList-img {
width: 32rpx;
height: 32rpx;
margin-top: 4rpx;
margin-left: $margin;
}
}
}
}
.paymentBtn {
text-align: center;
padding: 0 $padding 100rpx;
box-sizing: border-box;
width: 100%;
.paymentBtn-go {
position: relative;
width: 280px;
background-color: #da2b56;
color: #ffffff;
border-radius: 5px;
height: 50px;
line-height: 50px;
font-size: 18px;
&[disabled] {
background-color: #eba5a5;
}
}
}
// 弹出层
.couponPop {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
bottom: 0;
background-color: rgba(0, 0, 0, .5);
z-index: 11;
}
.couponEject {
position: fixed;
width: 100vw;
height: 70vh;
left: 0;
bottom: -1000%;
background-color: #ffffff;
z-index: 12;
padding: $padding $padding + 20;
box-sizing: border-box;
border-radius: $radius + 10 $radius + 10 0 0;
transition: .2s;
&.active {
bottom: 0;
}
.couponClose {
position: absolute;
right: $margin + 10;
top: $margin + 10;
width: 40rpx;
height: 40rpx;
}
.couponEject-title {
text-align: center;
font-size: $title-size + 4;
height: 60rpx;
}
.couponEject-list {
height: calc(100% - 200rpx);
overflow-y: scroll;
overflow: hidden;
margin-top: $margin;
.couponEject-label {
background-color: #FFF5EA;
border-radius: $radius;
margin-bottom: $margin;
position: relative;
&::after,
&::before {
position: absolute;
content: '';
bottom: 80rpx;
width: 30rpx;
height: 30rpx;
border-radius: 50%;
background-color: #ffffff;
}
&::after {
left: -15rpx;
}
&::before {
right: -15rpx;
}
.couponSelect {
position: absolute;
right: 30rpx;
top: 20%;
width: 32rpx;
height: 32rpx;
}
.couponEject-top,
.couponEject-bottom {
display: flex;
}
.couponEject-top {
padding: $padding 0;
box-sizing: border-box;
.couponEject-number {
width: 220rpx;
text-align: center;
font-size: $title-size + 25;
text {
font-size: $title-size-m;
padding-left: 5rpx;
}
}
.couponEject-head {
width: calc(100% - 220rpx);
padding-left: $padding + 10;
box-sizing: border-box;
border-left: 2rpx dashed #fffdf7;
.couponEject-clue {
color: #FFA031;
font-size: $title-size-m;
margin-top: 10rpx;
}
}
}
.couponEject-bottom {
padding: $padding - 10 $padding;
box-sizing: border-box;
font-size: $title-size-m;
color: #e17900;
border-top: 2rpx dashed #fffdf7;
.couponEject-tips {
flex: 1;
}
}
}
}
.couponBtn {
height: 94rpx;
line-height: 94rpx;
margin: 30rpx 0;
background-color: #FFA031;
color: #ffffff;
border-radius: $radius * 4;
text-align: center;
}
}
</style>

422
pages/sheet/payment.vue Normal file
View File

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

74
pages/sheet/point.vue Normal file
View File

@@ -0,0 +1,74 @@
<template>
<view class="content">
<view class="point">
<img class="point-img" src="@/static/imgs/payImg.png">
<view class="point-text">
<view class="point-name">
支付成功
</view>
<view class="point-tips">
<text>您已完成支付</text>
<text>谢谢您对抖火的支持</text>
</view>
<view class="point-btn">
<!-- @click="$Router.push({name: 'sheetHandle'})" -->
<view class="btn" @click="$Router.push({name: 'sheetIndex'})">
查看订单
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {}
},
onLoad() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.point {
text-align: center;
padding: 40% 0;
.point-img {
width: 240rpx;
height: 240rpx;
margin: 0 auto 10rpx;
}
.point-text {
.point-name {
color: $mian-color;
font-size: $title-size + 14;
}
.point-tips{
margin: $margin + 20 0 $margin*3;
line-height: 52rpx;
text {
display: block;
color: #999999;
}
}
}
.point-btn {
text-align: center;
.btn {
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
border-radius: $radius * 4;
padding: 0 $padding * 2.5;
line-height: 90rpx;
}
}
}
</style>

74
pages/sheet/process.vue Normal file
View File

@@ -0,0 +1,74 @@
<template>
<view class="content">
<!-- 提示 -->
<view class="pack-center process-pack">
<img class="process-img" src="@/static/imgs/processGif.gif">
<view class="process-text">
<view class="process-name">
资料正在审核中...
</view>
<view class="process-tips">
请您耐心等待,我们会尽快进行审核
</view>
</view>
<view class="process-btn">
<view class="btn" @click="clickBack">
知道了
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {}
},
onLoad() {},
methods: {
// 返回上一页
clickBack() {
uni.navigateBack(1)
}
}
}
</script>
<style lang="scss" scoped>
.process-pack {
padding: 0 $padding * 4;
box-sizing: border-box;
}
.process-img {
width: 100%;
}
.process-text {
text-align: center;
line-height: 68rpx;
margin-top: $margin;
.process-name {
color: $mian-color;
font-size: $title-size + 8;
}
.process-tips {
font-size: $title-size;
color: #99a5b4;
}
}
.process-btn {
text-align: center;
margin-top: $margin * 2;
.btn {
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
border-radius: $radius-m;
width: 100%;
line-height: 90rpx;
}
}
</style>

629
pages/sheet/speed.vue Normal file
View File

@@ -0,0 +1,629 @@
<template>
<view class="content">
<img class="speedBack" src="@/static/imgs/speed_back.png">
<view class="speedFrame">
<view class="speedCont">
<view class="item" :class="{active: !item.over && !item.status}" v-for="(item, index) in stepArr" :key="index">
<view class="item-circular">{{item.order}}</view>
<img class="item-img" :src="item.icon">
<view class="item-text">
<view class="item-top">
<view class="item-name">
{{item.name}}
<block v-if="item.key == 'b_complete'">
<block v-if="item.refund_status.value > 0">{{item.refund_status.text}}</block>
</block>
</view>
<!-- 去支付待预约 -->
<block v-if="item.key == 'a_init'">
<block v-if="item.status">
<view class="item-btn active" @click="$Router.push({name: 'sheetPay', params: {id: infoData.id}})">
去支付
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 查看预估方案 -->
<block v-else-if="item.key == 'a_service'">
<block v-if="!item.status && item.over">
<view class="item-btn active" @click="$Router.push({name: 'sheetEstimate', params: {id: infoData.id}})">
去查看
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 去缴费服务费 -->
<block v-else-if="item.key == 'a_serviced'">
<block v-if="item.status">
<view class="item-btn active" @click="$Router.push({name: 'sheetPayment', params: {id: infoData.id, price: infoData.total, style: 'daijiao'}})">
去缴费
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 待签约 -->
<block v-else-if="item.key == 'b_sign'">
<block v-if="item.status">
<view class="item-btn active" @click="contractClick">
去签约
<image class="item-more active" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 初审中 -->
<block v-else-if="item.key == 'b_check'">
<block v-if="item.status">
<view class="item-btn active" @click="$Router.push({name: 'sheetProcess'})">
查看进度
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 复审中 -->
<block v-else-if="item.key == 'b_recheck'">
<block v-if="item.status">
<view class="item-btn active" @click="$Router.push({name: 'sheetProcess'})">
查看进度
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 办理中 -->
<block v-else-if="item.key == 'b_process'">
<block v-if="item.status">
<view class="item-btn active" @click="$Router.push({name: 'sheetHandle', params: {id: infoData.id}})">
查看记录
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 办理中 -->
<block v-else-if="item.key == 'b_confirm'">
<block v-if="item.status">
<view class="item-btn active" @click="$Router.push({name: 'OrderModify', params: {id: infoData.id}})">
去确认
<image class="item-more" src="/static/imgs/speedMore.png" mode="aspectFill"></image>
</view>
</block>
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</block>
<!-- 其他显示 -->
<block v-else>
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</block>
</view>
<!-- start 补充详细资料 -->
<view class="item-see" v-if="item.key == 'a_bank' && item.status == true">
<!-- 基础信息 -->
<view class="item-see-label">
<view class="item-see-name">
基础信息
</view>
<!-- orderId -->
<view v-if="!item.base" class="item-see-go" @click="$Router.push({name: 'ModifyBase', params: {id: infoData.id}})">
去补充
</view>
<view v-else class="item-see-go active">
已完善
</view>
</view>
<!-- 机构信息 -->
<view v-if="item.status">
<block v-if="item.items.length > 0">
<view class="item-see-label" v-for="(items, itemsIndex) in item.items" :key="itemsIndex">
<view class="item-see-name">
{{items.institution.title}}({{items.business_type.title}})
</view>
<view class="item-see-go" v-if="items.is_finish != 1" @click="$Router.push({name: 'ModifyBank', params: {id: items.business_order_item_id}})">
去补充
</view>
<view class="item-see-go active" v-else>
已完善
</view>
</view>
</block>
</view>
<!-- 邮寄资料 -->
<view class="item-see-label" v-if="infoData.deliver_count.can">
<view class="item-see-name">
邮寄资料{{infoData.deliver_count.num}}/{{infoData.deliver_count.all}}
</view>
<view class="item-see-go" v-if="item.deliver.status" @click="$Router.push({name: 'sheetExpress', params: {id: infoData.id, adderss: infoData.adderss, metarial: infoData.deliver_count.metarial, mobile: infoData.deliver_count.mobile}})">
去邮寄
</view>
<view class="item-see-go active" v-else>
已邮寄
</view>
</view>
<block v-if="item.is_show">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia'}})">
补差价
</view>
</view>
</block>
</view>
<!-- end 补充详细资料 -->
<!-- start 待签约 -->
<block v-if="item.is_show">
<view class="item-see" v-if="item.key == 'b_sign' && item.status == true">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia'}})">
补差价
</view>
</view>
</view>
</block>
<!-- end 待签约 -->
<!-- start 进行中 -->
<block v-if="item.is_show">
<view class="item-see" v-if="item.key == 'b_process' && item.status == true">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia'}})">
补差价
</view>
</view>
</view>
</block>
<!-- end 进行中 -->
<!-- start 办理中 -->
<block v-if="item.is_show">
<view class="item-see" v-if="item.key == 'b_confirm' && item.status == true">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia'}})">
补差价
</view>
</view>
</view>
</block>
<!-- end 办理中 -->
<!-- start 办理完成 -->
<block v-if="item.is_show">
<view class="item-see" v-if="item.key == 'b_complete' && item.status == true">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia'}})">
补差价
</view>
</view>
</view>
</block>
<!-- end 办理完成 -->
<!-- start 初审中 -->
<block v-if="item.is_show">
<view class="item-see" v-if="item.key == 'b_check' && item.status == true">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia',remark: item.diff.remark}})">
补差价
</view>
</view>
<!-- 基础信息 -->
<view class="item-see-label" v-if="item.user.status">
<view class="item-see-name">
基础信息
</view>
<view v-if="!item.base" class="item-see-go" @click="$Router.push({name: 'ModifyBase', params: {id: infoData.id}})">
去修改
</view>
<view v-else class="item-see-go active">
已完善
</view>
</view>
<!-- 机构信息 -->
<block v-if="item.items.status">
<block v-if="item.items.lists.length > 0">
<view class="item-see-label" v-for="(items, index) in item.items.lists" :key="index">
<view class="item-see-name">
{{items.institution.title}}({{items.business_type.title}})
</view>
<view class="item-see-go" v-if="items.is_finish != 1" @click="$Router.push({name: 'ModifyBank', params: {id: items.business_order_item_id}})">
去补充
</view>
<view class="item-see-go active" v-else>
已完善
</view>
</view>
</block>
</block>
<!-- 邮寄资料 -->
<view class="item-see-label" v-if="infoData.deliver_count.can">
<view class="item-see-name">
邮寄资料
</view>
<view class="item-see-go" v-if="item.deliver.status" @click="$Router.push({name: 'sheetExpress', params: {id: infoData.id, adderss: infoData.adderss, metarial: infoData.deliver_count.metarial, mobile: infoData.deliver_count.mobile}})">
去邮寄{{infoData.deliver_count.num}}/{{infoData.deliver_count.all}}
</view>
<view class="item-see-go active" v-else>
已邮寄
</view>
</view>
</view>
</block>
<!-- end 初审中 -->
<!-- start 复审中 -->
<block v-if="item.is_show">
<view class="item-see" v-if="item.key == 'b_recheck' && item.status == true">
<view class="item-see-label" v-if="item.diff.status">
<view class="item-see-name">
补差价
</view>
<view class="item-see-go" @click="$Router.push({name: 'sheetPayment', params: {id: item.diff.business_order_diff_price_id, price: item.diff.price, style: 'chajia'}})">
补差价
</view>
</view>
<!-- 基础信息 -->
<view class="item-see-label" v-if="item.user.status">
<view class="item-see-name">
基础信息
</view>
<view v-if="!item.base" class="item-see-go" @click="$Router.push({name: 'ModifyBase', params: {id: infoData.id}})">
去修改
</view>
<view v-else class="item-see-go active">
已完善
</view>
</view>
<!-- 机构信息 -->
<block v-if="item.items.status">
<block v-if="item.items.lists.length > 0">
<view class="item-see-label" v-for="(items, index) in item.items.lists" :key="index">
<view class="item-see-name">
{{items.institution.title}}
</view>
<view class="item-see-go" v-if="items.is_finish != 1" @click="$Router.push({name: 'ModifyBank', params: {id: items.business_order_item_id}})">
去补充
</view>
<view class="item-see-go active" v-else>
已完善
</view>
</view>
</block>
</block>
</view>
</block>
<!-- end 复审中 -->
<!-- start 初审中 -->
<block v-if="item.key == 'b_confirm'">
<view class="item-see" v-if="item.items.length > 0">
<view class="item-see-label" v-for="(itemsIndex, index) in item.items" :key="index">
<view class="item-see-name">
{{itemsIndex.institution.title}}({{itemsIndex.business_type.title}})
</view>
<view class="item-see-go" :class="{greenColor: itemsIndex.status.text == '方案通过'}">
{{itemsIndex.status.text}}
</view>
</view>
</view>
</block>
<!-- end 初审中 -->
</view>
</view>
</view>
<view class="speedCont speedWarm">
<view class="speedWarm-title">
如果疑惑可联系相关人员进行咨询
</view>
<view class="speedWarm-label">
电话1888-888888
</view>
</view>
</view>
</view>
</template>
<script>
import { StepsUrl, contractGo } from '@/apis/interfaces/user'
export default {
data() {
return {
infoData: '', // 其他信息
stepArr : '', // 列表
orderId : ''
}
},
onShow() {
// 获取基础信息
this.stepsInfo();
},
methods: {
// 基础信息
stepsInfo() {
StepsUrl(this.$Route.query.id).then(res => {
this.infoData= res.info
this.stepArr = res.steps
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 去签约
contractClick() {
contractGo(this.$Route.query.id, {
// redirect_url: "https://web.douhuofalv.com/user/index",
redirect_url: "https://web.douhuotest.douhuofalv.com/user/index",
app_scheme : ''
}).then(res => {
// let faceUrl = encodeURIComponent(res.sign_url)
window.location.href= res.sign_url
// uni.navigateTo({
// url: '/webview/webview?faceUrl=' + faceUrl
// });
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #448acf;
height: 100vh;
overflow-y: scroll;
}
.speedBack {
width: 100%;
}
.speedFrame {
padding: $padding;
box-sizing: border-box;
.speedCont {
border-radius: $radius;
background-color: #ffffff;
border: 4rpx solid #185caf;
padding: 10rpx $padding - 10 $padding;
box-sizing: border-box;
margin-bottom: $margin;
.item {
display: flex;
padding: $padding 0;
position: relative;
&::after {
position: absolute;
content: '';
height: 100%;
width: 0;
left: 26rpx;
top: 80rpx;
border-left-width: 2rpx;
border-left-style: solid;
border-left-color: $mian-color;
}
&:last-child::after {
display: none;
}
&.active::after {
border-left-color: #d9d9d9;
}
.item-circular {
width: 50rpx;
height: 50rpx;
line-height: 38rpx;
border-radius: 50%;
font-size: $title-size-sm;
background-color: $mian-color;
border: 6rpx solid #FBE7EE;
box-sizing: border-box;
color: #ffffff;
text-align: center;
}
&.active .item-circular {
background-color: #e5e5e5;
border: 6rpx solid #f3f3f3;
color: $text-gray;
}
.item-img {
margin: 8rpx 20rpx 0;
width: 40rpx;
height: 40rpx;
-webkit-filter: grayscale(0%);
filter: grayscale(0%);
}
&.active .item-img {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
.item-text {
width: calc(100% - 120rpx);
.item-top {
display: flex;
line-height: 52rpx;
.item-name {
flex: 1;
font-size: $title-size-lg;
color: $mian-color;
}
.item-btn {
color: #999999;
font-size: $title-size-m;
display: flex;
.item-more {
width: 40rpx;
height: 40rpx;
margin-left: 5rpx;
margin-top: 6rpx;
}
&.active {
color: $mian-color;
}
}
}
.item-see {
background-color: #f7f8fb;
padding: 5rpx $padding;
box-sizing: border-box;
border-radius: $radius-sm;
position: relative;
margin-top: $margin - 10;
&::after {
content: '';
width:0;
height:0;
border-width: 14rpx;
border-style:solid;
border-color:transparent transparent #f7f8fb transparent;
position: absolute;
left: 40rpx;
top: -27rpx;
}
.item-see-title {
margin: 10rpx 0;
}
.item-see-label {
font-size: $title-size-sm;
display: flex;
line-height: 48rpx;
padding: $padding - 10 0;
.item-see-name {
flex: 1;
}
.item-see-go {
color: $mian-color;
&.active {
color: $text-gray;
}
&.greenColor {
color: green;
}
}
}
}
}
&.active .item-name {
color: $text-gray !important;
}
}
}
.speedWarm {
padding: $padding + 20 $padding $padding + 10;
box-sizing: border-box;
position: relative;
color: #5f6d7a;
&::after,
&::before {
position: absolute;
content: '';
width: 14rpx;
height: 80rpx;
top: -60rpx;
border-radius: $radius;
background-image: linear-gradient(to top, #a7d5fe, #ffffff, #a7d5fe);
}
&::after {
left: $padding + 10;
}
&::before {
right: $padding + 10;
}
.speedWarm-title {
font-weight: 600;
}
.speedWarm-label {
font-weight: 600;
margin-top: $margin - 10;
}
}
}
</style>

View File

@@ -0,0 +1,641 @@
<template>
<view class="content">
<view class="top">
<view class="base">
<view class="white">
<view class="base-title">
<view class="base-name">
基本信息
</view>
<view class="base-number">
<!-- 6/12 -->
</view>
</view>
<view class="base-list">
<view class="base-block">
<view class="base-block-name">
<text>*</text>姓名
</view>
<view class="base-block-write prohibit">
{{baseData.name}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>性别
</view>
<view class="base-block-write prohibit">
{{baseData.sex}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>年龄
</view>
<view class="base-block-write prohibit">
{{baseData.age}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>属相
</view>
<view class="base-block-write prohibit">
{{baseData.zodiak}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>身份证号
</view>
<view class="base-block-write prohibit">
{{baseData.id_card}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>身份证地址
</view>
<view class="base-block-write prohibit">
{{baseData.address}}
</view>
</view>
<view class="base-block">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>婚姻 <image v-if="baseData.check_params.marriage" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.marriage.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<picker class="idcardAdd-picker" @change="marriageChange($event)" :range="marriage">
<view class="uni-input">{{marriage[marriageIndex]}}</view>
</picker>
<image src="/static/imgs/basic_down.png"></image>
</view>
</view>
<view class="base-block" v-if="marriageIndex == 1">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>配偶 <image v-if="baseData.check_params.mate" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.mate.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<input class="base-block-input" :value="mate" maxlength="4" type="text" placeholder="请输入配偶姓名" placeholder-class="placeholderClass" @input="blurInput($event, 'mate')"/>
</view>
</view>
<view class="base-block" :class="{baseAline : marriageIndex == 1}">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>学历 <image v-if="baseData.check_params.education" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.education.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<picker class="idcardAdd-picker" @change="educationChange($event)" :range="education">
<view class="uni-input">{{education[educationIndex]}}</view>
</picker>
<image src="/static/imgs/basic_down.png"></image>
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>毕业学院 <image v-if="baseData.check_params.school" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.school.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<input class="base-block-input" type="text" :value="school" placeholder="请输入毕业学院" placeholder-class="placeholderClass" @input="blurInput($event, 'school')"/>
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>联系电话 <image v-if="baseData.check_params.mobile" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.mobile.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-write">
<input class="base-block-input" maxlength="11" :value="mobile" type="tel" placeholder="请输入联系电话" placeholder-class="placeholderClass" @input="blurInput($event, 'mobile')"/>
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>联系地址
</view>
<view class="base-block-write from-city-picker">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
v-model="baseData.district_id"
@change="onCityPicker"
></uni-data-picker>
</view>
</view>
<!-- <view class="base-block baseAline">
<view class="base-block-name" v-if="baseData.check_params">
<text>*</text>联系地址 <image v-if="baseData.check_params.contact_address" class="base-notesIcon" @click="seeTips('驳回原因', baseData.check_params.contact_address.description)" src="/static/icon/notesIcon.png" mode="aspectFill"></image>
</view>
<view class="base-block-site">
<view class="base-site-white">
<picker @change="areasChange" :value="area.areaIndex" :range="area.areasArr" :range-key="'name'">
<view class="nowrap picker" v-if="area.areasArr[area.areaIndex]">
{{ area.areasArr[area.areaIndex].name }}
</view>
<image src="/static/imgs/basic_down.png"></image>
</picker>
</view>
<view class="base-site-white">
<picker @change="cityDrop" :value="city.cityIndex" :range="city.cityArr" :range-key="'name'" class="conneColor">
<view class="nowrap picker" v-if="city.cityArr[city.cityIndex]">
{{ city.cityArr[city.cityIndex].name }}
</view>
<image src="/static/imgs/basic_down.png"></image>
</picker>
</view>
<view class="base-site-white">
<picker @change="regiDrop" :value="regi.regiIndex" :range="regi.regiArr" :range-key="'name'" class="conneColor">
<view class="nowrap picker" v-if="regi.regiArr[regi.regiIndex]">
{{ regi.regiArr[regi.regiIndex].name }}
</view>
<image src="/static/imgs/basic_down.png"></image>
</picker>
</view>
</view>
</view> -->
<view class="base-block baseAline">
<view class="base-block-textarea">
<textarea placeholder-style="color:#999999; font-size: 30rpx" maxlength="500" :value="address" @input="blurInput($event, 'address')" placeholder="请填写详细地址..."/>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="introduce-btn">
<button class="btn" size="mini" :disabled="disabled" @click="infoSubmit">提交审核</button>
</view>
<!-- 驳回提示 -->
<mouldTips :see-data="seeData" @tipsClose="($event) => {seeData.seeShow = $event}"></mouldTips>
</view>
</template>
<script>
import uniDataPicker from '@/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js';
import mouldTips from '@/components/mould-tips.vue'
import { BaseFirst, userBase, basePut, create, createAll } from '@/apis/interfaces/user'
export default {
components: {
mouldTips
},
data() {
return {
disabled: false, // 按钮状态
baseData: '', // 基础信息
mobile : '', // 联系方式
mate : '', // 配偶名称
school : '', // 毕业学院
address : '', // 联系地址
// 查看提示组件
seeData : {
seeShow : false,
seeTitle: '',
seeText : '',
},
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
cityPicker : [],
// 省份选择
area: {
areasArr : [],
areaId : '',
areaIndex : 0,
areaName : ''
},
// 市级选择
city: {
cityArr : [],
cityId : '',
cityIndex : 0,
cityName : ''
},
// 区域选择
regi: {
regiArr : [],
regiId : '',
regiIndex : 0,
regiName : ''
},
}
},
onLoad() {
// 先获取是否添加过信息
// this.baseFirst();
// 获取基础信息
this.baseInfo();
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
createAll().then(res => {
this.cityPicker = res;
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
methods: {
// 首次信息
baseFirst() {
BaseFirst(this.$Route.query.id).then(res => {
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 基础信息
baseInfo() {
userBase(this.$Route.query.id).then(res => {
// let areasValue = res.province.findIndex(val=> val.id == res.base.province_id),
// cityValue = res.city.findIndex(val=> val.id == res.base.city_id),
// regiValue = res.district.findIndex(val=> val.id == res.base.district_id)
// 当编辑资料后
// this.area.areaIndex = areasValue > 0 ? areasValue : 0
// this.city.cityIndex = cityValue > 0 ? cityValue : 0
// this.regi.regiIndex = regiValue > 0 ? regiValue : 0
this.baseData = res.base
this.education = res.base.educations
this.marriage = res.base.marriages
this.mobile = res.base.mobile || '' // 联系方式
this.mate = res.base.mate || '' // 配偶名称
this.school = res.base.school || '' // 毕业学院
this.address = res.base.tmp_address || '' // 联系地址
this.marriageIndex = res.base.marriage // 婚姻选择index
this.educationIndex = res.base.education // 婚姻选择index
// 获取省市区列表
// this.createInfo();
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 婚姻选择
marriageChange(e) {
this.marriageIndex = e.detail.value
},
// 学历选择
educationChange(e) {
this.educationIndex = e.detail.value
},
// 输入框
blurInput(e, name) {
let value = e.detail.value
switch(name)
{
case 'mobile':{
this.mobile = value
break;
}
case 'mate':{
this.mate = value
break;
}
case 'school':{
this.school = value
break;
}
case 'address':{
this.address = value
break;
}
}
},
// 选择城市
onCityPicker(e){
let { value } = e.detail
this.baseData.district_id = value[0].value
this.baseData.city_id = value[1].value
this.baseData.province_id = value[2].value
},
// 修改基础信息 - 提交
infoSubmit() {
let data = {
mobile : this.mobile, //联系方式
mate : this.mate, //配偶姓名
school : this.school, //毕业学院
tmp_address : this.address,
province_id : this.baseData.district_id,
city_id : this.baseData.city_id,
district_id : this.baseData.province_id,
education : this.educationIndex, //学历
marriage : this.marriageIndex //婚姻状态
}
basePut(this.baseData.business_order_user_id,data).then(res=>{
this.disabled = true
uni.showToast({
title: res,
icon: "none"
})
setTimeout(() => {
uni.navigateBack(1)
uni.hideLoading()
}, 1500)
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 省市区列表
createInfo() {
create().then(res => {
let areas = res,
areaIndex = this.area.areaIndex
this.area.areaId = areas[areaIndex].id
this.area.areaName= areas[areaIndex].name
this.area.areasArr= areas
this.citylist(areas[areaIndex].id)
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 所在省份-下拉
areasChange(e) {
let area = this.area.areasArr,
index = e.detail.value,
atcode = area[index].id,
atname = area[index].name
if (index != this.area.areaIndex) {
this.area.areaIndex = index
this.area.areaId = atcode
this.area.areaName = atname
// 获取市级列表
this.citylist(atcode)
}
},
// 市级列表
citylist(cityId) {
create({
parent_id: cityId
}).then(res=>{
let cityArr = res
let cityIndex = ''
let index = res.find((branchValve) => {
return branchValve.id == this.baseData.city_id;
});
if (index) {
cityIndex = this.city.cityIndex
} else {
cityIndex = 0
}
this.city.cityId = cityArr[cityIndex].id
this.city.cityName = cityArr[cityIndex].name
this.city.cityArr = cityArr
this.city.cityIndex = cityIndex
this.regilist(cityArr[cityIndex].id)
})
},
// 市级下拉筛选
cityDrop(e) {
let city = this.city.cityArr,
index = e.detail.value,
citycode = city[index].id,
cityname = city[index].name
if (index != this.area.areaIndex) {
this.city.cityIndex = index
this.city.cityId = citycode
this.city.cityName = cityname
// 获取市级列表
this.regilist(citycode)
}
},
// 区列表
regilist(areaId) {
create({
parent_id: areaId
}).then(res=>{
let regiIndex = ''
let index = res.find((branchValve) => {
return branchValve.id == this.baseData.district_id;
});
if (index) {
regiIndex = this.regi.regiIndex
} else {
regiIndex = 0
}
this.regi.regiArr = res
this.regi.regiId = res[regiIndex].id
this.regi.regiName = res[regiIndex].name
this.regi.regiIndex = regiIndex
})
},
// 区下拉筛选
regiDrop(e) {
let newIndex = e.detail.value
this.regi.regiIndex = newIndex
this.regi.regiId = this.regi.regiArr[newIndex].id
this.regi.regiName = this.regi.regiArr[newIndex].name
},
// 提示组件 -- 赋值
seeTips(title, text) {
this.seeData.seeShow = true
this.seeData.seeTitle = title
this.seeData.seeText = text
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
border-bottom: transparent 140rpx solid;
position: relative;
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: relative;
z-index: 1;
padding: $padding + 20 $padding;
box-sizing: border-box;
.white {
padding: $padding $padding 0;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 40rpx -10rpx 0;
overflow: hidden;
.base-block {
width: calc(50% - 20rpx);
margin: 0 10rpx $margin + 10;
float: left;
.base-block-name {
margin-bottom: $margin - 10;
color: #111111;
display: flex;
text {
color: $mian-color;
padding-right: 10rpx;
}
.base-notesIcon {
width: 32rpx;
height: 32rpx;
margin: 6rpx 0 0 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #111111;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: 0 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
}
.baseAline {
width: calc(100% - 20rpx);
}
}
}
}
}
.introduce-btn {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background-color: #f5f5f5;
text-align: center;
padding: $padding;
box-sizing: border-box;
z-index: 2;
.btn {
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-sm;
width: 100%;
line-height: 90rpx;
font-size: $title-size;
&[disabled] {
background-color: #eba5a5;
}
}
}

View File

@@ -0,0 +1,346 @@
<template>
<view class="content">
<view class="list" v-if="yearArr.length > 0">
<view class="listItem" v-for="(item, index) in yearArr" :key="index">
<view class="listItem-no">
订单号{{item.order.order_no}}
</view>
<view class="listItem-cont">
<view class="listItem-cont-label">
<view class="listItem-cont-name">
订单状态
</view>
<view class="listItem-cont-text listItem-cont-status">
{{item.status.text}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
案件类型
</view>
<view class="listItem-cont-text">
{{item.order.order_business}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
补差价金额
</view>
<view class="listItem-cont-text listItem-cont-price">
{{item.price}}
</view>
</view>
</view>
<view class="listItem-labor">
<view class="listItem-labor-time">
{{item.created_at}}
</view>
<view class="listItem-labor-btn">
<view v-if="item.can.pay_status == 1" @click="cancelSheet(item)" class="listItem-labor-go active">
取消支付
</view>
<view v-if="item.can.pay_status == 1" @click="expressSheet(item)" class="listItem-labor-go">
去支付
</view>
<view v-else-if="item.can.pay_status == 2" class="listItem-labor-go active">
审核中
</view>
<view v-else-if="item.can.pay_status == 3" @click="$Router.push({name: 'VoucherOpen', params: {payId: item.offline_pays.offline_pay_id, orderId: item.expand_order_id, orderType: item.order_type, type: 'edit'}})" class="listItem-labor-go">
审核驳回
</view>
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无订单</view>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="voucherState = false">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { diffPrices, cancelPrices } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
yearStatus : 0, // 0 未付款 1 2
yearArr : [], // 委托单列表
page : {}, // 分页信息
voucherState : false, // 上传凭证弹出
lodingStats : false, // 加载状态
orderType : '', // 委托单列表-类型
orderId : '', // 委托单列表-id
}
},
onShow() {
// 获取-委托单-列表
this.yearServe();
},
methods: {
// 委托单-列表
yearServe(page){
diffPrices({
order_type : this.$Route.query.orderType,
order_id : this.$Route.query.orderId,
page : page || ''
}).then(res => {
let esArr = res.data
let list = this.yearArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.yearArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择支付方式
expressSheet(item) {
this.orderId = item.synthesis_diff_price_id
this.orderType = item.order_type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(item.can.online) {
this.$Router.push({name: 'FeePay', params: {id: item.synthesis_diff_price_id, orderType: item.order_type, price: item.price, style: 'diff', payForm: this.$Route.query.payForm}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.push({name: 'VoucherOpen', params: {orderId: item.synthesis_diff_price_id, orderType: item.order_type}})
}
},
fail: sheetFail => {}
})
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
// 取消订单
cancelSheet(item) {
uni.showModal({
title : '温馨提示',
content : '是否取消订单?',
cancelText : "取消", // 取消按钮的文字
confirmText : "确认", // 确认按钮的文字
showCancel : true, // 是否显示取消按钮,默认为 true
confirmColor: '#D4155A',
cancelColor : '#999999',
success: res => {
if(res.confirm) {
cancelPrices(item.synthesis_diff_price_id).then(() => {
uni.showToast({
title: '取消成功',
icon : 'none'
})
// 获取-委托单-列表
this.yearServe();
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
})
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取-委托单-列表
this.yearServe();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取-委托单-列表
this.yearServe(pageNumber);
}
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
overflow-y: scroll;
}
.list {
padding: 30rpx;
box-sizing: border-box;
.listItem {
background-color: #ffffff;
border-radius: 10rpx;
margin-bottom: 30rpx;
.listItem-no {
line-height: 90rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 2rpx solid #eeeeee;
}
.listItem-cont {
padding: 15rpx 30rpx;
box-sizing: border-box;
.listItem-cont-label {
display: flex;
line-height: 54rpx;
color: #666666;
font-size: 28rpx;
padding: 10rpx 0;
.listItem-cont-name {
flex: 1;
}
.listItem-cont-text {
color: #000000;
&.listItem-cont-status {
color: #da2b56;
}
&.listItem-cont-price {
font-weight: 600;
}
}
}
}
.listItem-labor {
border-top: 2rpx solid #eeeeee;
line-height: 50rpx;
padding: 25rpx 30rpx;
box-sizing: border-box;
font-size: 26rpx;
display: flex;
.listItem-labor-time {
flex: 1;
color: #999999;
}
.listItem-labor-go {
display: inline-block;
border: 2rpx solid #da2b56;
color: #da2b56;
border-radius: 80rpx;
padding: 0 20rpx;
margin-left: 20rpx;
&.active {
color: #272727;
border-color: #999999;
}
}
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,465 @@
<template>
<view class="content">
<view class="orderTab">
<view class="orderTab-item" :class="{active : entrustId == item.entrust_id}" @click="tabClick(item.entrust_id, item.title)" v-for="(item, index) in entrustArr" :key="index">
<text>{{item.title}}</text>
</view>
</view>
<view class="module">
<view class="entrustTop">
<image class="entrustTop-img" :src="entrustData.cover" mode="widthFix"></image>
<view class="entrustTop-btn" @click="seekClick">立即咨询 ></view>
</view>
<view class="entrustCont">
<block v-if="title == '民事诉讼'">
<view class="entrustCivil">
<view class="entrustCivil-top">
<view class="entrustCivil-top-name">民事诉讼阶段</view>
<view class="entrustCivil-top-text">一审二审再审劳动争议案件存在劳动仲裁阶段)</view>
</view>
<view class="entrustCivil-list" v-for="(item, index) in sonArr" :key="index">
<view class="entrustCivil-list-title">
<view class="entrustCivil-list-number">0{{index + 1}}</view>
<view class="entrustCivil-list-name">{{item.text}}</view>
<view class="entrustCivil-list-trim"></view>
</view>
<view class="entrustCivil-list-item">
<view class="entrustCivil-list-label" v-for="(items, sonIndex) in item.children" :key="sonIndex">{{items.text}}</view>
</view>
</view>
</view>
</block>
<block v-else-if="title == '刑事辩护'">
<view class="entrustBrief">
<view class="entrustBrief-title">
<image class="entrustBrief-title-img" src="https://cdn.douhuofalv.com/images/2023/04/18/4d57907913a7d9ca5f3c7417421c894d.png" mode="aspectFill"></image>
<view class="entrustBrief-title-name">{{entrustData.title}}</view>
</view>
<view class="entrustBrief-list">
<view class="entrustBrief-list-item">
<text>1</text><view class="entrustBrief-list-text">代理受害人代写报案材料提供法律咨询代理刑事附带民事诉讼代理提出法律意见代理参加庭审活动一审二审</view>
</view>
<view class="entrustBrief-list-item">
<text>2</text><view class="entrustBrief-list-text">代理犯罪嫌疑人/被告人侦查阶段审查起诉阶段一审阶段二审阶段再审阶段</view>
</view> </view>
<image class="entrustBrief-logo" src="https://cdn.douhuofalv.com/images/2023/04/18/5037800b0abd01d828890a2b6386c38a.png" mode="widthFix"></image>
</view>
<image class="entrustBrief-text" src="https://cdn.douhuofalv.com/images/2023/04/18/e0dbc0ce562b479b9ff3ad3820971612.png" mode="widthFix"></image>
</block>
<block v-else-if="title == '行政诉讼'">
<view class="entrustPolitics">
<view class="entrustPolitics-item">
<view class="entrustPolitics-back">
<view class="entrustPolitics-item-tips">stage</view>
<view class="entrustPolitics-item-name">诉讼阶段</view>
<view class="entrustPolitics-item-label">
<view class="entrustPolitics-item-list">
<text>1</text>一审
</view>
<view class="entrustPolitics-item-list">
<text>2</text>二审
</view>
<view class="entrustPolitics-item-list">
<text>3</text>再审
</view>
</view>
<image class="entrustPolitics-item-logo" src="https://cdn.douhuofalv.com/images/2023/04/18/f7804d7c91c2389dd62ce10c19e26bec.png" mode="widthFix"></image>
</view>
</view>
<view class="entrustPolitics-item">
<view class="entrustPolitics-back">
<view class="entrustPolitics-item-tips">type</view>
<view class="entrustPolitics-item-name">常见类型</view>
<view class="entrustPolitics-item-label">
<view class="entrustPolitics-item-list">
<text>1</text>强制拆迁
</view>
<view class="entrustPolitics-item-list">
<text>2</text>行政不作为
</view>
<view class="entrustPolitics-item-list">
<text>3</text>征收补偿
</view>
</view>
<image class="entrustPolitics-item-logo" src="https://cdn.douhuofalv.com/images/2023/04/18/f7804d7c91c2389dd62ce10c19e26bec.png" mode="widthFix"></image>
</view>
</view>
</view>
</block>
</view>
<image class="entrustBottom" src="https://cdn.douhuofalv.com/images/2023/04/18/f08e45875d7dba6c3116690978a8a999.png" mode="widthFix"></image>
</view>
</view>
</template>
<script>
import { entrustList, entrustInfo, entrustSon } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
title : '',
entrustId : '',
sonArr : [], // 民事子分类
entrustData: '', // 案件委托详情
entrustArr : [], // 案件委托列表
}
},
created() {
// 获取-案件委托-列表
this.yearServe();
},
methods: {
// 案件委托-列表
yearServe(){
entrustList().then(res => {
this.entrustArr = res
if(this.entrustId == '') {
this.entrustId = res[0].entrust_id
this.title = res[0].title
}
// 获取-案件委托-详情
this.yearInfo();
if(this.title == '民事诉讼') {
// 获取-案件委托子分类
this.yearSon();
}
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 案件委托-详情
yearInfo(){
entrustInfo(this.entrustId).then(res => {
this.entrustData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 获取-案件委托子分类
yearSon(){
entrustSon({parent_id: this.entrustId}).then(res => {
this.sonArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 顶级
tabClick(id, title) {
this.entrustId = id
this.title = title
if(title == '民事诉讼') {
// 获取-案件委托子分类
this.yearSon();
}
// 获取-案件委托-详情
this.yearInfo();
},
// 立即咨询
seekClick() {
if(this.title == '民事诉讼') {
this.$Router.push({name: 'EntrustCivil', params: {entrustId: this.entrustId}})
return
}
this.$Router.push({name: 'EntrustWrite', params: {entrustId: this.entrustId}})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #171c54;
}
.orderTab {
position: fixed;
top: 44px;
left: 0;
width: 100%;
z-index: 9;
height: 100rpx;
background-color: white;
display: flex;
.orderTab-item {
flex: 3;
text-align: center;
margin-top: 20rpx;
text {
display: inline-block;
color: #000000;
background-image: linear-gradient(to right, #ffffff, #ffffff);
height: 64rpx;
line-height: 64rpx;
border-radius: 80rpx;
padding: 0 30rpx;
}
&.active text {
color: #ffffff;
background-image: linear-gradient(to right, #f8a53d, #dd3554);
}
}
}
.module {
padding-top: 100rpx;
}
.entrustCont {
background-color: #171c54;
padding: 30rpx 30rpx 0;
box-sizing: border-box;
width: 100%;
.entrustCivil {
.entrustCivil-top {
background-color: #111f6e;
border-radius: 15rpx;
padding: 30rpx 10rpx;
box-sizing: border-box;
color: #ffebbf;
text-align: center;
.entrustCivil-top-name {
margin-bottom: 10rpx;
font-size: 34rpx;
}
.entrustCivil-top-text {
font-size: 26rpx;
}
}
.entrustCivil-list {
margin-top: 30rpx;
color: #ffffff;
.entrustCivil-list-title {
font-size: 36rpx;
margin-bottom: 40rpx;
.entrustCivil-list-trim {
position: relative;
left: 290rpx;
bottom: 20rpx;
background-color: #2f3aae;
width: 35%;
height: 4rpx;
padding-left: 40rpx;
box-sizing: border-box;
&::after {
position: absolute;
content: '';
left: -50rpx;
top: -10rpx;
width: 20rpx;
height: 20rpx;
transform:rotate(45deg);
background-color: #2f3aae;
}
}
.entrustCivil-list-number {
font-weight: 600;
font-size: 68rpx;
background-image: -webkit-linear-gradient(top,#ffffff 40%, transparent 70%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
text-transform: uppercase;
}
.entrustCivil-list-name {
margin-top: -20rpx;
width: 280rpx;
}
}
.entrustCivil-list-item {
overflow: hidden;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
margin: 0 -20rpx;
.entrustCivil-list-label {
text-align: center;
flex: 1;
min-width: calc((100% - 64rpx) / 2);
margin: 0 15rpx 30rpx;
background-image: linear-gradient(to right, #3653cf, #1922a0);
border-radius: 10rpx;
line-height: 84rpx;
font-size: 26rpx;
}
}
}
}
.entrustPolitics {
margin-bottom: 40rpx;
display: flex;
.entrustPolitics-item {
flex: 2;
margin: 0 15rpx;
background-color: #0e1e58;
border-radius: 40rpx 15rpx 15rpx 15rpx;
padding: 20rpx;
overflow: hidden;
box-sizing: border-box;
.entrustPolitics-back {
padding: 30rpx 30rpx 80rpx;
box-sizing: border-box;
overflow: hidden;
border-radius: 40rpx 15rpx 15rpx 15rpx;
background-color: #002087;
position: relative;
.entrustPolitics-item-logo {
position: absolute;
bottom: 0;
right: 0;
width: 120rpx;
}
.entrustPolitics-item-name {
background-image: -webkit-linear-gradient(top,#fdf7ce, #e29c68);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
font-weight: 600;
font-size: 36rpx;
margin-bottom: 30rpx;
}
.entrustPolitics-item-tips {
font-size: 38rpx;
font-weight: 600;
background-image: -webkit-linear-gradient(top,#8090c3, transparent 85%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
text-transform: uppercase;
}
.entrustPolitics-item-label {
color: #ffffff;
font-size: 28rpx;
line-height: 80rpx;
.entrustPolitics-item-list {
display: flex;
text {
font-size: 22rpx;
display: block;
width: 28rpx;
height: 28rpx;
line-height: 28rpx;
border: 2rpx solid #ffffff;
text-align: center;
border-radius: 50%;
margin-right: 20rpx;
margin-top: 26rpx;
}
}
}
}
}
}
.entrustBrief {
background-color: #09216e;
border-radius: 20rpx;
padding: 0 30rpx 30rpx;
box-sizing: border-box;
color: #ffffff;
position: relative;
.entrustBrief-title {
position: relative;
width: 100%;
text-align: center;
.entrustBrief-title-img,
.entrustBrief-title-name {
position: absolute;
top: -16rpx;
height: 80rpx;
line-height: 80rpx;
}
.entrustBrief-title-img {
width: 400rpx;
left: calc(50% - 200rpx);
display: block;
}
.entrustBrief-title-name {
width: 100%;
z-index: 9;
left: 0;
font-weight: 600;
}
}
.entrustBrief-list {
padding: 90rpx 10rpx 20rpx;
line-height: 48rpx;
font-size: 28rpx;
.entrustBrief-list-item {
margin-bottom: 30rpx;
display: flex;
text {
font-size: 22rpx;
display: block;
width: 28rpx;
height: 28rpx;
line-height: 28rpx;
border: 2rpx solid #ffffff;
text-align: center;
border-radius: 50%;
margin-right: 20rpx;
margin-top: 10rpx;
}
.entrustBrief-list-text {
width: calc(100% - 48rpx);
text-align: justify;
}
}
}
.entrustBrief-logo {
position: absolute;
bottom: -30rpx;
right: 30rpx;
width: 240rpx;
z-index: 5;
}
}
.entrustBrief-text {
width: 100%;
margin-top: 60rpx;
}
}
.entrustTop {
position: relative;
width: 100%;
padding-top: 60%;
.entrustTop-img,.entrustTop-btn {
position: absolute;
left: 0;
}
.entrustTop-img {
width: 100%;
height: 100%;
top: 0;
}
.entrustTop-btn {
z-index: 4;
bottom: 15%;
left: 45rpx;
background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2);
color: #12053d;
display: inline-block;
line-height: 74rpx;
padding: 0 40rpx;
font-size: 34rpx;
border-radius: 10rpx;
}
}
.entrustBottom {
width: 100%;
}
</style>

View File

@@ -0,0 +1,640 @@
<template>
<view class="content">
<view class="top">
<view class="top-cont">
<view class="top-cont-name">法律咨询服务包</view>
<view class="top-cont-text">请仔细填写以下信息</view>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<view class="idcardBorder">
<!-- 表单部分 -->
<view class="idcardAdd-block">
<!-- 民事诉讼 -->
<view class="idcardAdd-types">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text>*</text>民事诉讼
</view>
</view>
<view class="idcardAdd-block-write">
<picker class="idcardAdd-picker" @change="bindPickerChange" :value="indexValue" :range="sonArr" :range-key="'text'">
<view class="nowrap">{{ sonArr[indexValue].text }}</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
</view>
<!-- 纠纷类型 -->
<view class="idcardAdd-types">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text>*</text>纠纷类型
</view>
</view>
<view class="idcardAdd-block-write">
<picker class="idcardAdd-picker" @change="childrenChange" :value="childrenValue" :range="childrenArr" :range-key="'text'">
<view class="nowrap">{{ childrenArr[childrenValue].text }}</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
</view>
<!-- {{submitObj}} -->
<!-- <input type="text" v-model="submitObj" placeholder="请输入"> -->
<block v-for="(item, keyIndex) in paramsArr" :key="keyIndex">
<block v-if="item.pre_key == null || isShow(item)">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text v-if="item.is_required == 1">*</text>{{item.title}}
</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'">
<mouldInput class="idcardAdd-input" :input-type="item.type" :input-title="item.title" :input-key="item.key" @onValue="($event) => { item.value = $event }"></mouldInput>
</view>
<!-- 下拉框 -->
<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">
<view class="nowrap">
{{item.options[item.value]}}
</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
<!-- 多选 -->
<view class="idcardAdd-aline" v-if="item.type === 'checkbox'">
<checkbox-group @change="item.value = $event.detail.value">
<label class="checkbox-item" v-for="(checkboxItem, checkboxIndex) in item.options">
<checkbox class="checkbox-input" :value="checkboxIndex" color="#446EFE"></checkbox>{{checkboxItem}}
</label>
</checkbox-group>
</view>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="item.type === 'radio'">
<radio-group @change="item.value = $event.detail.value">
<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>
</label>
</radio-group>
</view>
<!-- 描述 -->
<view class="idcardAdd-depict-textarea" v-if="item.type === 'textarea'">
<textarea maxlength="500" class="textarea" :placeholder="'请输入' + item.title" v-model="item.value"></textarea>
<text>500字以内</text>
</view>
<!-- 被告所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'defendant_address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="defendantPicker"
></uni-data-picker>
</view>
</block>
<!-- 目前所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="addressPicker"
></uni-data-picker>
</view>
</block>
</block>
</block>
</view>
</view>
<view class="idcardBtn">
<button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="cancelPay">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { entrustSon, entrustInfo, entrustPost } from '@/apis/interfaces/synthesis'
import { createCity } from '@/apis/interfaces/user'
import mouldInput from '@/components/mould-input.vue'
export default {
components: {
mouldInput
},
data() {
return {
submitObj : {}, // 提交数据
sonArr : [], // 民事二级类型
childrenArr : [], // 纠纷类型
paramsArr : [], // 信息
cityPicker : [], // 地址
indexValue : 0, // 民事类型下标
childrenValue : 0, // 纠纷类型下标
entrustId : '', // 表单详情
// 被告所在地
defendant : {},
// 目前所在地
address : {},
orderId : '', // 订单 ID
orderType : '', // 订单类型
voucherState : false, // 上传凭证弹出
disabled : false
}
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
// 获取-案件委托子分类
this.yearSon();
// 省市区
createCity().then(res => {
this.cityPicker = res;
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
computed: {
isShow(){
return (item) => {
if(item.pre_key != null){
let index = this.paramsArr.findIndex(val => val.key == item.pre_key)
return item.pre_value == this.paramsArr[index].value
}
return false
}
}
},
methods: {
// 民事类型列表
yearSon(){
entrustSon({parent_id: this.$Route.query.entrustId}).then(res => {
let froms = res
froms.map(val => {
val.indexValue = 0
})
this.sonArr = froms
let newChildren = froms[this.indexValue].children
newChildren.map(val => {
val.childrenValue = 0
})
this.childrenArr = newChildren
this.entrustId = newChildren[this.childrenValue].value
// // 获取综法咨询-详情
this.getBusiness();
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择民事类型
bindPickerChange(e){
this.indexValue = e.detail.value
this.childrenValue = 0
// 获取-案件委托子分类
this.yearSon();
},
// 选择纠纷类型
childrenChange(e){
this.childrenValue = e.detail.value
this.entrustId = this.childrenArr[e.detail.value].value
},
// 综法咨询-详情
getBusiness(){
entrustInfo(this.entrustId).then(res => {
let froms = res.params
froms.map(val => {
if(val.type === 'checkbox'){
val.value = []
}else if(val.type === 'select'){
val.value = 0
}else{
val.value = ""
}
})
this.paramsArr = froms
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 被告所在地-选择城市
defendantPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.defendant = dataArr
},
// 目前所在地-选择城市
addressPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.address = dataArr
},
// 提交订单数据
onSubmit(){
uni.showLoading({
title: '提交中...',
mask : true
})
let subData = {};
let dataArr = []
for(let val of this.paramsArr){
if(val.type === 'pro_city'){
subData[val.key] = this.address
}else{
subData[val.key] = val.value
}
}
for(let key in subData){
dataArr.push({
key,
value: subData[key]
})
}
entrustPost(this.entrustId, {...dataArr}).then(res => {
this.disabled = true
this.expressSheet(res.entrust_order_id, res.order_type, res.can, res.price)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.replace({name: 'FeePay', params: {orderId: id, orderType: type, price: price, payForm: 'entrust'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.replace({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
},
fail: sheetFail => {
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'EntrustOrder', params: {yearStatus: 0}})
},3000)
}
})
},
// 取消支付
cancelPay() {
this.voucherState = false
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'EntrustOrder', params: {yearStatus: 0}})
},3000)
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.replace({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #111e4b;
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 180rpx;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 40%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 40rpx 30rpx;
box-sizing: border-box;
.top-cont-name {
font-weight: 600;
font-size: 54rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-text {
font-size: 34rpx;
color: #ffffff;
}
}
}
.idcardBorder {
padding: 30rpx;
box-sizing: border-box;
}
.idcardAdd-block {
padding: $padding + 20 $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius;
position: relative;
.idcardAdd-types {
margin-bottom: 40rpx;
&:last-child {
margin-bottom: 0;
}
}
}
.idcardAdd-depict-textarea {
background-color: #f7faff;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
width: 100%;
margin-bottom: 40rpx;
.textarea {
width: 100%;
padding: $padding 0;
box-sizing: border-box;
}
text {
width: 100%;
text-align: right;
font-size: 28rpx;
color: #999999;
display: block;
}
}
.idcardAdd-block-write {
background-color: #f7faff;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
border: none;
background-color: transparent;
font-size: 30rpx;
}
}
.idcardAdd-picker {
position: relative;
width: 100%;
}
.idcardAdd-picke-image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
.idcardAdd-block-name {
margin-bottom: $margin;
display: flex;
.idcardAdd-block-see {
color: $text-color;
margin-right: $margin;
font-size: 30rpx;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
}
// checkbox
.checkbox-item{
display: inline-block;
margin-right: 20rpx;
color: #999999;
line-height: 70rpx;
&:last-child {
margin-right: 0;
}
.checkbox-input{
transform:scale(0.6);
}
}
.idcardAdd-aline {
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
.idcardAdd-aline-write {
margin-right: 30rpx;
color: #999999;
}
}
// 按钮
.idcardBtn {
background-color: #111e4b;
width: 100%;
padding: 20rpx 60rpx 140rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
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;
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,591 @@
<template>
<view class="content">
<view class="orderFixed">
<scroll-view class="orderTab" scroll-x="true">
<view class="orderTab-item" :class="{active : yearStatus == 0}" @click="stateClick('0')">待支付</view>
<view class="orderTab-item" :class="{active : yearStatus == 1}" @click="stateClick('1')">待审核</view>
<view class="orderTab-item" :class="{active : yearStatus == 2}" @click="stateClick('2')">待签约</view>
<view class="orderTab-item" :class="{active : yearStatus == 3}" @click="stateClick('3')">已签约</view>
<view class="orderTab-item" :class="{active : yearStatus == 4}" @click="stateClick('4')">已完成</view>
<view class="orderTab-item" :class="{active : yearStatus == 5}" @click="stateClick('5')">已驳回</view>
</scroll-view>
<view class="orderState">
<view class="orderState-item" :class="{active : refundStatus == 0}" @click="refundClick('0')">
<text>未退款</text>
</view>
<view class="orderState-item" :class="{active : refundStatus == 1}" @click="refundClick('1')">
<text>已退款</text>
</view>
</view>
</view>
<view class="list" v-if="yearArr.length > 0">
<view class="listItem" v-for="(item, index) in yearArr" :key="index">
<view class="listItem-no">
订单号{{item.order_no}}
</view>
<view class="listItem-cont">
<view class="listItem-cont-label">
<view class="listItem-cont-name">
订单状态
</view>
<view class="listItem-cont-text listItem-cont-status">
{{item.status.text}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
案件类型
</view>
<view class="listItem-cont-text">
{{item.entrust.title}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
订单金额
</view>
<view class="listItem-cont-text listItem-cont-price">
{{item.price}}
</view>
</view>
<view class="listItem-cont-label" v-if="item.need_pay_diff_prices != 0">
<view class="listItem-cont-name">
补差价金额
</view>
<view class="listItem-cont-text listItem-cont-diff" @click="diffClick(item)">
{{item.need_pay_diff_prices}}
<view class="listItem-cont-btn">去支付</view>
</view>
</view>
</view>
<view class="listItem-labor">
<view class="listItem-labor-time">
{{item.created_at}}
</view>
<view class="listItem-labor-btn">
<view v-if="item.can.pay_status == 1" @click="expressSheet(item.entrust_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go">
去支付
</view>
<view v-else-if="item.can.pay_status == 2" class="listItem-labor-go active">
审核中
</view>
<view v-else-if="item.can.pay_status == 3" @click="$Router.push({name: 'VoucherOpen', params: {payId: item.offline_pays.offline_pay_id, orderId: item.entrust_order_id, orderType: item.order_type, type: 'edit'}})" class="listItem-labor-go">
审核驳回
</view>
<view v-if="item.can.sign" @click="returnGo(item.entrust_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go yellow">
去签约
</view>
<view v-if="item.can.diff_price" @click="returnGo(item.entrust_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go">
去缴费
</view>
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无订单</view>
</view>
<!-- 支付弹出 -->
<view class="namePop" :class="{active: payStatus}"></view>
<view class="nameCont" :class="{active: payStatus}">
<view class="nameCont-white">
<view class="nameCont-top">
<view class="nameCont-title">缴费金额</view>
<view class="nameCont-input">
<input type="numeric" v-model="price" placeholder="输入缴费金额" />
</view>
</view>
<view class="nameCont-btn">
<view class="nameCont-btn-go" @click="returnGo">取消</view>
<view class="nameCont-btn-go" @click="issueForm">确定</view>
</view>
</view>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="voucherState = false">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { entrustOrder, entrustPay } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
yearStatus : 0, // 0 未付款 1 2
refundStatus : 0, // 0 退款 0 1
yearArr : [], // 委托单列表
orderType : '', // 委托单列表-类型
orderId : '', // 委托单列表-id
orderCan : '', // 委托单列表-操作
price : '', // 缴费金额
payStatus : false, // 缴费弹出
voucherState : false, // 上传凭证弹出
page : {}, // 分页信息
lodingStats : false, // 加载状态
}
},
created() {
this.yearStatus = this.$Route.query.yearStatus || 0
},
onShow() {
// 获取-委托单-列表
this.yearServe();
},
methods: {
// 委托单-列表
yearServe(page){
entrustOrder({
status : this.yearStatus,
refund_status : this.refundStatus,
page : page || 1
}).then(res => {
let esArr = res.data
let list = this.yearArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.yearArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 状态选择
stateClick(state) {
this.yearStatus = state
// 获取-委托单列表
this.yearServe();
},
// 退款状态选择
refundClick(state) {
this.refundStatus = state
// 获取-委托单列表
this.yearServe();
},
// 手动支付弹出
returnGo(id, type, can) {
this.payStatus = !this.payStatus
this.orderId = id
this.orderType = type
this.orderCan = can
},
// 手动支付提交
issueForm() {
entrustPay({
order_type : this.orderType,
order_id : this.orderId,
price : this.price
}).then(res => {
this.payStatus = false
// 选择支付方式
this.expressSheet(res.synthesis_diff_price_id, res.order_type, res.can)
}).catch(err => {
this.payStatus = false
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.push({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'entrust'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.push({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
this.price = ''
},
fail: sheetFail => {}
})
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
// 后台-补差价
diffClick(e) {
this.$Router.push({name: 'DiffList', params: {orderId: e.entrust_order_id, orderType:e.order_type, payForm: 'entrust'}})
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取-委托单-列表
this.yearServe();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取-委托单-列表
this.yearServe(pageNumber);
}
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
overflow-y: scroll;
height: 100%;
position: absolute;
width: 100%;
}
.orderFixed {
position: fixed;
top: 44px;
left: 0;
width: 100%;
z-index: 9;
.orderTab {
height: 90rpx;
line-height: 90rpx;
background-color: white;
white-space: nowrap;
.orderTab-item {
display: inline-block;
position: relative;
padding: 0 40rpx;
color: #000000;
&::after {
position: absolute;
content: '';
left: calc(50% - 25rpx);
bottom: 0;
width: 50rpx;
height: 8rpx;
background-color: #da2b56;
display: none;
border-radius: 90rpx;
}
&.active {
font-weight: 600;
}
&.active::after {
display: block;
}
}
}
.orderState {
display: flex;
padding: 30rpx;
box-sizing: border-box;
background-color: #f7f9fa;
.orderState-item {
background-color: white;
line-height: 54rpx;
padding: 0 25rpx;
border-radius: 54rpx;
font-size: 28rpx;
margin-right: 30rpx;
&.active {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
.list {
margin-top: 44px;
padding: 130rpx 30rpx 0;
box-sizing: border-box;
.listItem {
background-color: #ffffff;
border-radius: 10rpx;
margin-bottom: 30rpx;
.listItem-no {
line-height: 90rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 2rpx solid #eeeeee;
}
.listItem-cont {
padding: 15rpx 30rpx;
box-sizing: border-box;
.listItem-cont-label {
display: flex;
line-height: 60rpx;
color: #666666;
font-size: 28rpx;
padding: 10rpx 0;
.listItem-cont-name {
flex: 1;
}
.listItem-cont-text {
&.listItem-cont-status {
color: #da2b56;
}
&.listItem-cont-price {
font-weight: 600;
}
&.listItem-cont-diff {
font-weight: 600;
display: flex;
.listItem-cont-btn {
display: inline-block;
font-size: 26rpx;
color: #f49441;
border: 2rpx solid #f49441;
margin-left: 20rpx;
padding: 0 10rpx;
height: 42rpx;
line-height: 42rpx;
border-radius: 5rpx;
margin-top: 8rpx;
font-weight: normal;
}
}
}
}
}
.listItem-labor {
border-top: 2rpx solid #eeeeee;
line-height: 50rpx;
padding: 25rpx 30rpx;
box-sizing: border-box;
font-size: 26rpx;
display: flex;
.listItem-labor-time {
flex: 1;
color: #999999;
}
.listItem-labor-go {
display: inline-block;
border: 2rpx solid #da2b56;
color: #da2b56;
border-radius: 80rpx;
padding: 0 20rpx;
margin-left: 20rpx;
&.active {
border-color: #999999;
color: #666666;
}
&.yellow {
border-color: #ec7647;
color: #ec7647;
}
}
}
}
}
/* 支付弹出 */
.namePop {
position: fixed;
background-color: rgba(0, 0, 0, .5);
left: 0;
top: 0;
height: 100vh;
width: 100vw;
z-index: 100000;
display: none;
&.active {
display: block;
}
}
.nameCont {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100000;
padding: 0 15%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.nameCont-white {
background-color: #ffffff;
border-radius: 15rpx;
overflow: hidden;
.nameCont-top {
padding: 30rpx;
box-sizing: border-box;
.nameCont-title {
font-size: 34rpx;
margin-bottom: 30rpx;
}
.nameCont-input {
background-color: #f3f3f3;
height: 90rpx;
line-height: 90rpx;
border-radius: 10rpx;
padding: 0 25rpx;
box-sizing: border-box;
display: flex;
input {
height: 90rpx;
line-height: 90rpx;
padding-left: 20rpx;
box-sizing: border-box;
width: 90%;
}
}
}
.nameCont-btn {
line-height: 100rpx;
background-color: #f3f3f3;
display: flex;
margin-top: 30rpx;
border-top: 2rpx solid #dfdfdf;
.nameCont-btn-go {
text-align: center;
flex: 2;
&:last-child {
position: relative;
color: #da2b56;
}
&:last-child::after {
position: absolute;
content: '';
left: 0;
top: 0;
width: 2rpx;
height: 100%;
background-color: #dfdfdf;
}
}
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,346 @@
<template>
<view class="content">
<view class="list" v-if="yearArr.length > 0">
<view class="listItem" v-for="(item, index) in yearArr" :key="index">
<view class="listItem-no">
订单号{{item.order.order_no}}
</view>
<view class="listItem-cont">
<view class="listItem-cont-label">
<view class="listItem-cont-name">
订单状态
</view>
<view class="listItem-cont-text listItem-cont-status">
{{item.status.text}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
案件类型
</view>
<view class="listItem-cont-text">
{{item.order.order_business}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
补差价金额
</view>
<view class="listItem-cont-text listItem-cont-price">
{{item.price}}
</view>
</view>
</view>
<view class="listItem-labor">
<view class="listItem-labor-time">
{{item.created_at}}
</view>
<view class="listItem-labor-btn">
<view v-if="item.can.pay_status == 1" @click="cancelSheet(item)" class="listItem-labor-go active">
取消支付
</view>
<view v-if="item.can.pay_status == 1" @click="expressSheet(item)" class="listItem-labor-go">
去支付
</view>
<view v-else-if="item.can.pay_status == 2" class="listItem-labor-go active">
审核中
</view>
<view v-else-if="item.can.pay_status == 3" @click="$Router.push({name: 'VoucherOpen', params: {payId: item.offline_pays.offline_pay_id, orderId: item.expand_order_id, orderType: item.order_type, type: 'edit'}})" class="listItem-labor-go">
审核驳回
</view>
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无订单</view>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="voucherState = false">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { diffPrices, cancelPrices } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
yearStatus : 0, // 0 未付款 1 2
yearArr : [], // 委托单列表
page : {}, // 分页信息
voucherState : false, // 上传凭证弹出
lodingStats : false, // 加载状态
orderType : '', // 委托单列表-类型
orderId : '', // 委托单列表-id
}
},
onShow() {
// 获取-委托单-列表
this.yearServe();
},
methods: {
// 委托单-列表
yearServe(page){
diffPrices({
order_type : this.$Route.query.orderType,
order_id : this.$Route.query.orderId,
page : page || ''
}).then(res => {
let esArr = res.data
let list = this.yearArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.yearArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择支付方式
expressSheet(item) {
this.orderId = item.synthesis_diff_price_id
this.orderType = item.order_type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(item.can.online) {
this.$Router.push({name: 'FeePay', params: {id: item.synthesis_diff_price_id, orderType: item.order_type, price: item.price, style: 'diff', payForm: 'entrust'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.push({name: 'VoucherOpen', params: {orderId: item.synthesis_diff_price_id, orderType: item.order_type}})
}
},
fail: sheetFail => {}
})
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
// 取消订单
cancelSheet(item) {
uni.showModal({
title : '温馨提示',
content : '是否取消订单?',
cancelText : "取消", // 取消按钮的文字
confirmText : "确认", // 确认按钮的文字
showCancel : true, // 是否显示取消按钮,默认为 true
confirmColor: '#D4155A',
cancelColor : '#999999',
success: res => {
if(res.confirm) {
cancelPrices(item.synthesis_diff_price_id).then(() => {
uni.showToast({
title: '取消成功',
icon : 'none'
})
// 获取-委托单-列表
this.yearServe();
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
})
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取-委托单-列表
this.yearServe();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取-委托单-列表
this.yearServe(pageNumber);
}
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
overflow-y: scroll;
}
.list {
padding: 30rpx;
box-sizing: border-box;
.listItem {
background-color: #ffffff;
border-radius: 10rpx;
margin-bottom: 30rpx;
.listItem-no {
line-height: 90rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 2rpx solid #eeeeee;
}
.listItem-cont {
padding: 15rpx 30rpx;
box-sizing: border-box;
.listItem-cont-label {
display: flex;
line-height: 54rpx;
color: #666666;
font-size: 28rpx;
padding: 10rpx 0;
.listItem-cont-name {
flex: 1;
}
.listItem-cont-text {
color: #000000;
&.listItem-cont-status {
color: #da2b56;
}
&.listItem-cont-price {
font-weight: 600;
}
}
}
}
.listItem-labor {
border-top: 2rpx solid #eeeeee;
line-height: 50rpx;
padding: 25rpx 30rpx;
box-sizing: border-box;
font-size: 26rpx;
display: flex;
.listItem-labor-time {
flex: 1;
color: #999999;
}
.listItem-labor-go {
display: inline-block;
border: 2rpx solid #da2b56;
color: #da2b56;
border-radius: 80rpx;
padding: 0 20rpx;
margin-left: 20rpx;
&.active {
color: #272727;
border-color: #999999;
}
}
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,557 @@
<template>
<view class="content">
<view class="top">
<view class="top-cont">
<view class="top-cont-name">法律咨询服务包</view>
<view class="top-cont-text">请仔细填写以下信息</view>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<view class="idcardBorder">
<!-- 表单部分 -->
<view class="idcardAdd-block">
<block v-for="(item, keyIndex) in paramsArr" :key="keyIndex">
<block v-if="item.pre_key == null || isShow(item)">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text v-if="item.is_required == 1">*</text>{{item.title}}
</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'">
<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>
</view>
<!-- 下拉框 -->
<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">
<view class="nowrap">
<!-- {{item.options[item.value]}} -->
{{item.options[item.value]}}
</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
<!-- 多选 -->
<view class="idcardAdd-aline" v-if="item.type === 'checkbox'">
<checkbox-group @change="item.value = $event.detail.value">
<label class="checkbox-item" v-for="(checkboxItem, checkboxIndex) in item.options">
<checkbox class="checkbox-input" :value="checkboxIndex" color="#446EFE"></checkbox>{{checkboxItem}}
</label>
</checkbox-group>
</view>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="item.type === 'radio'">
<radio-group @change="item.value = $event.detail.value">
<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>
</label>
</radio-group>
</view>
<!-- 描述 -->
<view class="idcardAdd-depict-textarea" v-if="item.type === 'textarea'">
<textarea maxlength="500" class="textarea" :placeholder="'请输入' + item.title" v-model="item.value"></textarea>
<text>500字以内</text>
</view>
<!-- 被告所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'defendant_address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="defendantPicker"
></uni-data-picker>
</view>
</block>
<!-- 目前所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="addressPicker"
></uni-data-picker>
</view>
</block>
</block>
</block>
</view>
</view>
<view class="idcardBtn">
<button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="cancelPay">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { entrustInfo, entrustPost } from '@/apis/interfaces/synthesis'
import { createCity } from '@/apis/interfaces/user'
import mouldInput from '@/components/mould-input.vue'
export default {
components: {
mouldInput
},
data() {
return {
paramsArr : [], // 信息
cityPicker : [], // 地址
// 被告所在地
defendant : {},
// 目前所在地
address : {},
disabled : false,
orderId : '', // 订单 ID
orderType : '', // 订单类型
voucherState : false, // 上传凭证弹出
}
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
// 获取综法咨询-详情
this.getBusiness();
// 省市区
createCity().then(res => {
this.cityPicker = res;
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
computed: {
isShow(){
return (item) => {
if(item.pre_key != null){
let index = this.paramsArr.findIndex(val => val.key == item.pre_key)
return item.pre_value == this.paramsArr[index].value
}
return false
}
}
},
methods: {
// 综法咨询-详情
getBusiness(){
entrustInfo(this.$Route.query.entrustId).then(res => {
let froms = res.params
froms.map(val => {
if(val.type === 'checkbox'){
val.value = []
}else if(val.type === 'select'){
val.value = 0
}else{
val.value = ""
}
})
this.paramsArr = froms
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 被告所在地-选择城市
defendantPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.defendant = dataArr
},
// 目前所在地-选择城市
addressPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.address = dataArr
},
// 提交订单数据
onSubmit(){
uni.showLoading({
title: '提交中...',
mask : true
})
let subData = {};
let dataArr = []
for(let val of this.paramsArr){
if(val.type === 'pro_city'){
subData[val.key] = this.address
}else{
subData[val.key] = val.value
}
}
for(let key in subData){
dataArr.push({
key,
value: subData[key]
})
}
entrustPost(this.$Route.query.entrustId, {...dataArr}).then(res => {
this.disabled = true
this.expressSheet(res.entrust_order_id, res.order_type, res.can, res.price )
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.replace({name: 'FeePay', params: {orderId: id, orderType: type, price: price, payForm: 'entrust'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.replace({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
},
fail: sheetFail => {
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'ExpandOrder'})
},3000)
}
})
},
// 取消支付
cancelPay() {
this.voucherState = false
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'ExpandOrder'})
},3000)
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.replace({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #111e4b;
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 180rpx;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 30%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 40rpx 30rpx;
box-sizing: border-box;
.top-cont-name {
font-weight: 600;
font-size: 44rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-text {
font-size: 34rpx;
color: #ffffff;
}
}
}
.idcardBorder {
padding: 30rpx;
box-sizing: border-box;
}
.idcardAdd-block {
padding: $padding + 20 $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius;
position: relative;
}
.idcardAdd-depict-textarea {
background-color: #f7faff;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
width: 100%;
margin-bottom: 40rpx;
.textarea {
width: 100%;
padding: $padding 0;
box-sizing: border-box;
}
text {
width: 100%;
text-align: right;
font-size: 28rpx;
color: #999999;
display: block;
}
}
.idcardAdd-block-write {
background-color: #f7faff;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
border: none;
background-color: transparent;
font-size: 30rpx;
}
}
.idcardAdd-picker {
position: relative;
width: 100%;
}
.idcardAdd-picke-image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
.idcardAdd-block-name {
margin-bottom: $margin;
display: flex;
.idcardAdd-block-see {
color: $text-color;
margin-right: $margin;
font-size: 30rpx;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
}
// checkbox
.checkbox-item{
display: inline-block;
margin-right: 20rpx;
color: #999999;
line-height: 70rpx;
&:last-child {
margin-right: 0;
}
.checkbox-input{
transform:scale(0.6);
}
}
.idcardAdd-aline {
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
.idcardAdd-aline-write {
margin-right: 30rpx;
color: #999999;
}
}
// 按钮
.idcardBtn {
background-color: #111e4b;
width: 100%;
padding: 20rpx 60rpx 140rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
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;
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,170 @@
<template>
<view class="content">
<image class="expandImg" src="https://cdn.douhuofalv.com/images/2023/04/19/df2ecf6ece3e59de1d51c4ad09aa68f3.jpg" mode="widthFix"></image>
<view class="list">
<view class="list-title">
<view class="list-title-number">expand</view>
<view class="list-title-name">法律服务拓展包</view>
<view class="list-title-trim"></view>
</view>
<view class="list-item">
<view class="list-label" v-for="(item, index) in entrustArr" :key="index" @click="$Router.push({name: 'ExpandWrite', params: {entrustId: item.expand_id}})">
<view class="list-label-name">
{{item.title}}
</view>
<view class="list-label-price"><rich-text :nodes="item.content"></rich-text></view>
<view class="list-label-go">咨询</view>
</view>
</view>
</view>
<image class="expandBttom" src="https://cdn.douhuofalv.com/images/2023/04/17/fc4cad00a630e3d69b3f486e9d2937e9.png" mode="widthFix"></image>
</view>
</template>
<script>
import { expandsList } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
entrustArr: [], //案件委托列表
}
},
created() {
// 获取-案件委托-列表
this.yearServe();
},
methods: {
// 案件委托-列表
yearServe(){
expandsList().then(res => {
console.log(res)
this.entrustArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #121d4c;
}
.expandImg,
.expandBttom{
width: 100%;
display: block;
}
.list {
padding: 0 30rpx 30rpx;
box-sizing: border-box;
background-color: #121d4c;
.list-title {
font-size: 36rpx;
margin-bottom: 40rpx;
color: #ffffff;
.list-title-trim {
position: relative;
left: 390rpx;
bottom: 28rpx;
background-color: #2f3aae;
width: 35%;
height: 4rpx;
padding-left: 40rpx;
box-sizing: border-box;
&::after {
position: absolute;
content: '';
left: -50rpx;
top: -10rpx;
width: 20rpx;
height: 20rpx;
transform:rotate(45deg);
background-color: #2f3aae;
}
}
.list-title-number {
font-weight: 600;
font-size: 58rpx;
background-image: -webkit-linear-gradient(top,#ffffff 40%, transparent 70%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
text-transform: uppercase;
}
.list-title-name {
font-size: 44rpx;
margin-top: -20rpx;
width: 390rpx;
}
}
.list-item {
position: relative;
padding-left: 100rpx;
box-sizing: border-box;
&::after {
position: absolute;
content: '';
left: 10rpx;
top: 0;
border-left: 4rpx dashed #3b46d6;
width: 0;
height: calc(100% - 64rpx);
}
.list-label {
background-image: linear-gradient(to right,#3d48dd, #1f2a6f);
padding: 15rpx 40rpx 15rpx 90rpx;
box-sizing: border-box;
border-radius: 80rpx 15rpx 15rpx 80rpx;
margin-bottom: 30rpx;
color: #ffffff;
position: relative;
&::before {
position: absolute;
content: '';
left: -88rpx;
top: calc(50% - 1rpx);
border-bottom: 4rpx dashed #3b46d6;
width: 60rpx;
height: 0;
}
&::after {
position: absolute;
content: '';
left: 40rpx;
top: calc(50% - 9rpx);
background-color: #091443;
width: 18rpx;
height: 18rpx;
border-radius: 50%;
}
.list-label-name {
margin-bottom: 5rpx;
}
.list-label-price {
line-height: 48rpx;
}
.list-label-go {
position: absolute;
right: 30rpx;
top: 35rpx;
background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2);
color: #12053d;
display: inline-block;
line-height: 54rpx;
padding: 0 35rpx;
border-radius: 54rpx;
font-size: 28rpx;
font-weight: 600;
}
}
}
}
</style>

View File

@@ -0,0 +1,547 @@
<template>
<view class="content">
<view class="orderTab">
<view class="orderTab-item" :class="{active : yearStatus == 0}" @click="stateClick('0')">
<text>未付款</text>
</view>
<view class="orderTab-item" :class="{active : yearStatus == 1}" @click="stateClick('1')">
<text>已付款</text>
</view>
<view class="orderTab-item" :class="{active : yearStatus == 2}" @click="stateClick('2')">
<text>已退款</text>
</view>
</view>
<view class="list" v-if="yearArr.length > 0">
<view class="listItem" v-for="(item, index) in yearArr" :key="index">
<view class="listItem-no">
订单号{{item.order_no}}
</view>
<view class="listItem-cont">
<view class="listItem-cont-label">
<view class="listItem-cont-name">
订单状态
</view>
<view class="listItem-cont-text listItem-cont-status">
{{item.status.text}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
案件类型
</view>
<view class="listItem-cont-text">
{{item.expand.title}}
</view>
</view>
<view class="listItem-cont-label">
<view class="listItem-cont-name">
订单金额
</view>
<view class="listItem-cont-text listItem-cont-price">
{{item.price}}
</view>
</view>
<view class="listItem-cont-label" v-if="item.need_pay_diff_prices != 0">
<view class="listItem-cont-name">
补差价金额
</view>
<view class="listItem-cont-text listItem-cont-diff" @click="diffClick(item)">
{{item.need_pay_diff_prices}}
<view class="listItem-cont-btn">去支付</view>
</view>
</view>
</view>
<view class="listItem-labor">
<view class="listItem-labor-time">
{{item.created_at}}
</view>
<view class="listItem-labor-btn">
<view v-if="item.can.pay_status == 1" @click="expressSheet(item.expand_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go">
去支付
</view>
<view v-else-if="item.can.pay_status == 2" class="listItem-labor-go active">
审核中
</view>
<view v-else-if="item.can.pay_status == 3" @click="$Router.push({name: 'VoucherOpen', params: {payId: item.offline_pays.offline_pay_id, orderId: item.expand_order_id, orderType: item.order_type, type: 'edit'}})" class="listItem-labor-go">
审核驳回
</view>
<view v-if="item.can.diff_price" @click="returnGo(item.expand_order_id, item.order_type, item.can, item.price)" class="listItem-labor-go">
去缴费
</view>
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无订单</view>
</view>
<!-- 支付弹出 -->
<view class="namePop" :class="{active: payStatus}"></view>
<view class="nameCont" :class="{active: payStatus}">
<view class="nameCont-white">
<view class="nameCont-top">
<view class="nameCont-title">缴费金额</view>
<view class="nameCont-input">
<input type="numeric" v-model="price" placeholder="输入缴费金额" />
</view>
</view>
<view class="nameCont-btn">
<view class="nameCont-btn-go" @click="returnGo">取消</view>
<view class="nameCont-btn-go" @click="issueForm">确定</view>
</view>
</view>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="voucherState = false">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { expandOrder, entrustPay } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
yearStatus : 0, // 0 未付款 1 2
yearArr : [], // 拓展单列表
price : '', // 缴费金额
payStatus : false, // 缴费弹出
page : {}, // 分页信息
lodingStats : false, // 加载状态
voucherState : false, // 上传凭证弹出
orderType : '', // 委托单列表-类型
orderId : '', // 委托单列表-id
}
},
onShow() {
// 获取-拓展单-列表
this.yearServe();
},
methods: {
// 拓展单-列表
yearServe(page){
expandOrder({
status : this.yearStatus,
page : page || 1
}).then(res => {
let esArr = res.data
let list = this.yearArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.yearArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 状态选择
stateClick(state) {
this.yearStatus = state
// 获取-拓展单列表
this.yearServe();
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.push({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType }})
},
// 后台-补差价
diffClick(e) {
this.$Router.push({name: 'DiffList', params: {orderId: e.expand_order_id, orderType:e.order_type, payForm: 'expand'}})
},
// 手动支付弹出
returnGo(id, type, can) {
this.payStatus = !this.payStatus
this.orderId = id
this.orderType = type
this.orderCan = can
},
// 手动支付提交
issueForm() {
entrustPay({
order_type : this.orderType,
order_id : this.orderId,
price : this.price
}).then(res => {
this.payStatus = false
this.price = ''
// 选择支付方式
this.expressSheet(res.synthesis_diff_price_id, res.order_type, res.can)
}).catch(err => {
this.payStatus = false
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.push({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'expand'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.push({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
},
fail: sheetFail => {
uni.showToast({
title: '取消支付',
icon : 'none'
})
}
})
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 获取-拓展单-列表
this.yearServe();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 获取-拓展单-列表
this.yearServe(pageNumber);
}
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
overflow-y: scroll;
height: 100%;
position: absolute;
width: 100%;
}
.orderTab {
position: fixed;
top: 44px;
left: 0;
width: 100%;
z-index: 9;
height: 90rpx;
line-height: 90rpx;
background-color: white;
display: flex;
.orderTab-item {
flex: 3;
text-align: center;
position: relative;
color: #000000;
&::after {
position: absolute;
content: '';
left: calc(50% - 25rpx);
bottom: 0;
width: 50rpx;
height: 8rpx;
background-color: #da2b56;
display: none;
border-radius: 90rpx;
}
&.active {
font-weight: 600;
}
&.active::after {
display: block;
}
}
}
.list {
padding: 120rpx 30rpx 0;
box-sizing: border-box;
.listItem {
background-color: #ffffff;
border-radius: 10rpx;
margin-bottom: 30rpx;
.listItem-no {
line-height: 90rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 2rpx solid #eeeeee;
}
.listItem-cont {
padding: 15rpx 30rpx;
box-sizing: border-box;
.listItem-cont-label {
display: flex;
line-height: 60rpx;
color: #666666;
font-size: 28rpx;
padding: 10rpx 0;
.listItem-cont-name {
flex: 1;
}
.listItem-cont-text {
color: #000000;
&.listItem-cont-status {
color: #da2b56;
}
&.listItem-cont-price {
font-weight: 600;
}
&.listItem-cont-diff {
font-weight: 600;
display: flex;
.listItem-cont-btn {
display: inline-block;
font-size: 26rpx;
color: #f49441;
border: 2rpx solid #f49441;
margin-left: 20rpx;
padding: 0 10rpx;
height: 42rpx;
line-height: 42rpx;
border-radius: 5rpx;
margin-top: 8rpx;
font-weight: normal;
}
}
}
}
}
.listItem-labor {
border-top: 2rpx solid #eeeeee;
line-height: 50rpx;
padding: 25rpx 30rpx;
box-sizing: border-box;
font-size: 26rpx;
display: flex;
.listItem-labor-time {
flex: 1;
color: #999999;
}
.listItem-labor-go {
display: inline-block;
border: 2rpx solid #da2b56;
color: #da2b56;
border-radius: 80rpx;
padding: 0 20rpx;
&.active {
border-color: #999999;
color: #666666;
}
}
}
}
}
/* 支付弹出 */
.namePop {
position: fixed;
background-color: rgba(0, 0, 0, .5);
left: 0;
top: 0;
height: 100vh;
width: 100vw;
z-index: 100000;
display: none;
&.active {
display: block;
}
}
.nameCont {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100000;
padding: 0 15%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.nameCont-white {
background-color: #ffffff;
border-radius: 15rpx;
overflow: hidden;
.nameCont-top {
padding: 30rpx;
box-sizing: border-box;
.nameCont-title {
font-size: 34rpx;
margin-bottom: 30rpx;
}
.nameCont-input {
background-color: #f3f3f3;
height: 90rpx;
line-height: 90rpx;
border-radius: 10rpx;
padding: 0 25rpx;
box-sizing: border-box;
display: flex;
input {
height: 90rpx;
line-height: 90rpx;
padding-left: 20rpx;
box-sizing: border-box;
width: 90%;
}
}
}
.nameCont-btn {
line-height: 100rpx;
background-color: #f3f3f3;
display: flex;
margin-top: 30rpx;
border-top: 2rpx solid #dfdfdf;
.nameCont-btn-go {
text-align: center;
flex: 2;
&:last-child {
position: relative;
color: #da2b56;
}
&:last-child::after {
position: absolute;
content: '';
left: 0;
top: 0;
width: 2rpx;
height: 100%;
background-color: #dfdfdf;
}
}
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,503 @@
<template>
<view class="content">
<view class="top">
<view class="top-cont">
<view class="top-cont-name">法律服务拓展包</view>
<view class="top-cont-text">请仔细填写以下信息</view>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<view class="idcardBorder">
<!-- 表单部分 -->
<view class="idcardAdd-block">
<block v-for="(item, keyIndex) in paramsArr" :key="keyIndex">
<block v-if="item.pre_key == null || isShow(item)">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text v-if="item.is_required == 1">*</text>{{item.title}}
</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'">
<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>
</view>
<!-- 下拉框 -->
<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">
<view class="nowrap">
<!-- {{item.options[item.value]}} -->
{{item.options[item.value]}}
</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
<!-- 多选 -->
<view class="idcardAdd-aline" v-if="item.type === 'checkbox'">
<checkbox-group @change="item.value = $event.detail.value">
<label class="checkbox-item" v-for="(checkboxItem, checkboxIndex) in item.options">
<checkbox class="checkbox-input" :value="checkboxIndex" color="#446EFE"></checkbox>{{checkboxItem}}
</label>
</checkbox-group>
</view>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="item.type === 'radio'">
<radio-group @change="item.value = $event.detail.value">
<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>
</label>
</radio-group>
</view>
<!-- 描述 -->
<view class="idcardAdd-depict-textarea" v-if="item.type === 'textarea'">
<textarea maxlength="500" class="textarea" :placeholder="'请输入' + item.title" v-model="item.value"></textarea>
<text>500字以内</text>
</view>
<!-- 被告所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'defendant_address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="defendantPicker"
></uni-data-picker>
</view>
</block>
<!-- 目前所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="addressPicker"
></uni-data-picker>
</view>
</block>
</block>
</block>
</view>
</view>
<view class="idcardBtn">
<button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="cancelPay">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { expandsInfo, expandsPost } from '@/apis/interfaces/synthesis'
import { createCity } from '@/apis/interfaces/user'
import mouldInput from '@/components/mould-input.vue'
export default {
components: {
mouldInput
},
data() {
return {
paramsArr : [], // 信息
cityPicker : [], // 地址
// 目前所在地
address : {},
disabled : false,
orderId : '', // 订单 ID
orderType : '', // 订单类型
voucherState : false, // 上传凭证弹出
}
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
// 获取综法咨询-详情
this.getBusiness();
// 省市区
createCity().then(res => {
this.cityPicker = res;
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
methods: {
// 综法咨询-详情
getBusiness(){
expandsInfo(this.$Route.query.entrustId).then(res => {
let froms = res.params
froms.map(val => {
if(val.type === 'checkbox'){
val.value = []
}else if(val.type === 'select'){
val.value = 0
}else{
val.value = ""
}
})
this.paramsArr = froms
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 被告所在地-选择城市
defendantPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.defendant = dataArr
},
// 目前所在地-选择城市
addressPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.address = dataArr
},
// 提交订单数据
onSubmit(){
uni.showLoading({
title: '提交中...',
mask : true
})
let subData = {};
let dataArr = [];
for(let val of this.paramsArr){
if(val.type === 'pro_city'){
subData[val.key] = this.address
}else{
subData[val.key] = val.value
}
}
for(let key in subData){
dataArr.push({
key,
value: subData[key]
})
}
expandsPost(this.$Route.query.entrustId, {...dataArr}).then(res => {
this.disabled = true
this.expressSheet(res.expand_order_id, res.order_type, res.can, res.price )
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.replace({name: 'FeePay', params: {orderId: id, orderType: type, price: price, payForm: 'expand'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.replace({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
},
fail: sheetFail => {
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'ExpandOrder'})
},3000)
}
})
},
// 取消支付
cancelPay() {
this.voucherState = false
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'ExpandOrder'})
},3000)
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.replace({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #111e4b;
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 180rpx;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 30%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 40rpx 30rpx;
box-sizing: border-box;
.top-cont-name {
font-weight: 600;
font-size: 44rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-text {
font-size: 34rpx;
color: #ffffff;
}
}
}
.idcardBorder {
padding: 30rpx;
box-sizing: border-box;
}
.idcardAdd-block {
padding: $padding + 20 $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius;
position: relative;
}
.idcardAdd-block-write {
background-color: #f7faff;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
border: none;
background-color: transparent;
font-size: 30rpx;
}
}
.idcardAdd-picker {
position: relative;
width: 100%;
}
.idcardAdd-picke-image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
.idcardAdd-block-name {
margin-bottom: $margin;
display: flex;
.idcardAdd-block-see {
color: $text-color;
margin-right: $margin;
font-size: 30rpx;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
}
.idcardAdd-aline {
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
.idcardAdd-aline-write {
margin-right: 30rpx;
color: #999999;
}
}
// 按钮
.idcardBtn {
background-color: #111e4b;
width: 100%;
padding: 20rpx 60rpx 140rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
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;
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,326 @@
<template>
<view class="content">
<view id="poster" class="poster">
<view class="top">
<view class="top-cont">
<image class="top-cont-img" src="https://cdn.douhuofalv.com/images/2023/04/24/a45643fc33ca42b7a430aee573a93da4.png" mode="widthFix"></image>
<!-- <view class="top-cont-name">法律咨询服务包</view> -->
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<!-- <image class="backImg" src="https://cdn.douhuofalv.com/55a3e41ea916f770bb1be3864af.png" mode="widthFix"></image> -->
<view class="confirm">
<view class="confirm-white">
<view class="confirm-top">订单号 {{seekData.order_no}}</view>
<view class="confirm-list">
<view class="confirm-item" v-for="(item, index) in seekData.params">
<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-else><text v-if="item.key == 'price'"></text> {{item.value_text}}</view>
</view>
</view>
<view class="confirm-user">
<view class="confirm-user-text"><image src="https://cdn.douhuofalv.com/images/2023/04/20/c359f2fa277e6658157c7108f37d0d44.png" mode="widthFix"></image> 业务联系人</view>
<view class="confirm-user-name">{{parent.nickname}}</view>
</view>
</view>
<view class="idcardBtn">
<view class="idcardBtn-go" @click="shareClick">保存图片</view>
</view>
</view>
<!-- 打卡海报 -->
<view class="postertBack" v-if="isImgLay"></view>
<view class="postert" v-if="isImgLay">
<view class="poster-Cont">
<image class="poster-Cont-img" :src="posterImg" mode="widthFix"></image>
</view>
<view class="sign-btn">
<view class="remove-btn">长按图片保存</view>
<view class="sign-img-block">
<button class="sign-img-btn" size="mini" @click="isImgLay = false">取消</button>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { VueCanvasPoster } from 'vue-canvas-poster'
import { seekOrderSee } from '@/apis/interfaces/synthesis'
import html2canvas from 'html2canvas';
export default {
components: {
VueCanvasPoster
},
data() {
return {
seekData : '', // 咨询详情数据
parent : '', // 联系人
isImgLay : false,
posterImg: "", //生成的海报图片路径
}
},
created() {
// 获取综法咨询-咨询详情
this.getBusiness();
},
methods: {
// 综法咨询-咨询详情
getBusiness(){
seekOrderSee(this.$Route.query.synthesisId).then(res => {
this.seekData = res
this.parent = res.user.parent
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 保存图片
shareClick() {
html2canvas(document.querySelector("#poster"), {
allowTaint: true,
backgroundColor: "white",
useCORS: true, //支持图片跨域
scale: 1,
}).then((canvas) => {
this.isImgLay = true
this.posterImg = canvas.toDataURL('image/png')
});
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-image: linear-gradient(to bottom,#041f79, #111e4b);
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.poster {
background-image: linear-gradient(to bottom,#041f79, #111e4b);
}
.top {
position: relative;
height: 320rpx;
z-index: 4;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 35%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 80rpx 30rpx 0;
box-sizing: border-box;
text-align: center;
.top-cont-name {
font-weight: 600;
font-size: 74rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 70%);
background-image: -webkit-linear-gradient(to right,#f1c694, #fffbf6 70%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-img {
width: 90%;
margin-bottom: 15rpx;
}
}
}
.backImg {
width: 100%;
position: absolute;
left: 0;
top: 0;
}
.confirm {
padding: 0 30rpx 30rpx;
box-sizing: border-box;
position: relative;
top: 0;
left: 0;
z-index: 9;
width: 100%;
.confirm-white {
border-radius: 15rpx;
background-color: #ffffff;
position: relative;
&::after {
content: '';
position: absolute;
width: calc(100% - 80rpx);
height: 60rpx;
background-color: rgba(255, 255, 255, .3);
bottom: -30rpx;
left: 40rpx;
border-radius: 0 0 15rpx 15rpx;
}
&::before {
content: '';
position: absolute;
width: calc(100% - 160rpx);
height: 120rpx;
background-color: rgba(255, 255, 255, .1);
bottom: -60rpx;
left: 80rpx;
border-radius: 0 0 15rpx 15rpx;
}
.confirm-top {
background-color: #f7faff;
border-radius: 15rpx 15rpx 0 0;
line-height: 110rpx;
padding: 0 30rpx;
box-sizing: border-box;
font-weight: 600;
font-size: 34rpx;
}
.confirm-list {
padding: 10rpx 30rpx;
box-sizing: border-box;
.confirm-item {
display: flex;
line-height: 40rpx;
padding: 20rpx 0;
.confirm-item-label {
flex: 1;
width: 200rpx;
}
.confirm-item-text {
text-align: right;
width: calc(100% - 200rpx);
}
}
}
.confirm-user {
border-top: 2rpx solid #eeeeee;
line-height: 110rpx;
display: flex;
padding: 0 30rpx;
box-sizing: border-box;
font-weight: 600;
font-size: 34rpx;
color: #041f79;
.confirm-user-text {
flex: 1;
display: flex;
image {
width: 32rpx;
margin: 40rpx 15rpx 0 0;
}
}
}
}
// 按钮
.idcardBtn {
width: 100%;
display: flex;
margin-top: 120rpx;
padding-bottom: 100rpx;
.idcardBtn-go {
flex: 2;
margin: 0 15rpx;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
line-height: 94rpx;
box-shadow: 0 6rpx 10rpx rgba(0, 0, 0, .5);
text-align: center;
}
}
}
.postertBack {
width: 100vw;
height: 100vh;
position: fixed;
background-color: rgba(0,0,0,.6);
left: 0;
top: 0;
z-index: 9990;
}
.postert {
width: 100vw;
height: 100vh;
position: fixed;
left: 0;
top: 0;
z-index: 9999;
.poster-Cont {
background-color: #111e4b;
width: 80vw;
height: 55vh;
top: 20vh;
left: 10vw;
position: absolute;
box-sizing: border-box;
border-radius: $radius-m;
overflow: hidden;
.poster-Cont-img {
width: 100%;
height: 100%;
}
.poster-Cont-code {
position: absolute;
bottom: 250px;
left: 46px;
width: 140rpx;
height: 140rpx;
}
}
}
.sign-btn {
position: absolute;
top: 78vh;
width: 80%;
left: 10%;
z-index: 9999;
.remove-btn {
width: 100%;
line-height: 90rpx;
background-color: #bf9960;
color: #FFFFFF;
border-radius: $radius-m;
margin-top: $margin - 10;
text-align: center;
font-size: $title-size + 2;
}
.sign-img-block {
display: flex;
margin: 30rpx -10rpx 0;
.sign-img-btn {
flex: 2;
line-height: 90rpx;
background-color: #ffeeda;
border-radius: $radius-m;
text-align: center;
font-size: $title-size;
margin: 0 10rpx;
}
}
}
</style>

550
pages/synthesis/feePay.vue Normal file
View File

@@ -0,0 +1,550 @@
<template>
<view class="content">
<view class="paymentTop">
<view class="paymentTop-name">
需支付金额
</view>
<view class="paymentTop-price">
<text></text>{{payPrice}}
</view>
<view class="paymentTop-text">
与人方便,与己方便,珍惜时间,请先付款
</view>
</view>
<view class="paymentList">
<view class="paymentList-label" @click="payType('wechat')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/payWechat.png" mode="widthFix"></image>微信支付
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'wechat' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('umsAli')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/aliPay.png" mode="widthFix"></image>支付宝银联商务
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'umsAli' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('umsMp')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/minPay.png" mode="widthFix"></image>微信银联商务
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'umsMp' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('dgAli')">
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/aliPay.png" mode="widthFix"></image>支付宝汇付
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'dgAli' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
<view class="paymentList-label" @click="payType('dgwx')" >
<view class="paymentList-left">
<image class="paymentList-icon" src="@/static/imgs/minPay.png" mode="widthFix"></image>微信汇付
</view>
<view class="paymentList-right">
<image class="paymentList-img" :src="Payment == 'dgwx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
</view>
</view>
</view>
<view class="paymentBtn" v-if="Payment == 'umsMp'">
<!-- web.douhuotest.douhuofalv dev=0是线上 dev=1是线下 -->
<wx-open-launch-weapp
username="gh_918c81628d6f"
:path="'pages/pay/pay?type=h5&dev=1&trade_id=' + tradeId + '&token=' + token"
>
<script type="text/wxtag-template">
<style>
.gobtn {
width: 280px;
background-color: #da2b56;
color: #ffffff;
border-radius: 5px;
height: 50px;
line-height: 50px;
font-size: 18px;
border: none;
}
</style>
<button type="default" class="gobtn">打开小程序收银台</button>
</script>
</wx-open-launch-weapp>
</view>
<view class="paymentBtn" v-else-if="Payment == 'dgwx'">
<button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChickDg">
打开小程序收银台
</button>
</view>
<view class="paymentBtn" v-else>
<button class="paymentBtn-go" type="default" @click="payClick" :disabled="disabled">立即支付</button>
</view>
<!-- 支付成功弹出 -->
<view class="payMakeBack" :class="{active: payMakePop}" catchtouchmove='true'></view>
<view class="payMakeCont" :class="{active: payMakePop}" catchtouchmove='true'>
<image class="payMakeCont-img" src="@/static/imgs/payMakeCont_icon.png" mode="widthFix"></image>
<view class="payMakeCont-title">
支付成功
</view>
<view class="payMakeCont-price">
<text></text>{{payPrice}}
</view>
<view class="payMakeCont-tips">
微信支付
</view>
<view class="payMakeCont-btn">
<view class="payMakeCont-go" @click="payMakeSkip">完成</view>
</view>
</view>
</view>
</template>
<script>
const jweixin = require('jweixin-module');
import { Apply, Wechat, authFollow } from '@/apis/interfaces/index'
import { ums, umsState } from '@/apis/interfaces/pay'
import { servicePay, serviceUms, serviceDg, expandPay, expandUms, expandDg, entrustPay, entrustUms, entrustDg, synDiffPay, synDiffUms, synDiffDg } from '@/apis/interfaces/pay'
export default {
data() {
return {
token : '', // 登录token
orderId : '', // 微信支付id
jumpUrlDg : '', // 抖巩支付
tradeId : '', // 微信支付id
Payment : 'wechat', // 支付类型
applyData : '', // 支付数据
disabled : false, // 按钮状态
getState : false, // 获取订单状态
payMakePop : false, // 支付成功弹框
payPrice : '', // 支付金额
payForm : '', // 支付类型
}
},
onShow() {
this.token = this.$store.getters.getToken
this.payPrice = this.$Route.query.price
this.payForm = this.$Route.query.payForm
this.orderId = this.$Route.query.id
},
methods: {
// 选择支付方式
payType(type) {
if(this.Payment === type) return
this.Payment = type
if(type === 'umsMp'){
uni.showLoading({
title: '加载中...',
mask : true
})
this.UMSPay()
} else if(type === 'dgwx') {
uni.showLoading({
title: '加载中...',
mask : true
})
this.dgwxPay()
}
},
// 斗拱支付
dgwxPay(){
let payType = this.Payment == 'dgwx' ? 'mp' : 'mp_alipay'
let NewUrl = ''
// 是否是补差价订单
if(this.$Route.query.style == 'diff') {
NewUrl = synDiffDg
} else {
let apiUrl = ''
if(this.payForm == 'service') {
apiUrl = serviceDg
} else if (this.payForm == 'expand') {
apiUrl = expandDg
} else if (this.payForm == 'entrust') {
apiUrl = entrustDg
}
NewUrl = apiUrl
}
NewUrl(this.orderId, {type: payType, app_schema: 'weixin://'}).then(res => {
let { params, trade_id } = res;
this.getState = true
switch (payType){
case 'mp':
this.tradeId = trade_id
this.jumpUrlDg = JSON.parse(params.miniapp_data)
this.Payment = 'dgwx'
break;
case 'mp_alipay':
this.tradeId = trade_id
window.location.href = `https://ds.alipay.com/?scheme=` + encodeURIComponent(params.jump_url)
this.Payment = 'dgwxalipay'
break;
}
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 新银联商务支付
UMSPay(){
let payType = this.Payment == 'umsMp' ? 'mp' : 'mp_alipay'
let NewUrl = ''
// 是否是补差价订单
if(this.$Route.query.style == 'diff') {
NewUrl = synDiffUms
} else {
let apiUrl = ''
if(this.payForm == 'service') {
apiUrl = serviceUms
} else if (this.payForm == 'expand') {
apiUrl = expandUms
} else {
apiUrl = entrustUms
}
NewUrl = apiUrl
}
NewUrl(this.orderId, {type: payType}).then(res => {
this.getState = true
switch (payType){
case 'mp':
this.tradeId = res.trade_id
break;
case 'mp_alipay':
this.tradeId = res.trade_id
window.location.href = res.alipay
break;
}
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 抖供支付
payChickDg() {
window.location.href = this.jumpUrlDg.scheme_code
},
// 微信支付
payClick() {
let newOpenId = uni.getStorageSync('openId')
if(this.Payment === 'umsMp' || this.Payment === 'umsAli'){
this.UMSPay()
return
} else if (this.Payment === 'dgwx' || this.Payment === 'dgAli') {
this.dgwxPay()
return
}
if(newOpenId) {
let NewUrl = ''
// 是否是补差价订单
if(this.$Route.query.style == 'diff') {
NewUrl = synDiffPay
} else {
let apiUrl = ''
if(this.payForm == 'service') {
apiUrl = servicePay
} else if (this.payForm == 'expand') {
apiUrl = expandPay
} else {
apiUrl = entrustPay
}
NewUrl = apiUrl
}
NewUrl(this.$Route.query.id, {
openid : newOpenId
}).then(res => {
let wxConfig = JSON.parse(res.wechat)
jweixin.config({
appId: wxConfig.appId,
debug: false,
jsApiList: ['chooseWXPay'],
signature: wxConfig.signature,
nonceStr: wxConfig.nonceStr,
timestamp: wxConfig.timestamp,
})
jweixin.ready(() => {
jweixin.chooseWXPay({
timestamp: wxConfig.timeStamp,
nonceStr: wxConfig.nonceStr,
package: wxConfig.package,
signType: wxConfig.signType,
paySign: wxConfig.paySign,
success: payRes => {
// 先跳支付成功
uni.showToast({
title: '支付成功',
icon: "none"
})
this.disabled = true
this.payMakePop = true
},
cancel: payCancel => {
if(this.payForm == 'service') {
// 跳到年费单
this.$Router.replace({name: 'YearOrder'})
} else if (this.payForm == 'expand') {
// 跳到拓展单
this.$Router.replace({name: 'ExpandOrder'})
} else {
// 跳到委托单
this.$Router.replace({name: 'EntrustOrder'})
}
},
fail: payfail => {
// 取消支付
uni.showToast({
title: '取消支付',
icon: 'none'
})
this.disabled = true
if(this.payForm == 'service') {
// 跳到年费单
setTimeout(()=>{
this.$Router.replace({name: 'YearOrder'})
},1000)
} else if (this.payForm == 'expand') {
// 跳到拓展单
setTimeout(()=>{
this.$Router.replace({name: 'ExpandOrder'})
},1000)
} else {
// 跳到委托单
setTimeout(()=>{
this.$Router.replace({name: 'EntrustOrder'})
},1000)
}
}
});
});
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
return
}
// 获取微信授权信息-获取oppid
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.douhuotest.douhuofalv.com/webWechat/index?id=' + this.$Route.query.id + '&style=' + this.$Route.query.style + '&price=' + this.$Route.query.price
}).then(res => {
window.location.href = res
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 支付成功弹出
payMakeSkip() {
this.payMakePop = false
if(this.payForm == 'service') {
// 跳到年费单
this.$Router.replace({name: 'YearOrder'})
} else if (this.payForm == 'expand') {
// 跳到拓展单
this.$Router.replace({name: 'ExpandOrder'})
} else {
// 跳到委托单
this.$Router.replace({name: 'EntrustOrder'})
}
},
}
}
</script>
<style lang="scss" scoped>
.content{
background: #f4f4f4;
height: 100vh;
overflow-y: scroll;
}
.paymentTop {
padding: $padding * 4 $padding;
box-sizing: border-box;
text-align: center;
color: #666666;
.paymentTop-name {
padding-left: $padding;
box-sizing: border-box;
}
.paymentTop-price {
color: $mian-color;
font-size: $title-size + 40;
font-weight: 600;
margin: $margin - 10 0;
text {
font-size: $title-size + 10;
}
}
}
.paymentList {
padding: 0 $padding;
box-sizing: border-box;
.paymentList-label {
background-color: #ffffff;
border-radius: $radius;
padding: $padding + 10 $padding;
box-sizing: border-box;
margin-bottom: $margin + 10;
display: flex;
.paymentList-left {
flex: 1;
display: flex;
line-height: 40rpx;
.paymentList-icon {
width: 40rpx;
height: 40rpx;
margin-right: $margin - 10;
}
}
.paymentList-right {
display: flex;
.paymentList-price {
color: $mian-color;
font-weight: 600;
}
.paymentList-tips {
background-image: linear-gradient(to left, #FF4646, #FF7676);
height: 44rpx;
line-height: 44rpx;
font-size: $title-size-sm;
color: #ffffff;
opacity: .9;
border-radius: $radius * 2;
padding: 0 10rpx;
}
.paymentList-arrow {
width: 14rpx;
margin: 10rpx 0 0 20rpx;
}
.paymentList-img {
width: 32rpx;
height: 32rpx;
margin-top: 4rpx;
margin-left: $margin;
}
}
}
}
.paymentBtn {
text-align: center;
padding: 0 $padding 100rpx;
box-sizing: border-box;
width: 100%;
.paymentBtn-go {
position: relative;
width: 280px;
background-color: #da2b56;
color: #ffffff;
border-radius: 5px;
height: 50px;
line-height: 50px;
font-size: 18px;
&[disabled] {
background-color: #eba5a5;
}
}
}
// 支付成功弹出
.payMakeBack {
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.payMakeCont {
position: fixed;
z-index: 1001;
left: 0;
bottom: -10000%;
height: 70vh;
width: 100vw;
background-color: #f7f7f7;
border-radius: 40rpx 40rpx 0 0;
padding-top: 100rpx;
box-sizing: border-box;
text-align: center;
transition: .2;
&.active {
bottom: 0;
}
.payMakeCont-img {
width: 80rpx;
height: 80rpx;
margin-left: 40rpx;
}
.payMakeCont-title {
margin: 5rpx 0 30rpx 40rpx;
font-size: 34rpx;
}
.payMakeCont-price {
font-size: 78rpx;
font-weight: 600;
text {
font-size: 36rpx;
width: 40rpx;
display: inline-block;
}
}
.payMakeCont-tips {
font-size: 28rpx;
margin-left: 40rpx;
}
.payMakeCont-btn {
position: absolute;
bottom: 0;
width: 100%;
left: 0;
padding: 80rpx 30rpx 100rpx;
box-sizing: border-box;
.payMakeCont-go {
background-color: #da2b56;
line-height: 98rpx;
border-radius: 20rpx;
color: #ffffff;
font-size: 34rpx;
}
}
}
</style>

View File

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

85
pages/synthesis/order.vue Normal file
View File

@@ -0,0 +1,85 @@
<template>
<view class="content">
<view class="topItem">
<view class="topItem-label" @click="$Router.push({name: 'SeekOrder'})">
<view class="topItem-name" v-if="synthesisData.synthesis">
咨询单({{synthesisData.synthesis.all}})
</view>
<image class="topItem-arrow" src="@/static/imgs/payArrow.png" mode="widthFix"></image>
</view>
<view class="topItem-label" @click="$Router.push({name: 'YearOrder'})">
<view class="topItem-name" v-if="synthesisData.service">
年费单({{synthesisData.service.all}})
</view>
<image class="topItem-arrow" src="@/static/imgs/payArrow.png" mode="widthFix"></image>
</view>
<view class="topItem-label" @click="$Router.push({name: 'EntrustOrder'})">
<view class="topItem-name" v-if="synthesisData.entrust">
委托单({{synthesisData.entrust.all}})
</view>
<image class="topItem-arrow" src="@/static/imgs/payArrow.png" mode="widthFix"></image>
</view>
<view class="topItem-label" @click="$Router.push({name: 'ExpandOrder'})">
<view class="topItem-name" v-if="synthesisData.expand">
拓展单({{synthesisData.expand.all}})
</view>
<image class="topItem-arrow" src="@/static/imgs/payArrow.png" mode="widthFix"></image>
</view>
</view>
</view>
</template>
<script>
import { synthesisCount } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
userLogin : '', // 登录状态
synthesisData : '', // 综法数量
}
},
onShow() {
if(this.$store.getters.getToken) {
this.userLogin = true
// 获取综法订单数据数量
this.synthesisInfo();
}
},
methods: {
// 综法订单数据数量
synthesisInfo() {
synthesisCount({channel: 'self'}).then(res => {
this.synthesisData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
}
}
</script>
<style lang="scss" scoped>
.topItem-label {
display: flex;
line-height: 110rpx;
padding: 0 30rpx;
box-sizing: border-box;
border-bottom: 2rpx solid #e8e8e8;
}
.topItem-name {
flex: 1;
}
.topItem-arrow {
width: 18rpx;
height: 18rpx;
margin-top: 40rpx;
}
</style>

View File

@@ -0,0 +1,73 @@
<template>
<view class="content">
<view class="point">
<img class="point-img" src="@/static/imgs/payImg.png">
<view class="point-text">
<view class="point-name">
支付成功
</view>
<view class="point-tips">
<text>您已完成支付</text>
<text>谢谢您对抖火的支持</text>
</view>
<view class="point-btn">
<view class="btn" @click="$Router.push({name: 'synthesisOrder'})">
查看订单
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {}
},
onLoad() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.point {
text-align: center;
padding: 40% 0;
.point-img {
width: 240rpx;
height: 240rpx;
margin: 0 auto 10rpx;
}
.point-text {
.point-name {
color: $mian-color;
font-size: $title-size + 14;
}
.point-tips{
margin: $margin + 20 0 $margin*3;
line-height: 52rpx;
text {
display: block;
color: #999999;
}
}
}
.point-btn {
text-align: center;
.btn {
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
border-radius: $radius * 4;
padding: 0 $padding * 2.5;
line-height: 90rpx;
}
}
}
</style>

View File

@@ -0,0 +1,197 @@
<template>
<view class="content">
<image class="yearImg" src="https://cdn.douhuofalv.com/images/2023/04/17/85db0728f2bae879ecbe561eed100549.png" mode="widthFix"></image>
<view class="list">
<view class="title">
<view class="title-name"><text>个人法律咨询365服务包</text></view>
<image class="title-img" src="https://cdn.douhuofalv.com/images/2023/04/17/79426f8fe9395c1c1f5be41d0a6f2eb8.png" mode="widthFix"></image>
</view>
<view class="item" v-for="(item, index) in synthesisArr" :key="index">
<view class="item-back">
<view class="item-title">{{item.title}}</view>
<view class="range">
<view class="range-label">
<view class="range-label-title">针对群体</view>
<view class="range-label-text">
{{item.audiences}}
</view>
</view>
<view class="range-label">
<view class="range-label-title">咨询收费</view>
<view class="range-label-text">
{{item.price}}//
</view>
</view>
<view class="range-label">
<view class="range-label-title">服务期限</view>
<view class="range-label-text">
{{item.day}}
</view>
</view>
<view class="range-label scope" v-if="index == 0">
<view class="range-label-title">服务范围</view>
<view class="range-label-text">
<text v-for="(items, scopeIndex) in item.scope" :key="scopeIndex">{{scopeIndex + 1}}{{items}}</text>
</view>
</view>
</view>
<image class="shapeWhite-back" src="https://cdn.douhuofalv.com/images/2023/04/17/705af638ddaed151ce5bc5ead85f604d.png" mode="widthFix"></image>
</view>
<view class="btn">
<view class="btn-go" @click="$Router.push({name: 'PersonWrite', params: {serveId: item.synthesis_service_id}})">
{{item.is_open ? '立即续费' : '立即开通'}}
</view>
</view>
</view>
</view>
<image class="yearBttom" src="https://cdn.douhuofalv.com/images/2023/04/17/fc4cad00a630e3d69b3f486e9d2937e9.png" mode="widthFix"></image>
</view>
</template>
<script>
import { yearSynthList } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
synthesisArr: [], //个人-年费服务包
}
},
created() {
// 获取-个人-年费服务包列表
this.yearServe();
},
methods: {
// 个人-年费服务包列表
yearServe(){
yearSynthList({
type: this.$Route.query.type
}).then(res => {
this.synthesisArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
width: 100vw;
background-color: #121d4c;
}
.yearImg,
.yearBttom{
width: 100%;
display: block;
}
.list {
padding: 30rpx;
box-sizing: border-box;
background-color: #032e9e;
border-radius: 0 0 60rpx 60rpx;
.title {
margin-bottom: 40rpx;
display: flex;
height: 80rpx;
line-height: 80rpx;
.title-name {
flex: 1;
text {
padding: 0 70rpx 0 30rpx;
font-size: 36rpx;
background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2);
display: inline-block;
color: #2c3c66;
font-weight: 600;
position: relative;
&:after {
position: absolute;
content: '';
right: 0;
top: 0;
width: 0;
height: 0;
border-width: 40rpx;
border-style: solid;
border-color: transparent #03339e transparent transparent;
}
}
}
.title-img {
width: 110rpx;
}
}
.item {
margin-bottom: 30rpx;
.item-back {
background-color: #002088;
border-radius: 20rpx;
padding: 30rpx;
box-sizing: border-box;
position: relative;
.item-title {
font-weight: 600;
font-size:36rpx;
background-image: -webkit-linear-gradient(top,#fdf6ca, #e29c68);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
flex: 1;
margin-bottom: 30rpx;
}
.range {
color: #ffffff;
font-size: 28rpx;
.range-label {
line-height: 40rpx;
padding: 10rpx 0;
display: flex;
.range-label-title {
width: 160rpx;
}
.range-label-text {
width: calc(100% - 160rpx);
text {
display: block;
margin-bottom: 20rpx;
&:last-child {
margin-bottom: 0;
}
}
}
}
}
.shapeWhite-back {
width: 50%;
position: absolute;
left: 0;
bottom: 0;
}
}
.btn {
padding: 40rpx;
box-sizing: border-box;
text-align: center;
.btn-go {
display: inline-block;
background-image: -webkit-linear-gradient(top,#fff8da,#f3c796);
color: #582700;
width: 50%;
font-weight: 600;
font-size: 36rpx;
line-height: 88rpx;
border-radius: 50rpx;
box-shadow: 0 8rpx 6rpx rgba(0, 0, 0, .3);
}
}
}
}
</style>

View File

@@ -0,0 +1,460 @@
<template>
<view class="content">
<view class="top">
<view class="top-cont">
<view class="top-cont-name">个人法律咨询365服务包</view>
<view class="top-cont-text">请仔细填写以下信息</view>
</view>
<image class="top-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<view class="idcardBorder">
<!-- 表单部分 -->
<view class="idcardAdd-block">
<block v-for="(item, keyIndex) in paramsArr" :key="keyIndex">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text v-if="item.is_required == 1">*</text>{{item.title}}
</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'">
<mouldInput class="idcardAdd-input" :blur-value="item.value" :input-title="item.title" :input-type="item.type" :input-key="item.key" @onValue="($event) => {item.value = $event}"></mouldInput>
</view>
<!-- 下拉框 -->
<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">
<view class="nowrap">
{{item.options[item.value]}}
</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="item.type === 'radio'">
<radio-group @change="item.value = $event.detail.value">
<label class="idcardAdd-aline-write" v-for="(radioItem, radioIndex) in item.options" :key="radioIndex">
<radio :value="radioIndex" color="#db3254" style="transform:scale(.65)" :checked="item.value === radioIndex" /><text>{{radioItem}}</text>
</label>
</radio-group>
</view>
<!-- 目前所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="addressPicker"
></uni-data-picker>
</view>
</block>
</block>
</view>
</view>
<view class="idcardBtn">
<button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="cancelPay">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { yearSynthInfo, yearSynthPost } from '@/apis/interfaces/synthesis'
import { createCity } from '@/apis/interfaces/user'
import mouldInput from '@/components/mould-input.vue'
export default {
components: {
mouldInput
},
data() {
return {
paramsArr : [], // 信息
cityPicker : [], // 地址
// 目前所在地
address : {},
disabled : false,
orderId : '', // 订单 ID
orderType : '', // 订单类型
voucherState : false, // 上传凭证弹出
}
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
// 获取综法咨询-详情
this.getBusiness();
// 省市区
createCity().then(res => {
this.cityPicker = res;
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
methods: {
// 综法咨询-详情
getBusiness(){
yearSynthInfo(this.$Route.query.serveId).then(res => {
let froms = res.params
froms.map(val => {
if(val.type === 'checkbox'){
val.value = []
}else if(val.type === 'select'){
val.value = 0
}else{
val.value = ""
}
})
this.paramsArr = froms
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 目前所在地-选择城市
addressPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.address = dataArr
},
// 提交订单数据
onSubmit(){
uni.showLoading({
title: '提交中...',
mask : true
})
let subData = {};
let dataArr = [];
for(let val of this.paramsArr){
if(val.type === 'pro_city'){
subData[val.key] = this.address
}else{
subData[val.key] = val.value
}
}
for(let key in subData){
dataArr.push({
key,
value: subData[key]
})
}
yearSynthPost(this.$Route.query.serveId, {...dataArr}).then(res => {
this.disabled = true
this.expressSheet(res.service_order_id, res.order_type, res.can, res.price )
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.replace({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'service'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.replace({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
},
fail: sheetFail => {
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'YearOrder', params: {yearType: 1}})
},3000)
}
})
},
// 取消支付
cancelPay() {
this.voucherState = false
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'YearOrder', params: {yearType: 1}})
},3000)
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.replace({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #111e4b;
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 180rpx;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 30%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 40rpx 30rpx;
box-sizing: border-box;
.top-cont-name {
font-weight: 600;
font-size: 44rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-text {
font-size: 34rpx;
color: #ffffff;
}
}
}
.idcardBorder {
padding: 30rpx;
box-sizing: border-box;
}
.idcardAdd-block {
padding: $padding + 20 $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius;
position: relative;
}
.idcardAdd-block-write {
background-color: #f7faff;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
border: none;
background-color: transparent;
font-size: 30rpx;
}
}
.idcardAdd-picker {
position: relative;
width: 100%;
}
.idcardAdd-picke-image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
.idcardAdd-block-name {
margin-bottom: $margin;
display: flex;
.idcardAdd-block-see {
color: $text-color;
margin-right: $margin;
font-size: 30rpx;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
}
.idcardAdd-aline {
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
.idcardAdd-aline-write {
margin-right: 30rpx;
color: #999999;
}
}
// 按钮
.idcardBtn {
background-color: #111e4b;
width: 100%;
padding: 20rpx 60rpx 140rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
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;
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

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

View File

@@ -0,0 +1,271 @@
<template>
<view class="content">
<image class="yearImg" src="https://cdn.douhuofalv.com/images/2023/04/17/80a076d77afdbe716e29f2ea56f9b103.png" mode="widthFix"></image>
<view class="list">
<view class="title">
<view class="title-name"><text>企业法律咨询服务包</text></view>
<view class="title-text">legal advice</view>
</view>
<view class="item" :class="{active : item.service_order != null}" v-for="(item, index) in synthesisArr" :key="index">
<view class="endedAt" v-if="item.service_order">
<view class="endedAt-time">到期时间{{item.service_order.ended_at}}</view>
</view>
<view class="top">
<view class="top-title">{{item.title}}</view>
<view class="top-btn" @click="$Router.push({name: 'StandWrite', params: {serveId: item.synthesis_service_id}})">{{item.is_open ? '续费' : '开通'}}</view>
</view>
<view class="range">
<view class="range-label">
<view class="range-label-title">针对群体</view>
<view class="range-label-text">
{{item.audiences}}
</view>
</view>
<view class="range-label">
<view class="range-label-title">咨询收费</view>
<view class="range-label-text">
{{item.price}}/
</view>
</view>
<view class="range-label">
<view class="range-label-title">服务期限</view>
<view class="range-label-text">
{{item.day}}
</view>
</view>
<view class="range-label scope" v-if="index == 0">
<view class="range-label-title">服务范围</view>
<view class="range-label-text">
<text v-for="(items, scopeIndex) in item.scope" :key="scopeIndex">{{scopeIndex + 1}}{{items}}</text>
</view>
</view>
</view>
<view class="shape" v-if="index >= 1">
<view class="shapeBack"></view>
<view class="shapeCont">
<view class="shapeWhite">
<view class="shapeWhite-title">
服务范围
</view>
<view class="shapeWhite-label" v-for="(items, scopeIndex) in item.scope" :key="scopeIndex">
{{scopeIndex + 1}}{{items}}
</view>
<image class="shapeWhite-back" src="https://cdn.douhuofalv.com/images/2023/04/17/893b41e87c2bdfca62c4936a880c79cd.png" mode="widthFix"></image>
</view>
</view>
</view>
</view>
</view>
<image class="yearBttom" src="https://cdn.douhuofalv.com/images/2023/04/17/fc4cad00a630e3d69b3f486e9d2937e9.png" mode="widthFix"></image>
</view>
</template>
<script>
import { yearSynthList } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
synthesisArr: [], //企业-年费服务包列表
}
},
created() {
// 获取-个人-年费服务包列表
this.yearServe();
},
methods: {
// 个人-年费服务包列表
yearServe(){
yearSynthList({
type: this.$Route.query.type
}).then(res => {
this.synthesisArr = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
width: 100vw;
background-color: #121d4c;
}
.yearImg,
.yearBttom{
width: 100%;
display: block;
}
.list {
padding: 30rpx;
box-sizing: border-box;
background-color: #121d4c;
.title {
margin-bottom: 40rpx;
display: flex;
height: 80rpx;
line-height: 80rpx;
.title-name {
flex: 1;
text {
padding: 0 70rpx 0 30rpx;
font-size: 36rpx;
background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2);
display: inline-block;
color: #2c3c66;
font-weight: 600;
position: relative;
&:after {
position: absolute;
content: '';
right: 0;
top: 0;
width: 0;
height: 0;
border-width: 40rpx;
border-style: solid;
border-color: transparent #121d4c transparent transparent;
}
}
}
.title-text {
font-size: 36rpx;
text-transform: uppercase;
background-image: -webkit-linear-gradient(top,#86716b, #8e8f9c);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
}
}
.item {
background-color: #002088;
border-radius: 20rpx;
padding: 30rpx;
box-sizing: border-box;
margin-bottom: 30rpx;
position: relative;
&.active {
padding-top: 70rpx;
}
.endedAt {
position: absolute;
top: 0;
left: 0;
display: inline-block;
color: #2c3c66;
width: 100%;
text-align: center;
.endedAt-time {
background-image: -webkit-linear-gradient(40deg,#f1c593, #fef9f2);
margin: 0 auto;
display: inline-block;
padding: 0 20rpx;
line-height: 52rpx;
font-size: 26rpx;
border-radius: 0 0 5rpx 5rpx;
color: #582700;
}
}
.top {
display: flex;
font-weight: 600;
line-height: 54rpx;
margin-bottom: 20rpx;
.top-title {
font-size:36rpx;
background-image: -webkit-linear-gradient(top,#fdf6ca, #e29c68);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
flex: 1;
}
.top-btn {
background-image: -webkit-linear-gradient(top,#fff8da,#f3c796);
color: #582700;
padding: 0 30rpx;
border-radius: 50rpx;
box-shadow: 0 8rpx 6rpx rgba(0, 0, 0, .3);
}
}
.range {
color: #ffffff;
font-size: 28rpx;
.range-label {
line-height: 40rpx;
padding: 10rpx 0;
display: flex;
.range-label-title {
width: 160rpx;
}
.range-label-text {
width: calc(100% - 160rpx);
text {
display: block;
margin-bottom: 20rpx;
&:last-child {
margin-bottom: 0;
}
}
}
}
}
.shape {
position: relative;
margin-top: 30rpx;
font-size: 28rpx;
.shapeBack {
background-color: #0d245b;
height: 20rpx;
width: 100%;
border: 4rpx solid #e8c595;
border-radius: 80rpx;
}
.shapeCont {
padding: 0 30rpx;
box-sizing: border-box;
margin-top: -18rpx;
.shapeWhite {
background-color: #ffffff;
border-radius: 0 0 20rpx 20rpx;
padding: 40rpx 30rpx 30rpx;
box-sizing: border-box;
color: #0e2660;
position: relative;
&::after {
position: absolute;
content: '';
top: 0;
left: 0;
width: 100%;
height: 20rpx;
background-image: -webkit-linear-gradient(top, #a7a8ad, transparent);
}
.shapeWhite-title {
font-size: 38rpx;
margin-bottom: 20rpx;
}
.shapeWhite-label {
padding: 10rpx 0;
line-height: 44rpx;
}
.shapeWhite-back {
width: 85%;
position: absolute;
right: 0;
bottom: 0;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,484 @@
<template>
<view class="content">
<view class="top">
<view class="top-cont">
<view class="top-cont-name">法律咨询服务包</view>
<view class="top-cont-text">请仔细填写以下信息</view>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<view class="idcardBorder">
<!-- 表单部分 -->
<view class="idcardAdd-block">
<block v-for="(item, keyIndex) in paramsArr" :key="keyIndex">
<view class="idcardAdd-block-name">
<view class="idcardAdd-block-see">
<text v-if="item.is_required == 1">*</text>{{item.title}}
</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'">
<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>
</view>
<!-- 下拉框 -->
<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">
<view class="nowrap">
<!-- {{item.options[item.value]}} -->
{{item.options[item.value]}}
</view>
<image class="idcardAdd-picke-image" src="@/static/imgs/basic_down.png" mode="aspectFill"></image>
</picker>
</view>
<!-- 单选 -->
<view class="idcardAdd-aline" v-if="item.type === 'radio'">
<radio-group @change="item.value = $event.detail.value">
<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>
</label>
</radio-group>
</view>
<!-- 被告所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'defendant_address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="defendantPicker"
></uni-data-picker>
</view>
</block>
<!-- 目前所在地 -->
<block v-if="item.type === 'pro_city' && item.key === 'address'">
<view class="idcardAdd-block-write">
<uni-data-picker
:localdata="cityPicker"
:border="false"
split="-"
placeholder="选择城市"
@change="addressPicker"
></uni-data-picker>
</view>
</block>
</block>
</view>
</view>
<view class="idcardBtn">
<button class="idcardBtn-go" type="default" @click="onSubmit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view>
<!-- 打款凭证弹出 -->
<view class="voucherBack" :class="{active : voucherState}"></view>
<view class="voucherPop" :class="{active : voucherState}">
<view class="tipsWhite">
<image class="voucherPop-img" src="https://cdn.douhuofalv.com/images/2023/04/17/f4a3c45fe9aa7db143a362fc5b13b31d.png" mode="widthFix"></image>
<view class="voucherPop-title">
<view class="voucherPop-name">支付提示</view>
<view class="voucherPop-text">抱歉此订单不支持线上支付请上传打款凭证</view>
<view class="voucherPop-btn">
<view class="voucherPop-go" @click="cancelPay">
暂不支付
</view>
<view class="voucherPop-go voucherPop-up" @click="clickOpen">
上传凭证
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { yearSynthInfo, yearSynthPost } from '@/apis/interfaces/synthesis'
import { createCity } from '@/apis/interfaces/user'
import mouldInput from '@/components/mould-input.vue'
export default {
components: {
mouldInput
},
data() {
return {
paramsArr : [], // 信息
cityPicker : [], // 地址
// 被告所在地
defendant : {},
// 目前所在地
address : {},
disabled : false,
orderId : '', // 订单 ID
orderType : '', // 订单类型
voucherState : false, // 上传凭证弹出
}
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
// 获取综法咨询-详情
this.getBusiness();
// 省市区
createCity().then(res => {
this.cityPicker = res;
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
methods: {
// 综法咨询-详情
getBusiness(){
yearSynthInfo(this.$Route.query.serveId).then(res => {
let froms = res.params
froms.map(val => {
if(val.type === 'checkbox'){
val.value = []
}else if(val.type === 'select'){
val.value = 0
}else{
val.value = ""
}
})
this.paramsArr = froms
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 被告所在地-选择城市
defendantPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.defendant = dataArr
},
// 目前所在地-选择城市
addressPicker(e){
let { value } = e.detail
let dataArr = {
province_id: value[0].value,
city_id: value[1].value
}
this.address = dataArr
},
// 提交订单数据
onSubmit(){
uni.showLoading({
title: '提交中...',
mask : true
})
let subData = {};
let dataArr = [];
for(let val of this.paramsArr){
if(val.type === 'pro_city'){
subData[val.key] = this.address
}else{
subData[val.key] = val.value
}
}
for(let key in subData){
dataArr.push({
key,
value: subData[key]
})
}
yearSynthPost(this.$Route.query.serveId, {...dataArr}).then(res => {
this.disabled = true
this.expressSheet(res.service_order_id, res.order_type, res.can, res.price )
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 选择支付方式
expressSheet(id, type, can, price) {
this.orderId = id
this.orderType = type
uni.showActionSheet({
itemList: ['线上支付', '线下支付'],
success: sheetRes => {
if(sheetRes.tapIndex == 0) {
if(can.online) {
this.$Router.replace({name: 'FeePay', params: {id: id, orderType: type, price: price, payForm: 'service'}})
return
}
this.voucherState = true
} else if (sheetRes.tapIndex == 1) {
this.$Router.replace({name: 'VoucherOpen', params: {orderId: id, orderType: type}})
}
},
fail: sheetFail => {
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'YearOrder', params: {yearType: 2}})
},3000)
}
})
},
// 取消支付
cancelPay() {
this.voucherState = false
uni.showToast({
title: '取消支付',
icon : 'none'
})
setTimeout(()=>{
this.$Router.replace({name: 'YearOrder', params: {yearType: 2}})
},3000)
},
// 上传凭证
clickOpen() {
this.voucherState = false
this.$Router.replace({name: 'VoucherOpen', params: {orderId: this.orderId, orderType: this.orderType}})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #111e4b;
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 150rpx;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 35%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 40rpx 30rpx;
box-sizing: border-box;
.top-cont-name {
font-weight: 600;
font-size: 44rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-text {
font-size: 34rpx;
color: #ffffff;
}
}
}
.idcardBorder {
padding: 30rpx;
box-sizing: border-box;
}
.idcardAdd-block {
padding: $padding + 20 $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius;
position: relative;
}
.idcardAdd-block-write {
background-color: #f7faff;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius-sm;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
display: flex;
width: 100%;
margin-bottom: 40rpx;
&:last-child {
margin-bottom: 0;
}
.idcardAdd-input {
width: 100%;
height: 100%;
display: flex;
border: none;
background-color: transparent;
font-size: 30rpx;
}
}
.idcardAdd-picker {
position: relative;
width: 100%;
}
.idcardAdd-picke-image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
.idcardAdd-block-name {
margin-bottom: $margin;
display: flex;
.idcardAdd-block-see {
color: $text-color;
margin-right: $margin;
font-size: 30rpx;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
}
.idcardAdd-aline {
display: flex;
position: absolute;
right: 0;
top: 0;
}
// 按钮
.idcardBtn {
background-color: #111e4b;
width: 100%;
padding: 20rpx 60rpx 60rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
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;
}
}
}
// 打款凭证弹出
.voucherBack {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
background-color: rgba(0, 0, 0, .6);
display: none;
&.active {
display: block;
}
}
.voucherPop {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
z-index: 100;
padding: 0 10%;
box-sizing: border-box;
display: none;
&.active {
display: -webkit-box;
}
.tipsWhite {
background-color: #ffffff;
border-radius: 20rpx;
position: relative;
.voucherPop-img {
position: absolute !important;
top: -80rpx;
right: calc(50% - 100rpx);
width: 200rpx;
}
.voucherPop-title {
box-sizing: border-box;
padding: 50rpx 70rpx;
margin-top: 100rpx;
text-align: center;
.voucherPop-name {
font-weight: 600;
font-size: 38rpx;
}
.voucherPop-text {
padding: 30rpx 0 35rpx;
line-height: 44rpx;
}
.voucherPop-btn {
display: flex;
.voucherPop-go {
flex: 2;
text-align: center;
border: 2rpx solid #da2b56;
color: #da2b56;
margin: 0 15rpx;
line-height: 74rpx;
border-radius: 10rpx;
background-color: #ffffff;
&.voucherPop-up {
background-color: #da2b56;
color: #ffffff;
}
}
}
}
}
}
</style>

View File

@@ -0,0 +1,357 @@
<template>
<view class="content">
<view class="top">
<view class="top-cont">
<view class="top-cont-name">上传打款凭证</view>
<view class="top-cont-text">请仔细填写以下信息</view>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<form @submit="issueForm" class="take">
<view class="take-label">
<view class="remarkText" v-if="type == 'edit'">
<view class="remarkText-name">驳回原因</view>
<view class="remarkText-text">{{remark}}</view>
</view>
<view class="item">
<view class="name">
<image src="@/static/icon/takeIcon_01.png" mode="widthFix"></image>收款银行
</view>
<view class="time">{{bankData.name}}</view>
</view>
<view class="item">
<view class="name">
<image src="@/static/icon/takeIcon_02.png" mode="widthFix"></image>收款银行帐号
</view>
<view class="time">{{bankData.no}}</view>
</view>
<view class="item">
<view class="name">
<image src="@/static/icon/takeIcon_03.png" mode="widthFix"></image>打款金额
</view>
<view class="entry">
<text></text>
<input type="digit" :value="price" name="price" placeholder-style="color: #000000" placeholder="请输入打款金额" />
</view>
</view>
<view class="item">
<view class="name">
<image src="@/static/icon/takeIcon_04.png" mode="widthFix"></image>转款账户
</view>
<input class="entry" type="text" :value="name" name="name" placeholder-style="color: #000000" placeholder="请输入转款人账户名" />
</view>
<view class="item">
<view class="name">
<image src="@/static/icon/takeIcon_05.png" mode="widthFix"></image>打款凭证
</view>
<view class="issueNew" @click="albumClick">
<image class="issueNew-icon" :src="showpath || '/static/imgs/cover_img.png'" mode="aspectFill"></image>
<view class="issueNew-text">请上传转款电子回单</view>
</view>
</view>
</view>
<view class="idcardBtn">
<button class="idcardBtn-go" form-type="submit" :disabled="disabled">{{disabled ? '数据正在提交中' : '确认提交'}}</button>
</view>
</form>
</view>
</template>
<script>
import { uploads } from '@/apis/interfaces/uploading'
import { bankInfo, offlineOpen, bankSee, bankEdit } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
orderType: '', // 订单类型
bankData : '', // 账户信息
price : '', // 打款金额
name : '', // 打卡账户
showpath : '', // 凭证图片
type : '', // 是否为编辑
remark : '', // 驳回原因
disabled : false, // 按钮状态
}
},
created() {
this.type = this.$Route.query.type
// 查看打款凭证-查看提交信息
this.yearServe();
// 查看提交信息
if(this.$Route.query.type == 'edit') {
bankSee(this.$Route.query.payId,{
order_type : this.$Route.query.orderType,
order_id : this.$Route.query.orderId
}).then(res => {
this.price = res.price
this.name = res.name
this.showpath = res.cover
this.remark = res.remark
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
},
methods: {
// 查看打款凭证
yearServe(page){
bankInfo().then(res => {
this.bankData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 请上传转款电子回单
albumClick() {
var _this = this
uni.chooseImage({
count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album','camera'], // way是点击时传入的打开方式相机或相册
success: path=> {
uploads([{
uri : path.tempFilePaths[0]
}]).then(res => {
this.showpath = res.url[0]
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
});
},
// 表单提交
issueForm(e) {
let value = e.detail.value;
let data = {
order_type : this.$Route.query.orderType,
order_id : this.$Route.query.orderId,
name : value.name,
price : value.price,
cover : this.showpath
}
if(this.$Route.query.type == 'edit') {
bankEdit(this.$Route.query.payId,data).then(res => {
this.disabled = true
uni.showToast({
title: '提交成功,请等待审核',
icon: "none"
})
setTimeout(()=>{
uni.navigateBack()
},2000)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
return
}
offlineOpen(data).then(res => {
this.disabled = true
uni.showToast({
title: '提交成功,请等待审核',
icon: "none"
})
setTimeout(()=>{
uni.navigateBack()
},2000)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #111e4b;
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 180rpx;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 40%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 40rpx 30rpx;
box-sizing: border-box;
.top-cont-name {
font-weight: 600;
font-size: 54rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 42%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-text {
font-size: 34rpx;
color: #ffffff;
}
}
}
.take {
padding: 30rpx;
box-sizing: border-box;
display: block;
}
.take-label {
background-color: #ffffff;
border-radius: $radius;
padding: 20rpx;
box-sizing: border-box;
}
.remarkText {
padding: 20rpx;
box-sizing: border-box;
background-color: #ffefef;
color: #dc3454;
border-radius: 15rpx;
margin: 20rpx;
width: calc(100% - 40rpx);
.remarkText-name {
margin-bottom: 10rpx;
font-weight: 600;
font-size: 34rpx;
}
}
.item {
padding:25rpx 20rpx 30rpx;
box-sizing: border-box;
font-size: 32rpx;
}
.name {
width: 100%;
display: flex;
line-height: 44rpx;
margin-bottom: 20rpx;
}
.name image {
width: 44rpx;
height: 44rpx;
margin-right: 15rpx;
}
.time {
width: 100%;
color: #9d9d99;
background-color: #f4f4f4;
padding: 0 16px;
height: 46px;
line-height: 46px;
box-sizing: border-box;
border-radius: 5px;
}
.entry {
width: 100%;
background-color: #f4f4f4;
font-size: 30rpx;
padding: 0 30rpx;
height: 84rpx;
line-height: 84rpx;
box-sizing: border-box;
border-radius: 10rpx;
display: flex;
input {
height: 84rpx;
line-height: 84rpx;
display: inline-block;
}
text {
padding-right: 15rpx;
}
}
.issueNew {
background-color: #f4f4f4;
text-align: center;
margin: 30rpx auto 0;
width: 400rpx;
height: 400rpx;
padding-top: 80rpx;
box-sizing: border-box;
border-radius: 15rpx;
}
.issueNew-icon {
width: 200rpx;
height: 200rpx;
}
.issueNew-text {
font-size: 28rpx;
color: #9d9d9d;
}
/* 按钮 */
// 按钮
.idcardBtn {
background-color: #111e4b;
width: 100%;
padding: 40rpx 0 120rpx;
box-sizing: border-box;
display: flex;
.idcardBtn-go {
width: 100%;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
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>

View File

@@ -0,0 +1,206 @@
<template>
<view class="content">
<view id="poster" class="poster">
<view class="top">
<view class="top-cont">
<image class="top-cont-img" src="https://cdn.douhuofalv.com/images/2023/04/24/a45643fc33ca42b7a430aee573a93da4.png" mode="widthFix"></image>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<view class="confirm">
<view class="confirm-white">
<view class="confirm-top">订单号 {{seekData.order_no}}</view>
<view class="confirm-list">
<view class="confirm-item" v-for="(item, index) in seekData.params">
<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-else><text v-if="item.key == 'price'"></text> {{item.value_text}}</view>
</view>
</view>
<view class="confirm-user">
<view class="confirm-user-text"><image src="https://cdn.douhuofalv.com/images/2023/04/20/c359f2fa277e6658157c7108f37d0d44.png" mode="widthFix"></image> 业务联系人</view>
<view class="confirm-user-name">{{parent.nickname}}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { VueCanvasPoster } from 'vue-canvas-poster'
import { yearOrderSee } from '@/apis/interfaces/synthesis'
import html2canvas from 'html2canvas';
export default {
components: {
VueCanvasPoster
},
data() {
return {
seekData : '', // 咨询详情数据
parent : '', // 联系人
isImgLay : false,
posterImg: "", //生成的海报图片路径
}
},
created() {
// 获取综法咨询-咨询详情
this.getBusiness();
},
methods: {
// 综法咨询-咨询详情
getBusiness(){
yearOrderSee(this.$Route.query.servicesId).then(res => {
this.seekData = res
this.parent = res.user.parent
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-image: linear-gradient(to bottom,#041f79, #111e4b);
width: 100vw;
height: 100%;
overflow-y: scroll;
position: absolute;
}
.poster {
background-image: linear-gradient(to bottom,#041f79, #111e4b);
}
.top {
position: relative;
height: 320rpx;
z-index: 4;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 35%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 80rpx 30rpx 0;
box-sizing: border-box;
text-align: center;
.top-cont-name {
font-weight: 600;
font-size: 74rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 70%);
background-image: -webkit-linear-gradient(to right,#f1c694, #fffbf6 70%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-img {
width: 90%;
margin-bottom: 15rpx;
}
}
}
.backImg {
width: 100%;
position: absolute;
left: 0;
top: 0;
}
.confirm {
padding: 0 30rpx 100rpx;
box-sizing: border-box;
position: relative;
top: 0;
left: 0;
z-index: 9;
width: 100%;
.confirm-white {
border-radius: 15rpx;
background-color: #ffffff;
position: relative;
&::after {
content: '';
position: absolute;
width: calc(100% - 80rpx);
height: 60rpx;
background-color: rgba(255, 255, 255, .3);
bottom: -30rpx;
left: 40rpx;
border-radius: 0 0 15rpx 15rpx;
}
&::before {
content: '';
position: absolute;
width: calc(100% - 160rpx);
height: 120rpx;
background-color: rgba(255, 255, 255, .1);
bottom: -60rpx;
left: 80rpx;
border-radius: 0 0 15rpx 15rpx;
}
.confirm-top {
background-color: #f7faff;
border-radius: 15rpx 15rpx 0 0;
line-height: 110rpx;
padding: 0 30rpx;
box-sizing: border-box;
font-weight: 600;
font-size: 34rpx;
}
.confirm-list {
padding: 10rpx 30rpx;
box-sizing: border-box;
.confirm-item {
line-height: 40rpx;
padding: 20rpx 0;
.confirm-item-label {
padding-bottom: 20rpx;
}
.confirm-item-text {
color: #666666;
background-color: #f6f6f6;
padding: 25rpx;
box-sizing: border-box;
border-radius: 10rpx;
text-align: justify;
line-height: 44rpx;
}
}
}
.confirm-user {
border-top: 2rpx solid #eeeeee;
line-height: 110rpx;
display: flex;
padding: 0 30rpx;
box-sizing: border-box;
font-weight: 600;
font-size: 34rpx;
color: #041f79;
.confirm-user-text {
flex: 1;
display: flex;
image {
width: 32rpx;
margin: 40rpx 15rpx 0 0;
}
}
}
}
}
</style>

View File

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

View File

@@ -0,0 +1,436 @@
<template>
<view class="content">
<view id="poster">
<view class="top">
<view class="top-cont">
<image class="top-cont-img" src="https://cdn.douhuofalv.com/images/2023/04/20/00d2121139a3ff56077a82ae6677e052.png" mode="widthFix"></image>
<view class="top-cont-name">法律咨询服务包</view>
</view>
<image class="top-img" src="https://cdn.douhuofalv.com/images/2023/04/20/2ea5fc20ffc90e7feec7ba2650b81c99.png" mode="widthFix"></image>
</view>
<!-- <image class="backImg" src="https://cdn.douhuofalv.com/images/2023/04/20/7d3fc55a3e41ea916f770bb1be3864af.png" mode="widthFix"></image> -->
<view class="confirm">
<view class="confirm-white">
<view class="confirm-top">订单号 {{seekData.order_no}}</view>
<view class="confirm-list">
<view class="confirm-item" v-for="(item, index) in seekData.params">
<view class="confirm-item-label">{{item.title}}</view>
<view class="confirm-item-text"><text v-if="item.key == 'price'"></text> {{item.value_text}}</view>
</view>
</view>
<view class="confirm-user">
<view class="confirm-user-text"><image src="https://cdn.douhuofalv.com/images/2023/04/20/c359f2fa277e6658157c7108f37d0d44.png" mode="widthFix"></image> 业务联系人</view>
<view class="confirm-user-name">{{parent.nickname}}</view>
</view>
</view>
<view class="idcardBtn">
<!-- <view class="idcardBtn-go active">立即咨询</view> -->
<!-- <view class="idcardBtn-go" @click="shareClick">保存图片</view> -->
<view class="idcardBtn-go" @click="toImg">保存图片</view>
</view>
</view>
<!-- 打卡海报 -->
<view class="postertBack" v-if="isImgLay"></view>
<view class="postert" v-if="isImgLay">
<view class="poster-Cont">
<image class="poster-Cont-img" :src="base64" mode="widthFix"></image>
</view>
<view class="sign-btn">
<view class="remove-btn">长按图片保存</view>
<view class="sign-img-block">
<button class="sign-img-btn" size="mini" @click="isImgLay = false">取消</button>
</view>
</view>
</view>
<!-- 海报canvas -->
<vue-canvas-poster :widthPixels="1000" :painting="paintings" @success="saveSuccess" @fail="saveFail"></vue-canvas-poster>
<!-- <image :src="base64" mode=""></image> -->
</view>
</view>
</template>
<script>
import { VueCanvasPoster } from 'vue-canvas-poster'
import { seekOrderSee } from '@/apis/interfaces/synthesis'
import html2canvas from 'html2canvas';
export default {
components: {
VueCanvasPoster
},
data() {
return {
seekData : '', // 咨询详情数据
parent : '', // 联系人
base64 : '',
isImgLay : false,
paintings : {
width: "375px",
height: "553px",
borderRadius: "10px",
background: "#111e4b",
views: [
//海报背景
{
type: "image",
url: "",
css: {
top: "0",
left: "0",
width: "375px",
height: "553px",
mode: 'aspectFill'
},
},
//订单号
{
type: "text",
text: '',
css: {
top: "172px",
left: "40px",
width: "375px",
fontWeight: "600",
fontSize: "16px",
color: "#000000"
},
},
// 文本一
{
type: "text",
text: '',
css: {
top: "220px",
left: "40px",
width: "375px",
fontSize: "16px",
color: "#000000"
},
},
// 文本二
{
type: "text",
text: '',
css: {
top: "255px",
left: "40px",
width: "375px",
fontSize: "16px",
color: "#000000"
},
},
// 文本二
{
type: "text",
text: '',
css: {
top: "290px",
left: "40px",
width: "375px",
fontSize: "16px",
color: "#000000"
},
},
// 文本二
{
type: "text",
text: '',
css: {
top: "325px",
left: "40px",
width: "375px",
fontSize: "16px",
color: "#000000"
},
},
],
},
posterImg: "", //生成的海报图片路径
}
},
created() {
// 获取综法咨询-咨询详情
this.getBusiness();
},
methods: {
// 综法咨询-咨询详情
getBusiness(){
// this.$Route.query.synthesisId
seekOrderSee(1).then(res => {
// console.log(res)
this.seekData = res
this.parent = res.user.parent
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
toImg() {
html2canvas(document.querySelector("#poster"), {
allowTaint: true,
backgroundColor: "white",
useCORS: true, //支持图片跨域
scale: 1,
}).then((canvas) => {
this.isImgLay = true
this.base64 = canvas.toDataURL('image/png')
});
},
// 保存图片
shareClick() {
this.paintings.views[0].url = "/static/imgs/shareBack.jpg"
this.paintings.views[1].text = "订单号:" + this.seekData.order_no
this.paintings.views[2].text = this.seekData.params[0].title + '' + this.seekData.params[0].value_text
this.paintings.views[3].text = this.seekData.params[1].title + '' + this.seekData.params[1].value_text
this.paintings.views[4].text = this.seekData.params[2].title + '' + this.seekData.params[2].value_text
this.paintings.views[5].text = this.seekData.params[3].title + '' + this.seekData.params[3].value_text
this.isImgLay = true
},
saveSuccess(src) {
// console.log(src)
this.posterImg = src;
},
saveFail(err) {
console.log('-----------')
console.log(err)
console.log('-----------')
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-image: linear-gradient(to bottom,#041f79, #111e4b);
width: 100vw;
height: 100%;
overflow-y: scroll;
position: fixed;
}
.top {
position: relative;
height: 320rpx;
z-index: 4;
.top-img {
position: absolute;
right: 0;
top: 0;
width: 35%;
}
.top-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding: 80rpx 30rpx 0;
box-sizing: border-box;
text-align: center;
.top-cont-name {
font-weight: 600;
font-size: 74rpx;
background-image: linear-gradient(to right,#f1c694, #fffbf6 70%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
margin-bottom: 10rpx;
}
.top-cont-img {
width: 30%;
margin-bottom: 15rpx;
}
}
}
.backImg {
width: 100%;
position: absolute;
left: 0;
top: 0;
}
.confirm {
padding: 0 30rpx 30rpx;
box-sizing: border-box;
position: relative;
top: 0;
left: 0;
z-index: 9;
width: 100%;
.confirm-white {
border-radius: 15rpx;
background-color: #ffffff;
position: relative;
&::after {
content: '';
position: absolute;
width: calc(100% - 80rpx);
height: 60rpx;
background-color: rgba(255, 255, 255, .3);
bottom: -30rpx;
left: 40rpx;
border-radius: 0 0 15rpx 15rpx;
}
&::before {
content: '';
position: absolute;
width: calc(100% - 160rpx);
height: 120rpx;
background-color: rgba(255, 255, 255, .1);
bottom: -60rpx;
left: 80rpx;
border-radius: 0 0 15rpx 15rpx;
}
.confirm-top {
background-color: #f7faff;
border-radius: 15rpx 15rpx 0 0;
line-height: 110rpx;
padding: 0 30rpx;
box-sizing: border-box;
font-weight: 600;
font-size: 34rpx;
}
.confirm-list {
padding: 10rpx 30rpx;
box-sizing: border-box;
.confirm-item {
display: flex;
line-height: 40rpx;
padding: 20rpx 0;
.confirm-item-label {
flex: 1;
width: 200rpx;
}
.confirm-item-text {
text-align: right;
width: calc(100% - 200rpx);
}
}
}
.confirm-user {
border-top: 2rpx solid #eeeeee;
line-height: 110rpx;
display: flex;
padding: 0 30rpx;
box-sizing: border-box;
font-weight: 600;
font-size: 34rpx;
color: #041f79;
.confirm-user-text {
flex: 1;
display: flex;
image {
width: 32rpx;
margin: 40rpx 15rpx 0 0;
}
}
}
}
// 按钮
.idcardBtn {
width: 100%;
display: flex;
margin-top: 120rpx;
padding-bottom: 100rpx;
.idcardBtn-go {
flex: 2;
margin: 0 15rpx;
background-image: linear-gradient(to bottom, #fff2d2, #f9cd9e);
color: #582700;
font-weight: 600;
font-size: 36rpx;
border-radius: $radius * 3;
height: 94rpx;
line-height: 94rpx;
box-shadow: 0 6rpx 10rpx rgba(0, 0, 0, .5);
text-align: center;
}
}
}
.postertBack {
width: 100vw;
height: 100vh;
position: fixed;
background-color: rgba(0,0,0,.6);
left: 0;
top: 0;
z-index: 9990;
}
.postert {
width: 100vw;
height: 100vh;
position: fixed;
left: 0;
top: 0;
z-index: 9999;
.poster-Cont {
background-color: #111e4b;
width: 80vw;
height: 55vh;
top: 20vh;
left: 10vw;
position: absolute;
box-sizing: border-box;
border-radius: $radius-m;
overflow: hidden;
.poster-Cont-img {
width: 100%;
height: 100%;
}
.poster-Cont-code {
position: absolute;
bottom: 250px;
left: 46px;
width: 140rpx;
height: 140rpx;
}
}
}
.sign-btn {
position: absolute;
top: 78vh;
width: 80%;
left: 10%;
z-index: 9999;
.remove-btn {
width: 100%;
line-height: 90rpx;
background-color: #bf9960;
color: #FFFFFF;
border-radius: $radius-m;
margin-top: $margin - 10;
text-align: center;
font-size: $title-size + 2;
}
.sign-img-block {
display: flex;
margin: 30rpx -10rpx 0;
.sign-img-btn {
flex: 2;
line-height: 90rpx;
background-color: #ffeeda;
border-radius: $radius-m;
text-align: center;
font-size: $title-size;
margin: 0 10rpx;
}
}
}
</style>

54
pages/user/appDown.vue Normal file
View File

@@ -0,0 +1,54 @@
<template>
<view class="content">
<image class="appDown-img" src="https://cdn.douhuofalv.com/images/2022/12/16/de62e7029d9297d3d053bf4de45566a7.png" mode="widthFix"></image>
<view class="appDown-btn">
<view class="appDown-btn-go">下载抖火APP</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {};
},
onShow() {},
methods:{
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #fed2da;
height: 100vh;
}
.appDown-img {
width: 100vw;
position: absolute;
top: 0;
left: 0;
}
.appDown-btn {
width: 100%;
position: absolute;
bottom: 10%;
left: 0;
z-index: 9;
text-align: center;
height: 100rpx;
.appDown-btn-go {
background-image: linear-gradient(to bottom, #f69341, #d72158);
border-radius: $radius;
color: #fff;
width: 65%;
margin: 0 auto;
line-height: 100rpx;
text-align: center;
}
}
</style>

156
pages/user/contract.vue Normal file
View File

@@ -0,0 +1,156 @@
<template>
<view class="content">
<!-- 合同信息 -->
<view class="block">
<view class="block-flex">
<label>合同ID</label>
<view class="block-val">{{id}}</view>
</view>
<view class="block-flex">
<label>合同数量</label>
<view class="nowrap block-val">{{files.length}}</view>
</view>
<view class="block-flex">
<label>附件数量</label>
<view class="nowrap block-val">{{attachments.length}}</view>
</view>
<view class="block-flex">
<label>创建时间</label>
<view class="nowrap block-val">{{created_at || '-'}}</view>
</view>
<view class="block-flex">
<label>更新时间</label>
<view class="nowrap block-val">{{updated_at || '-'}}</view>
</view>
</view>
<!-- 合同文件 -->
<view class="files-title">合同文件列表</view>
<view class="files">
<view class="files-flex" v-for="(item, index) in files" :key="index" @click="onPdf(item.fileName, item.downloadUrl)">
<view class="files-flex-title">{{item.fileName}}</view>
<view class="files-flex-id">{{item.fileId}}</view>
<image src="@/static/imgs/payArrow.png" class="files-flex-icon" mode="widthFix"></image>
</view>
</view>
<!-- 附件文件 -->
<view class="files-title">附件文件列表</view>
<view class="files">
<view class="files-flex" v-for="(item, index) in attachments" :key="index" @click="onPdf(item.fileName, item.downloadUrl)">
<view class="files-flex-title">{{item.fileName}}</view>
<view class="files-flex-id">{{item.fileId}}</view>
<image src="@/static/imgs/payArrow.png" class="files-flex-icon" mode="widthFix"></image>
</view>
</view>
</view>
</template>
<script>
import { getFlows } from '@/apis/interfaces/user.js'
export default {
data() {
return {
user : { name: '', mobile: '' },
id : '',
created_at : '',
updated_at : '',
files : [],
attachments : [],
urlGo : ''
};
},
onLoad() {},
created() {
// 获取合同数据
uni.showLoading({
title: '加载中...',
mask : true
})
getFlows(this.$Route.query.id).then(res => {
const { sign_flow_id, files, attachments, created_at, updated_at, user } = res
this.user = user
this.id = sign_flow_id
this.created_at = created_at
this.updated_at = updated_at
this.files = files
this.attachments = attachments
uni.hideLoading()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
onPdf(name, url){
uni.downloadFile({
url: url,
success: res => {
uni.navigateTo({
url: '/pages/filePreview?url=' + encodeURIComponent(res.tempFilePath)
})
}
})
// uni.navigateTo({
// url: '/pages/filePreview?url=' + encodeURIComponent(url)
// })
// uni.navigateTo({
// url: '/pages/filePreview?url=' + encodeURIComponent(url)
// })
// this.$Router.push({
// url: "/pages/filePreview",
// params: {
// url: url
// },
// })
// this.$Router.push({name: 'FilePreview', params: {url: url}})
}
}
}
</script>
<style lang="scss">
.content {
background-color: #f7f9fa;
overflow-y: scroll;
height: 100%;
position: absolute;
width: 100%;
padding: 30rpx;
box-sizing: border-box;
}
// 合同信息统计
.block {
background: white;
margin-bottom: 30rpx;
margin-top: 20rpx;
padding: 30rpx;
border-radius: $radius;
&-flex{
display: flex;
justify-content: space-between;
font-size: 30rpx;
line-height: 60rpx;
label{ color: gray; }
.block-val{ width: calc(100% - 200rpx); text-align: right; word-break:break-all; word-wrap: break-word; }
}
}
// 合同列表
.files{
background: white;
margin-bottom: 30rpx;
padding: 30rpx;
border-radius: $radius;
&-flex{
position: relative;
padding-right: 40rpx;
.files-flex-title{ font-weight: bold; font-size: 32rpx; }
.files-flex-id{ font-size: 28rpx; color: gray; }
.files-flex-icon{ position: absolute; right: 0; top: 50%; margin-top: -14rpx; width: 16rpx;}
}
}
.files-title{ padding-bottom: 20rpx; color: gray; font-size: 28rpx; }
</style>

237
pages/user/coupon.vue Normal file
View File

@@ -0,0 +1,237 @@
<template>
<view class="content">
<view class="tab">
<view class="tab-item" :class="{active : status == 'init'}" @click="tabClick('init')">
未使用
</view>
<view class="tab-item" :class="{active : status == 'used'}" @click="tabClick('used')">
已使用
</view>
<view class="tab-item" :class="{active : status == 'overdue'}" @click="tabClick('overdue')">
已过期
</view>
</view>
<view class="list" v-if="listsArr.length > 0">
<view class="list-item" :class="{active : status != 'init'}" v-for="(item, index) in listsArr" :key="index">
<view class="list-number" :class="{active : status != 'init'}">
{{item.price}}<text></text>
</view>
<view class="list-text">
{{item.title}}
</view>
<view class="list-btn">
<image v-if="status == 'init'" class="list-img" src="@/static/imgs/couponImg.png" mode="heightFix"></image>
<view class="list-see">
<view class="list-go" :class="{active : status != 'init'}">
<text @click="$Router.push({name: 'indexIntroduce'})" v-if="status == 'init'">去使用</text>
<text v-else-if="status == 'used'">已使用</text>
<text v-else>已过期</text>
</view>
<view class="list-time" :class="{active : status != 'init'}">
<block v-if="status == 'overdue'">已过期</block>
<block v-else>{{item.time.end_at}} 过期</block>
</view>
</view>
</view>
</view>
<!-- <view class="list-item active">
<view class="list-number active">
9.9<text></text>
</view>
<view class="list-text active">
抵扣券
</view>
<view class="list-btn">
<view class="list-see">
<view class="list-go active">
已使用
</view>
<view class="list-time active">
2022-11-10过期
</view>
</view>
</view>
</view> -->
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无优惠券</view>
</view>
</view>
</template>
<script>
import { coupons } from '@/apis/interfaces/user'
export default {
data() {
return {
status : 'init', // tab状态 init 未使用 used 已使用 overdue 已过期
listsArr: [], // 列表
};
},
onShow() {
// 获取基础信息
this.couponsInfo();
},
methods: {
// 基础信息
couponsInfo() {
coupons({
type : 2,
status : this.status
}).then(res => {
this.listsArr = res.lists
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// tab选择
tabClick(e) {
this.status = e
// 获取基础信息
this.couponsInfo();
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
// height: calc(100vh - 44px);
height: 100vh;
overflow-y: scroll;
}
.tab {
position: fixed;
left: 0;
top: 44px;
width: 100%;
height: 90rpx;
z-index: 99;
display: flex;
background-color: #ffffff;
.tab-item {
flex: 2;
line-height: 90rpx;
text-align: center;
font-size: $title-size-lg;
color: #80818e;
position: relative;
&::after {
position: absolute;
content: '';
left: calc(50% - 20rpx);
bottom: 0;
background-color: transparent;
width: 40rpx;
height: 6rpx;
}
&.active {
color: #0e1a2f;
}
&.active::after {
background-color: #0e1a2f;
}
}
}
.list {
padding: $padding;
box-sizing: border-box;
margin-top: 90rpx;
.list-item {
box-sizing: border-box;
background-color: #ff4835;
color: #ffffff;
border-radius: $radius;
margin-bottom: $margin;
display: flex;
height: 180rpx;
position: relative;
overflow: hidden;
width: 100%;
&.active {
background-color: #fceff1;
color: #eb4e3d;
}
.list-number {
font-size: $title-size + 20;
width: 200rpx;
line-height: 180rpx;
text-align: center;
border-right: 2rpx dashed #f09789;
text {
font-size: $title-size-m;
padding-left: 10rpx;
}
&.active {
border-color: #f3b0a8;
}
}
.list-text {
line-height: 180rpx;
font-weight: 600;
width: calc(100% - 440rpx);
padding: 0 $padding;
box-sizing: border-box;
&.active {
color: #000000;
}
}
.list-btn {
text-align: center;
width: 320rpx;
height: 180rpx;
position: relative;
.list-img {
position: absolute;
width: 100%;
height: 180rpx;
left: 0;
top: 0;
}
.list-see {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 2;
padding-left: $padding;
box-sizing: border-box;
.list-go {
background-color: #ffffff;
border-radius: $radius-m;
color: #ff4835;
display: inline-block;
font-size: $title-size-m;
font-weight: 600;
line-height: 58rpx;
padding: 0 $padding;
margin: $margin + 10 0 15rpx;
border: 2rpx solid #e54d37;
&.active {
border-color: #c9c9c9;
color: #c9c9c9;
}
}
.list-time {
color: #f4c745;
font-size: $title-size-sm;
&.active {
color: #aca9aa;
}
}
}
}
}
}
</style>

506
pages/user/index.vue Normal file
View File

@@ -0,0 +1,506 @@
<template>
<view class="content">
<!-- 临时 style="padding-top: 22%;" -->
<view class="userTop" :class="{active : !userLogin}">
<img class="userTop-back" src="@/static/imgs/userTop.png">
<view class="userTop-cont">
<view class="userTop-height" v-if="userLogin">
<view class="userTop-head">
<image :src="userData.avatar ? userData.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
</view>
<view class="userTop-text">
<view class="userTop-name">
{{userData.nickname}} <image v-if="userData.certification" class="userTop-icon" src="@/static/imgs/user_attestation.png"></image>
</view>
<view class="userTop-identity-tips">
普通用户 <image class="userTop-arrow" src="@/static/imgs/use_arrow.png"></image>
</view>
</view>
</view>
<view class="userTop-height" v-else @click="$Router.push({name: 'Login'})">
<view class="userTop-head">
<image src="@/static/imgs/default_myHead.png" mode="aspectFill"></image>
</view>
<view class="userTop-text">
<view class="userTop-login">
请先登录
</view>
</view>
</view>
<!-- 临时 style="display: none;" -->
<view class="userTop-see" v-if="userLogin">
<view class="userTop-label" @click="$Router.push({name: 'sheetIndex'})">
<view class="userSee-name">
金法咨询单
</view>
<view class="userSee-number" v-if="userData.business_orders_count">
{{ userData.business_orders_count.all}}<text></text>
</view>
<view class="userSee-tips">
精选专业法规大全
</view>
<block v-if="userData.business_orders_count">
<view class="userSee-new" v-if="userData.business_orders_count.all">
新订单
</view>
</block>
<img class="userSee-icon" src="@/static/imgs/userIcon_01.png">
</view>
<!-- @click="$Router.push({name: 'synthesisOrder'})" -->
<view class="userTop-label" @click="$Router.push({name: 'synthesisOrder'})">
<view class="userSee-name">
综法咨询单
</view>
<!-- v-if="userData.business_orders_count" -->
<view class="userSee-number" v-if="userData.business_orders_count">
{{synthesisAll}}<text></text>
</view>
<view class="userSee-tips">
支持精准匹配索引
</view>
<img class="userSee-icon" src="@/static/imgs/userIcon_02.png">
</view>
</view>
</view>
</view>
<!-- 临时 style="display: none;" -->
<view class="board" v-if="userLogin">
<view class="board-title">
数据看板
</view>
<view class="board-item" v-if="userData.business_orders_count">
<view class="board-lable" :class="{active : userData.business_orders_count.confirm_count}" @click="$Router.push({name: 'OrderModify'})">
<img class="board-icon" src="@/static/imgs/userBoard_01.png">
<view class="board-name">待确认方案</view>
<view class="board-number">{{userData.business_orders_count.confirm_count}}</view>
</view>
<view class="board-lable" :class="{active : userData.business_orders_count.modify_count}" @click="$Router.push({name: 'OrderAffirm'})">
<img class="board-icon" src="@/static/imgs/userBoard_02.png">
<view class="board-name active">修改订单资料</view>
<view class="board-number active">{{userData.business_orders_count.modify_count}}</view>
</view>
<view class="board-lable" :class="{active : userData.business_orders_count.diff_count}" @click="$Router.push({name: 'OrderMake'})">
<img class="board-icon" src="@/static/imgs/userBoard_03.png">
<view class="board-name">补交服务费</view>
<view class="board-number">{{userData.business_orders_count.diff_count}}</view>
</view>
</view>
</view>
<view class="tool">
<view class="tool-title">
其他工具
</view>
<view class="tool-item">
<view class="tool-lable" @click="$Router.push({name: 'indexCollect'})">
<img class="tool-icon" src="@/static/imgs/userTool_01.png">
<view class="tool-name">我的收藏</view>
</view>
<!-- style="display: none;" -->
<view class="tool-lable" @click="$Router.push({name: 'Manage'})">
<img class="tool-icon" src="@/static/imgs/userTool_03.png">
<view class="tool-name">信息管理</view>
</view>
<view class="tool-lable" @click="$Router.push({name: 'Coupon'})">
<img class="tool-icon" src="@/static/imgs/userTool_02.png">
<view class="tool-name">优惠券</view>
</view>
<view class="tool-lable" @click="$Router.push({name: 'Setup'})">
<img class="tool-icon" src="@/static/imgs/userTool_04.png">
<view class="tool-name">其他功能</view>
</view>
<!-- <view class="tool-lable" @click="$Router.push({name: 'Modify'})">
<img class="tool-icon" src="@/static/imgs/userTool_03.png">
<view class="tool-name">修改密码</view>
</view>
<view class="tool-lable" @click="$Router.push({name: 'Modify'})">
<img class="tool-icon" src="@/static/imgs/userTool_05.png">
<view class="tool-name">基本信息</view>
</view>
<view class="tool-lable" @click="outLogin" v-if="userLogin">
<img class="tool-icon" src="@/static/imgs/userTool_04.png">
<view class="tool-name">退出登录</view>
</view> -->
</view>
</view>
<view class="tool" v-if="listArr.length > 0">
<view class="tool-title">
常识推荐
</view>
<view class="list-item" >
<view class="list-item-label" v-for="(item, index) in listArr" :key="index" @click="$Router.push({name: 'indexDetails', params: {id: item.article_id}})" v-if="index<4">
<view class="list-item-img">
<!-- 5:6 -->
<image :src="item.cover" mode="widthFix"></image>
</view>
<view class="list-item-cont">
<view class="nowrap list-item-name">
{{item.title}}
</view>
<view class="list-item-see">
<image class="list-item-icon" src="@/static/imgs/indexSee.png"></image>{{item .clicks}} 游览
</view>
<view class="list-item-tips" v-for="(items, itemsIndex) in item.categories" :key="itemsIndex">
{{items.title}}
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { articleList } from '@/apis/interfaces/index'
import { userIndex } from '@/apis/interfaces/user'
import { synthesisCount } from '@/apis/interfaces/synthesis'
export default {
data() {
return {
userLogin : '', //登录状态
userData : {}, //用户数据
synthesisAll : '', // 综法数量
listArr : [], // 文章列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
};
},
onShow() {
if(this.$store.getters.getToken) {
this.userLogin = true
// 获取用户信息
this.userInfo();
// 获取综法订单数据数量
this.synthesisInfo();
}
// 获取文章列表
this.articleItem();
},
methods:{
// 用户信息
userInfo() {
userIndex().then(res => {
this.userData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 综法订单数据数量
synthesisInfo() {
synthesisCount({channel: 'self'}).then(res => {
this.synthesisAll = res.all
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 文章列表
articleItem(page) {
articleList({
category_id: 1,
page : page || 1
}).then(res => {
let list = this.listArr,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(res.data)
this.listArr = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
}
}
</script>
<style lang="scss" scoped>
.userTop {
position: relative;
width: 100%;
padding-top: 50%;
&.active {
padding-top: 22%;
}
.userTop-back,
.userTop-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.userTop-cont {
z-index: 2;
padding: $padding;
box-sizing: border-box;
.userTop-height {
height: 110rpx;
.userTop-head {
width: 110rpx;
height: 110rpx;
float: left;
border-radius: 50%;
overflow: hidden;
background-color: #fdeff0;
padding: 10rpx;
box-sizing: border-box;
image {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.userTop-text {
width: calc(100% - 150rpx);
float: left;
margin-left: 30rpx;
padding-top: $padding - 20;
box-sizing: border-box;
.userTop-login {
line-height: 90rpx;
font-weight: 600;
}
.userTop-name {
display: flex;
font-weight: 600;
margin-bottom: 8rpx;
.userTop-icon {
width: 38rpx;
height: 38rpx;
margin: 3rpx 0 0 10rpx;
}
}
.userTop-identity-tips {
font-size: $title-size-sm - 4;
display: inline-block;
box-sizing: border-box;
background-color: #fbe0e2;
border-radius: $radius-m;
padding: 0 10rpx;
line-height: 34rpx;
color: $mian-color;
.userTop-arrow {
width: 26rpx;
height: 26rpx;
vertical-align: -6rpx;
margin-left: 4rpx;
}
}
}
}
.userTop-see {
margin: $margin -15rpx;
display: flex;
.userTop-label {
flex: 2;
background-color: #ffffff;
border-radius: $radius-lg;
margin: 0 15rpx;
padding: $padding - 10 $padding - 10 $padding - 5;
box-sizing: border-box;
position: relative;
overflow: hidden;
.userSee-tips {
font-size: $title-size-sm - 4;
background-color: #fff6ea;
color: $yellow-color;
display: inline-block;
padding: 0 15rpx;
line-height: 40rpx;
border-radius: $radius-m - 4;
}
.userSee-number {
margin: 10rpx 0;
font-weight: 600;
text {
font-weight: normal;
font-size: $title-size-sm - 4;
padding-left: 5rpx;
}
}
&:last-child .userSee-tips {
background-color: #fff2f2;
color: $mian-color;
}
.userSee-icon {
width: 130rpx;
height: 130rpx;
position: absolute;
right: -20rpx;
bottom: -10rpx;
}
.userSee-new {
position: absolute;
top: -2rpx;
right: 20rpx;
font-size: $title-size-sm - 4;
transform: scale(.9);
background-color: $mian-color;
color: #ffffff;
padding: 0 10rpx;
line-height: 36rpx;
}
}
}
}
}
// 看板
.board {
padding: $padding $padding $padding - 15;
box-sizing: border-box;
.board-title {
font-weight: 600;
margin-bottom: 20rpx;
}
.board-item {
display: flex;
margin: 0 -15rpx;
.board-lable {
width: calc(33.33% - 30rpx);
box-shadow: 0 0 8rpx rgba(0, 0, 0, .05);
padding: $padding - 10 $padding - 5 $padding + 10;
box-sizing: border-box;
overflow: hidden;
border-radius: $radius-sm;
position: relative;
color: #969696;
margin: 0 15rpx;
&::after {
position: absolute;
content: '';
right: 15rpx;
top: 15rpx;
width: 12rpx;
height: 12rpx;
border-radius: 50%;
background-color: transparent;
}
&.active::after {
background-color: $mian-color;
}
.board-name {
margin-bottom: 20rpx;
font-size: $title-size-sm;
&.active {
color: #000000;
}
}
.board-number {
font-weight: 600;
color: #000000;
font-size: $title-size + 4;
&.active {
color: $mian-color;
}
}
.board-icon {
width: 74rpx;
height: 74rpx;
position: absolute;
bottom: 0;
right: 0;
}
}
}
}
// 工具
.tool {
padding: $padding $padding $padding - 15;
box-sizing: border-box;
.tool-title {
font-weight: 600;
margin-bottom: 20rpx;
color: $text-color;
}
.tool-item {
padding: $padding 0;
border-radius: $radius-sm;
display: flex;
.tool-lable {
flex: 4;
text-align: center;
font-size: 24rpx;
.tool-icon {
width: 56rpx;
height: 56rpx;
margin-bottom: 5rpx;
}
}
}
}
// 常识推荐
.list-item {
margin-top: $margin;
.list-item-label {
margin-bottom: $margin;
position: relative;
.list-item-img {
width: 200rpx;
height: 150rpx;
border:1px solid #d2d2d2;
border-radius: $radius - 10;
overflow: hidden;
box-sizing: border-box;
image {
width: 100%;
vertical-align:middle;
}
}
.list-item-cont {
position: absolute;
left: 0;
top: 0;
width: 100%;
padding-left: 220rpx;
box-sizing: border-box;
box-sizing: border-box;
.list-item-name {
color: $text-color;
line-height: 44rpx;
font-size: $title-size-m;
}
.list-item-see {
font-size: $title-size-sm - 4;
margin-top: 30rpx;
display: flex;
line-height: 30rpx;
.list-item-icon {
width: 30rpx;
height: 30rpx;
margin-right: 10rpx;
}
}
.list-item-tips {
font-size: $title-size-sm - 4;
display: inline-block;
color: #a1a1a1;
padding-left: 40rpx;
}
}
}
}
</style>

33
pages/user/invite.vue Normal file
View File

@@ -0,0 +1,33 @@
<template>
<view class="content">
</view>
</template>
<script>
import { inviteCode } from '@/apis/interfaces/user'
export default {
data() {
return {}
},
onShow() {
// 获取邀请码
this.inviteInfo();
},
methods: {
// 邀请码
inviteInfo(page) {
inviteCode().then(res => {
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
},
}
</script>
<style lang="scss">
</style>

71
pages/user/manage.vue Normal file
View File

@@ -0,0 +1,71 @@
<template>
<view class="content">
<view class="setupItem">
<view class="label" @click="$Router.push({name: 'userBase'})">
<view class="label-name">
<view class="label-name-text">基本信息</view>
</view>
<view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view>
</view>
<view class="label" @click="$Router.push({name: 'Ins'})">
<view class="label-name">
<view class="label-name-text">机构信息</view>
</view>
<view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
};
},
onShow() {},
methods:{}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
height: 100vh;
overflow-y: scroll;
}
.setupItem {
margin-bottom: $margin;
background-color: #ffffff;
.label {
line-height: 60rpx;
display: flex;
padding: $padding;
box-sizing: border-box;
border-bottom: 2rpx solid #f7f9fa;
&:last-child {
border: none;
}
.label-name {
display: flex;
flex: 1;
}
.label-tips {
display: flex;
.label-name-arrow {
width: 24rpx;
height: 24rpx;
margin-top: 18rpx;
}
}
}
}
</style>

466
pages/user/manageBank.vue Normal file
View File

@@ -0,0 +1,466 @@
<template>
<view class="content">
<view class="top" :class="{active : type}">
<view class="base">
<view class="base-tab">
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon//bankIcon_01_active.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
银行信息
</view>
<view class="base-tab-tips">
已完善
</view>
</view>
</view>
<view class="base-tab-spot">
<text></text>
<text></text>
<text></text>
</view>
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon/bankIcon_02_active.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
其他信息
</view>
<view class="base-tab-tips">
已完善
</view>
</view>
</view>
</view>
<view class="white">
<view class="base-title">
<view class="base-name">
银行信息
</view>
</view>
<view class="base-list">
<view class="base-block" :class="{baseAline : items.type === 'text' || items.type === 'textarea' }" v-for="(items, itemsIndex) in backParams" :key="itemsIndex">
<view class="base-block-name" v-if="items.label == 1">
<text>*</text>{{items.title}}
</view>
<!-- 单输入框 -->
<block v-if="items.label == 1">
<view class="base-block-write" v-if="items.type === 'price' || items.type === 'number' || items.type === 'text' || items.type === 'password' || items.type === 'mobile' || items.type === 'day'">
{{items.value || '--'}}
<text v-if="items.type === 'price'"></text>
<text v-else-if="items.type === 'day'"></text>
</view>
</block>
<!-- 日期 -->
<block v-if="items.label == 1">
<view class="base-block-write" v-if="items.type === 'date'">
{{items.value || '--'}}
</view>
</block>
<!-- 城市地址 -->
<block v-if="items.label == 1">
<view class="base-block-write" v-if="items.type === 'region'">
{{items.value || '--'}}
</view>
</block>
<!-- 办卡城市 -->
<block v-if="items.label == 1">
<view class="base-block-write" v-if="items.type === 'city'">
{{items.value || '--'}}
</view>
</block>
<!-- 单选 -->
<block v-if="items.label == 1">
<view class="idcardAdd-aline" v-if="items.type === 'radio'">
{{items.value_text || '--'}}
</view>
</block>
<!-- 多选 -->
<block v-if="items.label == 1">
<view class="idcardAdd-aline-more" v-if="items.type === 'checkbox'">
{{items.value_text || '--'}}
</view>
</block>
<!-- 描述 -->
<block v-if="items.label == 1">
<view class="base-block-textarea" v-if="items.type === 'textarea'">
{{items.value || '--'}}
</view>
</block>
<!-- 下拉框 -->
<block v-if="items.label == 1">
<view class="base-block-write" v-if="items.type === 'select'">
{{items.value_text || '--'}}
</view>
</block>
</view>
</view>
</view>
<view class="white">
<view class="base-title">
<view class="base-name">
其他信息
</view>
</view>
<view class="base-list">
<view class="base-block">
<block v-for="(items, itemsIndex) in backParams" :key="itemsIndex">
<view class="base-block-name" v-if="items.label == 2">
<text>*</text>{{items.title}}
</view>
<!-- 描述 -->
<block v-if="items.label == 2">
<view class="base-block-textarea" v-if="items.type === 'textarea'">
{{items.value || '--'}}
</view>
</block>
</block>
</view>
</view>
</view>
</view>
</view>
<view class="introduce-btn" v-if="type">
<button class="btn" size="mini" :disabled="disabled" @click="infoSubmit">提交审核</button>
</view>
</view>
</template>
<script>
import { BankSee, BankFirst } from '@/apis/interfaces/user'
import mouldCheckbox from '@/components/mould-checkbox.vue'
import mouldInput from '@/components/mould-input.vue'
import mouldRadio from '@/components/mould-radio.vue'
import mouldText from '@/components/mould-text.vue'
import mouldSelect from '@/components/mould_select.vue'
import mouldDate from '@/components/mould-date.vue'
export default {
components: {
mouldCheckbox,
mouldInput,
mouldRadio,
mouldText,
mouldSelect,
mouldDate
},
data() {
return {
disabled : false, // 按钮状态
bankData : '', // 基础信息
backParams: [], // 字段数组
values : '',
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
type : '',
}
},
onShow() {
// 获取基础信息
this.baseInfo();
this.type = this.$Route.query.type
},
methods: {
// 基础信息
baseInfo() {
BankSee(this.$Route.query.id).then(res => {
this.bankData = res
this.backParams = res.params
this.values = res.values
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 首次信息
infoSubmit() {
BankFirst(this.$Route.query.userId, this.$Route.query.id).then(res => {
this.disabled = true
uni.showToast({
title: res,
icon: "none"
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
uni.hideLoading()
}, 1500)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
position: relative;
height: 100vh;
overflow-y: scroll;
&.active {
border-bottom: 140rpx solid transparent;
}
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: absolute;
z-index: 9;
padding: $padding + 20 $padding;
box-sizing: border-box;
.base-tab {
overflow: hidden;
display: flex;
padding: 0 $padding 10rpx 10rpx;
position: relative;
.base-tab-item {
color: #ffffff;
position: relative;
display: flex;
.base-tab-img {
width: 120rpx;
height: 120rpx;
}
.base-tab-cont {
padding-top: $padding - 15;
box-sizing: border-box;
.base-tab-name {
font-size: $title-size-sm;
}
.base-tab-tips {
font-size: $title-size-sm - 2;
border: 2rpx solid #ffeaea;
border-radius: $radius * 4;
width: 110rpx;
text-align: center;
opacity: .8;
margin-top: 10rpx;
}
}
}
.base-tab-spot {
text-align: center;
width: 180rpx;
float: left;
margin-top: $margin;
text {
border-radius: 50%;
background-color: #ffffff;
display: inline-block;
margin-left: 15rpx;
&:nth-child(1) {
width: 10rpx;
height: 10rpx;
opacity: .5;
}
&:nth-child(2) {
width: 14rpx;
height: 14rpx;
opacity: .8;
}
&:nth-child(3) {
width: 16rpx;
height: 16rpx;
}
}
}
}
.white {
padding: $padding;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
margin-bottom: $margin;
&:last-child {
margin-bottom: 0;
}
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 0 -10rpx 0;
overflow: hidden;
.base-block {
// width: calc(50% - 20rpx);
width: calc(100% - 20rpx);
float: left;
position: relative;
.base-block-name {
margin: $margin + 20 0 $margin - 10;
color: #111111;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #111111;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding - 10 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-m;
line-height: 48rpx;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.idcardAdd-input {
display: flex;
flex: 1;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
text {
position: absolute;
right: $padding;
top: $padding - 10;
}
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
.idcardAdd-aline {
font-size: $title-size-m;
color: $mian-color;
position: absolute;
top: $padding + 20;
right: 0;
}
.idcardAdd-aline-more {
color: $mian-color;
font-size: $title-size-m;
padding: $padding - 10 $padding;
box-sizing: border-box;
background-color: #F6F6F6;
border-radius: $radius-sm;
}
}
.baseAline {
width: calc(100% - 20rpx);
}
}
}
}
}
.introduce-btn {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background-color: #f5f5f5;
text-align: center;
padding: $padding;
box-sizing: border-box;
z-index: 2000;
.btn {
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-sm;
width: 100%;
line-height: 90rpx;
font-size: $title-size;
&[disabled] {
background-color: #eba5a5;
}
}
}

433
pages/user/manageBase.vue Normal file
View File

@@ -0,0 +1,433 @@
<template>
<view class="content">
<view v-if="baseData != ''">
<view class="top" :class="{active : type}">
<view class="base">
<view class="white">
<view class="base-title">
<view class="base-name">
基本信息
</view>
</view>
<view class="base-list">
<view class="base-block">
<view class="base-block-name">
<text>*</text>姓名
</view>
<view class="base-block-write prohibit">
{{baseData.name}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>性别
</view>
<view class="base-block-write prohibit">
{{baseData.sex}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>年龄
</view>
<view class="base-block-write prohibit">
{{baseData.age}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>属相
</view>
<view class="base-block-write prohibit">
{{baseData.zodiak}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>身份证号
</view>
<view class="base-block-write prohibit">
{{baseData.id_card}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>身份证地址
</view>
<view class="base-block-write prohibit">
{{baseData.address}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>婚姻
</view>
<view class="base-block-write prohibit">
{{marriage}}
</view>
</view>
<view class="base-block" v-if="baseData.mate">
<view class="base-block-name">
<text>*</text>配偶
</view>
<view class="base-block-write prohibit">
{{baseData.mate}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>学历
</view>
<view class="base-block-write prohibit">
{{education}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>毕业学院
</view>
<view class="base-block-write prohibit">
{{baseData.school}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>联系电话
</view>
<view class="base-block-write prohibit">
{{baseData.mobile}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>联系地址
</view>
<view class="base-block-textarea">
{{baseData.contact_address}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>现单位名称
</view>
<view class="base-block-textarea">
{{baseData.now_company_name}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>现单位地址
</view>
<view class="base-block-textarea">
{{baseData.now_company_address}}
</view>
</view>
<view class="base-block baseAline">
<view class="base-block-name">
<text>*</text>现居住地址
</view>
<view class="base-block-textarea">
{{baseData.now_domicile}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人1姓名
</view>
<view class="base-block-textarea">
{{baseData.one_contact}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人1关系
</view>
<view class="base-block-textarea">
{{baseData.one_contact_relation}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人2姓名
</view>
<view class="base-block-textarea">
{{baseData.two_contact}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人2关系
</view>
<view class="base-block-textarea">
{{baseData.two_contact_relation}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人3姓名
</view>
<view class="base-block-textarea">
{{baseData.three_contact}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人3关系
</view>
<view class="base-block-textarea">
{{baseData.three_contact_relation}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人4姓名
</view>
<view class="base-block-textarea">
{{baseData.four_contact}}
</view>
</view>
<view class="base-block">
<view class="base-block-name">
<text>*</text>预留联系人4关系
</view>
<view class="base-block-textarea">
{{baseData.four_contact_relation}}
</view>
</view>
</view>
</view>
</view>
</view>
<view class="introduce-btn" v-if="type">
<button class="btn" size="mini" :disabled="disabled" @click="infoSubmit">提交审核</button>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无数据</view>
</view>
</view>
</template>
<script>
import { BaseSee, BaseFirst } from '@/apis/interfaces/user'
export default {
data() {
return {
disabled : false, // 按钮状态
baseData : '', // 基础信息
education : '', // 学历
marriage : '', // 婚姻
type : '',
}
},
onShow() {
// 获取基础信息
this.baseInfo();
this.type = this.$Route.query.type
},
methods: {
// 基础信息
baseInfo() {
BaseSee().then(res => {
this.baseData = res
if(res != ''){
this.education = res.educations[res.education]
this.marriage = res.marriages[res.marriage]
}
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 首次信息
infoSubmit() {
BaseFirst(this.$Route.query.userId, this.$Route.query.baseId).then(res => {
this.disabled = true
uni.showToast({
title: res,
icon: "none"
})
setTimeout(() => {
uni.navigateBack({
delta: 1
})
uni.hideLoading()
}, 1500)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
color: #ffffff;
position: relative;
height: 100vh;
overflow-y: scroll;
&.active {
border-bottom: 140rpx solid transparent;
}
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: absolute;
z-index: 9;
padding: $padding + 20 $padding;
box-sizing: border-box;
.white {
padding: $padding $padding 0;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 40rpx -10rpx 0;
overflow: hidden;
.base-block {
width: calc(50% - 20rpx);
margin: 0 10rpx $margin + 10;
float: left;
.base-block-name {
margin-bottom: $margin - 10;
color: #111111;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #999999;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding - 10 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-lg;
line-height: 48rpx;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
}
.baseAline {
width: calc(100% - 20rpx);
}
}
}
}
}
.introduce-btn {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
background-color: #f5f5f5;
text-align: center;
padding: $padding;
box-sizing: border-box;
z-index: 2000;
.btn {
background-color: $mian-color;
color: #ffffff;
border-radius: $radius-sm;
width: 100%;
line-height: 90rpx;
font-size: $title-size;
&[disabled] {
background-color: #eba5a5;
}
}
}

142
pages/user/manageIns.vue Normal file
View File

@@ -0,0 +1,142 @@
<template>
<view class="content">
<view class="list" v-if="insArr.length > 0">
<view class="label" v-for="(items, index) in insArr" :key="index" @click="$Router.push({name: 'userBank', params: {id: items.user_bank_id}})">
<view class="label-top">
<image class="label-logo" :src="items.institution.cover ? items.institution.cover : '/static/imgs/default_myBank.png'" mode="aspectFill"></image>
<view class="label-name">
{{items.institution.title}}
</view>
</view>
<view class="label-number">
<block v-if="items.card_no">尾号{{items.card_no.substr(-4)}}</block>
<block v-else>网贷信贷协商业务</block>
</view>
<view class="label-cont">
<view class="label-see">
<view class="label-see-text">
过期天数()
</view>
<view class="label-see-number">
{{items.overdue_time ? items.overdue_time : '--'}}
</view>
</view>
<view class="label-see">
<view class="label-see-text">
待还金额()
</view>
<view class="label-see-number label-see-red">
{{items.price ? items.price : '--'}}
</view>
<!-- <view class="label-see-write" v-if="items.canDo.bank">
需完善
</view> -->
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无数据</view>
</view>
</view>
</template>
<script>
import { BankList } from '@/apis/interfaces/user'
export default {
data() {
return {
insArr: [] // 机构列表
}
},
onShow() {
// 获取机构列表
this.insInfo();
},
methods: {
// 机构列表
insInfo() {
BankList().then(res => {
this.insArr = res
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
}
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f7f9fa;
height: 100vh;
overflow-y: scroll;
}
.list {
padding: $padding;
box-sizing: border-box;
.label {
background-color: #ffffff;
border-radius: $radius;
margin-bottom: $margin;
.label-top {
display: flex;
line-height: 54rpx;
border-bottom: 2rpx solid #F6F6F6;
padding: $padding - 10 $padding;
box-sizing: border-box;
.label-logo {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
border: 2rpx solid #ededed;
}
.label-name {
margin-left: 20rpx;
color: #858585;
font-size: $title-size-lg;
}
}
.label-number {
font-weight: 600;
padding: $padding $padding $padding $padding + 64rpx;
box-sizing: border-box;
}
.label-cont {
padding: 0 $padding $padding $padding + 64rpx;
box-sizing: border-box;
display: flex;
.label-see {
flex: 2;
.label-see-text {
font-size: $title-size-sm - 2;
color: #858585;
margin-bottom: 20rpx;
}
.label-see-number {
font-size: $title-size + 2;
font-weight: 600;
&.label-see-red {
color: $mian-color;
}
}
.label-see-write {
font-size: $title-size-sm - 2;
background-color: #ffede3;
color: #e39b7f;
display: inline-block;
border-radius: $radius-m;
padding: 0 15rpx;
line-height: 42rpx;
margin-top: 10rpx;
}
}
}
}
}
</style>

327
pages/user/manageOther.vue Normal file
View File

@@ -0,0 +1,327 @@
<template>
<view class="content">
<view class="top">
<view class="base">
<view class="base-tab">
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon//bankIcon_01.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
银行信息
</view>
<view class="base-tab-tips" @click="$Router.replace({name: 'userBank'})">
去查看 >
</view>
</view>
</view>
<view class="base-tab-spot">
<text></text>
<text></text>
<text></text>
</view>
<view class="base-tab-item">
<image class="base-tab-img" src="/static/icon/bankIcon_02_active.png" mode="aspectFill"></image>
<view class="base-tab-cont">
<view class="base-tab-name">
其他信息
</view>
<view class="base-tab-tips">
已完善
</view>
</view>
</view>
</view>
<view class="white">
<view class="base-title">
<view class="base-name">
基本信息
</view>
</view>
<view class="base-list">
<view class="base-block">
<block v-for="(items, itemsIndex) in backParams" :key="itemsIndex">
<view class="base-block-name" v-if="items.label == 2">
<text>*</text>{{items.title}}
</view>
<!-- 描述 -->
<block v-if="items.label == 2">
<view class="base-block-textarea" v-if="items.type === 'textarea'">
{{items.value || '--'}}
</view>
</block>
</block>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { userBank, bankPut } from '@/apis/interfaces/user'
import mouldCheckbox from '@/components/mould-checkbox.vue'
import mouldInput from '@/components/mould-input.vue'
import mouldRadio from '@/components/mould-radio.vue'
import mouldText from '@/components/mould-text.vue'
import mouldSelect from '@/components/mould_select.vue'
import mouldDate from '@/components/mould-date.vue'
export default {
components: {
mouldCheckbox,
mouldInput,
mouldRadio,
mouldText,
mouldSelect,
mouldDate
},
data() {
return {
disabled : false, // 按钮状态
bankData : '', // 基础信息
backParams: [], // 字段数组
values : '',
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
}
},
onShow() {
// 获取基础信息
this.baseInfo();
},
methods: {
// 基础信息
baseInfo() {
userBank(this.$Route.query.id).then(res => {
this.bankData = res
this.backParams = res.params
this.values = res.values
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 提交信息
infoSubmit() {
}
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #f5f5f5;
position: relative;
height: 100vh;
overflow-y: scroll;
&::after {
content: '';
position: absolute;
background-color: $mian-color;
border-radius: 0 0 $radius*5 $radius*5;
width: 100%;
height: 260rpx;
left: 0;
top: 0;
}
.base {
position: absolute;
z-index: 9;
padding: $padding + 20 $padding;
box-sizing: border-box;
.base-tab {
overflow: hidden;
display: flex;
padding: 0 $padding 10rpx 10rpx;
position: relative;
.base-tab-item {
color: #ffffff;
position: relative;
display: flex;
.base-tab-img {
width: 120rpx;
height: 120rpx;
}
.base-tab-cont {
padding-top: $padding - 15;
box-sizing: border-box;
.base-tab-name {
font-size: $title-size-sm;
}
.base-tab-tips {
font-size: $title-size-sm - 2;
border: 2rpx solid #ffeaea;
border-radius: $radius * 4;
width: 110rpx;
text-align: center;
opacity: .8;
margin-top: 10rpx;
}
}
}
.base-tab-spot {
text-align: center;
width: 180rpx;
float: left;
margin-top: $margin;
text {
border-radius: 50%;
background-color: #ffffff;
display: inline-block;
margin-left: 15rpx;
&:nth-child(1) {
width: 10rpx;
height: 10rpx;
opacity: .5;
}
&:nth-child(2) {
width: 14rpx;
height: 14rpx;
opacity: .8;
}
&:nth-child(3) {
width: 16rpx;
height: 16rpx;
}
}
}
}
.white {
padding: $padding $padding 0;
box-sizing: border-box;
background-color: #ffffff;
border-radius: $radius-m;
overflow: hidden;
.base-title {
display: flex;
line-height: 38rpx;
.base-name {
flex: 1;
color: $mian-color;
font-weight: 600;
font-size: $title-size + 2;
}
.base-number {
color: #999999;
font-size: $title-size-m;
}
}
.base-list {
margin: 0 -10rpx 0;
overflow: hidden;
.base-block {
// width: calc(50% - 20rpx);
width: calc(100% - 20rpx);
margin: 0 10rpx $margin + 10;
float: left;
position: relative;
.base-block-name {
margin: $margin + 20 0 $margin - 10;
color: #111111;
text {
color: $mian-color;
padding-right: 10rpx;
}
}
.base-block-textarea {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: $padding;
font-size: $title-size-lg;
color: #111111;
}
.base-block-write {
background-color: #F6F6F6;
border-radius: $radius-sm;
padding: 0 $padding;
box-sizing: border-box;
position: relative;
display: flex;
color: #111111;
font-size: $title-size-m;
height: 84rpx;
line-height: 84rpx;
&.prohibit {
color: #999999;
}
.idcardAdd-picker {
width: 100%;
height: 100%;
}
.base-block-input {
width: 100%;
height: 100%;
font-size: $title-size-lg;
}
.base-block-textarea {
padding: $padding 0;
}
.idcardAdd-input {
display: flex;
flex: 1;
}
.placeholderClass {
color: #999999;
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: $margin;
}
}
.base-block-site {
display: flex;
margin: 0 -5rpx;
.base-site-white {
background-color: #F6F6F6;
border-radius: $radius-sm;
flex: 3;
color: #111111;
font-size: $title-size-lg;
height: 84rpx;
line-height: 84rpx;
padding: 0 $padding - 10 0 $padding;
box-sizing: border-box;
position: relative;
margin: 0 5rpx;
width: 100%;
.picker {
width: calc(100% - 30rpx)
}
image {
width: 24rpx;
height: 24rpx;
position: absolute;
top: $margin;
right: 0;
}
}
}
.idcardAdd-aline {
font-size: $title-size-m;
color: $mian-color;
position: absolute;
top: 0;
right: 0;
}
}
.baseAline {
width: calc(100% - 20rpx);
}
}
}
}
}

372
pages/user/orderAffirm.vue Normal file
View File

@@ -0,0 +1,372 @@
<template>
<view class="content">
<block v-if="modifyList.length > 0">
<view class="backTop">
<!-- <view class="backTop-search">
<image class="search-img" src="/static/icon/searchIcon.png" mode="aspectFill"></image>
<input class="search-input" confirm-type="search" placeholder-class= "phsy" placeholder="搜索" />
</view> -->
</view>
<view class="backBottom">
<view class="list" v-for="(item, index) in modifyList" :key="index">
<view class="item borderBottom">
<view class="item-name">
<!-- 订单号 -->
{{item.order.order_no}}
</view>
</view>
<!-- start 待判断 -->
<view class="item" v-if="item.order.service_count">
<view class="item-label">
业务类型
</view>
<view class="item-text" @click="typeState(index)">
<block v-for="(typeItem, index) in item.order.item_type">
<block v-if="typeItem.number > 0">
{{typeItem.title}}x{{typeItem.number}}
</block>
</block>
<image class="item-text-arrow" src="@/static/imgs/openArrow_grey.png" mode="widthFix"></image>
</view>
</view>
<view class="baleShow" v-if="item.typeShow">
<view class="baleColor">
<view class="baleShow-label" v-for="(businessItem, index) in item.order.items">
<view class="baleShow-name">
{{businessItem.institution.title}}{{businessItem.business_type.title}}
</view>
<view class="baleShow-number">
{{businessItem.price}}
</view>
</view>
</view>
</view>
<!-- end 待判断 -->
<view class="item">
<view class="item-label">
下单日期
</view>
<view class="item-text">
{{item.created_at}}
</view>
</view>
<view class="item">
<view class="item-label">
修改内容
</view>
<view class="item-text">
{{item.item_type_text}}
</view>
</view>
<view class="item">
<view class="item-label">
修改数量
</view>
<view class="item-text">
{{item.count}}
</view>
</view>
<view class="item">
<view class="item-label">
修改类型
</view>
<view class="item-text" v-if="item.item_type_value == 1">
{{item.item_type_content}}
</view>
<view class="item-text" v-else>
{{item.item_type_content.institution}}
<view class="item-text-tips">
{{item.item_type_content.type}}
</view>
</view>
</view>
<view class="btn">
<view class="btn-user" @click="callPhone(item.order.manager.username)">
<image class="btn-user-head" :src="item.order.manager.avatar ? item.order.manager.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
<view class="btn-user-cont">
<view class="btn-user-name">{{item.order.manager.nickname}}</view>
<view class="btn-user-tips">业务咨询</view>
</view>
</view>
<view class="btn-lable">
<view class="btn-lable-go" @click="$Router.push({name: 'sheetSpeed', params: {id: item.order.business_order_id}})">
去修改
</view>
</view>
</view>
</view>
<view class="pagesLoding" v-if="lodingStats">
<block v-if="page.has_more">
<image class="pagesLodingIcon" src="/static/icons/refresh_loding.gif" mode="widthFix"></image>加载中...
</block>
<block v-else>
没有更多了~
</block>
</view>
</view>
</block>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png"></image>
<view>暂无订单</view>
</view>
</view>
</template>
<script>
import { myAffirm } from '@/apis/interfaces/user'
export default {
data() {
return {
modifyList : [], // 列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
}
},
onShow() {
// 获取需要修改的订单
this.modifyInfo();
},
methods: {
// 需要修改的订单
modifyInfo(page) {
myAffirm({
page : page || 1
}).then(res => {
let esArr = res
esArr.forEach((item, index) => {
item.typeShow = false
})
this.modifyList = esArr
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 拨打电话
callPhone(e) {
uni.makePhoneCall({
phoneNumber: e
})
},
// 列表展开
typeState(index) {
var listData = this.modifyList
var helpFlag = this.modifyList[index].typeShow
listData.forEach((item) => {
item.typeShow = false
})
listData[index].typeShow = !helpFlag
this.modifyList = listData
},
// 页面相关事件处理函数--监听用户下拉动作
onPullDownRefresh() {
// 需要修改的订单
this.modifyInfo();
},
// 上拉加载
onReachBottom(){
this.lodingStats = true
let pageNumber = this.page.current
if(this.page.has_more){
pageNumber++
// 需要修改的订单
this.modifyInfo(pageNumber);
}
}
}
}
</script>
<style lang="scss">
.content{
background: #f4f4f4;
height: 100vh;
overflow-y: scroll;
}
.backTop {
height: 120rpx;
background-color: $mian-color;
padding: $padding * 2 $padding $padding;
border-radius: 0 0 $radius * 2 $radius * 2;
box-sizing: border-box;
.backTop-search {
background-color: #dd447b;
line-height: 90rpx;
height: 90rpx;
border-radius: $radius * 2;
padding: 10rpx $padding;
box-sizing: border-box;
display: flex;
.search-img {
width: 34rpx;
height: 34rpx;
margin-top: 20rpx;
}
.search-input {
display: inline-block;
height: 100%;
width: calc(100% - 34rpx);
color: #fff;
text-align: center;
.phsy {
color: #fff;
}
}
}
}
.backBottom {
margin-top: -80rpx;
padding: 0 $padding;
box-sizing: border-box;
.list {
border-radius: $radius-lg;
background-color: #ffffff;
margin-bottom: 30rpx;
.borderBottom {
border-bottom: 2rpx solid #f7f7f7;
}
.baleShow {
padding: 0 $padding;
box-sizing: border-box;
.baleColor {
background-color: #FFF3F7;
padding: 10rpx $padding;
box-sizing: border-box;
border-radius: $radius-m;
.baleShow-label {
display: flex;
font-size: $title-size-sm;
line-height: 54rpx;
color: #111111;
.baleShow-name {
flex: 1;
}
}
}
}
.item {
padding: $padding;
box-sizing: border-box;
padding-bottom: $padding;
display: flex;
font-size: $title-size-lg;
line-height: 44rpx;
.item-name {
font-size: $title-size-lg;
flex: 1;
}
.item-label {
flex: 1;
color: #999999;
}
.item-quantity {
background-color: #FFF5EA;
color: #FFA031;
font-size: $title-size-sm;
padding: 0 20rpx;
border-radius: $radius;
&.gery {
background-color: #f5f5f5;
color: #999999;
}
}
.item-text {
text-align: right;
display: flex;
.item-text-go {
font-size: $title-size-sm - 2;
border: 2rpx solid $mian-color;
color: $mian-color;
padding: 0 10rpx;
border-radius: $radius-m;
margin: 3rpx 10rpx 0 0;
height: 38rpx;
line-height: 38rpx;
}
text {
font-size: $title-size-m;
padding-left: 10rpx;
}
.item-text-tips {
border: 2rpx solid $mian-color;
color: $mian-color;
height: 32rpx;
line-height: 32rpx;
font-size: $title-size-sm - 2;
border-radius: $radius * 2;
padding: 0 15rpx;
margin: 6rpx 0 0 15rpx;
}
}
.item-text-arrow {
width: 22rpx;
margin-left: 10rpx;
margin-top: 10rpx;
}
}
.btn {
display: flex;
padding: $padding $padding - 10;
box-sizing: border-box;
border-top: 2rpx solid #f7f7f7;
.btn-user {
flex: 1;
line-height: 54rpx;
display: flex;
.btn-user-head {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
}
.btn-user-cont {
display: flex;
font-size: $title-size-sm;
.btn-user-name {
padding: 0 $padding - 10;
line-height: 60rpx;
}
.btn-user-tips {
background-color: #FBE7EE;
color: $mian-color;
height: 44rpx;
line-height: 44rpx;
font-size: $title-size-sm - 2;
border-radius: $radius * 2;
padding: 0 15rpx;
margin-top: 8rpx;
}
}
}
.btn-lable {
font-size: $title-size-sm;
display: flex;
.btn-lable-go {
height: 54rpx;
line-height: 54rpx;
text-align: center;
background-color: #FBAF3B;
border: 2rpx solid transparent;
color: #ffffff;
border-radius: $radius * 2;
width: 140rpx;
}
}
}
}
}
.reveal-no {
padding: 40% 0;
}
</style>

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