Files
nuttyreading-master-html/src/views/modules/order/buyorder-mergeorder.vue
chenghuan 537d5993bd refactor(订单模块): 1.统一订单状态和地址相关术语;2.增加心理论坛内容管理
将"发货"相关术语统一改为"发出",包括订单状态、按钮文字、提示信息等
将"收货"相关术语统一改为"收件",包括地址信息、表单标签、提示信息等
新增心理论坛模块,包含列表和新增/修改功能

调整订单状态显示为"待发出"和"已发出"
修改地址相关字段为"收件人"和"收件地址"
添加psychologicalForum.vue和psychologicalForum-add-or-update.vue文件
2026-02-27 16:54:21 +08:00

586 lines
18 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<div v-if="ruleForm.list.length == 0"
style="display: flex; height:300px; width: 100%; align-items: center; justify-content: center;">
<div class="empty" style="text-align: center;">
<icon-svg style="font-size: 130px;" name="kongbai"></icon-svg>
<div style="color: #999;">当前暂无可合并发出的订单哦</div>
</div>
</div>
<el-form v-else ref="ruleForm" :model="ruleForm" label-width="80px" :rules="rules">
<div class="order_list_ui">
<div style="">
<el-radio-group class="group3" v-model="radio3" size="mini" @change="radioChange">
<el-radio-button label="allYse">全合并</el-radio-button>
<el-radio-button label="allNo">全不合并</el-radio-button>
<el-button type="primary" size="mini" @click="submit" :disabled="buttonDisable">批量合并发出</el-button>
</el-radio-group>
</div>
<ul style="">
<li class="flexbox " v-for="(de, index) in ruleForm.list" :key="index"
style="border:1px solid #CFF3ED; margin-bottom: 5px;">
<div class="flexbox" style="align-items: center; padding: 0 10px; width: 34px; border-right: 1px solid #CFF3ED;">
<el-form-item label-width="0" :prop="`list.${index}.isMerge`" :rules="[
{ required: true, message: '此项为必填项', trigger: 'blur' }]">
<el-radio-group v-model="de.isMerge" size="mini" @input="MergeRadioListChanged($event,index)">
<div>
<el-radio label="true"><br/></el-radio>
</div>
<!-- <div>
<el-radio label="false">不合并</el-radio>
</div> -->
</el-radio-group>
</el-form-item>
</div>
<div class="buierInfo flexbox">
<div style="width:180px; ">
<div style="padding: 10px;" class="">
<div><span class="infoTitle">用户名</span><span>{{ de.userName }}</span></div>
<div><span class="infoTitle">电话</span><span>{{ de.tel }}</span></div>
<div><span class="infoTitle">收件人姓名</span><span>{{ de.shippingUser }}</span></div>
</div>
</div>
</div>
<div class="productInfo" style="width:80%;">
<div class="item" v-for="(item, orderindex) in de.orderList" :key="orderindex">
<div class="item_head">
<el-row>
<el-col :span="24" style="display: flex; justify-content: space-between;">
<span>订单编号: {{ item.orderSn }}</span>
<el-button style="margin: 0; padding: 0;" type="text"
@click="removeOrder(orderindex, index)">移除</el-button>
</el-col>
</el-row>
</div>
<div class="item_body">
<div class="flexbox" style="justify-content: space-between;">
<div class="td1 flexbox" style="width:100%; ">
<div class="flexbox orderProducts" style="width:25%;"
:class="{ nobottomBorder: item.products.length <= 4 }"
v-for="(productitem, productindex) in item.products"
:key="productindex">
<div class="flexbox productItem" style="width:100%;">
<!-- <el-checkbox :label="4545454545"></el-checkbox> -->
<img :src="productitem.productUrl" width="30px" height="30px">
<div class="">
<div class="bookName tabContent">{{ productitem.productName }}
</div>
</div>
</div>
<div class="num xcenter"><span>× {{ productitem.quantity }}</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style=" padding: 10px;" class="buttonBox flexbox">
<div>
<!-- <div style="margin-bottom: 10px;"><span style="color: #f56c6c;">*</span> 是否合并当前可合并项
</div> -->
<el-button type="warning" size="mini" plain
@click="mergeOne(de.orderList, index)">合并发出</el-button>
</div>
</div>
</li>
</ul>
</div>
<div class="buttons">
<el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
:current-page="pageIndex" :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</el-form>
<setDeliverDialog ref="setDeliverDialog" :visible="setDeliverVisible" :selectData="merOneList"
@closeDeliverDialog='closeDeliverDialog'></setDeliverDialog>
</div>
</template>
<script>
import setDeliverDialog from './set-deliver-dialog'
export default {
data() {
return {
merOneList: [],
buttonDisable: true,
flag:false,
submitMrgeIdList:[],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
// form: {
// deliverLcd: ''
// },
setDeliverVisible: false,
radio3: '',
expressList: [],
// dataRule: {
// deliverLcd: [
// { required: true, message: '请先选择物流公司', trigger: 'blur' }
// ]
// },
ruleForm: {
list: []
},
// 批量合并发出
multMergeIdList:[],
rules: {
ruleForm: [
{ required: true, message: '必填项', trigger: 'blur' },
]
}
}
},
created() {
this.getExpressList()
this.getMergeOrders()
},
methods: {
// 选择批量合并发出
MergeRadioListChanged(val,index) {
console.log(this.ruleForm.list,'this.ruleForm.list')
this.ruleForm.list[index].isMerge = 'true'
this.buttonDisable = false
this.radio3 = ''
},
// 获取快递公司列表
getExpressList() {
this.$http({
// url: this.$http.adornUrl('/book/sysdictdata/selectByType/express_name'),
url: this.$http.adornUrl('/express/getExpressCompanyList'),
method: 'get',
}).then(({ data }) => {
// console.log(data, '快递列表')
this.expressList = data.result
}).catch(({ e }) => {
console.log(e,'e')
})
},
// 获取可合并订单
getMergeOrders() {
let loading = this.$loading({
lock: true,
text: '正在查询,请稍后',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$http({
url: this.$http.adornUrl(`/book/buyOrder/checkOrder`),
method: 'post',
params: this.$http.adornParams({
'page': this.pageIndex,
'limit': this.pageSize,
})
}).then(({ data }) => {
if (data && data.code === 0) {
// console.log('订单发出前的检查')
// this.dataList = data.page.list
this.totalPage = data.page.totalCount
loading.close()
this.ruleForm.list = data.page.records
this.ruleForm.list.map(item => {
return item.isMerge = 'false'
})
console.log(this.ruleForm.list)
//this.mergeDliverVisible = true
} else {
this.ruleForm.list = []
this.totalPage = 0
loading.close()
this.$message.error('请求失败')
}
})
},
// 移除订单
removeOrder(orderindex, listindex) {
// order: 订单信息
// orderindex: 订单下标
// listindex:上级下标
//addr.splice(i, 1)
// 判断是否剩余订单数小于2 小于2 就整条都删除
if (this.ruleForm.list[listindex].orderList.length <= 2) {
console.log(this.ruleForm.list)
this.ruleForm.list.splice(listindex, 1)
} else {
console.log(this.ruleForm.list)
this.ruleForm.list[listindex].orderList.splice(orderindex, 1)
console.log()
}
},
closeDeliverDialog(val) {
this.setDeliverVisible = false
this.getMergeOrders()
this.merOneList = []
},
// 单个合并订单发出
mergeOne(list, index) {
// console.log(list)
this.merOneList = list.map(item => {
return item.orderId
})
console.log(this.merOneList)
// this.$refs['ruleForm'].validate((valid) => {
// if (valid) {
this.$confirm('正在进行合并发出, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.setDeliverVisible = true
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
// } else {
// return this.$message.error('请核对必填项')
// }
// })
},
radioChange(val){
// console.log(this.ruleForm.list)
if(val == 'allNo'){
this.ruleForm.list.forEach(element => {
element.isMerge = 'false'
});
this.buttonDisable = true
console.log(this.ruleForm.list)
}
if(val == 'allYse'){
// console.log('全选')
this.buttonDisable = false
this.ruleForm.list.forEach(element => {
element.isMerge = 'true'
});
console.log(this.ruleForm.list)
}
},
// 每页数
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getMergeOrders()
},
// 当前页
currentChangeHandle(val) {
this.pageIndex = val
this.getMergeOrders()
},
submit() {
// 表单验证
// this.$refs['ruleForm'].validate((valid) => {
// if (valid) {
this.multMergeIdList = []
this.submitMrgeIdList = JSON.parse(JSON.stringify(this.ruleForm.list)) // 深度拷贝选中的订单
this.submitMrgeIdList.map((item, index) => {
if (item.isMerge == 'false') {
this.submitMrgeIdList.splice(index, 1) // 去掉未选中的合并项
}
})
this.submitMrgeIdList.map(element => {
let list = []
list = element.orderList.map(ele => { // 转换成id格式
return ele.orderId
})
this.multMergeIdList = this.multMergeIdList.concat(list)
})
// console.log(this.submitMrgeIdList,'submitMrgeIdList')
// console.log(this.multMergeIdList,'multMergeIdList')
this.merOneList = this.multMergeIdList
this.setDeliverVisible = true
console.log(this.merOneList)
// } else {
// return this.$message.error('请核对必填项')
// }
// })
}
},
components:{
setDeliverDialog
}
}
</script>
<style lang="less" scoped>
.infoTitle {
color: #777;
display: inline-block;
width: 62px;
text-align: right;
}
.dialog-footer {
text-align: center;
}
.el-radio-button {
margin-left: -3px;
}
/deep/ .el-dialog__footer {
text-align: center;
}
.flexbox {
display: flex;
}
.order_list_ui {
margin-top: 15px;
* {
font-size: 12px;
//color: #777;
}
ul {
color: #515a6e;
padding: 0;
li {
list-style: none;
width: 100%;
// margin-bottom: 10px;
.item_head {
width: 100%;
padding: 10px;
// border-right: none !important;
background-color: #edf9f8;
.el-checkbox__label {
display: none !important;
}
.tip {
text-align: right;
.el-button {
padding: 0;
}
}
.el-checkbox {
margin-right: 10px;
}
}
.item_body {
// border: 1px solid #ddf6f3;
border-top: none;
}
}
}
}
.productInfo {
border-left: 1px solid #CFF3ED;
border-right: 1px solid #CFF3ED;
width: 100%;
}
.orderProducts {
padding: 4px;
border-right: 1px solid #CFF3ED;
border-bottom: 1px solid #CFF3ED;
.price {
width: 40px;
line-height: 54px;
}
.num {
width: 40px;
line-height: 20px;
}
.productItem {
overflow: hidden;
.flexbox {
align-items: center;
}
.el-checkbox {
line-height: 54px;
}
.el-checkbox__label {
display: none !important;
}
}
}
.xcenter {
text-align: center;
}
.borderright {
padding-left: 10px;
border-right: 1px solid #f1f1f1;
}
.normal {
display: none;
}
.hasDeliver {
display: block;
width: 20px;
height: 20px;
position: absolute;
z-index: 1;
top: 0;
right: 0;
background-image: url(../../../../static/img/hasDeliver_icon.png);
}
.td1 {
// width: 400px;
.orderProducts {
overflow: hidden;
position: relative;
.el-checkbox {
margin-right: 10px;
}
img {
margin-right: 10px;
padding: 2px;
border: 1px solid #f1f1f1;
}
.bookName {
//margin-right: 10px;
font-size: 12px;
line-height: 22px;
margin-left: -6px;
-webkit-transform: scale(0.9);
}
.author {
color: #999;
}
}
}
.td2 {
width: 150px;
line-height: 26px;
padding: 5px;
em {
font-size: 18px;
font-style: normal;
color: #48C9B0;
}
}
.tabName {
color: #999;
margin-bottom: -3px;
}
.tabContent {
line-height: 26px;
-webkit-transform: scale(0.9);
}
.td3 {
padding: 5px;
line-height: 24px;
width: 200px;
.buier_tip {
color: #666;
}
}
.td4 {
padding: 5px;
width: 200px;
line-height: 24px;
.time {
color: #999
}
.orderStatus {
color: #ec6565;
}
.el-button {
margin-top: 15px;
}
}
.td5 {
padding: 5px;
line-height: 24px;
}
.orderProducts:last-child {
border-bottom: none;
}
.hasSplit {
background-color: #fffae8;
border: 1px solid #ffedd6;
.el-button {
margin-top: 0;
}
}
.buttonGroup {
.el-checkbox {
margin-right: 10px;
}
}
.deliverName {
margin-bottom: px;
}
.paper_list_ui {
margin-top: 15px;
}
.buttonBox {
align-items: center;
}
.fengbi {
margin-left: 0 !important;
}
.buierInfo {
justify-content: center;
align-items: center;
line-height: 20px;
}
.nobottomBorder {
border-bottom: 0;
}
/deep/ .el-pagination {
float: right;
margin-top: 0;
}
</style>
<style>
.el-radio-button:last-child .el-radio-button__inner{border-radius: 0 4px 4px 0 !important;}
</style>