You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

240 lines
6.0 KiB

<template>
<view class="page">
<uni-card :is-shadow="false" :border="false" padding="0" is-full>
<uni-search-bar class="search" radius="5" placeholder="请输入产品名称" clearButton="auto" cancelButton="none" v-model="keyword" />
</uni-card>
<ul class="tab">
<li v-for="(tab, i) in tabs" :class="{active: curTab === tab.id}" @click="tabChange(tab)">{{ tab.name }}</li>
</ul>
<ul class="list">
<li v-for="item in list">
<uni-data-checkbox class="check" multiple v-model="item.check" :localdata="item.checkData"></uni-data-checkbox>
<image class="icon" src="../../static/image/course1.png" mode="widthFix"></image>
{{ item.curriculumName }}
</li>
</ul>
<view class="btn-wrap">
<uni-data-checkbox class="check" multiple v-model="checkAll" :localdata="checkAllData" @change="checkChange"></uni-data-checkbox>
<view class="btn" @click="submit">确定</view>
</view>
</view>
</template>
<script>
import { curriculumList } from '@/apis/modules/course.js'
import { renew } from '@/apis/modules/order.js'
export default {
data() {
return {
orderType: 0,
customerId: '',
curTab: '',
tabs: [
{
name: '不限',
id: ''
},
{
name: '实训课程',
id: 1
},
{
name: '理论课程',
id: 0
},
{
name: '数据产品',
id: 3
}
],
searchTimer: null,
orderStatus: '',
productStatus: '',
keyword: '',
list: [],
listAll: [],
page: 1,
pageSize: 10,
checkData: [{
text: '',
value: 1
}],
checkAll: [],
checkAllData: [{
text: '全部',
value: 1
}],
courses: uni.getStorageSync('courses') || []
}
},
watch: {
keyword () {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.getList()
}, 500)
}
},
// 下拉刷新
onPullDownRefresh() {
this.getList()
setTimeout(() => {
uni.stopPullDownRefresh()
}, 1500)
},
onShow() {
const pages = getCurrentPages()
const { options } = pages[pages.length - 1]
this.orderType = options.orderType
this.customerId = options.customerId
this.getList()
},
methods: {
// 获取课程列表
getList() {
curriculumList({
curriculumName: this.keyword,
isEnable: 0,
pageNum: 1,
pageSize: 10000
}).then(({ page }) => {
const { records } = page
const list = this.courses
// 添加选择框字段
records.map(e => {
const checkData = {
text: '',
value: 1
}
e.check = []
// 筛选已经勾选的产品
if (list.find(n => n.dataOrCourseId == e.cid)) {
checkData.disable = true // 已经选择了的则禁止选择
e.check = [1]
}
e.checkData = [checkData]
})
this.list = records
}).catch(e => {})
},
// tab切换
tabChange(tab) {
this.curTab = tab.id
},
// 全选
checkChange(e) {
const checked = !!e.detail.value.length
this.list.map(e => e.check = [checked ? 1 : '']) // 选中则为[1],取消选中为[]
},
// 生成产品参数
createParam(e) {
return {
dataOrCourseId: e.cid, // id
productName: e.curriculumName, // 名称
periodOfUse: '', // 使用期限
startTime: this.$util.formatDate(new Date(), 'yyyy-MM-dd'), // 开始
endTime: '', // 终止
remainingPeriod: '', // 剩余期限
marketValue: '', // 市场价
marketPrice: e.marketPrice, // 市场单价
finalPrice: this.orderType === 2 ? 0 : '', // 成交价
discountRate: '', // 折扣率
accountNum: '', // 账号数
totalAmount: '', // 总价
isEnable: 1, // 启用否:1启用,0禁用
ship: 0, // 发货否(0未发货,1已发货,默认不发货)
authority: 1, // 区分权限 0为数据平台权限,1为课程权限
options: 1,
settlementPrice: '', // 结算价
settlementMethod: e.settlementMethod, // 结算方式,0为单价,1为分成
settlementPriceUnit: e.settlementPrice, // 结算单价
businessProportion: e.businessProportion, // 商务占比
}
},
// 确定
submit() {
const list = this.list.filter(e => e.check.length) // 筛选出选中了的产品
if (list.length) {
const result = this.courses
const courseIds = []
const dataIds = []
const { customerId } = this
list.map(e => {
// e.authority ? courseIds.push(e.cid) : dataIds.push(e.cid)
courseIds.push(e.cid)
result.find(n => n.dataOrCourseId == e.cid) || result.push(this.createParam(e))
})
// 判断是否为客户已有的课程
renew({
authority: 1,
customerId,
productId: courseIds
}).then(({ orderOthers }) => {
result.map(e => {
// const item = orderOthers.map(n => dataOrCourseId == e.dataOrCourseId && n.authority && e.authority)
const item = orderOthers.find(n => n.dataOrCourseId == e.dataOrCourseId)
if (item) {
let date = new Date(item.endTime)
date = new Date(date.setDate(date.getDate() + 1))
e.startTime = this.$util.formatDate(date, 'yyyy-MM-dd')
}
})
uni.setStorageSync('courses', result) // 把选中的产品添加至缓存
uni.redirectTo({
url: `../editCourse/editCourse?customerId=${this.customerId}`
})
}).catch(e => {})
} else {
this.$util.errMsg('请选择产品!')
}
}
}
}
</script>
<style scoped lang="scss">
.page {
height: calc(100vh - 140rpx);
overflow: auto;
}
.list {
li {
display: flex;
align-items: center;
padding: 30rpx 24rpx;
margin: 16rpx 24rpx;
font-size: 30rpx;
color: #333;
background-color: #fff;
border-radius: 16rpx;
}
.icon {
width: 80rpx;
margin: 0 20rpx;
}
}
/deep/.check {
.checklist-box {
margin: 0 !important;
}
.checkbox__inner {
width: 40rpx !important;
height: 40rpx !important;
border-radius: 50% !important;
}
.checkbox__inner-icon {
top: 8rpx !important;
left: 14rpx !important;
}
}
.btn-wrap {
justify-content: space-between;
.btn {
width: 340rpx;
margin-left: 27rpx;
}
}
</style>