Unverified Commit 2f3ef296 authored by 端午安康's avatar 端午安康 Committed by GitHub
Browse files

Merge pull request #1 from linlinjava/master

update
parents a2f77152 83711ec2
......@@ -3,8 +3,8 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.userId" clearable class="filter-item" style="width: 200px;" placeholder="请输入用户ID"/>
<el-input v-model="listQuery.valueId" clearable class="filter-item" style="width: 200px;" placeholder="请输入商品ID"/>
<el-input v-model="listQuery.userId" clearable class="filter-item" style="width: 200px;" placeholder="请输入用户ID" />
<el-input v-model="listQuery.valueId" clearable class="filter-item" style="width: 200px;" placeholder="请输入商品ID" />
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">导出</el-button>
</div>
......@@ -12,21 +12,21 @@
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" label="用户ID" prop="userId"/>
<el-table-column align="center" label="用户ID" prop="userId" />
<el-table-column align="center" label="商品ID" prop="valueId"/>
<el-table-column align="center" label="商品ID" prop="valueId" />
<el-table-column align="center" label="打分" prop="star"/>
<el-table-column align="center" label="打分" prop="star" />
<el-table-column align="center" label="评论内容" prop="content"/>
<el-table-column align="center" label="评论内容" prop="content" />
<el-table-column align="center" label="评论图片" prop="picUrls">
<template slot-scope="scope">
<el-image v-for="item in scope.row.picUrls" :key="item" :src="item" :preview-src-list="scope.row.picUrls" :lazy="true" style="width: 40px; height: 40px; margin-right: 5px;"/>
<el-image v-for="item in scope.row.picUrls" :key="item" :src="item" :preview-src-list="scope.row.picUrls" :lazy="true" style="width: 40px; height: 40px; margin-right: 5px;" />
</template>
</el-table-column>
<el-table-column align="center" label="时间" prop="addTime"/>
<el-table-column align="center" label="时间" prop="addTime" />
<el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -42,7 +42,7 @@
<el-dialog :visible.sync="replyFormVisible" title="回复">
<el-form ref="replyForm" :model="replyForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="回复内容" prop="content">
<el-input :autosize="{ minRows: 4, maxRows: 8}" v-model="replyForm.content" type="textarea"/>
<el-input v-model="replyForm.content" :autosize="{ minRows: 4, maxRows: 8}" type="textarea" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -129,8 +129,7 @@ export default {
type: 'success',
duration: 2000
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
})
},
handleDownload() {
......
......@@ -410,7 +410,8 @@ export default {
this.goods.categoryId = value[value.length - 1]
},
handleCancel: function() {
this.$router.push({ path: '/goods/goods' })
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.push({ path: '/goods/list' })
},
handlePublish: function() {
const finalGoods = {
......@@ -424,6 +425,7 @@ export default {
title: '成功',
message: '创建成功'
})
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.push({ path: '/goods/list' })
}).catch(response => {
MessageBox.alert('业务错误:' + response.data.errmsg, '警告', {
......
......@@ -419,6 +419,7 @@ export default {
this.goods.categoryId = value[value.length - 1]
},
handleCancel: function() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.push({ path: '/goods/list' })
},
handleEdit: function() {
......@@ -432,8 +433,9 @@ export default {
.then(response => {
this.$notify.success({
title: '成功',
message: '创建成功'
message: '编辑成功'
})
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.push({ path: '/goods/list' })
})
.catch(response => {
......
......@@ -190,8 +190,7 @@ export default {
title: '成功',
message: '删除成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
}).catch(response => {
this.$notify.error({
title: '失败',
......
......@@ -46,8 +46,8 @@
密码修改
</router-link>
</el-dropdown-item>
<el-dropdown-item divided>
<span style="display:block;" @click="logout">退出</span>
<el-dropdown-item divided @click.native="logout">
<span style="display:block;">退出</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
......
......@@ -17,7 +17,11 @@ export default {
const vnodes = []
if (icon) {
vnodes.push(<svg-icon icon-class={icon}/>)
if (icon.includes('el-icon')) {
vnodes.push(<i class={[icon, 'sub-el-icon']} />)
} else {
vnodes.push(<svg-icon icon-class={icon}/>)
}
}
if (title) {
......@@ -27,3 +31,11 @@ export default {
}
}
</script>
<style scoped>
.sub-el-icon {
color: currentColor;
width: 1em;
height: 1em;
}
</style>
<template>
<!-- eslint-disable vue/require-component-is-->
<component v-bind="linkProps(to)">
<slot/>
<component :is="type" v-bind="linkProps(to)">
<slot />
</component>
</template>
<script>
import { isExternal } from '@/utils'
import { isExternal } from '@/utils/validate'
export default {
props: {
to: {
......@@ -16,22 +13,28 @@ export default {
required: true
}
},
methods: {
isExternalLink(routePath) {
return isExternal(routePath)
computed: {
isExternal() {
return isExternal(this.to)
},
linkProps(url) {
if (this.isExternalLink(url)) {
type() {
if (this.isExternal) {
return 'a'
}
return 'router-link'
}
},
methods: {
linkProps(to) {
if (this.isExternal) {
return {
is: 'a',
href: url,
href: to,
target: '_blank',
rel: 'noopener'
}
}
return {
is: 'router-link',
to: url
to: to
}
}
}
......
......@@ -9,7 +9,7 @@
text-color="#bfcbd9"
active-text-color="#409EFF"
>
<sidebar-item v-for="route in permission_routers" :key="route.path" :item="route" :base-path="route.path"/>
<sidebar-item v-for="route in permission_routes" :key="route.path" :item="route" :base-path="route.path" />
</el-menu>
</el-scrollbar>
</template>
......@@ -22,7 +22,7 @@ export default {
components: { SidebarItem },
computed: {
...mapGetters([
'permission_routers',
'permission_routes',
'sidebar'
]),
isCollapse() {
......
......@@ -6,7 +6,6 @@
<script>
const tagAndTagSpacing = 4 // tagAndTagSpacing
export default {
name: 'ScrollPane',
data() {
......@@ -19,27 +18,33 @@ export default {
return this.$refs.scrollContainer.$refs.wrap
}
},
mounted() {
this.scrollWrapper.addEventListener('scroll', this.emitScroll, true)
},
beforeDestroy() {
this.scrollWrapper.removeEventListener('scroll', this.emitScroll)
},
methods: {
handleScroll(e) {
const eventDelta = e.wheelDelta || -e.deltaY * 40
const $scrollWrapper = this.scrollWrapper
$scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4
},
emitScroll() {
this.$emit('scroll')
},
moveToTarget(currentTag) {
const $container = this.$refs.scrollContainer.$el
const $containerWidth = $container.offsetWidth
const $scrollWrapper = this.scrollWrapper
const tagList = this.$parent.$refs.tag
let firstTag = null
let lastTag = null
// find first tag and last tag
if (tagList.length > 0) {
firstTag = tagList[0]
lastTag = tagList[tagList.length - 1]
}
if (firstTag === currentTag) {
$scrollWrapper.scrollLeft = 0
} else if (lastTag === currentTag) {
......@@ -49,13 +54,10 @@ export default {
const currentIndex = tagList.findIndex(item => item === currentTag)
const prevTag = tagList[currentIndex - 1]
const nextTag = tagList[currentIndex + 1]
// the tag's offsetLeft after of nextTag
const afterNextTagOffsetLeft = nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing
// the tag's offsetLeft before of prevTag
const beforePrevTagOffsetLeft = prevTag.$el.offsetLeft - tagAndTagSpacing
if (afterNextTagOffsetLeft > $scrollWrapper.scrollLeft + $containerWidth) {
$scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth
} else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
......@@ -73,7 +75,7 @@ export default {
position: relative;
overflow: hidden;
width: 100%;
/deep/ {
::v-deep {
.el-scrollbar__bar {
bottom: 0px;
}
......
<template>
<div id="tags-view-container" class="tags-view-container">
<scroll-pane ref="scrollPane" class="tags-view-wrapper">
<scroll-pane ref="scrollPane" class="tags-view-wrapper" @scroll="handleScroll">
<router-link
v-for="tag in visitedViews"
ref="tag"
......@@ -17,10 +17,10 @@
</router-link>
</scroll-pane>
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
<li @click="refreshSelectedTag(selectedTag)">刷新</li>
<li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">关闭</li>
<li @click="closeOthersTags">关闭其他</li>
<li @click="closeAllTags(selectedTag)">关闭所有</li>
<li @click="refreshSelectedTag(selectedTag)">Refresh</li>
<li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">Close</li>
<li @click="closeOthersTags">Close Others</li>
<li @click="closeAllTags(selectedTag)">Close All</li>
</ul>
</div>
</template>
......@@ -28,7 +28,6 @@
<script>
import ScrollPane from './ScrollPane'
import path from 'path'
export default {
components: { ScrollPane },
data() {
......@@ -45,7 +44,7 @@ export default {
return this.$store.state.tagsView.visitedViews
},
routes() {
return this.$store.state.permission.routers
return this.$store.state.permission.routes
}
},
watch: {
......@@ -176,19 +175,20 @@ export default {
const offsetWidth = this.$el.offsetWidth // container width
const maxLeft = offsetWidth - menuMinWidth // left boundary
const left = e.clientX - offsetLeft + 15 // 15: margin right
if (left > maxLeft) {
this.left = maxLeft
} else {
this.left = left
}
this.top = e.clientY
this.visible = true
this.selectedTag = tag
},
closeMenu() {
this.visible = false
},
handleScroll() {
this.closeMenu()
}
}
}
......
export { default as AppMain } from './AppMain'
export { default as Navbar } from './Navbar'
export { default as Sidebar } from './Sidebar/index.vue'
export { default as TagsView } from './TagsView'
export { default as AppMain } from './AppMain'
export { default as TagsView } from './TagsView/index.vue'
......@@ -50,7 +50,65 @@
<el-tooltip placement="top" content="返回顶部">
<back-to-top :visibility-height="100" />
</el-tooltip>
<!-- 详情对话框 -->
<el-dialog :visible.sync="aftersaleDialogVisible" title="售后详情" width="800">
<section ref="print">
<el-form :data="aftersaleDetail" label-position="left">
<el-form-item label="售后id">
<el-tag>{{ aftersaleDetail.id }}</el-tag>
</el-form-item>
<el-form-item label="售后编号">
<el-tag>{{ aftersaleDetail.aftersaleSn }}</el-tag>
</el-form-item>
<el-form-item label="订单号">
<el-tag>{{ aftersaleDetail.orderId }}</el-tag>
</el-form-item>
<el-form-item label="订单金额">
<el-tag>{{ aftersaleDetail.amount }}</el-tag>
</el-form-item>
<el-form-item label="订单状态">
<el-tag v-if="aftersaleDetail.status === 1">已申请,待审核</el-tag>
<el-tag v-if="aftersaleDetail.status === 2">审核通过,待退款</el-tag>
<el-tag v-if="aftersaleDetail.status === 3">退款成功</el-tag>
<el-tag v-if="aftersaleDetail.status === 4">审核不通过,已拒绝</el-tag>
</el-form-item>
<el-form-item label="订单用户id">
<el-tag>{{ aftersaleDetail.userId }}</el-tag>
</el-form-item>
<el-form-item label="售后类型">
<el-tag v-if="aftersaleDetail.type === 0">未收货退款</el-tag>
<el-tag v-if="aftersaleDetail.type === 1">不退货退款</el-tag>
<el-tag v-if="aftersaleDetail.type === 2">退货退款</el-tag>
</el-form-item>
<el-form-item label="退款原因">
<span>{{ aftersaleDetail.reason }}</span>
</el-form-item>
<el-form-item label="申请时间">
<span>{{ aftersaleDetail.addTime }}</span>
</el-form-item>
<el-form-item label="更新时间">
<span>{{ aftersaleDetail.updateTime }}</span>
</el-form-item>
<el-form-item label="处理时间">
<span>{{ aftersaleDetail.handleTime }}</span>
</el-form-item>
<el-form-item label="售后图片">
<el-table :data="aftersaleDetail.pictures" border fit highlight-current-row>
<el-table-column align="center" label="售后图片">
<template slot-scope="scope">
<a :href="scope.row" target="_blank">
<img :src="scope.row" width="40">
</a>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
</section>
<span slot="footer" class="dialog-footer">
<el-button @click="aftersaleDialogVisible = false">取 消</el-button>
</span>
</el-dialog>
</div>
</template>
......@@ -91,7 +149,9 @@ export default {
multipleSelection: [],
contentDetail: '',
contentDialogVisible: false,
downloadLoading: false
downloadLoading: false,
aftersaleDialogVisible:false,
aftersaleDetail:{}
}
},
created() {
......@@ -249,7 +309,12 @@ export default {
excel.export_json_to_excel2(tHeader, this.list, filterVal, '售后信息')
this.downloadLoading = false
})
}
},
handleRead(row) {
this.aftersaleDetail = row;
console.log(this.aftersaleDetail);
this.aftersaleDialogVisible = true
},
}
}
</script>
......@@ -3,8 +3,8 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.id" clearable class="filter-item" style="width: 200px;" placeholder="请输入品牌商ID"/>
<el-input v-model="listQuery.name" clearable class="filter-item" style="width: 200px;" placeholder="请输入品牌商名称"/>
<el-input v-model="listQuery.id" clearable class="filter-item" style="width: 200px;" placeholder="请输入品牌商ID" />
<el-input v-model="listQuery.name" clearable class="filter-item" style="width: 200px;" placeholder="请输入品牌商名称" />
<el-button v-permission="['GET /admin/brand/list']" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button v-permission="['POST /admin/brand/create']" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
<el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">导出</el-button>
......@@ -13,9 +13,9 @@
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" label="品牌商ID" prop="id"/>
<el-table-column align="center" label="品牌商ID" prop="id" />
<el-table-column align="center" label="品牌商名称" prop="name"/>
<el-table-column align="center" label="品牌商名称" prop="name" />
<el-table-column align="center" property="picUrl" label="品牌商图片">
<template slot-scope="scope">
......@@ -23,9 +23,9 @@
</template>
</el-table-column>
<el-table-column align="center" min-width="400px" label="介绍" prop="desc"/>
<el-table-column align="center" min-width="400px" label="介绍" prop="desc" />
<el-table-column align="center" label="底价" prop="floorPrice"/>
<el-table-column align="center" label="底价" prop="floorPrice" />
<el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -41,10 +41,10 @@
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="品牌商名称" prop="name">
<el-input v-model="dataForm.name"/>
<el-input v-model="dataForm.name" />
</el-form-item>
<el-form-item label="介绍" prop="simpleDesc">
<el-input v-model="dataForm.desc"/>
<el-input v-model="dataForm.desc" />
</el-form-item>
<el-form-item label="品牌商图片" prop="picUrl">
<el-upload
......@@ -53,13 +53,14 @@
:show-file-list="false"
:on-success="uploadPicUrl"
class="avatar-uploader"
accept=".jpg,.jpeg,.png,.gif">
accept=".jpg,.jpeg,.png,.gif"
>
<img v-if="dataForm.picUrl" :src="dataForm.picUrl" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"/>
<i v-else class="el-icon-plus avatar-uploader-icon" />
</el-upload>
</el-form-item>
<el-form-item label="底价" prop="floorPrice">
<el-input v-model="dataForm.floorPrice"/>
<el-input v-model="dataForm.floorPrice" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -254,8 +255,7 @@ export default {
title: '成功',
message: '删除成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
})
.catch(response => {
this.$notify.error({
......
......@@ -3,7 +3,7 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.question" clearable class="filter-item" style="width: 200px;" placeholder="请输入问题"/>
<el-input v-model="listQuery.question" clearable class="filter-item" style="width: 200px;" placeholder="请输入问题" />
<el-button v-permission="['GET /admin/issue/list']" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button v-permission="['POST /admin/issue/create']" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
<el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">导出</el-button>
......@@ -11,11 +11,11 @@
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" width="100px" label="问题ID" prop="id" sortable/>
<el-table-column align="center" width="100px" label="问题ID" prop="id" sortable />
<el-table-column align="center" min-width="200px" label="问题内容" prop="question"/>
<el-table-column align="center" min-width="200px" label="问题内容" prop="question" />
<el-table-column align="center" min-width="400px" label="问题回复" prop="answer"/>
<el-table-column align="center" min-width="400px" label="问题回复" prop="answer" />
<el-table-column align="center" label="操作" width="250" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -31,10 +31,10 @@
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="问题" prop="question">
<el-input v-model="dataForm.question"/>
<el-input v-model="dataForm.question" />
</el-form-item>
<el-form-item label="回复" prop="answer">
<el-input v-model="dataForm.answer" :rows="8" type="textarea" placeholder="请输入内容"/>
<el-input v-model="dataForm.answer" :rows="8" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -177,8 +177,7 @@ export default {
title: '成功',
message: '删除成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
}).catch(response => {
this.$notify.error({
title: '失败',
......
......@@ -3,8 +3,8 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.keyword" clearable class="filter-item" style="width: 200px;" placeholder="请输入关键字"/>
<el-input v-model="listQuery.url" clearable class="filter-item" style="width: 200px;" placeholder="请输入跳转链接"/>
<el-input v-model="listQuery.keyword" clearable class="filter-item" style="width: 200px;" placeholder="请输入关键字" />
<el-input v-model="listQuery.url" clearable class="filter-item" style="width: 200px;" placeholder="请输入跳转链接" />
<el-button v-permission="['GET /admin/keyword/list']" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button v-permission="['POST /admin/keyword/create']" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
<el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">导出</el-button>
......@@ -13,11 +13,11 @@
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" width="150px" label="关键词ID" prop="id" sortable/>
<el-table-column align="center" width="150px" label="关键词ID" prop="id" sortable />
<el-table-column align="center" min-width="100px" label="关键词" prop="keyword"/>
<el-table-column align="center" min-width="100px" label="关键词" prop="keyword" />
<el-table-column align="center" min-width="300px" label="跳转链接" prop="url"/>
<el-table-column align="center" min-width="300px" label="跳转链接" prop="url" />
<el-table-column align="center" min-width="100px" label="是否推荐" prop="isHot">
<template slot-scope="scope">
......@@ -45,21 +45,21 @@
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="关键词" prop="keyword">
<el-input v-model="dataForm.keyword"/>
<el-input v-model="dataForm.keyword" />
</el-form-item>
<el-form-item label="跳转链接" prop="url">
<el-input v-model="dataForm.url"/>
<el-input v-model="dataForm.url" />
</el-form-item>
<el-form-item label="是否推荐" prop="isHot">
<el-select v-model="dataForm.isHot" placeholder="请选择">
<el-option :value="true" label="推荐"/>
<el-option :value="false" label="普通"/>
<el-option :value="true" label="推荐" />
<el-option :value="false" label="普通" />
</el-select>
</el-form-item>
<el-form-item label="是否默认" prop="isDefault">
<el-select v-model="dataForm.isDefault" placeholder="请选择">
<el-option :value="true" label="默认"/>
<el-option :value="false" label="非默认"/>
<el-option :value="true" label="默认" />
<el-option :value="false" label="非默认" />
</el-select>
</el-form-item>
</el-form>
......@@ -207,8 +207,7 @@ export default {
title: '成功',
message: '删除成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
}).catch(response => {
this.$notify.error({
title: '失败',
......
......@@ -4,6 +4,7 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.userId" clearable class="filter-item" style="width: 160px;" placeholder="请输入用户ID" />
<el-input v-model="listQuery.orderId" clearable class="filter-item" style="width: 160px;" placeholder="请输入订单ID" />
<el-input v-model="listQuery.orderSn" clearable class="filter-item" style="width: 160px;" placeholder="请输入订单编号" />
<el-date-picker v-model="listQuery.timeArray" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss" class="filter-item" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions" />
<el-select v-model="listQuery.orderStatusArray" multiple style="width: 200px" class="filter-item" placeholder="请选择订单状态">
......@@ -190,7 +191,8 @@ export default {
timeArray: [],
orderStatusArray: [],
sort: 'add_time',
order: 'desc'
order: 'desc',
orderId:undefined
},
pickerOptions: {
shortcuts: [{
......@@ -256,16 +258,30 @@ export default {
this.listQuery.start = null
this.listQuery.end = null
}
listOrder(this.listQuery).then(response => {
this.list = response.data.data.list
this.total = response.data.data.total
this.listLoading = false
}).catch(() => {
this.list = []
this.total = 0
this.listLoading = false
})
if(this.listQuery.orderId){
detailOrder(this.listQuery.orderId).then(response => {
this.list = [];
if(response.data.data.order){
this.list.push(response.data.data.order);
this.total = 1;
this.listLoading = false
}
}).catch(() => {
this.list = []
this.total = 0
this.listLoading = false
})
}else{
listOrder(this.listQuery).then(response => {
this.list = response.data.data.list
this.total = response.data.data.total
this.listLoading = false
}).catch(() => {
this.list = []
this.total = 0
this.listLoading = false
})
}
},
getChannel() {
listChannel().then(response => {
......
......@@ -112,8 +112,7 @@ export default {
title: '成功',
message: '删除通知成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
})
.catch(response => {
this.$notify.error({
......
......@@ -3,8 +3,8 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.name" clearable class="filter-item" style="width: 200px;" placeholder="请输入广告标题"/>
<el-input v-model="listQuery.content" clearable class="filter-item" style="width: 200px;" placeholder="请输入广告内容"/>
<el-input v-model="listQuery.name" clearable class="filter-item" style="width: 200px;" placeholder="请输入广告标题" />
<el-input v-model="listQuery.content" clearable class="filter-item" style="width: 200px;" placeholder="请输入广告内容" />
<el-button v-permission="['GET /admin/ad/list']" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button v-permission="['POST /admin/ad/create']" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
<el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload">导出</el-button>
......@@ -13,11 +13,11 @@
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" label="广告ID" prop="id" sortable/>
<el-table-column align="center" label="广告ID" prop="id" sortable />
<el-table-column align="center" label="广告标题" prop="name"/>
<el-table-column align="center" label="广告标题" prop="name" />
<el-table-column align="center" label="广告内容" prop="content"/>
<el-table-column align="center" label="广告内容" prop="content" />
<el-table-column align="center" label="广告图片" prop="url">
<template slot-scope="scope">
......@@ -25,9 +25,9 @@
</template>
</el-table-column>
<el-table-column align="center" label="广告位置" prop="position"/>
<el-table-column align="center" label="广告位置" prop="position" />
<el-table-column align="center" label="活动链接" prop="link"/>
<el-table-column align="center" label="活动链接" prop="link" />
<el-table-column align="center" label="是否启用" prop="enabled">
<template slot-scope="scope">
......@@ -49,10 +49,10 @@
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="广告标题" prop="name">
<el-input v-model="dataForm.name"/>
<el-input v-model="dataForm.name" />
</el-form-item>
<el-form-item label="广告内容" prop="content">
<el-input v-model="dataForm.content"/>
<el-input v-model="dataForm.content" />
</el-form-item>
<el-form-item label="广告图片" prop="url">
<el-upload
......@@ -62,24 +62,25 @@
:on-success="uploadUrl"
:before-upload="checkFileSize"
class="avatar-uploader"
accept=".jpg,.jpeg,.png,.gif">
accept=".jpg,.jpeg,.png,.gif"
>
<img v-if="dataForm.url" :src="dataForm.url" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"/>
<i v-else class="el-icon-plus avatar-uploader-icon" />
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过1024kb</div>
</el-upload>
</el-form-item>
<el-form-item label="广告位置" prop="position">
<el-select v-model="dataForm.position" placeholder="请选择">
<el-option :value="1" label="首页"/>
<el-option :value="1" label="首页" />
</el-select>
</el-form-item>
<el-form-item label="活动链接" prop="link">
<el-input v-model="dataForm.link"/>
<el-input v-model="dataForm.link" />
</el-form-item>
<el-form-item label="是否启用" prop="enabled">
<el-select v-model="dataForm.enabled" placeholder="请选择">
<el-option :value="true" label="启用"/>
<el-option :value="false" label="不启用"/>
<el-option :value="true" label="启用" />
<el-option :value="false" label="不启用" />
</el-select>
</el-form-item>
</el-form>
......@@ -290,8 +291,7 @@ export default {
title: '成功',
message: '删除成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
})
.catch(response => {
this.$notify.error({
......
......@@ -3,12 +3,12 @@
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.name" clearable class="filter-item" style="width: 200px;" placeholder="请输入优惠券标题"/>
<el-input v-model="listQuery.name" clearable class="filter-item" style="width: 200px;" placeholder="请输入优惠券标题" />
<el-select v-model="listQuery.type" clearable style="width: 200px" class="filter-item" placeholder="请选择优惠券类型">
<el-option v-for="type in typeOptions" :key="type.value" :label="type.label" :value="type.value"/>
<el-option v-for="type in typeOptions" :key="type.value" :label="type.label" :value="type.value" />
</el-select>
<el-select v-model="listQuery.status" clearable style="width: 200px" class="filter-item" placeholder="请选择优惠券状态">
<el-option v-for="type in statusOptions" :key="type.value" :label="type.label" :value="type.value"/>
<el-option v-for="type in statusOptions" :key="type.value" :label="type.label" :value="type.value" />
</el-select>
<el-button v-permission="['GET /admin/coupon/list']" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button v-permission="['POST /admin/coupon/create']" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
......@@ -18,13 +18,13 @@
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" label="优惠券ID" prop="id" sortable/>
<el-table-column align="center" label="优惠券ID" prop="id" sortable />
<el-table-column align="center" label="优惠券名称" prop="name"/>
<el-table-column align="center" label="优惠券名称" prop="name" />
<el-table-column align="center" label="介绍" prop="desc"/>
<el-table-column align="center" label="介绍" prop="desc" />
<el-table-column align="center" label="标签" prop="tag"/>
<el-table-column align="center" label="标签" prop="tag" />
<el-table-column align="center" label="最低消费" prop="min">
<template slot-scope="scope">{{ scope.row.min }}元可用</template>
......@@ -69,13 +69,13 @@
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="优惠券名称" prop="name">
<el-input v-model="dataForm.name"/>
<el-input v-model="dataForm.name" />
</el-form-item>
<el-form-item label="介绍" prop="desc">
<el-input v-model="dataForm.desc"/>
<el-input v-model="dataForm.desc" />
</el-form-item>
<el-form-item label="标签" prop="tag">
<el-input v-model="dataForm.tag"/>
<el-input v-model="dataForm.tag" />
</el-form-item>
<el-form-item label="最低消费" prop="min">
<el-input v-model="dataForm.min">
......@@ -98,7 +98,8 @@
v-for="type in typeOptions"
:key="type.value"
:label="type.label"
:value="type.value"/>
:value="type.value"
/>
</el-select>
</el-form-item>
<el-form-item label="优惠券数量" prop="total">
......@@ -119,11 +120,11 @@
</el-form-item>
<el-form-item v-show="dataForm.timeType === 1">
<el-col :span="11">
<el-date-picker v-model="dataForm.startTime" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;"/>
<el-date-picker v-model="dataForm.startTime" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" />
</el-col>
<el-col :span="2" class="line"></el-col>
<el-col :span="11">
<el-date-picker v-model="dataForm.endTime" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;"/>
<el-date-picker v-model="dataForm.endTime" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss" style="width: 100%;" />
</el-col>
</el-form-item>
<el-form-item label="商品限制范围">
......@@ -134,10 +135,76 @@
</el-radio-group>
</el-form-item>
<el-form-item v-show="dataForm.goodsType === 1">
目前不支持
<el-cascader
v-model="selectGoodsCategory"
clearable
placeholder="请选择分类名称"
:options="goodsCategoryOptions"
/>
<el-button @click="handleAddGoodsCategory()">添加</el-button>
<el-table
ref="goodsCateRelationTable"
:data="couponCategoryList"
style="width: 100%;margin-top: 20px"
border
>
<el-table-column label="分类名称" align="center">
<template slot-scope="scope">{{ scope.row.parentCategoryName }}>{{ scope.row.goodsCategoryName }}</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleDeleteGoodsCategory(scope.$index, scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item v-show="dataForm.goodsType === 2">
目前不支持
<el-select
v-model="selectGoods"
filterable
remote
reserve-keyword
placeholder="商品名称/商品货号"
>
<el-option
v-for="item in goodsOptions"
:key="item.goodsId"
:label="item.goodsName"
:value="item.goodsId"
>
<span style="float: left">{{ item.goodsName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">NO.{{ item.goodsSn }}</span>
</el-option>
</el-select>
<el-button @click="handleAddGoods()">添加</el-button>
<el-table
ref="goodsRelationTable"
:data="couponGoodsList"
style="width: 100%;margin-top: 20px"
border
>
<el-table-column label="商品名称" align="center">
<template slot-scope="scope">{{ scope.row.goodsName }}</template>
</el-table-column>
<el-table-column label="商品编号" align="center" width="80">
<template slot-scope="scope">{{ scope.row.goodsSn }}</template>
</el-table-column>
<el-table-column label="操作" align="center" width="60">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
@click="handleDeleteGoods(scope.$index, scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -178,6 +245,8 @@
<script>
import { listCoupon, createCoupon, updateCoupon, deleteCoupon } from '@/api/coupon'
import { listCategory } from '@/api/category.js'
import { listGoods } from '@/api/goods.js'
import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
const defaultTypeOptions = [
......@@ -286,11 +355,19 @@ export default {
{ required: true, message: '优惠券标题不能为空', trigger: 'blur' }
]
},
downloadLoading: false
downloadLoading: false,
selectGoods: null,
goodsOptions: [],
selectGoodsCategory: null,
goodsCategoryOptions: [],
couponGoodsList: [],
couponCategoryList: []
}
},
created() {
this.getList()
this.getCategoryList()
this.getGoodsList()
},
methods: {
getList() {
......@@ -330,6 +407,8 @@ export default {
startTime: null,
endTime: null
}
this.couponCategoryList = []
this.couponGoodsList = []
},
handleCreate() {
this.resetForm()
......@@ -342,6 +421,12 @@ export default {
createData() {
this.$refs['dataForm'].validate(valid => {
if (valid) {
if (this.dataForm.goodsType === 1) {
this.dataForm.goodsValue = this.couponCategoryList.map(item => (item.goodsCategoryId))
}
if (this.dataForm.goodsType === 2) {
this.dataForm.goodsValue = this.couponGoodsList.map(item => (item.goodsId))
}
createCoupon(this.dataForm)
.then(response => {
this.list.unshift(response.data.data)
......@@ -408,8 +493,7 @@ export default {
title: '成功',
message: '删除优惠券成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
})
.catch(response => {
this.$notify.error({
......@@ -447,6 +531,84 @@ export default {
excel.export_json_to_excel2(tHeader, this.list, filterVal, '优惠券信息')
this.downloadLoading = false
})
},
getGoodsList() {
listGoods({ limit: 0 }).then(response => {
const goodsList = response.data.data.list
this.goodsOptions = []
for (let i = 0; i < goodsList.length; i++) {
const item = goodsList[i]
this.goodsOptions.push({ goodsId: item.id, goodsName: item.name, goodsSn: item.goodsSn })
}
}).catch(() => {
this.goodsOptions = []
})
},
handleAddGoods() {
if (this.selectGoods === null) {
this.$message({
message: '请先选择商品',
type: 'warning'
})
return
}
this.couponGoodsList.push(this.getGoodsById(this.selectGoods))
this.selectGoods = null
},
handleDeleteGoods(index, row) {
this.couponGoodsList.splice(index, 1)
},
handleAddGoodsCategory() {
if (this.selectGoodsCategory === null || this.selectGoodsCategory.length === 0) {
this.$message({
message: '请先选择商品分类',
type: 'warning'
})
return
}
this.couponCategoryList.push(this.getGoodsCategoryByIds(this.selectGoodsCategory))
this.selectGoodsCategory = []
},
handleDeleteGoodsCategory(index, row) {
this.couponCategoryList.splice(index, 1)
},
getGoodsById(id) {
for (let i = 0; i < this.goodsOptions.length; i++) {
if (id === this.goodsOptions[i].goodsId) {
return this.goodsOptions[i]
}
}
return null
},
getCategoryList() {
listCategory().then(response => {
const list = response.data.data.list
this.goodsCategoryOptions = []
for (let i = 0; i < list.length; i++) {
const children = []
if (list[i].children != null && list[i].children.length > 0) {
for (let j = 0; j < list[i].children.length; j++) {
children.push({ label: list[i].children[j].name, value: list[i].children[j].id })
}
}
this.goodsCategoryOptions.push({ label: list[i].name, value: list[i].id, children: children })
}
})
},
getGoodsCategoryByIds(ids) {
let name
let parentName
for (let i = 0; i < this.goodsCategoryOptions.length; i++) {
if (this.goodsCategoryOptions[i].value === ids[0]) {
parentName = this.goodsCategoryOptions[i].label
for (let j = 0; j < this.goodsCategoryOptions[i].children.length; j++) {
if (this.goodsCategoryOptions[i].children[j].value === ids[1]) {
name = this.goodsCategoryOptions[i].children[j].label
}
}
}
}
return { goodsCategoryId: ids[1], goodsCategoryName: name, parentCategoryName: parentName }
}
}
}
......
......@@ -237,8 +237,7 @@ export default {
title: '成功',
message: '删除团购规则成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
this.getList()
}).catch(response => {
this.$notify.error({
title: '失败',
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment