[抖火申请支付]

This commit is contained in:
2023-05-15 13:33:00 +08:00
commit c503bff7d2
294 changed files with 25144 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
}

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

@@ -0,0 +1,46 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
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,
})
}
export {
ums,
umsOrder,
umsDiff,
umsState
}

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

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

@@ -0,0 +1,363 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
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
})
}
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
}

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,63 @@
<template>
<view>
<block v-if="inputType == 'price'">
<input type="digit" placeholder="请输入" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
<text></text>
</block>
<block v-else-if="inputType == 'number'">
<input type="number" placeholder="请输入" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
<block v-else-if="inputType == 'day'">
<input type="number" placeholder="请输入" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
<text></text>
</block>
<block v-else-if="inputType == 'password'">
<input type="text" password placeholder="请输入" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
<block v-else-if="inputType == 'mobile'">
<input type="number" maxlength="11" placeholder="请输入" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
</block>
<block v-else>
<input v-if="inputKey == 'card_no'" type="number" placeholder="请输入" placeholder-class="placeholderClass" :value="blurValue" @blur="blurInput"/>
<input v-else type="text" placeholder="请输入" 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 : ''
}
},
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>

38
main.js Normal file
View File

@@ -0,0 +1,38 @@
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)
//微信支付
Vue.prototype.$wx = require('jweixin-module')
Vue.prototype.$store = store
Vue.prototype.$webUni = webUni
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
}
}
}
}

78
package-lock.json generated Normal file
View File

@@ -0,0 +1,78 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"@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/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=="
},
"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=="
},
"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=="
},
"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=="
},
"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=="
},
"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"
}
},
"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"
}
}
}
}

15
package.json Normal file
View File

@@ -0,0 +1,15 @@
{
"main": "main.js",
"dependencies": {
"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",
"vuex": "^4.1.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "张慢慢"
}

439
pages.json Normal file
View File

@@ -0,0 +1,439 @@
{
"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/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"
}
}
],
"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>

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>

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

@@ -0,0 +1,926 @@
<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, lawyersBusiness } from '@/apis/interfaces/index'
import { userIndex } from '@/apis/interfaces/user'
export default {
data() {
return {
autoplay : true,
interval : 3000,
duration : 500,
homeData : {}, // 首页数据
homeList : '', // 首页分类
lawyersWork : [], // 律师业务
lawyersArr : [], // 精选律师
noticesArr : [], // 公告列表
articleArr : [], // 文章分类
categoryId : 1, // 文章分类id
listArr : [], // 文章列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
generalShow : false, // 是否有上级弹出
parentData : '',
first : 1,
layadState : '',
layadImg : '',
haveimg : ''
}
},
onShow() {
// 获取首页数据
this.homeInfo();
// 获取律师业务
this.lawyersInfo();
// 获取文章分类
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"
})
})
},
// 获取律师业务
lawyersInfo() {
lawyersBusiness().then(res => {
this.lawyersWork = res
}).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;
}
}
}
}
}
// 工具
.tool {
padding: $padding - 20 $padding - 20 $padding;
box-sizing: border-box;
.tool-lable {
white-space: nowrap;
.tool-lable-item {
display: inline-block;
font-size: $title-size-m;
width: 20%;
text-align: center;
color: $text-color;
.tool-lable-img {
width: 54rpx;
height: 54rpx;
}
}
}
}
// 法律常识
.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>

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

@@ -0,0 +1,234 @@
<template>
<view class="content">
<image @click="sheetClick" class="introduce-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.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',
url: 'https://rule.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>

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

@@ -0,0 +1,229 @@
<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.douhuofalv.com/webview/webCode'
// url: 'https://web.douhuotest.douhuofalv.com/webview/webCode',
url: 'https://rule.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>

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

@@ -0,0 +1,29 @@
<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.name).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: {name : 'secret'}})">隐私协议</view><view @click="$Router.push({name: 'Agreement', params: {name : 'protocol'}})">服务协议</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,624 @@
<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="limitIndex.toString()" :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 } 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: ''
}
},
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() {
userBank(this.$Route.query.id).then(res => {
let storageName = uni.getStorageSync('saveArr' + this.$Route.query.id);
let { params } = res;
let newParams = new Array;
if(storageName){
newParams = params.map(val => {
let storageNameIndex = storageName.findIndex(e => e.key === val.key)
if( storageNameIndex >= 0){
val.value = storageName[storageNameIndex].value
}
return val
})
}
this.backParams = newParams.length > 0 ? newParams : params
this.userId = res.business_order_user_bank_id
// 是否使用首次录入信息
if(res.is_finish == 0 && res.user_bank) {
this.popFirst = true
this.baseId = res.user_bank.user_bank_id
}
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 临时保存 - 缓存
cacheSave() {
let SaveArr = new Array;
this.backParams.map(val => {
SaveArr.push({
key: val.key,
value: val.value
})
})
uni.setStorage({
key : "saveArr" + this.$Route.query.id,
data: SaveArr
})
uni.showToast({
title: '保存成功',
icon: "none"
})
},
// 下一步
nextStep(){
let newSaveArr = this.backParams.map(val => {
return {
key: val.key,
value: val.value == null ? '' : val.value
}
})
// 临时保存
uni.setStorage({
key : "saveArr" + this.$Route.query.id,
data: newSaveArr
})
// 跳转
this.$router.push({
name: 'ModifyOther',
params: {
data: newSaveArr,
id: this.$Route.query.id
}
})
},
// 提示组件 -- 赋值
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,650 @@
<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.mobile.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.district_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.district_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>
</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 : '', // 联系地址
// 查看提示组件
seeData : {
seeShow : false,
seeTitle: '',
seeText : '',
},
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
cityPicker : [],
}
},
onLoad() {
// 获取基础信息
this.baseInfo();
},
created() {
uni.showLoading({
title: '加载中...',
mask : true
})
createAll().then(res => {
this.cityPicker = res;
}).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.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;
}
}
},
// 选择城市
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.province_id,
city_id : this.baseData.city_id,
district_id : this.baseData.district_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"
})
})
},
// 提示组件 -- 赋值
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;
}
}
.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,406 @@
<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}}
</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>
</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 {
baseId : '', // 银行id
businessId: '',
disabled : false, // 按钮状态
backParams: '', // 基础信息
values : '',
marriage: [],
marriageIndex : 0, // 婚姻选择index
education: [],
educationIndex: 0, // 学历选择index
}
},
onShow() {
this.baseId = this.$Route.query.id
// 获取基础信息
this.baseInfo();
},
methods: {
// 基础信息
baseInfo() {
userBank(this.$Route.query.id).then(res => {
let storageName = this.$Route.query.data;
let { params } = res;
let newParams = new Array;
if(storageName){
newParams = params.map(val => {
let storageNameIndex = storageName.findIndex(e => e.key === val.key)
if( storageNameIndex >= 0){
val.value = storageName[storageNameIndex].value
}
return val
})
}
this.backParams = newParams.length > 0 ? newParams : params
this.businessId = res.business_order_user_bank_id
}).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.businessId, {
data: SaveArr
}).then(res => {
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"
})
})
}
}
}
</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;
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: #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;
}
}
}

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

@@ -0,0 +1,210 @@
<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',
url: 'https://rule.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>

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

@@ -0,0 +1,792 @@
<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>咨询类型
</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">
<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>
</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 : '', // 温馨提示
}
},
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: {
// 获取主业务
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, old, index){
let { value } = e.detail;
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>

630
pages/sheet/basic备份.vue Normal file
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>

148
pages/sheet/create.vue Normal file
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>

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>

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

@@ -0,0 +1,340 @@
<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
console.log(this.typeArray)
},
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>

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

@@ -0,0 +1,252 @@
<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",
redirect_url: "https://rule.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>

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

@@ -0,0 +1,951 @@
<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 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.value == 10">
{{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> -->
<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",
redirect_url: "https://rule.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>

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

@@ -0,0 +1,218 @@
<template>
<view class="content">
<view class="sheet">
<image class="sheet-img" v-if="type == 1" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2022/11/30/cb0654de804d11905d2bb539e2fb5f24.jpg" mode="widthFix"></image>
<image class="sheet-img" v-else-if="type == 2" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.com/images/2022/11/30/365f75baeaa1b4c5d041dce7f5ad6867.jpg" mode="widthFix"></image>
<image class="sheet-img" v-else src="https://douhuo-storage.oss-cn-beijing.aliyuncs.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',
url: 'https://rule.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>

550
pages/sheet/pay.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>{{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('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>
<view class="paymentBtn" v-if="Payment != 'umsMp'">
<button class="paymentBtn-go" type="default" @click="payClick" :disabled="disabled">立即支付</button>
</view>
<view class="paymentBtn" v-else>
<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="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 VConsole from 'vconsole';
import { Apply, Wechat } from '@/apis/interfaces/index'
import { ums, umsState } from '@/apis/interfaces/pay'
export default {
data() {
return {
token : '', // 登录token
tradeId : '', // 微信支付id
Payment : '', // 支付类型
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)
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()
}
},
// 微信支付
payClick() {
if(this.Payment === '') {
uni.showToast({
title: '请选择支付方式',
icon: 'none'
})
return
}
if(this.Payment === 'umsMp' || this.Payment === 'umsAli'){
this.UMSPay()
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"
})
})
},
// 新银联商务支付
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'
})
})
},
// 优惠券-点击
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;
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>

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

