Browse Source

yshop1.4版本发布,新增积分会员功能等,详细看文档介绍

master
hupeng 5 years ago
parent
commit
6d570d39c4
  1. 31
      README.md
  2. 24
      src/api/yxSystemUserLevel.js
  3. 24
      src/api/yxSystemUserTask.js
  4. 8
      src/api/yxUser.js
  5. 2
      src/views/dashboard/PanelGroup.vue
  6. 2
      src/views/dashboard/PanelGroupT.vue
  7. 6
      src/views/shop/goods/form.vue
  8. 2
      src/views/shop/set/actform.vue
  9. 2
      src/views/shop/set/form.vue
  10. 2
      src/views/shop/set/hotform.vue
  11. 2
      src/views/shop/set/menuform.vue
  12. 2
      src/views/shop/set/rollform.vue
  13. 118
      src/views/shop/set/sign.vue
  14. 101
      src/views/shop/set/signform.vue
  15. 2
      src/views/shop/set/usermenuform.vue
  16. 9
      src/views/shop/user/form.vue
  17. 128
      src/views/shop/user/formp.vue
  18. 33
      src/views/shop/user/index.vue
  19. 143
      src/views/shop/userlevel/form.vue
  20. 147
      src/views/shop/userlevel/index.vue
  21. 126
      src/views/shop/usertask/form.vue
  22. 111
      src/views/shop/usertask/index.vue

31
README.md

