## v1.3.1 更新列表

1. 【修复】申请退款后积分等操作可能出现错误的问题
	2. 【修复】拼团支付可能出现支付错误的问题
	3. 【修复】退款申请后的订单流程优化和积分赠送的问题
	4. 【修复】回收站中的商品无法恢复的问题
	5. 【修复】一号通短信查询记录不完整的问题
	6. 【修复】用户管理批量加分组,标签的问题
	7. 【修复】积分日志搜索显示有误的问题
	8. 【修复】手动发送优惠券可能会出错的问题
	9. 【修复】核销订单创建在某种条件下会出错的问题
	10. 【修复】移动端商品详情,购物车等样式兼容问题
	11. 【修复】业务流程性的优化
This commit is contained in:
337031187
2021-01-19 10:16:45 +08:00
parent 3b8397e4b1
commit 81a16a76df
136 changed files with 19904 additions and 23329 deletions

View File

@@ -8,7 +8,7 @@
>
<el-input v-model="editPram.name"  :maxlength="biztype.value === 1 ? 8 : 20" placeholder="分类名称" />
</el-form-item>
<el-form-item label="URL">
<el-form-item label="URL" v-if="biztype.value!==1">
<el-input v-model="editPram.url" placeholder="URL" />
</el-form-item>
<el-form-item label="父级" v-if="biztype.value!==3">
@@ -31,7 +31,8 @@
<el-input-number v-model="editPram.sort"/>
</el-form-item>
<el-form-item label="状态">
<el-switch v-model="editPram.status" :active-value="true" :inactive-value="false" />
<el-switch v-model="editPram.status" active-text="显示"
inactive-text="隐藏" :active-value="true" :inactive-value="false" />
</el-form-item>
<el-form-item label="扩展字段" v-if="biztype.value !== 1 && biztype.value !== 3 && biztype.value !== 5">
<el-input v-model="editPram.extra" type="textarea" placeholder="扩展字段" />
@@ -45,7 +46,6 @@
</template>
<!--创建和编辑公用一个组件-->
<script>
import * as constants from '@/utils/constants.js'
import * as categoryApi from '@/api/categoryApi.js'
import * as selfUtil from '@/utils/ZBKJIutil.js'
export default {
@@ -73,7 +73,7 @@ export default {
data() {
return {
loadingBtn: false,
constants,
constants: this.$constants,
editPram: {
extra: null,
name: null,

View File

@@ -75,7 +75,7 @@
</div>
</template>
</el-table-column>
<el-table-column label="Url" min-width="250">
<el-table-column label="Url" min-width="250" v-if="biztype.value === 5" key="2">
<template slot-scope="scope">
<span>{{ scope.row.url }}</span>
</template>
@@ -141,7 +141,6 @@
import * as categoryApi from '@/api/categoryApi.js'
import info from './info'
import edit from './edit'
import * as constants from '@/utils/constants.js'
import * as selfUtil from '@/utils/ZBKJIutil.js'
export default {
// name: "list"
@@ -177,7 +176,7 @@ export default {
return {
selectModelKeysNew: this.selectModelKeys,
loading: false,
constants,
constants: this.$constants,
treeProps: {
label: 'name',
children: 'child',
@@ -197,12 +196,12 @@ export default {
dataList: [],
treeList: [],
listPram: {
pid: this.pid,
pid: this.pid,
type: this.biztype.value,
status: -1,
name: '',
page: constants.page.page,
limit: constants.page.limit[0]
page: this.$constants.page.page,
limit: this.$constants.page.limit[0]
},
viewInfoConfig: {
data: null,
@@ -293,7 +292,7 @@ export default {
this.loading = false
}).catch(()=>{
this.loading = false
}) : categoryApi.listCategroy({ type: 3, status: '', pid: this.listPram.pid}).then(data => {
}) : categoryApi.listCategroy({ type: 3, status: this.listPram.status, pid: this.listPram.pid, name: this.listPram.name}).then(data => {
this.treeList = data.list
})
},

View File

@@ -39,7 +39,6 @@ function formBtns(h) {
return <el-col>
<el-form-item size='mini'>
<el-button type='primary' onClick={this.submitForm}>提交</el-button>
<el-button onClick={this.resetForm}>取消</el-button>
</el-form-item>
</el-col>
}

View File

@@ -69,7 +69,6 @@
<script>
import * as articleApi from '@/api/article.js'
import * as categoryApi from '@/api/categoryApi.js'
import * as constants from '@/utils/constants.js'
import * as selfUtil from '@/utils/ZBKJIutil.js'
export default {
// name: "list",
@@ -83,12 +82,12 @@
return {
templateRadio:'',
imgList: [],
constants,
constants: this.$constants,
listPram: {
keywords: null,
cid: null,
page: 1,
limit: constants.page.limit[0]
limit: this.$constants.page.limit[0]
},
listData: { list: [], total: 0 },
editDialogConfig: {
@@ -130,7 +129,7 @@
})
},
handlerGetCategoryTreeData() {
const _pram = { type: constants.categoryType[2].value, status: 1 }
const _pram = { type: this.constants.categoryType[2].value, status: 1 }
categoryApi.treeCategroy(_pram).then(data => {
this.categoryTreeData = selfUtil.addTreeListLabelForCasCard(data)
})

View File

@@ -91,178 +91,178 @@
</template>
<script>
import { marketingListApi, couponUserApi } from '@/api/marketing'
export default {
name: 'CouponList',
props: {
handle: {
type: String,
default: ''
},
couponData: {
type: Array,
default: () => []
},
keyNum: {
type: Number,
default: 0
},
userIds: {
type: String,
default: ''
}
import { marketingListApi, couponUserApi } from '@/api/marketing'
export default {
name: 'CouponList',
props: {
handle: {
type: String,
default: ''
},
data() {
return {
listLoading: true,
tableData: {
data: [],
total: 0
},
tableFrom: {
page: 1,
limit: 10,
name: '',
// type: 0,
isDel: 0,
status: 1
},
multipleSelection: [],
multipleSelectionAll: [],
idKey: 'id',
nextPageFlag: false,
attr: []
}
couponData: {
type: Array,
default: () => []
},
watch: {
keyNum: {
deep: true,
handler(val) {
this.getList()
}
}
keyNum: {
type: Number,
default: 0
},
mounted() {
this.tableFrom.page = 1
this.getList()
this.multipleSelectionAll = this.couponData || []
},
methods: {
close() {
this.multipleSelection = []
userIds: {
type: String,
default: ''
}
},
data() {
return {
listLoading: true,
tableData: {
data: [],
total: 0
},
handleSelectionChange(val) {
this.multipleSelection = val
setTimeout(() => {
this.changePageCoreRecordData()
}, 50)
tableFrom: {
page: 1,
limit: 10,
name: '',
// type: 0,
isDel: 0,
status: 1
},
// 设置选中的方法
setSelectRow() {
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
return
}
// 标识当前行的唯一键的名称
const idKey = this.idKey
const selectAllIds = []
this.multipleSelectionAll.forEach(row => {
selectAllIds.push(row[idKey])
})
this.$refs.table.clearSelection()
for (var i = 0; i < this.tableData.data.length; i++) {
if (selectAllIds.indexOf(this.tableData.data[i][idKey]) >= 0) {
// 设置选中记住table组件需要使用ref="table"
this.$refs.table.toggleRowSelection(this.tableData.data[i], true)
}
}
},
// 记忆选择核心方法
changePageCoreRecordData() {
// 标识当前行的唯一键的名称
const idKey = this.idKey
const that = this
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
if (this.multipleSelectionAll.length <= 0) {
this.multipleSelectionAll = this.multipleSelection
return
}
// 总选择里面的key集合
const selectAllIds = []
this.multipleSelectionAll.forEach(row => {
selectAllIds.push(row[idKey])
})
const selectIds = []
// 获取当前页选中的id
this.multipleSelection.forEach(row => {
selectIds.push(row[idKey])
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
if (selectAllIds.indexOf(row[idKey]) < 0) {
that.multipleSelectionAll.push(row)
}
})
const noSelectIds = []
// 得到当前页没有选中的id
this.tableData.data.forEach(row => {
if (selectIds.indexOf(row[idKey]) < 0) {
noSelectIds.push(row[idKey])
}
})
noSelectIds.forEach(id => {
if (selectAllIds.indexOf(id) >= 0) {
for (let i = 0; i < that.multipleSelectionAll.length; i++) {
if (that.multipleSelectionAll[i][idKey] == id) {
// 如果总选择中有未被选中的,那么就删除这条
that.multipleSelectionAll.splice(i, 1)
break
}
}
}
})
},
ok() {
if (this.multipleSelection.length > 0) {
this.$emit('getCouponId', this.multipleSelectionAll)
// this.close()
} else {
this.$message.warning('请先选择优惠劵')
}
},
// 列表
getList(num) {
this.listLoading = true
this.tableFrom.page = num ? num : this.tableFrom.page
marketingListApi(this.tableFrom).then(res => {
this.tableData.data = res.list
this.tableData.total = res.total
this.listLoading = false
this.$nextTick(function() {
this.setSelectRow()// 调用跨页选中方法
})
}).catch(res => {
this.listLoading = false
})
},
pageChange(page) {
this.changePageCoreRecordData()
this.tableFrom.page = page
multipleSelection: [],
multipleSelectionAll: [],
idKey: 'id',
nextPageFlag: false,
attr: []
}
},
watch: {
keyNum: {
deep: true,
handler(val) {
this.getList()
},
handleSizeChange(val) {
this.changePageCoreRecordData()
this.tableFrom.limit = val
this.getList()
},
// 发送
sendGrant(id){
this.$modalSure('发送优惠劵吗').then(() => {
couponUserApi({ couponId:id, uid:this.userIds }).then(() => {
this.$message.success('发送成功')
this.getList()
})
})
}
}
},
mounted() {
this.tableFrom.page = 1
this.getList()
this.multipleSelectionAll = this.couponData || []
},
methods: {
close() {
this.multipleSelection = []
},
handleSelectionChange(val) {
this.multipleSelection = val
setTimeout(() => {
this.changePageCoreRecordData()
}, 50)
},
// 设置选中的方法
setSelectRow() {
if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
return
}
// 标识当前行的唯一键的名称
const idKey = this.idKey
const selectAllIds = []
this.multipleSelectionAll.forEach(row => {
selectAllIds.push(row[idKey])
})
this.$refs.table.clearSelection()
for (var i = 0; i < this.tableData.data.length; i++) {
if (selectAllIds.indexOf(this.tableData.data[i][idKey]) >= 0) {
// 设置选中记住table组件需要使用ref="table"
this.$refs.table.toggleRowSelection(this.tableData.data[i], true)
}
}
},
// 记忆选择核心方法
changePageCoreRecordData() {
// 标识当前行的唯一键的名称
const idKey = this.idKey
const that = this
// 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
if (this.multipleSelectionAll.length <= 0) {
this.multipleSelectionAll = this.multipleSelection
return
}
// 总选择里面的key集合
const selectAllIds = []
this.multipleSelectionAll.forEach(row => {
selectAllIds.push(row[idKey])
})
const selectIds = []
// 获取当前页选中的id
this.multipleSelection.forEach(row => {
selectIds.push(row[idKey])
// 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
if (selectAllIds.indexOf(row[idKey]) < 0) {
that.multipleSelectionAll.push(row)
}
})
const noSelectIds = []
// 得到当前页没有选中的id
this.tableData.data.forEach(row => {
if (selectIds.indexOf(row[idKey]) < 0) {
noSelectIds.push(row[idKey])
}
})
noSelectIds.forEach(id => {
if (selectAllIds.indexOf(id) >= 0) {
for (let i = 0; i < that.multipleSelectionAll.length; i++) {
if (that.multipleSelectionAll[i][idKey] == id) {
// 如果总选择中有未被选中的,那么就删除这条
that.multipleSelectionAll.splice(i, 1)
break
}
}
}
})
},
ok() {
if (this.multipleSelection.length > 0) {
this.$emit('getCouponId', this.multipleSelectionAll)
// this.close()
} else {
this.$message.warning('请先选择优惠劵')
}
},
// 列表
getList(num) {
this.listLoading = true
this.tableFrom.page = num ? num : this.tableFrom.page
marketingListApi(this.tableFrom).then(res => {
this.tableData.data = res.list
this.tableData.total = res.total
this.listLoading = false
this.$nextTick(function() {
this.setSelectRow()// 调用跨页选中方法
})
}).catch(res => {
this.listLoading = false
})
},
pageChange(page) {
this.changePageCoreRecordData()
this.tableFrom.page = page
this.getList()
},
handleSizeChange(val) {
this.changePageCoreRecordData()
this.tableFrom.limit = val
this.getList()
},
// 发送
sendGrant(id){
this.$modalSure('发送优惠劵吗').then(() => {
couponUserApi({ couponId:id, uid:this.userIds }).then(() => {
this.$message.success('发送成功')
this.getList()
})
})
}
}
}
</script>
<style scoped lang="scss">

View File

@@ -102,12 +102,11 @@
<script>
import * as systemAdminApi from '@/api/systemadmin.js'
import * as roleApi from '@/api/role.js'
import * as constants from '@/utils/constants.js'
export default {
name: "index",
data(){
return {
constants,
constants: this.$constants,
loading:false,
templateRadio:'',
dialogFormVisible:false,

View File

@@ -33,7 +33,7 @@ export default {
initialFrameHeight: 500, // 初始容器高度
initialFrameWidth: '100%', // 初始容器宽度
UEDITOR_HOME_URL: '/UEditor/',
serverUrl: 'http://35.201.165.105:8000/controller.php'
serverUrl: ''
}
}
},

View File

@@ -1,4 +1,4 @@
<template>
<template>
<div>
<el-row :gutter="30">
<el-col v-bind="grid">
@@ -31,34 +31,45 @@
>{{ data.name }}</span>
</div>
<span class="el-ic">
<svg-icon
icon-class="example"
title="添加分类"
class="icon-space"
@click.stop="onAdd(data.id)"
/>
<svg-icon
icon-class="danyuan"
title="添加管理单元"
class="icon-space"
/>
<i
v-if="data.id!== 10000"
class="el-icon-edit"
title="修改"
@click.stop="onEdit(data.id)"
/>
<svg-icon
icon-class="detail"
title="查看该空间详情"
class="icon-space"
/>
<i
v-if="data.id!== 10000"
class="el-icon-delete"
title="删除分类"
@click.stop="() => handleDelete(data.id)"
/>
<el-dropdown>
<span class="el-dropdown-link">
<i class="el-icon-more"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="onAdd(data.id)">添加分类</el-dropdown-item>
<el-dropdown-item @click.native="onEdit(data.id)">编辑分类</el-dropdown-item>
<el-dropdown-item @click.native="handleDelete(data.id)">删除分类</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!--<svg-icon-->
<!--icon-class="example"-->
<!--title="添加分类"-->
<!--class="icon-space"-->
<!--@click.stop="onAdd(data.id)"-->
<!--/>-->
<!--<svg-icon-->
<!--icon-class="danyuan"-->
<!--title="添加管理单元"-->
<!--class="icon-space"-->
<!--/>-->
<!--<i-->
<!--v-if="data.id!== 10000"-->
<!--class="el-icon-edit"-->
<!--title="修改"-->
<!--@click.stop="onEdit(data.id)"-->
<!--/>-->
<!--<svg-icon-->
<!--icon-class="detail"-->
<!--title="查看该空间详情"-->
<!--class="icon-space"-->
<!--/>-->
<!--<i-->
<!--v-if="data.id!== 10000"-->
<!--class="el-icon-delete"-->
<!--title="删除分类"-->
<!--@click.stop="() => handleDelete(data.id)"-->
<!--/>-->
</span>
</div>
</el-tree>
@@ -70,22 +81,60 @@
<el-col v-bind="grid2" class="colLeft">
<div class="conter mb15">
<div class="bnt">
<el-button size="mini" type="primary" class="mb10 mr10" @click="checkPics">使用选中图片</el-button>
<el-upload
class="upload-demo mr10 mb15"
action
:http-request="handleUploadForm"
:on-change="imgSaveToUrl"
:headers="myHeaders"
:show-file-list="false"
multiple
>
<el-button size="mini" type="primary">点击上传</el-button>
</el-upload>
<el-button type="success" size="mini" @click.stop="onAdd">添加分类</el-button>
<el-button type="error" size="mini" class="mr10" :disabled="checkPicList.length===0" @click.stop="editPicList('图片')">删除图片</el-button>
<el-select v-model="sleOptions.attachment_category_name" placeholder="图片移动至" class="mb15" size="mini">
<!--<el-tooltip class="item" effect="dark" content="使用选中图片" placement="top-start">-->
<!--<i class="el-icon-thumb mr20" style="font-size: 25px;" @click="checkPics"></i>-->
<!--</el-tooltip>-->
<!--<el-upload-->
<!--class="upload-demo mb15"-->
<!--action-->
<!--:http-request="handleUploadForm"-->
<!--:on-change="imgSaveToUrl"-->
<!--:headers="myHeaders"-->
<!--:show-file-list="false"-->
<!--multiple-->
<!--&gt;-->
<!--<el-tooltip class="item" effect="dark" content="上传图片" placement="top-start">-->
<!--<i class="el-icon-upload2 mr20" style="font-size: 25px;"></i>-->
<!--</el-tooltip>-->
<!--&lt;!&ndash;<el-button size="mini" type="primary">点击上传</el-button>&ndash;&gt;-->
<!--</el-upload>-->
<el-button size="small" type="primary" class="mr20 mb20" @click="checkPics">使用选中图片</el-button>
<div class="mr20 mb20">
<el-button-group>
<el-tooltip class="item" effect="dark" content="上传图片" placement="top-start">
<el-upload
class="upload-demo"
action
:http-request="handleUploadForm"
:on-change="imgSaveToUrl"
:headers="myHeaders"
:show-file-list="false"
multiple
>
<el-button type="primary" icon="el-icon-upload2" size="mini" style="font-size: 15px;"></el-button>
</el-upload>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="添加分类" placement="top-start">
<el-button type="primary" icon="el-icon-circle-plus-outline" style="font-size: 15px;" size="mini" @click="onAdd"></el-button>
</el-tooltip>
<el-tooltip class="item" effect="dark" content="删除图片" placement="top-start">
<el-button type="primary" icon="el-icon-delete" style="font-size: 15px;" size="mini" @click.stop="editPicList('图片')"></el-button>
</el-tooltip>
</el-button-group>
</div>
<!--<el-tooltip class="item" effect="dark" content="添加分类" placement="top-start">-->
<!--<i class="el-icon-circle-plus-outline mr20" style="font-size: 25px;" @click="onAdd"></i>-->
<!--</el-tooltip>-->
<!--<el-button type="success" size="mini" @click.stop="onAdd">添加分类</el-button>-->
<!--<el-tooltip class="item" effect="dark" content="删除图片" placement="top-start">-->
<!--<i class="el-icon-delete mr20" style="font-size: 25px;" @click.stop="editPicList('图片')"></i>-->
<!--</el-tooltip>-->
<!--<el-button type="error" size="mini" class="mr10" :disabled="checkPicList.length===0" @click.stop="editPicList('图片')">删除图片</el-button>-->
<el-select v-model="sleOptions.attachment_category_name" placeholder="图片移动至" class="mb20" size="small">
<el-option
class="demo"
:label="sleOptions.attachment_category_name"
:value="sleOptions.attachment_category_id"
style="max-width: 560px;height:200px;overflow: auto;background-color:#fff"
@@ -106,7 +155,7 @@
<i class="el-icon-picture" style="font-size: 60px;color: rgb(219, 219, 219);" />
<span class="imagesNo_sp">图片库为空</span>
</div>
<div class="conters">
<div class="conters scrollbarAll">
<div
v-for="(item, index) in pictrueList.list"
:key="index"
@@ -121,7 +170,7 @@
</div>
<div class="block">
<el-pagination
:page-sizes="[12, 24, 48, 60]"
:page-sizes="[10, 20, 30, 40]"
:page-size="tableData.limit"
:current-page="tableData.page"
:pager-count="5"
@@ -142,8 +191,10 @@
@close="closeModel"
>
<el-form ref="editPram" :model="editPram" label-width="100px" v-loading="loading">
<el-form-item label="上级分类">
<el-cascader v-model="editPram.pid" :options="treeData2" :props="categoryProps" style="width:100%" />
<el-form-item label="上级分类" prop="pid"
:rules="[{ type: 'number',required:true,message:'请选择上级分类',trigger:['blur','change'] }]"
>
<el-cascader v-model="editPram.pid" :options="treeData2" :props="categoryProps" style="width:100%"/>
</el-form-item>
<el-form-item
label="分类名称"
@@ -197,7 +248,7 @@ export default {
emitPath: false
},
editPram:{
pid: 0,
pid: 1000,
name: '',
type: 2,
sort: 1,
@@ -213,17 +264,17 @@ export default {
},
list: [],
grid: {
xl: 8,
lg: 8,
md: 8,
sm: 8,
xl: 7,
lg: 7,
md: 7,
sm: 7,
xs: 24
},
grid2: {
xl: 16,
lg: 16,
md: 16,
sm: 16,
xl: 17,
lg: 17,
md: 17,
sm: 17,
xs: 24
},
filterText: '',
@@ -235,7 +286,7 @@ export default {
},
tableData: {
page: 1,
limit: 12,
limit: 10,
pid: 0
},
classifyId: 0,
@@ -300,7 +351,7 @@ export default {
handlerSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
if( this.editPram.pid === 10000 ) this.editPram.pid = 0
if( this.editPram.pid==10000) this.editPram.pid = 0
this.bizTitle==='添加分类' ? addCategroy(this.editPram).then(data => {
this.$message.success('创建成功')
this.visible = false
@@ -457,6 +508,7 @@ export default {
},
// 删除图片
editPicList(tit) {
if (!this.checkPicList.length) return this.$message.warning('请先选择图片')
this.$modalSure().then(() => {
fileDeleteApi(this.ids.join(',')).then(() => {
this.$message.success('刪除成功')
@@ -500,6 +552,16 @@ export default {
</script>
<style scoped lang="scss">
.demo::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
.demo {
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */
overflow-x: hidden;
overflow-y: auto;
}
.temp {
height: 0;
margin-bottom: 0;
@@ -515,6 +577,7 @@ export default {
}
.upload-demo {
display: inline-block !important;
float: left;
}
.tree_w {
padding: 20px 30px
@@ -524,7 +587,7 @@ export default {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
font-size: 12px;
padding-right: 8px;
color: #4386c6;
}
@@ -607,7 +670,7 @@ export default {
box-sizing: border-box;
.trees {
width: 100%;
max-height: 374px;
max-height: 345px;
}
}
.scollhide::-webkit-scrollbar {
@@ -617,10 +680,12 @@ export default {
.conters{
display: flex;
flex-wrap: wrap;
max-height: 296px;
overflow: auto;
}
.conters:after {content: ""; width: 410px !important; }
.gridPic{
margin-right: 20px;
margin-right: 15px;
margin-bottom: 10px;
width: 110px;
height: 110px;
@@ -636,11 +701,12 @@ export default {
height: 100%;
.bnt {
width: 100%;
padding: 0 13px 10px 15px;
padding: 0 13px 10px 7px;
box-sizing: border-box;
display: flex;
}
.pictrueList {
padding-left: 15px;
/*padding-left: 15px;*/
width: 100%;
el-image {
width: 100%;