@@ -0,0 +1,344 @@
<template>
<view class="content">
<view class="paymentTop">
<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 = 'wxpay'" class="paymentList-label">
<image class="paymentList-icon" src="@/static/imgs/payWechat.png" mode="widthFix"></image>
<image class="paymentList-img" :src="payTypeVal == 'wxpay' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
微信
</view> -->
<view @click="onUmsPay('mp')" class="paymentList-label">
<!-- <image class="paymentList-icon" src="@/static/imgs/minPay.png" mode="widthFix"></image> -->
<image class="paymentList-img" :src="payTypeVal == 'umsWx' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>微信支付银联商务
</view>
<view @click="payTypeVal = 'alipay'" class="paymentList-label">
<!-- <image class="paymentList-icon" src="@/static/imgs/aliPay.png" mode="widthFix"></image> -->
<image class="paymentList-img" :src="payTypeVal == 'alipay' ? '/static/imgs/payCheck_active.png' : '/static/imgs/payCheck.png'" mode="widthFix"></image>
支付宝银联商务
</view>
</view>
</view>
<view class="paymentBtn" v-if="payTypeVal != 'umsWx'">
<button type="default" class="paymentBtn-go" :disabled="disabled" @click="payChick">
立即支付
</button>
</view>
<view class="paymentBtn" v-else>
<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>
</template>
<script>
const jweixin = require('jweixin-module');
import { applyPay, diffPay, authFollow } from '@/apis/interfaces/index'
import { umsDiff, umsOrder, umsState } from '@/apis/interfaces/pay.js'
export default {
data() {
return {
payTypeVal : '', // 支付方式
tradeId : '', // 查询id
getState : false, // 查询支付结果
token : '', // 用户token
style : '', // 支付类型
price : '', // 价格
disabled : false // 按钮状态
}
},
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(){
uni.showLoading({
title: '查询支付结果...',
mask : true
})
let outTime;
let resNumb = 0;
outTime = setInterval(() => {
if(resNumb >= 3){
clearInterval(outTime)
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;
}
this.showPayMenu = false
},
// 第三方差价支付
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'
})
})
},
// 咨询服务费 - 微信支付
payClick() {
console.log('ee')
let NewUrl = ''
if(this.$Route.query.style == 'daijiao') {
NewUrl = applyPay
} else {
NewUrl = diffPay
}
NewUrl(this.$Route.query.id, {
openid : this.$store.getters.getOpenId
}).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"
})
})
}
}
}
</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;
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>

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

@@ -0,0 +1,565 @@
<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'">
<view class="item-btn">
{{item.buttonText}}
<image class="item-more" src="/static/imgs/speedOver.png" mode="aspectFill"></image>
</view>
</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>
</view>
<!-- 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_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",
redirect_url: 'https://rule.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;
}
}
}

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

@@ -0,0 +1,54 @@
<template>
<view class="content">
<image class="appDown-img" src="https://douhuo-storage.oss-cn-beijing.aliyuncs.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>

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>

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

@@ -0,0 +1,485 @@
<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>
<view class="userTop-label">
<view class="userSee-name">
综法咨询单
</view>
<view class="userSee-number" v-if="userData.business_orders_count">
{{userData.business_orders_count.synthesize}}<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'
export default {
data() {
return {
userLogin : '', //登录状态
userData : {}, //用户数据
listArr : [], // 文章列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
};
},
onShow() {
if(this.$store.getters.getToken) {
this.userLogin = true
// 获取用户信息
this.userInfo();
}
// 获取文章列表
this.articleItem();
},
methods:{
// 用户信息
userInfo() {
userIndex().then(res => {
this.userData = res
}).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;
}
}
}

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

@@ -0,0 +1,345 @@
<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>
</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>

374
pages/user/orderMake.vue Normal file
View File

@@ -0,0 +1,374 @@
<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.order.created_at}}
</view>
</view>
<view class="item" v-if="item.order.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.order.business_order_id}})">查看</view>
<text>x</text>{{item.order.service_count}}
</view>
</view>
<block v-if="item.pay">
<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.price}}
</view>
</view>
</block>
<view class="item">
<view class="item-label">
补差价
</view>
<view class="item-text item-color">
{{item.price}}
</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: 'sheetPayment', params: {id: item.business_order_diff_price_id, price: item.price, remark: item.remark, style: 'chajia'}})">
补交服务费
</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 { myDiff } from '@/apis/interfaces/user'
export default {
data() {
return {
modifyList : [], // 列表
page : {}, // 分页信息
lodingStats : false, // 加载状态
}
},
onShow() {
// 获取需要修改的订单
this.modifyInfo();
},
methods: {
// 需要修改的订单
modifyInfo(page) {
myDiff({
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;
// height: calc(100vh - 44px);
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-color {
color: $mian-color;
font-weight: 600;
}
.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;
}
}
}
}
}
</style>

381
pages/user/orderModify.vue Normal file
View File

@@ -0,0 +1,381 @@
<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.order.created_at}}
</view>
</view>
<view class="item">
<view class="item-label">
应确认方案
</view>
<view class="item-text">
{{item.confirm.un_confirm}}
</view>
</view>
<view class="item">
<view class="item-label">
已确认方案
</view>
<view class="item-text">
{{item.confirm.confirm}}
</view>
</view>
<view class="item">
<view class="item-label">
当前方案
</view>
<view class="item-text">
{{item.institution.title}}
<view class="item-text-tips">
{{item.business_type.title}}
</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: 'OrderModifyInfo', params: {id: item.business_order_close_scheme_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 { myModify } from '@/apis/interfaces/user'
export default {
data() {
return {
modifyList : [], // 列表
status : 1, // 列表状态
baleState : false, // 展开收起
page : {}, // 分页信息
lodingStats : false, // 加载状态
}
},
onShow() {
// 获取需要修改的订单
this.modifyInfo();
},
methods: {
// 需要修改的订单
modifyInfo(page) {
myModify({
status: this.status,
business_order_id: this.$Route.query.id,
page : page || 1
}).then(res => {
let esArr = res.data
esArr.forEach((item, index) => {
item.typeShow = false
})
let list = this.modifyList,
newData = []
if(page == 1 || page == undefined) list = []
newData = list.concat(esArr)
this.modifyList = newData
this.page = res.page
this.lodingStats = false
uni.stopPullDownRefresh()
}).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;
border-bottom: transparent 40rpx solid;
.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>

View File

@@ -0,0 +1,550 @@
<template>
<view class="content">
<view class="top">
<view class="top-text">
您好{{userData.nickname}}{{userData.sex == '男' ? '先生' : '女士'}}
</view>
您名下的XXX账户商务停止第三方催收洽谈协商服务已完成
</view>
<view class="white">
<view class="list">
<view class="label">
<view class="labelTop">
<view class="labelTop-name" v-if="schemesData.institution">
{{schemesData.institution.title}}
</view>
<view class="labelTop-tips" v-if="schemesData.business_type">
{{schemesData.business_type.title}}
</view>
</view>
<view class="labelPlan-list">
<view class="labelPlan-item" v-for="(items, index) in schemesData.params" :key="index">
<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 === 'number'">
{{items.value}}
</block>
<block v-else>
{{items.value}}
</block>
</view>
</view>
</view>
</view>
</view>
<!-- start 驳回原因 弹出 -->
<view class="reasonBack" v-if="popNo"></view>
<view class="reasonCont" v-if="popNo">
<image class="reasonCont-img" src="/static/imgs/payClose.png" mode="aspectFill" @click="popNo = false"></image>
<view class="reasonCont-title">
不同意原因
</view>
<view class="reasonCont-text">
<textarea name="remark" placeholder-style="color:#999999; font-size: 14px" placeholder="请输入您不同意的原因" maxlength="500" @input="remarkInput"></textarea>
<text>{{cursor}}/500</text>
</view>
<button class="reasonCont-btn" size="mini" :disabled="disabled" @click="clickNo">确定</button>
</view>
<!-- end 驳回原因 弹出 -->
<view class="reminder">
<image class="reminder-img" src="@/static/imgs/reminderIcon.png"></image>
<view class="reminder-text">
<text>温馨提示</text>
{{reminder}}
</view>
</view>
<view class="idcardBtn">
<view class="idcardBtn-go active" @click="popNo = true">
不同意
</view>
<button class="idcardBtn-go" size="mini" :disabled="disabled" @click="clickYes">同意并确认</button>
</view>
</view>
</view>
</template>
<script>
import { myModifyInfo, modifyYes, modifyNo, userBasic } from '@/apis/interfaces/user'
export default {
data() {
return {
disabled : false, // 按钮状态
popNo : false, // 不同意
schemesData : '', // 预估方案
reminder : '', // 温馨提示
remark : '',
cursor : 0,
userData : ''
}
},
onShow() {
// 获取方案
this.schemesInfo();
// 获取用户姓名手机号性别
userBasic().then(res => {
this.userData = res
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
// 方案
schemesInfo() {
myModifyInfo(this.$Route.query.id).then(res => {
this.reminder = res.tips
this.schemesData = res.close_scheme
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 备注信息
remarkInput(val) {
this.remark = val.detail.value
this.cursor = val.detail.cursor
},
// 同意方案
clickYes() {
uni.showModal({
title : '温馨提示',
content : '是否确认?',
cancelText : "取消", // 取消按钮的文字
confirmText : "确认", // 确认按钮的文字
showCancel : true, // 是否显示取消按钮,默认为 true
confirmColor: '#D4155A',
cancelColor : '#999999',
success: res => {
if(res.confirm) {
modifyYes(this.schemesData.business_order_close_scheme_id, {
remark: this.remark
}).then(res => {
uni.showToast({
title: '操作成功',
icon: "none"
})
this.disabled = true
setTimeout(()=>{
this.$Router.replace({name: 'User'})
uni.hideLoading()
},2000)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
} else {}
}
})
},
// 不同意方案
clickNo() {
if(this.remark) {
modifyNo(this.schemesData.business_order_close_scheme_id, {
remark: this.remark
}).then(res => {
uni.showToast({
title: '提交成功',
icon: "none"
})
this.popNo = true
this.disabled = true
setTimeout(()=>{
this.$Router.replace({name: 'User'})
uni.hideLoading()
},2000)
}).catch( err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
} else {
uni.showToast({
title: '请输入您不同意的原因',
icon: "none"
})
}
},
}
}
</script>
<style lang="scss" scoped>
.content {
background-color: #f6f6f6;
overflow-y: scroll;
height: 100vh;
}
.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 200rpx 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;
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;
}
}
.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)
}
}
}
}
}
}
.reasonBack {
position: fixed;
left: 0;
bottom: 0;
z-index: 98;
background-color: rgba(0, 0, 0, .5);
width: 100%;
height: 100vh;
}
.reasonCont {
position: fixed;
left: 0;
bottom: 0;
z-index: 99;
width: 100%;
background-color: #ffffff;
border-radius: $radius $radius 0 0;
padding: $padding;
box-sizing: border-box;
.reasonCont-title {
text-align: center;
font-size: $title-size + 4;
}
.reasonCont-img {
width: 44rpx;
height: 44rpx;
position: absolute;
top: $padding;
right: $padding;
}
.reasonCont-text {
background-color: #F6F6F6;
width: 100%;
padding: $padding;
box-sizing: border-box;
margin: $margin + 10 0 $margin*2;
border-radius: $radius;
textarea {
width: 100%;
}
text {
text-align: right;
display: block;
font-size: $title-size-sm;
color: $text-gray;
}
}
.reasonCont-btn {
width: 100%;
line-height: 90rpx;
text-align: center;
border-radius: $radius * 3;
background-color: #D4155A;
font-size: $title-size + 2;
color: #ffffff;
&[disabled] {
background-color: #eba5a5;
}
}
}
.reminder {
position: fixed;
left: 0;
bottom: 150rpx;
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;
}
}
}
.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;
}
&[disabled] {
background-color: #eba5a5;
}
}
}
</style>