@ -2,8 +2,7 @@
#### 项目简介 #### 项目简介
yshop基于当前流行技术组合: SpringBoot2+Jpa+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含商城、拼团、砍价、 yshop基于当前流行技术组合的前后端分离商城系统: SpringBoot2+Jpa+MybatisPlus+SpringSecurity+jwt+redis+Vue的前后端分离的商城系统, 包含商城、拼团、砍价、商户管理、 秒杀、优惠券、积分、分销等功能,更适合企业或个人二次开发;;
秒杀、优惠券、积分、分销等功能,更适合企业或个人二次开发;
**开发文档** 【[查看文档](https://gitee.com/guchengwuyue/yshopmall/wikis/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83?sort_id=1718722)】 **开发文档** 【[查看文档](https://gitee.com/guchengwuyue/yshopmall/wikis/%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83?sort_id=1718722)】
@ -54,7 +53,6 @@ yshop基于当前流行技术组合: SpringBoot2+Jpa+MybatisPlus+SpringSecurit
#### 已经完成功能 #### 已经完成功能
- 可以具体查看演示地址查看当前版本已经完成的功能,不再絮叨啦 - 可以具体查看演示地址查看当前版本已经完成的功能,不再絮叨啦
#### 项目结构 #### 项目结构
项目采用分模块开发方式 项目采用分模块开发方式
- yshop-api 公众号(H5)API模块 - yshop-api 公众号(H5)API模块
@ -72,7 +70,7 @@ yshop基于当前流行技术组合: SpringBoot2+Jpa+MybatisPlus+SpringSecurit
<td><img src="https://images.gitee.com/uploads/images/2019/1121/230257_5844f5f1_477893.png"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1121/230257_5844f5f1_477893.png"/></td>
</tr> </tr>
<tr> <tr>
<td><img src="https://images.gitee.com/uploads/images/2019/1121/230051_971db503_477893.png "/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1121/230051_971db503_477893.png"/></td>
<td><img src="https://images.gitee.com/uploads/images/2019/1121/230342_f379583e_477893.png"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1121/230342_f379583e_477893.png"/></td>
</tr> </tr>
<tr> <tr>
@ -86,16 +84,16 @@ yshop基于当前流行技术组合: SpringBoot2+Jpa+MybatisPlus+SpringSecurit
</table> </table>
<table> <table>
<tr> <tr>
<td><img src="https://images.gitee.com/uploads/images/2019/1121/231156_df0430c8_477893.jpeg"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1130/114819_99540fd3_477893.jpeg"/></td>
<td><img src="https://images.gitee.com/uploads/images/2019/1121/231246_797725e6_477893.jpeg"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1129/234538_62ba99b7_477893.jpeg"/></td>
</tr> </tr>
<tr> <tr>
<td><img src="https://images.gitee.com/uploads/images/2019/1121/231335_7d732dbd_477893.jpeg"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1129/234601_7fb028a6_477893.jpeg"/></td>
<td><img src="https://images.gitee.com/uploads/images/2019/1107/201622_f913b59c_477893.png"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1129/234622_6f593729_477893.jpeg"/></td>
</tr> </tr>
<tr> <tr>
<td><img src="https://images.gitee.com/uploads/images/2019/1107/201646_5bc6df48_477893.png"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1130/114845_9ed3c82c_477893.jpeg"/></td>
<td><img src="https://images.gitee.com/uploads/images/2019/1107/201706_32ee305c_477893.png"/></td> <td><img src="https://images.gitee.com/uploads/images/2019/1129/234703_49e8fe4f_477893.jpeg"/></td>
</tr> </tr>
</table> </table>
@ -123,7 +121,6 @@ yshop基于当前流行技术组合: SpringBoot2+Jpa+MybatisPlus+SpringSecurit
* 2.1 Vue 全家桶 * 2.1 Vue 全家桶
* 2.2 Element * 2.2 Element
#### 项目发布明细 #### 项目发布明细
- 1.0版本 - 1.0版本
@ -132,7 +129,17 @@ yshop基于当前流行技术组合: SpringBoot2+Jpa+MybatisPlus+SpringSecurit
- 1.2.1增加了未付款订单取消功能库存销量退出、优惠券、积分功能,个人中心增加了积分流水 - 1.2.1增加了未付款订单取消功能库存销量退出、优惠券、积分功能,个人中心增加了积分流水
- 1.3版本新增拼团功能,已经发布 - 1.3版本新增拼团功能,已经发布
- 1.3.1版本手机端新增商户管理、后台新增统计 - 1.3.1版本手机端新增商户管理、后台新增统计
- 1.4版本规划:补充公众号功能、发布mpvue小程序 - 1.3.2新增后台微信相关及其支付配置,新增自动回复配置
- 1.3.3新增 后台微信图文发送功能,小程序配置,增加小程序授权等,修复一些bug等
- yshop1.4版本发布,更新如下:
- 1.1、新增积分签到
- 1.2、新增会员等级、任务等功能,新增会员价格等
- 1.3、修复Redisson linux系统启动报错问题
- 1.4、修复商户简单权限功能
- 1.5、修复加入购物车覆盖问题
- 1.6、修复拼团出现undefined
- 1.7、会员后台新增余额调整
- 1.8、修复新增配置数据有时候不成功问题等
#### 反馈交流 #### 反馈交流

24
src/api/yxSystemUserLevel.js

@ -0,0 +1,24 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/yxSystemUserLevel',
method: 'post',
data
})
}
export function del(id) {
return request({
url: 'api/yxSystemUserLevel/' + id,
method: 'delete'
})
}
export function edit(data) {
return request({
url: 'api/yxSystemUserLevel',
method: 'put',
data
})
}

24
src/api/yxSystemUserTask.js

@ -0,0 +1,24 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/yxSystemUserTask',
method: 'post',
data
})
}
export function del(id) {
return request({
url: 'api/yxSystemUserTask/' + id,
method: 'delete'
})
}
export function edit(data) {
return request({
url: 'api/yxSystemUserTask',
method: 'put',
data
})
}

8
src/api/yxUser.js

@ -30,3 +30,11 @@ export function onStatus(id, data) {
data data
}) })
} }
export function editp(data) {
return request({
url: 'api/yxUser/money',
method: 'post',
data
})
}

2
src/views/dashboard/PanelGroup.vue

@ -28,7 +28,7 @@
<i class="el-icon-price-tag card-panel-icon"></i> <i class="el-icon-price-tag card-panel-icon"></i>
</div> </div>
<div class="card-panel-description"> <div class="card-panel-description">
<div class="card-panel-text">上周成交额</div> <div class="card-panel-text">近七天成交额</div>
<count-to :start-val="0" :end-val="count.lastWeekPrice" :duration="3200" class="card-panel-num"/> <count-to :start-val="0" :end-val="count.lastWeekPrice" :duration="3200" class="card-panel-num"/>
</div> </div>
</div> </div>

2
src/views/dashboard/PanelGroupT.vue

@ -28,7 +28,7 @@
<i class="el-icon-s-order card-panel-icon"></i> <i class="el-icon-s-order card-panel-icon"></i>
</div> </div>
<div class="card-panel-description"> <div class="card-panel-description">
<div class="card-panel-text">上周订单数</div> <div class="card-panel-text">近七天订单数</div>
<count-to :start-val="0" :end-val="count.lastWeekCount" :duration="3200" class="card-panel-num"/> <count-to :start-val="0" :end-val="count.lastWeekCount" :duration="3200" class="card-panel-num"/>
</div> </div>
</div> </div>

6
src/views/shop/goods/form.vue

@ -31,9 +31,9 @@
<el-form-item label="商品价格" > <el-form-item label="商品价格" >
<el-input v-model="form.price" /> <el-input v-model="form.price" />
</el-form-item> </el-form-item>
<el-form-item label="会员价格" > <!--<el-form-item label="会员价格" >-->
<el-input v-model="form.vipPrice"/> <!--<el-input v-model="form.vipPrice"/>-->
</el-form-item> <!--</el-form-item>-->
<el-form-item label="市场价" > <el-form-item label="市场价" >
<el-input v-model="form.otPrice"/> <el-input v-model="form.otPrice"/>
</el-form-item> </el-form-item>

2
src/views/shop/set/actform.vue

@ -95,7 +95,7 @@ export default {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
this.form = { this.form = {
id: '', id: '',
groupName: '', groupName: 'routine_home_activity',
value: '', value: '',
addTime: '', addTime: '',
sort: '', sort: '',

2
src/views/shop/set/form.vue

@ -91,7 +91,7 @@ export default {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
this.form = { this.form = {
id: '', id: '',
groupName: '', groupName: 'routine_home_banner',
value: '', value: '',
addTime: '', addTime: '',
sort: '', sort: '',

2
src/views/shop/set/hotform.vue

@ -81,7 +81,7 @@ export default {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
this.form = { this.form = {
id: '', id: '',
groupName: '', groupName: 'routine_hot_search',
value: '', value: '',
addTime: '', addTime: '',
sort: '', sort: '',

2
src/views/shop/set/menuform.vue

@ -91,7 +91,7 @@ export default {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
this.form = { this.form = {
id: '', id: '',
groupName: '', groupName: 'routine_home_menus',
value: '', value: '',
addTime: '', addTime: '',
sort: '', sort: '',

2
src/views/shop/set/rollform.vue

@ -85,7 +85,7 @@ export default {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
this.form = { this.form = {
id: '', id: '',
groupName: '', groupName: 'routine_home_roll_news',
value: '', value: '',
addTime: '', addTime: '',
sort: '', sort: '',

118
src/views/shop/set/sign.vue

@ -0,0 +1,118 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<!-- 新增 -->
<div style="display: inline-block;margin: 0px 2px;">
<el-button
v-permission="['ADMIN','YXSYSTEMGROUPDATA_ALL','YXSYSTEMGROUPDATA_CREATE']"
class="filter-item"
size="mini"
type="primary"
icon="el-icon-plus"
@click="add">新增</el-button>
</div>
</div>
<!--表单组件-->
<eForm ref="form" :is-add="isAdd"/>
<!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;">
<el-table-column prop="id" label="ID"/>
<el-table-column prop="map.day" label="第几天"/>
<el-table-column prop="map.sign_num" label="获取积分"/>
<el-table-column v-if="checkPermission(['ADMIN','YXSYSTEMGROUPDATA_ALL','YXSYSTEMGROUPDATA_EDIT','YXSYSTEMGROUPDATA_DELETE'])" label="操作" width="150px" align="center">
<template slot-scope="scope">
<el-button v-permission="['ADMIN','YXSYSTEMGROUPDATA_ALL','YXSYSTEMGROUPDATA_EDIT']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)"/>
<el-popover
v-permission="['ADMIN','YXSYSTEMGROUPDATA_ALL','YXSYSTEMGROUPDATA_DELETE']"
:ref="scope.row.id"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" type="danger" icon="el-icon-delete" size="mini"/>
</el-popover>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<el-pagination
:total="total"
:current-page="page + 1"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChange"
@current-change="pageChange"/>
</div>
</template>
<script>
import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData'
import { del } from '@/api/yxSystemGroupData'
import eForm from './signform'
export default {
components: { eForm },
mixins: [initData],
data() {
return {
delLoading: false,
}
},
created() {
this.$nextTick(() => {
this.init()
})
},
methods: {
checkPermission,
beforeInit() {
this.url = 'api/yxSystemGroupData'
const sort = 'id,desc'
this.params = { page: this.page, size: this.size, sort: sort, groupName: 'sign_day_num' }
return true
},
subDelete(id) {
this.delLoading = true
del(id).then(res => {
this.delLoading = false
this.$refs[id].doClose()
this.dleChangePage()
this.init()
this.$notify({
title: '删除成功',
type: 'success',
duration: 2500
})
}).catch(err => {
this.delLoading = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},
add() {
this.isAdd = true
this.$refs.form.dialog = true
},
edit(data) {
this.isAdd = false
const _this = this.$refs.form
_this.form = {
id: data.id,
groupName: data.groupName,
day: data.map.day,
sign_num: data.map.sign_num
}
_this.dialog = true
}
}
}
</script>
<style scoped>
</style>

101
src/views/shop/set/signform.vue

@ -0,0 +1,101 @@
<template>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="100px">
<el-form-item label="第几天" >
<el-input v-model="form.day" style="width: 370px;"/>
</el-form-item>
<el-form-item label="获取积分" >
<el-input v-model="form.sign_num" style="width: 370px;"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<!--<el-input v-model="form.groupName" />-->
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { add, edit } from '@/api/yxSystemGroupData'
import picUpload from '@/components/pic-upload'
export default {
components: { picUpload },
props: {
isAdd: {
type: Boolean,
required: true
}
},
data() {
return {
loading: false, dialog: false,
form: {
id: '',
groupName: 'sign_day_num',
day: 1,
sign_num: 0
},
rules: {
}
}
},
methods: {
cancel() {
this.resetForm()
},
doSubmit() {
this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
},
doAdd() {
add(this.form).then(res => {
this.resetForm()
this.$notify({
title: '添加成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
doEdit() {
edit(this.form).then(res => {
this.resetForm()
this.$notify({
title: '修改成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
resetForm() {
this.dialog = false
this.$refs['form'].resetFields()
this.form = {
id: '',
groupName: 'sign_day_num',
value: '',
addTime: '',
sort: '',
status: ''
}
}
}
}
</script>
<style scoped>
</style>

2
src/views/shop/set/usermenuform.vue

@ -91,7 +91,7 @@ export default {
this.$refs['form'].resetFields() this.$refs['form'].resetFields()
this.form = { this.form = {
id: '', id: '',
groupName: '', groupName: 'routine_my_menus',
value: '', value: '',
addTime: '', addTime: '',
sort: '', sort: '',

9
src/views/shop/user/form.vue

@ -13,9 +13,6 @@
<el-form-item label="手机号码" > <el-form-item label="手机号码" >
<el-input v-model="form.phone" style="width: 370px;"/> <el-input v-model="form.phone" style="width: 370px;"/>
</el-form-item> </el-form-item>
<el-form-item label="用户余额" >
<el-input v-model="form.nowMoney" style="width: 370px;"/>
</el-form-item>
<el-form-item label="用户积分" > <el-form-item label="用户积分" >
<el-input v-model="form.integral" style="width: 370px;"/> <el-input v-model="form.integral" style="width: 370px;"/>
</el-form-item> </el-form-item>
@ -23,6 +20,10 @@
<el-radio v-model="form.isPromoter" :label="1">开启</el-radio> <el-radio v-model="form.isPromoter" :label="1">开启</el-radio>
<el-radio v-model="form.isPromoter" :label="0">关闭</el-radio> <el-radio v-model="form.isPromoter" :label="0">关闭</el-radio>
</el-form-item> </el-form-item>
<el-form-item label="商户管理" >
<el-radio v-model="form.adminid" :label="1">开启</el-radio>
<el-radio v-model="form.adminid" :label="0">关闭</el-radio>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button> <el-button type="text" @click="cancel">取消</el-button>
@ -74,7 +75,7 @@ export default {
spreadCount: '', spreadCount: '',
cleanTime: '', cleanTime: '',
addres: '', addres: '',
adminid: '', adminid: 0,
loginType: '' loginType: ''
}, },
rules: { rules: {

128
src/views/shop/user/formp.vue

@ -0,0 +1,128 @@
<template>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '余额修改'" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="用户昵称" >
<el-input v-model="form.nickname" :disabled="true" style="width: 370px;"/>
</el-form-item>
<el-form-item label="修改余额" >
<el-radio v-model="form.ptype" :label="1">增加</el-radio>
<el-radio v-model="form.ptype" :label="2">减少</el-radio>
</el-form-item>
<el-form-item label="用户余额" >
<el-input v-model="form.money" style="width: 370px;"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { add, edit, editp } from '@/api/yxUser'
export default {
props: {
isAdd: {
type: Boolean,
required: true
}
},
data() {
return {
loading: false, dialog: false,
form: {
uid: '',
nickname: '',
money: '',
ptype: '1'
},
rules: {
}
}
},
methods: {
cancel() {
this.resetForm()
},
doSubmit() {
this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
},
doAdd() {
add(this.form).then(res => {
this.resetForm()
this.$notify({
title: '添加成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
doEdit() {
editp(this.form).then(res => {
this.resetForm()
this.$notify({
title: '修改成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
resetForm() {
this.dialog = false
this.$refs['form'].resetFields()
this.form = {
uid: '',
account: '',
pwd: '',
realName: '',
birthday: '',
cardId: '',
mark: '',
partnerId: '',
groupId: '',
nickname: '',
avatar: '',
phone: '',
addTime: '',
addIp: '',
lastTime: '',
lastIp: '',
nowMoney: '',
brokeragePrice: '',
integral: '',
signNum: '',
status: '',
level: '',
spreadUid: '',
spreadTime: '',
userType: '',
isPromoter: '',
payCount: '',
spreadCount: '',
cleanTime: '',
addres: '',
adminid: '',
loginType: ''
}
}
}
}
</script>
<style scoped>
</style>

33
src/views/shop/user/index.vue

@ -12,6 +12,7 @@
</div> </div>
<!--表单组件--> <!--表单组件-->
<eForm ref="form" :is-add="isAdd"/> <eForm ref="form" :is-add="isAdd"/>
<pForm ref="formp" :is-add="isAdd"/>
<!--表格渲染--> <!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;"> <el-table v-loading="loading" :data="data" size="small" style="width: 100%;">
<el-table-column prop="uid" label="用户id"/> <el-table-column prop="uid" label="用户id"/>
@ -40,10 +41,21 @@
</el-table-column> </el-table-column>
<el-table-column prop="spreadUid" label="推荐人"/> <el-table-column prop="spreadUid" label="推荐人"/>
<el-table-column prop="payCount" label="购买次数"/> <el-table-column prop="payCount" label="购买次数"/>
<el-table-column v-if="checkPermission(['ADMIN','YXUSER_ALL','YXUSER_EDIT','YXUSER_DELETE'])" label="操作" width="150px" align="center"> <el-table-column v-if="checkPermission(['ADMIN','YXUSER_ALL','YXUSER_EDIT','YXUSER_DELETE'])" label="操作" width="185" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-permission="['ADMIN','YXUSER_ALL','YXUSER_EDIT']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)"/> <el-button v-permission="['ADMIN','YXUSER_ALL','YXUSER_EDIT']" size="mini"
<el-popover type="primary" icon="el-icon-edit" @click="edit(scope.row)"/>
<el-dropdown size="mini" split-button type="primary" trigger="click">
操作
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>
<el-button v-permission="['ADMIN','YXUSER_ALL','YXUSER_EDIT']" size="mini"
type="primary" @click="editP(scope.row)">修改余额</el-button>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!--
<el-popover
v-permission="['ADMIN','YXUSER_ALL','YXUSER_DELETE']" v-permission="['ADMIN','YXUSER_ALL','YXUSER_DELETE']"
:ref="scope.row.uid" :ref="scope.row.uid"
placement="top" placement="top"
@ -55,6 +67,7 @@
</div> </div>
<el-button slot="reference" type="danger" icon="el-icon-delete" size="mini"/> <el-button slot="reference" type="danger" icon="el-icon-delete" size="mini"/>
</el-popover> </el-popover>
-->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -74,9 +87,10 @@ import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData' import initData from '@/mixins/initData'
import { del, onStatus } from '@/api/yxUser' import { del, onStatus } from '@/api/yxUser'
import eForm from './form' import eForm from './form'
import pForm from './formp'
import { formatTime } from '@/utils/index' import { formatTime } from '@/utils/index'
export default { export default {
components: { eForm }, components: { eForm, pForm },
mixins: [initData], mixins: [initData],
data() { data() {
return { return {
@ -185,6 +199,17 @@ export default {
loginType: data.loginType loginType: data.loginType
} }
_this.dialog = true _this.dialog = true
},
editP(data) {
this.isAdd = false
const _this = this.$refs.formp
_this.form = {
uid: data.uid,
nickname: data.nickname,
ptype: 1,
money: 0
}
_this.dialog = true
} }
} }
} }

143
src/views/shop/userlevel/form.vue

@ -0,0 +1,143 @@
<template>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="600px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="100px">
<el-form-item label="等级名称" >
<el-input v-model="form.name" style="width: 370px;"/>
</el-form-item>
<el-form-item label="是否永久" >
<el-radio v-model="form.isForever" :label="1"></el-radio>
<el-radio v-model="form.isForever" :label="0" style="width: 200px;"></el-radio>
</el-form-item>
<el-form-item label="有效时间(天)" >
<el-input v-model="form.validDate" style="width: 370px;"/>
</el-form-item>
<el-form-item label="会员等级" >
<el-input v-model="form.grade" style="width: 370px;"/>
</el-form-item>
<el-form-item label="享受折扣" >
<el-input v-model="form.discount" style="width: 370px;"/>
</el-form-item>
<el-form-item label="会员背景" >
<pic-upload v-model="form.image"/>
</el-form-item>
<el-form-item label="会员图标" >
<pic-upload v-model="form.icon"/>
</el-form-item>
<el-form-item label="是否显示" >
<el-radio v-model="form.isShow" :label="1"></el-radio>
<el-radio v-model="form.isShow" :label="0" style="width: 200px;"></el-radio>
</el-form-item>
<el-form-item label="说明" >
<el-input v-model="form.explain" rows="3" type="textarea"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { add, edit } from '@/api/yxSystemUserLevel'
import picUpload from '@/components/pic-upload'
export default {
components: { picUpload },
props: {
isAdd: {
type: Boolean,
required: true
}
},
data() {
return {
loading: false, dialog: false,
form: {
id: '',
merId: '',
name: '',
money: '',
validDate: '',
isForever: '',
isPay: '',
isShow: '',
grade: '',
discount: '',
image: '',
icon: '',
explain: '',
addTime: '',
isDel: ''
},
rules: {
}
}
},
methods: {
cancel() {
this.resetForm()
},
doSubmit() {
this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
},
doAdd() {
add(this.form).then(res => {
this.resetForm()
this.$notify({
title: '添加成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
doEdit() {
edit(this.form).then(res => {
this.resetForm()
this.$notify({
title: '修改成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
resetForm() {
this.dialog = false
this.$refs['form'].resetFields()
this.form = {
id: '',
merId: '',
name: '',
money: '',
validDate: '',
isForever: '',
isPay: '',
isShow: '',
grade: '',
discount: '',
image: '',
icon: '',
explain: '',
addTime: '',
isDel: ''
}
}
}
}
</script>
<style scoped>
</style>

147
src/views/shop/userlevel/index.vue

@ -0,0 +1,147 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<!-- 新增 -->
<div style="display: inline-block;margin: 0px 2px;">
<el-button
v-permission="['ADMIN','YXSYSTEMUSERLEVEL_ALL','YXSYSTEMUSERLEVEL_CREATE']"
class="filter-item"
size="mini"
type="primary"
icon="el-icon-plus"
@click="add">新增</el-button>
</div>
</div>
<!--表单组件-->
<eForm ref="form" :is-add="isAdd"/>
<!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;">
<el-table-column prop="id" label="id"/>
<el-table-column prop="icon" label="等级图标">
<template slot-scope="scope">
<a :href="scope.row.icon" style="color: #42b983" target="_blank"><img :src="scope.row.icon" alt="点击打开" class="el-avatar"></a>
</template>
</el-table-column>
<el-table-column prop="name" label="等级名称"/>
<el-table-column prop="grade" label="会员等级"/>
<el-table-column prop="discount" label="享受折扣"/>
<el-table-column prop="validDate" label="有效时间"/>
<el-table-column prop="isForever" label="是否永久">
<template slot-scope="scope">
<el-tag v-if="scope.row.isForever === 1" style="cursor: pointer" :type="''"></el-tag>
<el-tag style="cursor: pointer" v-else :type=" 'info' "></el-tag>
</template>
</el-table-column>
<el-table-column prop="isShow" label="是否显示">
<template slot-scope="scope">
<el-tag v-if="scope.row.isShow === 1" style="cursor: pointer" :type="''"></el-tag>
<el-tag style="cursor: pointer" v-else :type=" 'info' "></el-tag>
</template>
</el-table-column>
<el-table-column v-if="checkPermission(['ADMIN','YXSYSTEMUSERLEVEL_ALL','YXSYSTEMUSERLEVEL_EDIT','YXSYSTEMUSERLEVEL_DELETE'])" label="操作" width="150px" align="center">
<template slot-scope="scope">
<el-button v-permission="['ADMIN','YXSYSTEMUSERLEVEL_ALL','YXSYSTEMUSERLEVEL_EDIT']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)"/>
<el-popover
v-permission="['ADMIN','YXSYSTEMUSERLEVEL_ALL','YXSYSTEMUSERLEVEL_DELETE']"
:ref="scope.row.id"
placement="top"
width="180">
<p>确定删除本条数据吗</p>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="$refs[scope.row.id].doClose()">取消</el-button>
<el-button :loading="delLoading" type="primary" size="mini" @click="subDelete(scope.row.id)">确定</el-button>
</div>
<el-button slot="reference" type="danger" icon="el-icon-delete" size="mini"/>
</el-popover>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<el-pagination
:total="total"
:current-page="page + 1"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChange"
@current-change="pageChange"/>
</div>
</template>
<script>
import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData'
import { del } from '@/api/yxSystemUserLevel'
import eForm from './form'
export default {
components: { eForm },
mixins: [initData],
data() {
return {
delLoading: false,
}
},
created() {
this.$nextTick(() => {
this.init()
})
},
methods: {
checkPermission,
beforeInit() {
this.url = 'api/yxSystemUserLevel'
const sort = 'id,desc'
this.params = { page: this.page, size: this.size, sort: sort }
return true
},
subDelete(id) {
this.delLoading = true
del(id).then(res => {
this.delLoading = false
this.$refs[id].doClose()
this.dleChangePage()
this.init()
this.$notify({
title: '删除成功',
type: 'success',
duration: 2500
})
}).catch(err => {
this.delLoading = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},
add() {
this.isAdd = true
this.$refs.form.dialog = true
},
edit(data) {
this.isAdd = false
const _this = this.$refs.form
_this.form = {
id: data.id,
merId: data.merId,
name: data.name,
money: data.money,
validDate: data.validDate,
isForever: data.isForever,
isPay: data.isPay,
isShow: data.isShow,
grade: data.grade,
discount: data.discount,
image: data.image,
icon: data.icon,
explain: data.explain,
addTime: data.addTime,
isDel: data.isDel
}
_this.dialog = true
}
}
}
</script>
<style scoped>
</style>

126
src/views/shop/usertask/form.vue

@ -0,0 +1,126 @@
<template>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="任务名称" >
<el-input v-model="form.levalName" :disabled="true" style="width: 370px;"/>
</el-form-item>
<el-form-item label="任务类型" >
<el-input v-model="form.taskType" :disabled="true" style="width: 370px;"/>
</el-form-item>
<el-form-item label="任务名称" >
<el-input v-model="form.name" style="width: 370px;"/>
</el-form-item>
<el-form-item label="限定数" >
<el-input v-model="form.number" style="width: 370px;"/>
</el-form-item>
<el-form-item label="排序" >
<el-input v-model="form.sort" style="width: 370px;"/>
</el-form-item>
<el-form-item label="是否显示" >
<el-radio v-model="form.isShow" :label="1"></el-radio>
<el-radio v-model="form.isShow" :label="0" style="width: 200px;"></el-radio>
</el-form-item>
<el-form-item label="任务说明" >
<el-input v-model="form.illustrate" rows="3" type="textarea"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="cancel">取消</el-button>
<el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { add, edit } from '@/api/yxSystemUserTask'
export default {
props: {
isAdd: {
type: Boolean,
required: true
}
},
data() {
return {
loading: false, dialog: false,
form: {
id: '',
name: '',
realName: '',
taskType: '',
number: '',
levelId: '',
sort: '',
isShow: '',
isMust: '',
illustrate: '',
addTime: ''
},
rules: {
}
}
},
methods: {
cancel() {
this.resetForm()
},
doSubmit() {
this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
},
doAdd() {
add(this.form).then(res => {
this.resetForm()
this.$notify({
title: '添加成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
doEdit() {
edit(this.form).then(res => {
this.resetForm()
this.$notify({
title: '修改成功',
type: 'success',
duration: 2500
})
this.loading = false
this.$parent.init()
}).catch(err => {
this.loading = false
console.log(err.response.data.message)
})
},
resetForm() {
this.dialog = false
this.$refs['form'].resetFields()
this.form = {
id: '',
name: '',
realName: '',
taskType: '',
number: '',
levelId: '',
sort: '',
isShow: '',
isMust: '',
illustrate: '',
addTime: ''
}
}
}
}
</script>
<style scoped>
</style>

111
src/views/shop/usertask/index.vue

@ -0,0 +1,111 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<!-- 新增 -->
</div>
<!--表单组件-->
<eForm ref="form" :is-add="isAdd"/>
<!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;">
<el-table-column prop="levalName" label="等级名称"/>
<el-table-column prop="name" label="任务名称"/>
<el-table-column prop="sort" label="排序"/>
<el-table-column prop="isShow" label="是否显示">
<template slot-scope="scope">
<el-tag v-if="scope.row.isShow === 1" style="cursor: pointer" :type="''"></el-tag>
<el-tag style="cursor: pointer" v-else :type=" 'info' "></el-tag>
</template>
</el-table-column>
<el-table-column v-if="checkPermission(['ADMIN','YXSYSTEMUSERTASK_ALL','YXSYSTEMUSERTASK_EDIT','YXSYSTEMUSERTASK_DELETE'])" label="操作" width="150px" align="center">
<template slot-scope="scope">
<el-button v-permission="['ADMIN','YXSYSTEMUSERTASK_ALL','YXSYSTEMUSERTASK_EDIT']" size="mini" type="primary" icon="el-icon-edit" @click="edit(scope.row)"/>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<el-pagination
:total="total"
:current-page="page + 1"
style="margin-top: 8px;"
layout="total, prev, pager, next, sizes"
@size-change="sizeChange"
@current-change="pageChange"/>
</div>
</template>
<script>
import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData'
import { del } from '@/api/yxSystemUserTask'
import eForm from './form'
export default {
components: { eForm },
mixins: [initData],
data() {
return {
delLoading: false,
}
},
created() {
this.$nextTick(() => {
this.init()
})
},
methods: {
checkPermission,
beforeInit() {
this.url = 'api/yxSystemUserTask'
const sort = 'id,desc'
this.params = { page: this.page, size: this.size, sort: sort }
return true
},
subDelete(id) {
this.delLoading = true
del(id).then(res => {
this.delLoading = false
this.$refs[id].doClose()
this.dleChangePage()
this.init()
this.$notify({
title: '删除成功',
type: 'success',
duration: 2500
})
}).catch(err => {
this.delLoading = false
this.$refs[id].doClose()
console.log(err.response.data.message)
})
},
add() {
this.isAdd = true
this.$refs.form.dialog = true
},
edit(data) {
this.isAdd = false
const _this = this.$refs.form
_this.form = {
levalName: data.levalName,
id: data.id,
name: data.name,
realName: data.realName,
taskType: data.taskType,
number: data.number,
levelId: data.levelId,
sort: data.sort,
isShow: data.isShow,
isMust: data.isMust,
illustrate: data.illustrate,
addTime: data.addTime
}
_this.dialog = true
}
}
}
</script>
<style scoped>
</style>
Loading…
Cancel
Save