工作台

This commit is contained in:
唐明明
2022-12-26 09:31:55 +08:00
parent f7d357f738
commit 1f3f6b230a
218 changed files with 19796 additions and 0 deletions

457
pages/work/service.vue Normal file
View File

@@ -0,0 +1,457 @@
<template>
<view class="content">
<!-- 服务包列表 -->
<view class="services">
<view class="services-null" v-if="services.length <= 0">
<u-empty
mode="data"
icon="http://cdn.uviewui.com/uview/empty/data.png"
text="暂无添加服务包"
>
</u-empty>
</view>
<view class="services-list" v-else>
<view class="services-item" v-for="(item, index) in services" :key="index">
<view class="services-header">
<view class="title">{{item.title}}<text>{{item.tag}}</text></view>
<view class="remove" @click="onRemove(item, index)">移出</view>
</view>
<view class="services-content">
<block v-for="(citem, cindex) in item.items" :key="cindex">
<view class="services-content-item">
<view class="services-flex">
<label class="services-flex-label nowrap">服务类型</label>
<view class="services-flex-val nowrap">{{citem.business}}({{citem.type}})</view>
</view>
<view class="services-flex">
<label class="services-flex-title nowrap">{{citem.title}}</label>
<view class="services-flex-price nowrap"><text></text>{{citem.price}}</view>
</view>
</view>
</block>
</view>
<view class="services-price">服务包价格<text>{{item.price}}</text></view>
</view>
</view>
</view>
<!-- 选择业务 -->
<u-popup :show="institutionsShow" round="20rpx" closeable @close="institutionsShow = false, itemsVal = []">
<view class="institutions">
<view class="institutions-title">选择业务</view>
<scroll-view scroll-y class="institutions-scroll">
<view class="institutions-lists" v-if="institutions.length > 0">
<view class="institutions-block" :class="{ 'active': item.isChoose }" v-for="(item, index) in institutions" :key="index" @click="onInstitution(item, index)">
<view class="institutions-block-item">
<label>业务类型</label>
<view class="val nowrap">{{item.business}}({{item.type}})</view>
</view>
<view class="institutions-block-item">
<label>业务机构</label>
<view class="val nowrap">{{item.title}}</view>
</view>
<view class="institutions-block-item">
<label>金额</label>
<view class="val price nowrap">{{item.price}}</view>
</view>
</view>
</view>
<view v-else class="institutions-null">
<u-empty
mode="list"
icon="http://cdn.uviewui.com/uview/empty/list.png"
text="暂无可分配的业务"
>
</u-empty>
</view>
</scroll-view>
<view class="institutions-footer">
<button class="btn" @click="onAddService" :disabled="itemsVal.length <= 0">选好了({{itemsVal.length}})</button>
</view>
</view>
</u-popup>
<!-- footer -->
<view class="footer">
<view class="footer-total">{{services.length}}个服务包总价格<text>{{total}}</text></view>
<button class="footer-btn" :disabled="services.length <= 0" @click="onServiceOver">保存配置服务包</button>
</view>
</view>
</template>
<script>
import { service, serviceAdd, serviceRemove, serviceOver } from '@/apis/interfaces/order.js'
export default {
data() {
return {
total : '0.00',
orderId : '',
institutions : [],
services : [],
itemsVal : [],
institutionsShow: false
};
},
created() {
this.orderId = this.$Route.query.orderId
// 开始配置服务包
this.getService()
},
methods: {
// 获取业务
getService(){
service(this.orderId).then(res => {
let { institutions, services, total } = res;
this.institutions = institutions.map(val => {
val.isChoose = false
return val;
})
this.total = total;
this.services = services;
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择业务
onInstitution(val, index){
let idIndex = this.itemsVal.findIndex(e => e === val.item_id)
if(idIndex >= 0){
val.isChoose = !val.isChoose;
this.itemsVal.splice(idIndex, 1)
this.$set(this.institutions, index, val)
return
}
if(idIndex < 0 && this.itemsVal.length <= 2){
val.isChoose = !val.isChoose;
this.itemsVal.push(val.item_id)
this.$set(this.institutions, index, val)
return
}
uni.showToast({
title: '单一服务包业务数量不可以超过3项',
icon : 'none'
})
},
// 新增服务包
onAddService(){
serviceAdd(this.orderId, this.itemsVal).then(res => {
let { institutions, services, total } = res;
this.institutions = institutions.map(val => {
val.isChoose = false
return val;
});
this.total = total;
this.services = services
this.itemsVal = []
this.institutionsShow = false
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 删除服务包
onRemove(val, index){
serviceRemove(this.orderId, {
group_no: val.group_no
} ).then(res => {
let { institutions, services, total } = res;
this.institutions = institutions.map(val => {
val.isChoose = false
return val;
});
this.total = total;
this.services = services;
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 保存配置服务包
onServiceOver(){
if(this.institutions.length > 0){
uni.showModal({
title : '提示',
content : '当前还有' + this.institutions.length + '项业务未匹配服务包,是否放弃未匹配的业务继续保存服务包?',
cancelText : '继续配置',
cancelColor : '#FFAB3F',
confirmText : '立即保存',
confirmColor: '#446EFE',
success : res => {
if(res.confirm){
this.onSubmitService()
}
}
})
return
}
this.onSubmitService()
},
// 提交保存服务
onSubmitService(){
wx.showLoading({
title: '保存中...',
mask : true
})
serviceOver(this.orderId).then(res => {
uni.showModal({
content : res.message,
showCancel : false,
confirmColor: '#446EFE',
success : res => {
if(res.confirm){
this.$store.commit('setOrderId', this.orderId)
uni.navigateBack()
}
}
})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
},
onNavigationBarButtonTap() {
this.institutionsShow = true
}
}
</script>
<style lang="scss">
// 服务包列表
.services{
padding-bottom: 250rpx;
box-sizing: border-box;
.services-null{
height: 70vh;
display: flex;
justify-content: center;
align-items: center;
}
// 服务包列表
.services-list{
padding: 10rpx 30rpx;
.services-item{
background: white;
border-radius: 20rpx;
padding: 30rpx;
margin: 30rpx 0;
.services-header{
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 20rpx;
.title{
font-size: 32rpx;
font-weight: bold;
color: #111;
width: calc(100% - 150rpx);
text{
background: $main-color;
color: white;
font-weight: normal;
font-size: 26rpx;
border-radius: 10rpx;
padding: 0 10rpx;
margin-left: 10rpx;
line-height: 40rpx;
}
}
.remove{
background: rgba(68, 110, 254, .1);
color: #446EFE;
height: 50rpx;
line-height: 50rpx;
width: 100rpx;
border-radius: 25rpx;
text-align: center;
font-size: 28rpx;
}
}
.services-content{
background-color: rgba(68, 110, 254, .03);
border-radius: 10rpx;
margin: 15rpx 0;
padding: 0 25rpx;
.services-content-item{
border-bottom: solid 1rpx #f6f6f6;
padding: 20rpx 0;
&:last-child{
border: none;
}
}
.services-flex{
display: flex;
font-size: 30rpx;
line-height: 55rpx;
.services-flex-label{
width: 150rpx;
color: #111111;
}
.services-flex-val{
width: calc(100% - 150rpx);
text-align: right;
color: gray;
}
.services-flex-title{
width: 50%;
color: #111111;
font-size: 30rpx;
}
.services-flex-price{
font-size: 30rpx;
width: 50%;
text-align: right;
font-weight: bold;
color: #111111;
}
}
}
.services-price{
display: flex;
justify-content: space-between;
align-items: center;
font-size: 30rpx;
color: gray;
line-height: 60rpx;
text{
color: $text-price;
font-weight: bold;
font-size: 34rpx;
}
}
}
}
}
// 添加服务包
.institutions{
padding: 0 0 180rpx;
position: relative;
// 标题
.institutions-title{
padding: 30rpx;
text-align: center;
font-size: 36rpx;
font-weight: bold;
line-height: 60rpx;
}
// 列表
.institutions-scroll{
height: 65vh;
.institutions-null{
height: 50vh;
display: flex;
justify-content: center;
align-items: center;
}
.institutions-lists{
padding: 15rpx 0;
.institutions-block{
margin: 15rpx 30rpx;
background: #f8f8f8;
padding: 30rpx;
border-radius: 20rpx;
border:solid 1rpx #f8f8f8;
box-sizing: border-box;
.institutions-block-item{
display: flex;
justify-content: space-between;
line-height: 50rpx;
font-size: 30rpx;
label{
color: gray;
width: 200rpx;
}
.val{
width: calc(100% - 200rpx);
text-align: right;
&.price{
color: $text-price;
font-weight: bold;
}
}
}
&.active{
background-color: #E4E8F7;
border-color: $main-color;
}
}
}
}
// footer
.institutions-footer{
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 30rpx 30rpx 50rpx;
.btn{
background: $main-color;
height: 100rpx;
line-height: 100rpx;
color: white;
font-size: 32rpx;
border-radius: $radius-lg;
&::after{
display: none;
}
&[disabled]{
background-color: $main-color;
color: white;
opacity: .7;
}
}
}
}
// footer
.footer{
padding: 30rpx 30rpx 50rpx;
background: white;
position: fixed;
width: 100%;
box-sizing: border-box;
bottom: 0;
left: 0;
z-index: 9;
box-shadow: 0 0 10rpx 10rpx rgba(0, 0, 0, .02);
.footer-total{
padding-bottom: 30rpx;
text-align: center;
font-size: 30rpx;
color: gray;
line-height: 40rpx;
text{
font-weight: bold;
color: red;
}
}
.footer-btn{
background: $main-color;
height: 100rpx;
line-height: 100rpx;
color: white;
font-size: 32rpx;
border-radius: $radius-lg;
&::after{
display: none;
}
.icon{
display: inline-block;
vertical-align: middle;
margin-right: 10rpx;
margin-bottom: 5rpx;
}
&[disabled]{
background-color: $main-color;
color: white;
opacity: .7;
}
}
}
</style>