182
pages/user/parent.vue Normal file
View File

@@ -0,0 +1,182 @@
<template>
<view class="content">
<block v-if="parentData">
<view class="pages-back">
<image :src="parentData.avatar ? parentData.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
</view>
<view class="pages-cont">
<image class="pages-head" :src="parentData.avatar ? parentData.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
<view class="pages-title">
<view class="pages-name">
{{parentData.nickname}}
</view>
<view class="pages-tel">
{{mphone}}
</view>
<view class="pages-btn">
<view class="pages-call" @click="clickCall">
联系他
</view>
</view>
</view>
</view>
</block>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png" mode="aspectFill"></image>
<view class="pages-hint-text">
暂无推荐人
</view>
</view>
</view>
</template>
<script>
import { Parent } from '@/apis/interfaces/user'
export default {
data() {
return {
parentData: '', // 推荐人
mphone : '' // 手机号
};
},
onShow() {
// 获取接口信息
this.parentInfo();
},
methods:{
// 推荐人接口信息
parentInfo() {
Parent().then(res => {
this.parentData = res
if(res){
this.mphone = res.username.substring(0, 3) + '****' + res.username.substring(7)
}
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 拨打电话
clickCall () {
uni.makePhoneCall({
phoneNumber: this.parentData.username,//电话号码
success: res => {
},
fail: err =>{
}
})
}
}
}
</script>
<style lang="scss" scoped>
/* 头像背景 */
.pages-back{
position: fixed;
width: 100vw;
height: 100vh;
opacity: .2;
background-color: #ffffff;
}
.pages-back image{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.pages-back::after,
.pages-back::before{
position: absolute;
width: 100%;
height: 100%;
content: " ";
top: 0;
left: 0;
}
.pages-back::after{
background-image: linear-gradient(to top, #fff, rgba(255,255,255,.0));
z-index: 1;
}
.pages-back::before{
z-index: 2;
backdrop-filter: blur(15px);
}
.pages-cont {
text-align: center;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
position: absolute;
width: 100%;
height: 100%;
.pages-head {
width: 160rpx;
height: 160rpx;
border-radius: 50%;
margin: 0 auto;
z-index: 4;
border: 6rpx solid #eaeeff;
}
.pages-title {
background-color: #ffffff;
border-radius: $radius-m;
box-sizing: border-box;
width: 80%;
margin: -100rpx auto 0;
padding-top: 120rpx;
box-sizing: border-box;
position: relative;
&::after,
&::before {
position: absolute;
content: '';
background-color: rgba(255, 255, 255, .9);
left: 20rpx;
border-radius: 0 0 $radius - 4 $radius - 4;
}
&::after {
z-index: 2;
width: calc(100% - 40rpx);
left: 20rpx;
bottom: -25rpx;
height: 25px;
}
&::before {
z-index: 1;
width: calc(100% - 80rpx);
left: 40rpx;
bottom: -50rpx;
height: 50rpx;
}
.pages-name {
line-height: 60rpx;
font-weight: 600;
font-size: $title-size + 4;
}
.pages-tel {
color: #999999;
}
.pages-btn {
border-top: 2rpx solid #f1f1f1;
text-align: center;
margin-top: $margin + 20;
padding: $padding + 10 0;
.pages-call {
display: inline-block;
border: 2rpx solid $mian-color;
color: $mian-color;
border-radius: $radius * 4;
padding: 0 $padding * 3;
font-size: $title-size-lg;
line-height: 74rpx;
}
}
}
}
</style>

176
pages/user/referee.vue Normal file
View File

@@ -0,0 +1,176 @@
<template>
<view class="content">
<view class="top">
<view class="top-name">
我的伙伴{{refereeCount}}
</view>
</view>
<view class="list" v-if="refereeArr.length > 0">
<view class="item" v-for="(item, index) in refereeArr" :key="index">
<image class="item-head" :src="item.avatar ? item.avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
<view class="item-cont">
<view class="item-left">
<view class="item-top">
<view class="item-name">
{{item.nickname}}
</view>
<view class="item-sex">
<image src="/static/icon/man.png" mode="aspectFill"></image>
</view>
</view>
<view class="item-identity" v-if="item.identity">
抖火法律-{{item.identity.name}}
</view>
</view>
<view class="item-right" @click="clickCall(item.username)">
联系
</view>
</view>
</view>
</view>
<view class="pack-center pages-hint" v-else>
<image src="/static/imgs/Noevaluate.png" mode="aspectFill"></image>
<view class="pages-hint-text">
暂无推荐人
</view>
</view>
</view>
</template>
<script>
import { Relations } from '@/apis/interfaces/user'
export default {
data() {
return {
refereeCount: '', // 数量
refereeArr : '', // 我的伙伴
};
},
onShow() {
// 获取接口信息
this.refereeInfo();
},
methods:{
// 我的伙伴接口信息
refereeInfo() {
Relations().then(res => {
this.refereeCount = res.count.one
this.refereeArr = res.users
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
// 拨打电话
clickCall (tel) {
uni.makePhoneCall({
phoneNumber: tel,//电话号码
success: res => {
},
fail: err =>{
}
})
}
}
}
</script>
<style lang="scss" scoped>
.top {
background-color: #ffffff;
position: fixed;
width: 100%;
line-height: 100rpx;
height: 100rpx;
top: 0;
left: 0;
z-index: 2;
padding: 0 $padding;
box-sizing: border-box;
.top-name {
position: relative;
font-weight: 600;
font-size: $title-size + 4;
&::after {
position: absolute;
content: '';
left: 30rpx;
bottom: 0;
width: 40rpx;
height: 8rpx;
border-radius: $radius;
background-color: #5370eb;
}
}
}
.list {
padding-top: 100rpx;
.item {
padding: $padding;
box-sizing: border-box;
position: relative;
&:nth-child(odd){
background-color: #fafcfb;
}
.item-head {
width: 100rpx;
height: 100rpx;
border-radius: 50%;
}
.item-cont {
position: absolute;
left: 0;
top: 0;
padding: $padding $padding $padding $padding + 130rpx;
box-sizing: border-box;
width: 100%;
display: flex;
.item-left {
flex: 1;
line-height: 54rpx;
.item-top {
display: flex;
.item-name {
font-weight: 600;
margin-right: $margin - 10;
}
.item-sex {
background-color: #e5f8ff;
border-radius: $radius * 3;
height: 38rpx;
line-height: 38rpx;
padding: 0 20rpx;
margin-top: 10rpx;
image {
width: 24rpx;
height: 24rpx;
}
&.active {
background-color: #fff1fa;
}
}
}
.item-identity {
font-size: $title-size-m;
color: #8282a7;
}
}
.item-right {
display: inline-block;
font-size: $title-size-m;
background-color: #edf4ff;
color: #5370eb;
height: 64rpx;
line-height: 64rpx;
padding: 0 $padding;
border-radius: $radius * 4;
margin-top: $margin - 5;
}
}
}
}
</style>

231
pages/user/setup.vue Normal file
View File

@@ -0,0 +1,231 @@
<template>
<view class="content">
<view class="setupItem">
<view class="label" @click="albumClick">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_01.png" mode="aspectFill"></image>
<view class="label-name-text">修改头像</view>
</view>
<view class="label-tips">
<image class="label-name-head" :src="avatar ? avatar : '/static/imgs/default_myHead.png'" mode="aspectFill"></image>
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view>
</view>
<view class="label" @click="$Router.push({name: 'Modify'})">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_02.png" mode="aspectFill"></image>
<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: 'Authsuccess'})" v-if="certification">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image>
<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: 'sheetIdcard'})" v-else>
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image>
<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: 'Invite'})">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_03.png" mode="aspectFill"></image>
<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 class="setupItem">
<!-- <view class="label" @click="$Router.push({name: 'Referee'})">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_04.png" mode="aspectFill"></image>
<view class="label-name-text">我的伙伴</view>
</view>
<view class="label-tips">
<view class="label-name-number" v-if="childrenCount">{{childrenCount}}</view>
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view>
</view> -->
<view class="label" @click="$Router.push({name: 'Parent'})">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_05.png" mode="aspectFill"></image>
<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 class="setupItem">
<view class="label" @click="$Router.push({name: 'AppDown'})">
<view class="label-name">
<image class="label-name-img" src="/static/imgs/zK_06.png" mode="aspectFill"></image>
<view class="label-name-text">APP下载</view>
</view>
<view class="label-tips">
<image class="label-name-arrow" src="/static/imgs/zK_arrow.png" mode="widthFix"></image>
</view>
</view>
</view> -->
<view class="setupItem">
<view class="signOut" @click="outLogin">
退出登录
</view>
</view>
</view>
</template>
<script>
import { userIndex, setting } from '@/apis/interfaces/user'
import { uploads } from '@/apis/interfaces/uploading'
export default {
data() {
return {
avatar : '', //用户头像
childrenCount: '', // 下级人数
certification: '' // 是否认证
};
},
onShow() {
// 获取用户信息
this.userInfo();
},
methods:{
// 用户信息
userInfo() {
userIndex().then(res => {
this.avatar = res.avatar
this.childrenCount = res.children_count.one
this.certification = res.certification
}).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.avatar = res.url[0]
// 上传头像
this.settingInfo('avatar', res.path[0])
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
});
},
// 上传用户信息
settingInfo(key, value) {
setting(key, {
value: value
}).then(res => {
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 退出登录
outLogin(){
this.$store.commit('setToken', '')
this.$Router.replaceAll({name: 'Index'})
},
}
}
</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-name-img {
width: 34rpx;
height: 34rpx;
margin-top: 12rpx;
margin-right: 20rpx;
}
}
.label-tips {
display: flex;
.label-name-head {
width: 54rpx;
height: 54rpx;
border-radius: 50%;
margin-right: 20rpx;
}
.label-name-arrow {
width: 24rpx;
height: 24rpx;
margin-top: 18rpx;
}
.label-name-number {
display: inline-block;
background-color: $mian-color;
color: #ffffff;
border-radius: $radius * 3;
height: 36rpx;
line-height: 36rpx;
padding: 0 $padding - 10;
font-size: $title-size-sm;
margin: 12rpx 20rpx 0 0;
}
}
}
.signOut {
text-align: center;
line-height: 60rpx;
padding: $padding - 5 0;
color: $mian-color;
}
}
</style>

40
pages/webWechat/index.vue Normal file
View File

@@ -0,0 +1,40 @@
<template>
<view>
<web-view :src="url"></web-view>
</view>
</template>
<script>
import { Openid } from '@/apis/interfaces/index'
export default {
data() {
return {
url: '' // 外部链接地址
}
},
onLoad(options) {
// 获取微信code
Openid({
code: options.code
}).then(res => {
this.$store.commit('setOpenid', res.openid)
this.$Router.replace({name: 'Index'})
// 预约单页面
// if(options.type == 'make') {
// this.$Router.replace({name: 'sheetPay', params: {id: options.id}})
// return
// }
// 咨询单与补差价页面
// this.$Router.replace({name: 'sheetPayment', params: {id: options.id, style: options.style, price: options.price}})
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
},
}
</script>
<style>
</style>

22
pages/webview/webCode.vue Normal file
View File

@@ -0,0 +1,22 @@
<template>
<view>
<web-view :src="url"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
url: '' // 外部链接地址
}
},
onLoad(options) {
// 跳到关注公众号页面
this.$Router.replace({name: 'indexGeneral', params: {code: options.code}})
},
}
</script>
<style>
</style>

25
pages/webview/webview.vue Normal file
View File

@@ -0,0 +1,25 @@
<template>
<view class="">
<!-- 跳转第三方 -->
<block v-if="uraData != ''">
<web-view :src="uraData"></web-view>
</block>
</view>
</template>
<script>
export default {
data() {
return {
uraData: ''
};
},
onLoad(options) {
this.uraData = decodeURIComponent(this.$Route.query.faceUrl)
}
}
</script>
<style>
</style>

69
router/index.js Normal file
View File

@@ -0,0 +1,69 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
import { RouterMount, createRouter } from 'uni-simple-router';
import { authFollow } from '@/apis/interfaces/index'
import store from '../store/index'
const router = createRouter({
h5: {
paramsToQuery: true
},
platform: process.env.VUE_APP_PLATFORM,
routes: [...ROUTES, {
path: '*',
name:'404',
component: ()=> import('@/pages/404/404')
}]
})
// 全局路由前置守卫
router.beforeEach((to, from, next) => {
const token = store.getters.getToken || uni.getStorageSync('token')
const openId = store.getters.getOpenId || uni.getStorageSync('openId')
if(to.name === 'appESign'){
next()
return
}
// 检查用户是否授权了微信
if(to.name != 'webWechatIndex' && openId === ''){
authFollow({
// url: 'https://web.douhuofalv.com/webWechat/index'
// url: 'https://web.douhuotest.douhuofalv.com/webWechat/index'
url: 'https://rule.douhuofalv.com/webWechat/index'
}).then(res => {
window.location.href = res
}).catch(err => {
uni.showToast({
title: err.message,
icon: "none"
})
})
return
}
// 检查是否需要登录
if(to.auth && token === ''){
next({
name: 'Login',
NAVTYPE: 'push',
params: {
toName: to.name
}
})
return
}
next()
})
// 全局路由后置守卫
router.afterEach((to, from) => {
// console.log('跳转结束--暂无应用场景')
})
export {
router,
RouterMount
}

81
scss/globa.scss Normal file
View File

@@ -0,0 +1,81 @@
/**
* 手太欠
* 愿这世界都如故事里一样 美好而动人~
*/
// 文字颜色
$text-color: #4d4d4d;
$text-gray: #9d9d9d;
// 主色调
$mian-color: #da2b56;
$yellow-color: #ec7647;
// 辅助色
$assist-color-1: #5dc791;
$assist-color-2: #f2b25b;
$assist-color-3: #ec6555;
// 边框颜色
$border-color: #f2f2f2;
$border-color-light: #f7f8fa;
// 文字尺寸变量
$title-size: 32rpx;
$title-size-lg: 30rpx;
$title-size-m: 28rpx;
$title-size-sm: 26rpx;
// 模块圆角
$radius: 20rpx;
$radius-sm: 10rpx;
$radius-lg: 12rpx;
$radius-m: 10rpx;
// 模块边距
$margin: 30rpx;
$padding: 30rpx;
// ios安全距离
.ios-bottom{
padding-bottom: env(safe-area-inset-bottom);
padding-bottom: constant(safe-area-inset-bottom);
}
.ios-left{
padding-left: env(safe-area-inset-left);
padding-left: constant(safe-area-inset-left);
}
.ios-right{
padding-right: env(safe-area-inset-right);
padding-right: constant(safe-area-inset-right);
}
.ios-top{
padding-top: var(--status-bar-height);
}
// 公共样式
.vertical {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
}
.nowrap {
max-width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ellipsis{
max-width: 100%;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}

BIN
static/.DS_Store vendored Normal file

Binary file not shown.

BIN
static/404/404.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
static/cs/1200.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

BIN
static/cs/cs01.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
static/cs/cs02.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

BIN
static/icon/Check.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/icon/bankIcon_01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
static/icon/bankIcon_02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
static/icon/cameraImg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 657 B

BIN
static/icon/dropDown_01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
static/icon/dropDown_02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
static/icon/dropDown_03.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
static/icon/dropDown_04.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
static/icon/dropDown_05.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

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