Commit e2d16c68 by zhangmeng

积分商城

parent db59962a
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/css/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link href=/marketing/static/css/app.49fd2bb5d4d8e0c2d65b8847ca768723.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/marketing/static/js/manifest.0a85049e489e85ac5f0a.js></script><script type=text/javascript src=/marketing/static/js/vendor.ccb4bd422cd76a080cba.js></script><script type=text/javascript src=/marketing/static/js/app.f3b2d1f3138a9480a7ac.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><link rel="shortcut icon" href=./static/img/favicon.ico><title>GIC后台</title><link rel=stylesheet type=text/css href=static/css/iconfont.css><link rel=stylesheet type=text/css href=static/css/common.css><link href=/marketing/static/css/app.73d0471a877b1ee863133a4a5583d0fb.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/marketing/static/js/manifest.0a85049e489e85ac5f0a.js></script><script type=text/javascript src=/marketing/static/js/vendor.ccb4bd422cd76a080cba.js></script><script type=text/javascript src=/marketing/static/js/app.c2c17d0d14347c864ddb.js></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -112,6 +112,10 @@
margin-bottom: 60px;
}
}
.no-data {
width: auto;
text-align: center;
}
.leftBar-wrap .el-menu{
......@@ -152,6 +156,12 @@
padding:0 20px 30px;
}
}
.dialog__body__nopadding {
.el-dialog__body{
padding:0 20px 30px;
}
}
.table-name--ellipsis{
......
......@@ -119,6 +119,9 @@ a:hover {
.ml10{
margin-left: 10px!important;
}
.ml20{
margin-left: 20px!important;
}
.mb10{
margin-bottom: 10px!important;
}
......
......@@ -2,10 +2,6 @@
.dm-select {
width: 130px!important;
}
.dm-tabs .el-tabs__header{
padding: 0 30px;
background: #fff;
}
.dm-pagination {
text-align: right;
margin: 24px 0 10px 0;
......@@ -76,6 +72,20 @@
max-height: 310px!important;
}
.dm-tabs {
.el-tabs__header {
padding: 0 30px;
margin: 0;
background: #fff;
border-bottom: 1px solid #e4e7ed;
}
.el-tabs__item{
&.is-active{
border-bottom: 2px solid $primary-color;
}
}
}
.dm-tabs-wrap{
position: relative;
top: -1px;
......@@ -94,13 +104,7 @@
}
}
}
.dm-tabs /deep/ .el-tabs__content {
margin: 0 30px;
background: #fff;
}
.dm-tabs /deep/ .el-tabs__content>div{
margin: 20px;
}
.el-table__empty-text{
width: auto;
......
......@@ -186,27 +186,11 @@
}
},
watch: {
$route: {
handler: function(val, oldVal){
console.log(this.$route.path)
// if (this.$route.path) {
// }
// console.log("左侧菜单插件获取当前路由:",val);
},
// 深度观察监听
deep: true
'$route'(val, oldVal){
console.log(this.$route);
this.selectMenu = this.$route.meta.path;
},
// leftMenuRouter: function(newData,oldData){
// var that = this;
// that.setNewData(newData)
// },
// moduleName
// leftModulesName: function(newData,oldData){
// var that = this;
// that.leftModuleName = newData;
// },
collapseFlag: function(newData,oldData){
var that = this;
// console.log("左侧新数据:",newData,oldData)
......
......@@ -159,6 +159,8 @@
}
&-content__wrap {
overflow-y: auto;
position: relative;
top:-1px;
&::-webkit-scrollbar {
display: none;
}
......
......@@ -3,9 +3,9 @@
<div :class="pbSize">
<span class="pr10">选择卡券(共{{total}}条)</span>
<el-input v-model="listParams.searchParam" class="w200" clearable placeholder="请输入卡券名称" @change="getCardList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<span class="fz12 gray pl20">领取限制>1的卡券不支持选择,系统已过滤。 </span>
<span class="fz12 gray pl20">{{limitTips}} </span>
</div>
<el-table tooltipEffect="light" :data="smsTempList" :height="tableHeight" style="width: 100%" v-loading="loading" @row-click="chooseCard">
<el-table tooltipEffect="light" :data="tableList" :height="tableHeight" style="width: 100%" v-loading="loading" @row-click="chooseCard">
<el-table-column :show-overflow-tooltip="false" width="60" align="center" prop="coupCardId">
<template slot-scope="scope">
<div class="sms-record_left label-hidden">
......@@ -24,7 +24,7 @@
<el-table-column :show-overflow-tooltip="false" :width="120" align="left" prop="couponStock" label="库存"></el-table-column>
<el-table-column :show-overflow-tooltip="true" :min-width="200" align="left" prop="subName" label="描述"></el-table-column>
</el-table>
<el-pagination v-show="smsTempList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="total, prev, pager, next" :total="total"></el-pagination>
<el-pagination v-show="tableList.length && showPagination" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="total, prev, pager, next" :total="total"></el-pagination>
</section>
</template>
......@@ -48,6 +48,25 @@ export default {
type:String,
default:'auto'
},
showPagination:{
type:Boolean,
default:true
},
cardLimitType:{
type:Number,
default:1
}
},
computed:{
limitTips() {
if (this.cardLimitType === 2) {
return '领取限制领取 1~100的卡券,系统已过滤。';
} else if (this.cardLimitType === 3) {
return '领取限制领取>=100 的卡券,系统已过滤。';
} else {
return '领取限制>1的卡券不支持选择,系统已过滤。';
}
}
},
data(){
return{
......@@ -56,25 +75,34 @@ export default {
currentPage:1,
pageSize:10,
requestProject:'gic-web',
cardLimitType:1,
cardLimitType:this.cardLimitType,
cardType:''
},
total:0,
smsTempList:[],
tableList:[],
selectedId:this.activeId
}
},
watch: {
selectedId(val) {
console.log('222=>>>>>>>>>>>>>>>'+val)
let obj = {};
if (this.cardIdName === 'wechatCardId') {
this.smsTempList.map(v => {
this.tableList.map(v => {
if (v.coupCardId === val) {
val = v.wechatCardId
obj = v;
}
})
} else {
this.tableList.map(v => {
if (v.coupCardId === val) {
obj = v;
}
})
}
this.$emit('update:activeId',val);
this.$emit('emitActiveObj',obj);
},
activeId(val) {
this.selectedId = val;
......@@ -97,7 +125,7 @@ export default {
async getCardList() {
this.loading = true;
let res = await getCardList(this.listParams);
this.smsTempList = res.result.result || [];
this.tableList = res.result.result || [];
this.total = res.result.totalCount;
this.loading = false;
},
......
......@@ -5,22 +5,16 @@ import couponList from '../../views/mall/coupon/list';
import couponExchange from '../../views/mall/coupon/exchange';
import couponInfo from '../../views/mall/coupon/info.vue';
import giftList from '../../views/mall/gift/list';
import giftExchange from '../../views/mall/gift/exchange';
import giftInfo from '../../views/mall/gift/info.vue';
import mallTemp from '../../views/mall/temp'
import imgTextTemp from '../../components/libs/imgTextTemp'
import imgTemp from '../../components/libs/imgTemp'
import audioTemp from '../../components/libs/audioTemp'
import videoTemp from '../../components/libs/videoTemp'
import videoAddEdit from '../../components/libs/videoTemp/addEdit'
import mallAddRecord from '../../views/mall/addRecord'
import editor from '../../views/mall/editor'
import goodsList from '../../views/mall/goods/list';
export default {
path: 'mall',
name: '微信营销',
name: '积分商城',
component: mall,
redirect: 'mall/coupon',
meta: {},
......@@ -29,20 +23,25 @@ export default {
path: 'coupon',
name: '优惠券',
component: couponList,
meta: {}
meta: {
menu:'coupon'
}
},
{
path: 'coupon/exchange/:id',
name: '优惠券兑换记录',
component: couponExchange,
meta: {}
meta: {
menu:'coupon'
}
},
{
path: 'coupon/info',
name: '新增优惠券',
component: couponInfo,
meta: {
type:'add'
type:'add',
menu:'coupon'
}
},
{
......@@ -50,7 +49,8 @@ export default {
name: '编辑优惠券',
component: couponInfo,
meta: {
type:'edit'
type:'edit',
menu:'coupon'
}
},
{
......@@ -58,86 +58,71 @@ export default {
name: '优惠券详情',
component: couponInfo,
meta: {
type:'info'
type:'info',
menu:'coupon'
}
},
{
path: 'record/add',
name: '新建群发',
component: mallAddRecord,
meta: { type: 'add' }
path: 'gift',
name: '礼品',
component: giftList,
meta: {
menu:'gift'
}
},
{
path: 'record/edit/:id',
name: '编辑群发',
component: mallAddRecord,
meta: { type: 'edit' }
path: 'gift/exchange/:id',
name: '礼品兑换记录',
component: giftExchange,
meta: {
menu:'gift'
}
},
{
path: 'record/add/:id',
name: '使用图文群发',
component: mallAddRecord,
meta: { type: 'imgText' }
path: 'gift/wxexchange/:id',
name: '微信兑换券兑换记录',
component: giftExchange,
meta: {
menu:'gift',
type:'wx'
}
},
{
path: 'editor/:id',
name: '编辑图文',
component: editor,
meta: { type: 'edit' }
path: 'gift/info',
name: '新增礼品',
component: giftInfo,
meta: {
type:'add',
menu:'gift'
}
},
{
path: 'gift/info/:id',
name: '编辑礼品',
component: giftInfo,
meta: {
type:'edit',
menu:'gift'
}
},
{
path: 'editor',
name: '新建图文',
component: editor,
meta: { type: 'add' }
path: 'gift/queryinfo/:id',
name: '礼品详情',
component: giftInfo,
meta: {
type:'info',
menu:'gift'
}
},
{
path: 'temp',
name: '素材库',
component: mallTemp,
redirect: 'temp/imgtext',
meta: {},
children: [{
path: 'imgtext',
name: '图文',
component: imgTextTemp,
meta: {}
},
{
path: 'img',
name: '图片',
component: imgTemp,
meta: {}
},
{
path: 'audio',
name: '语音',
component: audioTemp,
meta: {}
},
{
path: 'video',
name: '视频',
component: videoTemp,
meta: {}
},
{
path: 'video/add',
name: '新增视频',
component: videoAddEdit,
meta: {
type: 'add'
}
},
{
path: 'video/edit/:id',
name: '编辑视频',
component: videoAddEdit,
meta: {
type: 'edit'
}
},
]
}
path: 'goods',
name: '待发货',
component: goodsList,
meta: {
menu:'goods'
}
},
]
};
......@@ -90,13 +90,18 @@ function handlerErr(code,message = '请求错误') {
/**
* 请求地址,请求数据,是否静默,请求方法
*/
const requests = (url, data = {}, isSilence = false, method = 'POST') => {
const requests = (url, data = {},contentTypeIsJSON = false, isSilence = false, method = 'POST') => {
let _opts = { method, url }
let _data = Object.assign({requestProject:'gic-web'},data)
const _query = {}
let _timer = null
if (method.toLocaleUpperCase() === 'POST') {
_opts.data = qs.stringify(_data)
if (contentTypeIsJSON) {
_opts.data = _data;
_opts.headers = {'Content-Type': 'application/json'};
} else {
_opts.data = qs.stringify(_data)
}
} else {
_opts.params = _query
}
......
import { requests } from './index';
import router from '@/router';
import config from '@/config';
const PREFIX = 'api-integral-mall/';
import Vue from 'vue';
const _vm = new Vue();
// 首页优惠券
export const getPageCardsList = (params) => requests(PREFIX + 'page-cards', params);
......@@ -22,97 +20,48 @@ export const deleteProService = (params) => requests(PREFIX + 'delete-pro', para
//查看兑换记录
export const getPageExchangeLogsList = (params) => requests(PREFIX + 'page-exchange-logs', params);
//查看兑换记录
//查询单个商品
export const getIntegralMallProInfo = (params) => requests(PREFIX + 'get-integral-mall-pro', params);
//发送记录--新建保存群发
export const sendRecordSaveService = (params) => requests(PREFIX + 'save-update-wechat-marketing-record', params);
//获取营销场景
export const sceneSettingList = (params) => requests(PREFIX + 'scene-setting-list', params);
//查看数据
export const getWechatCardData = (params) => requests(PREFIX + 'get-wechat-card-data', params);
//发送记录操作: 删除
export const delWechatMarketingRecord = (params) => requests(PREFIX + 'del-wechat-marketing-record', params);
//发送记录操作: 失效
export const invalidWechatMarketingRecord = (params) => requests(PREFIX + 'invalid-wechat-marketing-record', params);
//素材库 图文 图文分页列表
export const loadImgTextList = (params) => requests(PREFIX + 'page-marketing-wechat-image-text', params);
//素材库 图文 删除图文素材信息
export const deleteImageText = (params) => requests(PREFIX + 'delete-image-text', params);
//素材库--图文--获取图文素材的同步信息 (同步状态, 微信侧图文总条数)
export const getSyncInfo = (params) => requests(PREFIX + 'get-sync-info', params);
//素材库--图文--同步微信侧 图文素材数据
export const syncWechatImageText = (params) => requests(PREFIX + 'sync-wechatImage-text', params);
//素材库--图片--图片分页列表
export const loadImgList = (params) => requests(PREFIX + 'page-marketing-wechat-image', params);
//素材库--图片--编辑图片名称
export const updateImgName = (params) => requests(PREFIX + 'update-marketing-wechat-image-titlename', params);
//素材库--图片--修改图片分组
export const updateGroupName = (params) => requests(PREFIX + 'update-marketing-wechat-image-group', params);
//素材库--图片--新建图片分组
export const addGroupService = (params) => requests(PREFIX + 'save-marketing-wechat-image-group', params);
//素材库--图片--删除图片分组
export const deleteGroupService = (params) => requests(PREFIX + 'delete-marketing-wechat-image-group', params);
//素材库--图片--批量删除图片
export const deleteImageService = (params) => requests(PREFIX + 'delete-batch-marketing-wechat-image', params);
//素材库--图片--移动分组
export const changeGroupService = (params) => requests(PREFIX + 'marketing-wechat-image-changeGroup', params);
//基础数据-会员等级
export const getGradeList = (params) => requests(PREFIX + 'load-grade', params);
//素材库--语音--语音分页列表
export const loadAudioList = (params) => requests(PREFIX + 'page-marketing-wechat-audio', params);
//创建修改积分商品
export const createIntegralProService = (params) => requests(PREFIX + 'create-integral-pro', params, true);
//素材库--语音--删除语音信息
export const delAudioService = (params) => requests(PREFIX + 'delete-marketing-wechat-audio', params);
//素材库--语音--新增/修改语音的弹窗回显信息
export const editAudioDetailService = (params) => requests(PREFIX + 'marketing-wechat-audio-edit', params);
//素材库--语音--新建语音--上传语音
export const uploadAudioService = (params) => requests(PREFIX + 'upload-marketing-audiosave', params);
// 首页礼品列表
export const getPageGiftList = (params) => requests(PREFIX + 'page-gift', params);
//素材库--语音--新建/编辑 保存语音信息
export const saveAudioService = (params) => requests(PREFIX + 'save-update-marketing-wechat-audio', params);
// 基础数据-分类列表
export const getCategoryList = (params) => requests(PREFIX + 'load-category', params);
//素材库--视频--视频分页列表
export const loadVideoList = (params) => requests(PREFIX + 'page-marketing-wechat-video', params);
//素材库--视频--删除视频信息
export const delVideoService = (params) => requests(PREFIX + 'delete-marketing-wechat-video', params);
// 导出优惠券兑换记录
export const exportExchangeListExcel = config.api + PREFIX + 'download-exchange-list-execl';
//素材库--视频--新增/修改视频的弹窗回显信息
export const editVideoDetailService = (params) => requests(PREFIX + 'marketing-wechat-video-edit', params);
// 导出代发货商品
export const exportOnlineListExcel = config.api + PREFIX + 'download-integral-online-excel';
//素材库--视频--新建语音--上传视频
export const uploadVideoService = (params) => requests(PREFIX + 'upload-marketing-videosave', params);
// 查看物流
export const getLogisticsInfo = (params) => requests(PREFIX + 'list-logistics-traces', params);
//素材库--视频--新建/编辑 保存视频信息
export const saveVideoService = (params) => requests(PREFIX + 'save-update-marketing-wechat-video', params);
// 基础数据-物流列表
export const getLogisticsList = (params) => requests(PREFIX + 'load-logisties', params);
//素材库--图文--编辑图文信息 -- 回显图文信息
export const wechatImageTextEdit = (params) => requests(PREFIX + 'wechat-image-text-edit', params);
// 订单发货,取消,修改物流
export const orderOptService = (params) => requests(PREFIX + 'order-opt', params);
// 首页待发货
export const getPageUndeliverList = (params) => requests(PREFIX + 'page-undeliver', params);
//素材库--图文--新增/更新 图文素材信息
export const saveUpdateWechatImageText = (params) => requests(PREFIX + 'save-update-wechat-image-text', params);
// 首页代发货数量
export const getNotSendCount = (params) => requests(PREFIX + 'get-not-send-count', params);
//素材库--图文--新增/更新 图文素材信息
export const getWechatMarketingDetail = (params) => requests(PREFIX + 'get-wechat-marketing-detail', params);
// 礼品设置热门商品
export const setHotStatusService = (params) => requests(PREFIX + 'update-hot-status', params);
//获取公众号的appid
export const getMarketingUserInfo = (params) => requests(PREFIX + 'get-marketing-user-info', params);
// 新建礼品分类
export const createCategoryService = (params) => requests(PREFIX + 'create-gift-category', params);
......@@ -76,6 +76,26 @@ export const numberToChinese = (num) => {
return result;
}
export const numberToWeekChinese = (num) => {
var chnNumChar = {
:0,
:1,
:2,
:3,
:4,
:5,
:6
};
let result = '--';
for(let i in chnNumChar) {
if (num === chnNumChar[i]) {
result = i
}
}
return result;
}
/**
*
* @param 清空数据
......@@ -174,3 +194,5 @@ export const checkUrl = function (urlString) {
return false;
}
......@@ -439,6 +439,8 @@ export default {
card.checkSource = 0;
card.applicableMode = 0;
card.storeProMode = 0;
if (this.sendChildData.storeType === 1) {
if (this.sendChildData.storeGroupIds) {
params.groupIdList = JSON.stringify(this.sendChildData.storeGroupIds.split(','));
......
......@@ -41,7 +41,7 @@ export default {
name: 'ecm',
data () {
return {
effectTypeOption:[{value:-1,label:'所有效'},{value:0,label:'实时'},{value:1,label:'定时'}],
effectTypeOption:[{value:-1,label:'所有效'},{value:0,label:'实时'},{value:1,label:'定时'}],
sceneSettingIdOptions:[],
marketingTypeOptions,
listParams:{
......@@ -121,7 +121,7 @@ export default {
async sceneSettingList() {
let res = await sceneSettingList();
this.sceneSettingIdOptions = res.result;
this.sceneSettingIdOptions.unshift({sceneName:'所有营销场景',sceneSettingId:''})
this.sceneSettingIdOptions.unshift({sceneName:'所有营销场景',sceneSettingId:''})
}
}
}
......
<template>
<el-dialog class="express dialog__body__nopadding" title="查看物流信息" :visible.sync="show" width="60%" :before-close="close">
<div class="express--info">
<p>收件人:{{info.clerkName || '--'}}</p>
<p>联系方式:{{info.consigneePhone || '--'}}</p>
<p>收货地址:{{info.receivingAddress || '--'}}</p>
</div>
<div class="express--order">
<div class="clearfix express--order__info" v-if="!editShow">
<div class="fl pr20">快递公司:{{info.logisticsCompanyName || '--'}}</div>
<div class="fl">运单号码:{{info.courierNumber || '--'}}</div>
<el-button class="fr express--order__info--btn" type="text" @click="editExpress">修改运单信息</el-button>
</div>
<div class="express--order__info" v-else>
<span class="pr10">快递公司:
<el-select class="vertical-middle w100" v-model="params.logisticsCompanyId" placeholder="选择快递">
<el-option v-for="v in logisticsOptions" :key="v.logisticsCompanyCode" :label="v.logisticsCompanyName" :value="v.logisticsCompanyId"></el-option>
</el-select>
</span>
<span>运单号码:
<el-input class="vertical-middle w150" v-model="params.courierNumber" placeholder="请输入快递单号"></el-input>
</span>
<el-button class="vertical-middle" type="primary" size="small" @click="submitExpress">确 认</el-button>
<el-button class="vertical-middle" size="small" @click="editShow = false">取 消</el-button>
</div>
</div>
<div class="express--list">
<div v-for="(v,i) in list" :key="i" class="express--list--item">
<span class="express--list--item__dot"></span>
<p class="express--list--item__date">{{v.date}}</p>
<p class="express--list--item__day">{{v.day}}</p>
<p class="express--list--item__time">{{v.time}}</p>
<p class="express--list--item__info">{{v.acceptStation}}</p>
</div>
<div class="no-data" v-if="list.length === 0">暂无快递数据</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="close">关 闭</el-button>
</span>
</el-dialog>
</template>
<script>
import {getLogisticsInfo,getLogisticsList,orderOptService} from '@/service/api/mallApi.js';
import {formateDateTimeByType,numberToWeekChinese} from '@/utils/index.js';
export default {
props:{
show:{
type:Boolean,
default:false
},
id:{
type:String,
default:''
}
},
watch:{
show(val) {
if (val) {
this.getLogisticsInfo();
}
}
},
data() {
return {
loading:false,
info:{},
list:[],
logisticsOptions:[],
params:{
logisticsCompanyId:'',
logisticsCompanyCode:'',
courierNumber:'',
},
editShow:false
}
},
created() {
this.getLogisticsList();
},
methods: {
close() {
this.editShow = false;
this.$emit('update:show',false);
},
editExpress() {
this.editShow = true;
this.params = {
logisticsCompanyId:this.info.logisticsCompanyId,
logisticsCompanyCode:this.info.logisticsCompanyCode,
courierNumber:this.info.courierNumber
};
},
submitExpress() {
if (!this.params.logisticsCompanyId) {
this.$tips({type:'warning',message:'请选择快递'});
return;
}
if (!this.params.courierNumber) {
this.$tips({type:'warning',message:'请填写快递单号'});
return;
}
this.logisticsOptions.map(v => {
if (v.logisticsCompanyId === this.params.logisticsCompanyId) {
this.params.logisticsCompanyCode = v.logisticsCompanyCode;
}
})
let params = {
optType:3,
integralMallProExchangeId:this.id,
logisticsCompanyId:this.params.logisticsCompanyId,
logisticsCompanyCode:this.params.logisticsCompanyCode,
courierNumber:this.params.courierNumber
};
orderOptService(params).then(res => {
if (res.errorCode === 0) {
this.$tips({type:'success',message:'修改快递信息成功'});
this.editShow = false;
this.getLogisticsInfo();
}
});
},
async getLogisticsList() {
let res = await getLogisticsList();
if (res.errorCode === 0) {
this.logisticsOptions = res.result || [];
}
},
async getLogisticsInfo() {
this.loading = true;
// let res = await getLogisticsInfo({integralMallProExchangeId:'ff80808161c2416c0161c66026d40007'});
let res = await getLogisticsInfo({integralMallProExchangeId:this.id});
if (res.errorCode === 0) {
this.info = res.result.changeLog || {};
this.list = res.result.traces || [];
this.list.map(v => {
const dateTime = new Date(v.acceptTime);
v.date = formateDateTimeByType(dateTime,'yyyy-MM-dd');
v.time = formateDateTimeByType(dateTime,'HH-mm-ss');
v.day = '周'+numberToWeekChinese(dateTime.getDay());
})
console.log(this.list)
}
this.loading = false;
console.log(res)
},
}
};
</script>
<style lang="scss" scoped>
.express{
&--info {
padding-bottom:10px;
border-bottom:1px solid #DCDFE6;
// border-top:1px solid #DCDFE6;
p {
line-height: 30px;
}
}
&--order {
padding:15px 0;
border-bottom:1px solid #DCDFE6;
&__info {
&--btn {
padding:0;
}
}
}
&--list {
background:#f0f2f5;
max-height: 250px;
overflow-y: auto;
padding:10px 0;
font-size: 13px;
&--item {
position: relative;
&::before {
content: ' ';
position: absolute;
left: 18px;
top: 0px;
height: 100%;
width: 1px;
background: #bfbfbf;
}
padding-left:15px;
display: table;
line-height: 25px;
p {
display: table-cell;
}
&__dot {
display:inline-block;
width: 7px;
height: 7px;
background: #bfbfbf;
border-radius: 50%;
margin-right: 10px;
}
&__date {
width: 80px;
}
&__day {
width: 40px;
}
&__time {
width: 80px;
}
&__info {
min-width: 100px;
}
}
}
}
</style>
......@@ -23,7 +23,7 @@
</section>
</template>
<script>
import {getPageExchangeLogsList} from '@/service/api/mallApi.js';
import {getPageExchangeLogsList,exportExchangeListExcel} from '@/service/api/mallApi.js';
import {formateDateTimeByType} from '@/utils/index.js';
export default {
data() {
......@@ -101,10 +101,20 @@ import {formateDateTimeByType} from '@/utils/index.js';
this.total = res.result.total || 0;
this.loading = false;
},
// TODO
// 导出列表
exportExcel(){
}
if (this.dateTime) {
this.listParams.beginTime = formateDateTimeByType(this.dateTime[0],'yyyy-MM-dd');
this.listParams.endTime = formateDateTimeByType(this.dateTime[1],'yyyy-MM-dd');
} else {
this.listParams.beginTime = this.listParams.senendTimedEndTime = '';
}
if (!this.listParams.beginTime || !this.listParams.endTime) {
this.$tips({type: 'warning',message: '时间不能为空'});
return;
}
window.location = `${exportExchangeListExcel}?integralMallProId=${this.listParams.integralMallProId}&status=${this.listParams.status}&useStatus=${this.listParams.useStatus}&memberInfo=${this.listParams.memberInfo}&beginTime=${this.listParams.beginTime}&endTime=${this.listParams.endTime}&requestProject=marketing`;
},
}
};
</script>
import {getGradeList,createIntegralProService} from '@/service/api/mallApi.js';
import cardTemp from '@/components/libs/cardTemp';
export default {
components:{
cardTemp
},
data() {
return {
form:{
......@@ -10,26 +15,38 @@ export default {
exchangeFixDate:['',''], // exchangeFixDateBegin // exchangeFixDateEnd,
exchangeDateDayArr:[],
exchangeDateWeekArr:[]
exchangeDateWeekArr:[],
limitTimeBegin:'',
proShowStatus:1,
},
rules:{},
memberGradeOptions:[],
exchangeDateDayOptions:[],
exchangeDateWeekOptions:[1,2,3,4,5,6,7],
monthOptions:Array.from(Array(31), (v,k) =>k+1),
sendChildData:{
storeType:0,
storeGroupIds:'',
storeIds:[],
},
timeRange:['',''],
isLimitTimes:false,
editDisabled:false,
infoDisabled:false,
}
},
created () {
this.getGradeList();
},
computed:{
isLimitTimes() {
return this.form.limitTimes > 0;
asideShow() {
return this.$store.state.marketing.asideShow
}
},
watch:{
'form.limitTimes'(val) {
this.isLimitTimes = (val > 0);
},
},
methods:{
//门店分组回执方法
getSelectGroupData(val) {
......@@ -37,5 +54,49 @@ export default {
this.sendChildData.storeGroupIds = val.storeGroupIds || ''
this.sendChildData.storeIds = val.storeIds || []
},
async getGradeList() {
let res = await getGradeList();
if (res.errorCode === 0) {
this.memberGradeOptions = res.result || [];
}
console.log(res);
},
// 获取卡券组件回调的对象
getCardActiveObjFun(val) {
this.form.proName = val.cardName || '';
console.log(val)
},
submit() {
let params = {
proName:'', // 商品名字,优惠券就是所选券的名字。
proReferId:'', // 关联的卡券或者礼品
proCategoryId:1, //礼品的分类
proShowStatus:1, // 商品显示状态 1:上架状态就显示 2:兑换状态下显示
integralCost:100,// 积分费用
cashCost:1, // 现金费用,两位小数
limitTimes:1,// 次数限制
memberGrade:'', // 适用会员,多个,逗号拼接。
exchangeDateType:1, // 兑换日期1:全部 2:固定日期 3:每月 4:每周
exchangeFixDateBegin:'', // 兑换时间固定起始时间
exchangeFixDateEnd:'', // 兑换时间固定结束时间
proType:1, // 商品类型1优惠券,2礼品,3实物
exchangeDateWeek:'', //兑换时间 每周哪几天 格式: 1,2,3,4,5,6,7
exchangeTimeType:1, // 兑换时间类型 1:全部 2:部分时段
timeZones: '',// 兑换时间段如:11:20-23:59#
releaseType:1, // 布发状态 1立即 2定时
limitTimeBegin:'', //上架时间 起始时间
limitTimeEnd:'', // 下架时间 结束时间
changeType:1, // 兑换方式1:微信兑换 2:快递发货 3:在线发货
showStore:0, // 显示门店 0所有 1部分分组 2部分门店
storeIds:'', // 选中的门店信息,多个逗号拼接
giftImageUrls:'', // 礼品图片
giftImageFiledCodes:'', // 礼品图片编码
exchangeDateDay:'', // 兑换时间 每月哪几天 格式: 01,02,05,33,31
virtualStock:0, //库存
}
createIntegralProService(params).then(res => {
console.log(res);
})
}
}
};
<template>
<el-form class="dm-wrap" :model="form" ref="form" :rules="rules" label-width="120px">
<div class="border-radius2" style="padding:15px;margin-bottom:20px;">
<cardTemp pbSize="pb15" :activeId.sync="form.cardId" @emitActiveObj="getCardActiveObjFun" :showPagination="false" :cardLimitType="3"></cardTemp>
</div>
<el-form-item prop="integralCost" label="积分费用">
<el-input-number controls-position="right" :disabled="editDisabled || infoDisabled" v-model="form.integralCost" class="w200" :precison="0" :min="0"></el-input-number>
<el-input-number controls-position="right" :disabled="editDisabled || infoDisabled" v-model="form.integralCost" class="w300" :precison="0" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="cashCost" label="现金费用">
<el-input-number controls-position="right" :disabled="editDisabled || infoDisabled" v-model="form.cashCost" class="w200" :precison="0" :min="0"></el-input-number>
<el-input-number controls-position="right" :disabled="editDisabled || infoDisabled" v-model="form.cashCost" class="w300" :precison="0" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="limitTimes" label="次数显示">
<el-checkbox :disabled="editDisabled || infoDisabled" v-model="isLimitTimes">每个会员限制兑换
<el-input-number controls-position="right" :disabled="editDisabled || infoDisabled || !isLimitTimes" v-model="form.limitTimes" class="w100" :precison="0" :min="0"></el-input-number>
<el-checkbox :disabled="editDisabled || infoDisabled" v-model="isLimitTimes"> 每个会员限制兑换
</el-checkbox>
<el-input-number controls-position="right" :disabled="editDisabled || infoDisabled || !isLimitTimes" v-model="form.limitTimes" class="w100" :precison="0" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="memberGrade" label="适用会员">
<el-select v-model="form.memberGrade" multiple placeholder="请选择" class="w">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-select v-model="form.memberGrade" multiple placeholder="请选择" class="w300">
<el-option v-for="item in memberGradeOptions" :key="item.gradeId" :label="item.gradeName" :value="item.gradeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="展现门店">
<vue-gic-store-linkage :disabled="infoDisabled" :msg="sendChildData" ref="selectTree" @sendSelectGroupData="getSelectGroupData"></vue-gic-store-linkage>
</el-form-item>
<el-form-item prop="exchangeDateType" label="兑换日期">
<el-radio-group v-model="form.exchangeDateType">
<el-radio class="block" :label="1">全部日期</el-radio>
<el-radio class="block" :label="2">固定日期
<el-date-picker v-model="form.exchangeFixDate" :disabled="editDisabled || infoDisabled" :picker-options="pickerOptions" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-radio>
<el-radio class="block" :label="3">每月
<el-select v-model="form.exchangeDateDayArr" multiple filterable allow-create default-first-option placeholder="请选择文章标签">
<el-option v-for="item in exchangeDateDayOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
<el-radio-group v-model="form.exchangeDateType" style="line-height:inherit;">
<div class="mb10"><el-radio :label="1">全部日期</el-radio></div>
<div class="mb10"><el-radio :label="2">固定日期
<el-date-picker v-model="form.exchangeFixDate" :disabled="editDisabled || infoDisabled" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-radio></div>
<div class="mb10"><el-radio :label="3">每月
<el-select v-model="form.exchangeDateDayArr" multiple filterable default-first-option placeholder="请选择">
<el-option v-for="item in monthOptions" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-radio>
<el-radio class="block" :label="4">每周
<el-select v-model="form.exchangeDateWeek" multiple placeholder="请选择文章标签">
</el-radio></div>
<div class="mb10"><el-radio :label="4">每周
<el-select v-model="form.exchangeDateWeek" multiple placeholder="请选择">
<el-option v-for="item in exchangeDateWeekOptions" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-radio>
</el-radio></div>
</el-radio-group>
</el-form-item>
<el-form-item prop="exchangeTimeType" label="兑换时段">
<el-radio-group v-model="form.exchangeTimeType">
<el-radio :label="1">全部日期</el-radio>
<el-radio :label="2">部分时段
<el-time-picker is-range v-model="value4" value-format="HH-mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围"></el-time-picker>
<el-radio :label="2">部分时段 <el-time-picker is-range v-model="timeRange" value-format="HH-mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围"></el-time-picker>
</el-radio>
</el-radio-group>
</el-form-item>
......@@ -52,20 +52,20 @@
<el-form-item prop="proShowStatus" label="显示状态">
<el-radio-group v-model="form.proShowStatus">
<el-radio :label="1">上架状态就显示</el-radio>
<el-radio :label="1">兑换状态下显示</el-radio>
<el-radio :label="2">兑换状态下显示</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="proShowStatus" label="发布时间">
<el-radio-group v-model="form.proShowStatus">
<el-form-item prop="releaseType" label="发布时间">
<el-radio-group v-model="form.releaseType">
<el-radio :label="1">立即发布</el-radio>
<el-radio :label="1">定时发布
<el-date-picker v-model="value1" type="datetime" placeholder="选择日期时间"></el-date-picker>
<el-radio :label="2">定时发布
<el-date-picker v-model="form.limitTimeBegin" type="datetime" placeholder="选择日期时间"></el-date-picker>
</el-radio>
</el-radio-group>
</el-form-item>
<div class="btn-wrap_fixed" :class="{'on':asideShow}">
<el-button type="primary" @click="submitForm('form')" v-if="!infoDisabled">确认新增</el-button>
<el-button type="primary" @click="submit('form')" v-if="!infoDisabled">确认新增</el-button>
<el-button @click="$router.go(-1)">返 回</el-button>
</div>
</el-form>
......
<template>
<section class="dm-wrap">
<div class="pb22 clearfix">
<el-button class="fr" type="primary" @click="$router.push('/wechat/record/add')">新增优惠券</el-button>
<el-button class="fr" type="primary" @click="$router.push('/mall/coupon/info')">新增优惠券</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="loading">
<el-table-column label="商品" align="left" prop="timesStatus" min-width="140">
......@@ -62,7 +62,7 @@
</template>
<script>
import { getPageCardsList, deleteProService } from '@/service/api/mallApi.js';
import updateCount from './update-count';
import updateCount from '../common/update-count';
import {formateDateTimeByType} from '@/utils/index.js';
export default {
name: 'coupon-list',
......
<template>
<section class="dm-wrap" v-loading="loading">
<div class="pb22 clearfix">
<el-date-picker class="w250" v-model="dateTime" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="getPageExchangeLogsList"></el-date-picker>
<el-select class="vertical-middle w150" v-model="listParams.status" placeholder="选择状态" @change="getPageExchangeLogsList">
<el-option v-for="v in statusOptions" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-input v-model="listParams.memberInfo" class="w300" placeholder="输入流水号/姓名/会员卡号" clearable @change="getPageExchangeLogsList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-button type="primary" class="fr" icon="iconfont icon-icon_yunxiazai fz14" @click="exportExcel"> 导出列表</el-button>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%">
<el-table-column v-for="(v,i) in tableHeader" :align="v.align" :key="i" :prop="v.prop" :label="v.label">
<template slot-scope="scope">
<span v-if="v.formatter" v-html="v.formatter(scope.row)"></span>
<span v-else>{{scope.row[v.prop]}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="left" width="100px">
<template slot-scope="scope">
<p v-if="isWxExchange">
<span type="text">{{scope.row.useStatus === 5?'已使用':'未使用'}}</span>
</p>
<p>
<el-button type="text" v-if="scope.row.status !== 1 && !isWxExchange" @click="queryExpress(scope.row)">查看物流</el-button>
<el-button type="text" v-if="isWxExchange">
<a :href="'/member/#/wechatmemberDetail?memberId='+scope.row.memberId">查看详情</a>
</el-button>
<span type="text" v-else>--</span>
</p>
</template>
</el-table-column>
</el-table>
<el-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></el-pagination>
<express :show.sync="expressShow" :id="expressId"></express>
</section>
</template>
<script>
import {getPageExchangeLogsList,exportExchangeListExcel} from '@/service/api/mallApi.js';
import {formateDateTimeByType} from '@/utils/index.js';
import express from '../common/express';
export default {
components: {
express
},
data() {
let _vm = this;
return {
loading:false,
defaultAvatar:require('../../../assets/img/head_default.png'),
tableHeader:[
{label:'兑换时间',prop:'createTime',minWidth:'170',align:'left',formatter(row){
return formateDateTimeByType(row.createTime,'yyyy-MM-dd-HH-mm-ss');
}},
{label:'流水号',prop:'definedCode',minWidth:'100',align:'left'},
{label:'会员信息',prop:'issuingQuantity',minWidth:'170',align:'left',formatter(row){
const photoUrl = row.photoUrl.match(/^http(s)?/) ? row.photoUrl : _vm.defaultAvatar;
return `<a href="/member/#/wechatmemberDetail?memberId=${row.memberId}" target="_blank">
<img class="vertical-middle table__avatar" src="${photoUrl}" width="60" height="60" alt="" srcset="">
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">${row.memberName || '--'}</p>
<p class="table-name--ellipsis fz13">${row.cardNum || '--'}</p>
</div>
</a>`;
}},
{label:'消耗积分',prop:'payCost',width:'80',align:'left'},
{label:'状态',prop:'status',width:'100',align:'left',formatter(row){
if (_vm.isWxExchange) {
return row.status === 1?'待领取':'已领取';
} else {
return row.status === 1?'待发货':'已发货';
}
}},
],
total:0,
statusOptions:[{label:'所有状态',value:-1},{label:'待发货',value:1},{label:'已发货',value:3}],
listParams:{
pageSize: 20,
currentPage: 1,
status: -1,
useStatus: -1,
memberInfo: "",
integralMallProId: this.$route.params.id,
beginTime: "",
endTime: ""
},
dateTime:['',''],
tableList:[],
expressId:'',
expressShow:false,
isWxExchange:this.$route.meta.type === 'wx'
};
},
created() {
if (this.isWxExchange) {
this.$store.commit('mutations_breadcrumb',[{name:'积分商城'},{name:'礼品',path:'/mall/gift'},{name:'微信兑换券兑换记录',path:''}]);
} else {
this.$store.commit('mutations_breadcrumb',[{name:'积分商城'},{name:'礼品',path:'/mall/gift'},{name:'礼品兑换记录',path:''}]);
}
this.getPageExchangeLogsList();
},
methods: {
handleSizeChange(val) {
this.listParams.pageSize = val;
this.getPageExchangeLogsList();
},
handleCurrentChange(val) {
this.listParams.currentPage = val;
this.getPageExchangeLogsList();
},
async getPageExchangeLogsList() {
this.loading = true;
if (this.dateTime) {
this.listParams.beginTime = formateDateTimeByType(this.dateTime[0],'yyyy-MM-dd');
this.listParams.endTime = formateDateTimeByType(this.dateTime[1],'yyyy-MM-dd');
} else {
this.listParams.beginTime = this.listParams.senendTimedEndTime = '';
}
let res = await getPageExchangeLogsList(this.listParams);
this.tableList = res.result.rows || [];
this.total = res.result.total || 0;
this.loading = false;
},
// 导出列表
exportExcel(){
if (this.dateTime) {
this.listParams.beginTime = formateDateTimeByType(this.dateTime[0],'yyyy-MM-dd');
this.listParams.endTime = formateDateTimeByType(this.dateTime[1],'yyyy-MM-dd');
} else {
this.listParams.beginTime = this.listParams.senendTimedEndTime = '';
}
if (!this.listParams.beginTime || !this.listParams.endTime) {
this.$tips({type: 'warning',message: '时间不能为空'});
return;
}
window.location = `${exportExchangeListExcel}?integralMallProId=${this.listParams.integralMallProId}&status=${this.listParams.status}&useStatus=${this.listParams.useStatus}&memberInfo=${this.listParams.memberInfo}&beginTime=${this.listParams.beginTime}&endTime=${this.listParams.endTime}&requestProject=marketing`;
},
queryExpress(row) {
this.expressShow = true;
this.expressId = row.integralMallProExchangeId;
}
}
};
</script>
<template>
<el-form class="dm-wrap" :model="form" ref="form" :rules="rules" label-width="120px">
<el-form-item prop="proName" label="礼品标题">
<el-input controls-position="right" placeholder="请输入礼品标题" :disabled="isEdit || isInfo" v-model="form.proName" class="w300"></el-input>
</el-form-item>
<el-form-item label="礼品主图" class="is-required">
<dm-upload-avatar :model.sync="form.giftImg" label="上传图片" tips="规格750*750,大小≤1M"></dm-upload-avatar>
</el-form-item>
<el-form-item prop="proCategoryId" label="礼品分组">
<el-select v-model="form.proCategoryId" placeholder="请选择" class="w300">
<el-option v-for="(v,i) in categoryOptions" :key="i" :label="v.categoryName" :value="v.integralMallCategoryId"></el-option>
</el-select>
<el-button type="text" @click="createNewGroup">新建分组</el-button>
</el-form-item>
<el-form-item prop="integralCost" label="积分费用">
<el-input-number controls-position="right" :disabled="isEdit || isInfo" v-model="form.integralCost" class="w300" :precison="0" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="cashCost" label="现金费用">
<el-input-number controls-position="right" :disabled="isEdit || isInfo" v-model="form.cashCost" class="w300" :precison="2" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="costValue" label="礼品成本">
<el-input-number controls-position="right" :disabled="isEdit || isInfo" v-model="form.costValue" class="w300" :precison="2" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="limitTimes" label="次数显示">
<el-checkbox :disabled="isEdit || isInfo" v-model="isLimitTimes"> 每个会员限制兑换
</el-checkbox>
<el-input-number controls-position="right" :disabled="isEdit || isInfo || !isLimitTimes" v-model="form.limitTimes" class="w100" :precison="0" :min="0"></el-input-number>
</el-form-item>
<el-form-item prop="memberGradeArr" label="适用会员">
<el-select v-model="form.memberGradeArr" multiple placeholder="请选择" class="w300">
<el-option v-for="item in memberGradeOptions" :key="item.gradeId" :label="item.gradeName" :value="item.gradeId"></el-option>
</el-select>
</el-form-item>
<el-form-item label="展现门店" class="is-required">
<vue-gic-store-linkage :disabled="isInfo" :msg="sendChildData" ref="selectTree" @sendSelectGroupData="getSelectGroupData"></vue-gic-store-linkage>
</el-form-item>
<el-form-item prop="exchangeDateType" label="兑换日期" class="is-required">
<el-radio-group v-model="form.exchangeDateType" style="line-height:inherit;">
<div class="mb10"><el-radio :label="1">全部日期</el-radio></div>
<div class="mb10"><el-radio :label="2">固定日期
<el-date-picker v-model="form.exchangeFixDate" :disabled="form.exchangeDateType !== 2" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-radio></div>
<div class="mb10"><el-radio :label="3">每月
<el-select v-model="form.exchangeDateDayArr" :disabled="form.exchangeDateType !== 3" multiple filterable default-first-option placeholder="请选择">
<el-option v-for="item in monthOptions" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-radio></div>
<div class="mb10"><el-radio :label="4">每周
<el-select v-model="form.exchangeDateWeekArr" :disabled="form.exchangeDateType !== 4" multiple placeholder="请选择">
<el-option v-for="item in exchangeDateWeekOptions" :key="item" :label="item" :value="item"></el-option>
</el-select>
</el-radio></div>
</el-radio-group>
</el-form-item>
<el-form-item prop="exchangeTimeType" label="兑换时段" class="is-required">
<el-radio-group v-model="form.exchangeTimeType">
<div class="mb10"><el-radio :label="1">全部时段</el-radio></div>
<div class="mb10">
<el-radio :label="2" class="vertical-middle">部分时段</el-radio>
<span class="gray fz13 vertical-top ml20">请使用24小时制输入时间,格式如11:00至14:30</span>
</div>
<p v-for="(v,i) in timeRangeList" :key="i" class="pb10">
<el-time-picker :disabled="form.exchangeTimeType === 1" class="vertical-middle w250" is-range v-model="v.timeRange" value-format="HH:mm" format="HH:mm" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围"></el-time-picker>
<el-button class="vertical-middle" type="text" @click="delTimeRange(i)">删除</el-button>
</p>
<p><el-button type="text" @click="addTimeRange">添加时间段</el-button></p>
</el-radio-group>
</el-form-item>
<el-form-item prop="proShowStatus" label="显示状态">
<el-radio-group v-model="form.proShowStatus">
<el-radio :label="1">上架状态就显示</el-radio>
<el-radio :label="2">兑换状态下显示</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="releaseType" label="发布时间">
<el-radio-group v-model="form.releaseType">
<el-radio :label="1">立即发布</el-radio>
<el-radio :label="2">定时发布
<el-date-picker v-model="form.limitTimeBegin" type="datetime" placeholder="选择日期时间"></el-date-picker>
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="changeType" label="兑换方式">
<el-radio-group v-model="form.changeType">
<div class="mb10">
<el-radio :label="2">快递发货,库存
<el-input-number controls-position="right" v-show="form.changeType === 2" v-model="form.virtualStock" class="w150 vertical-middle" :precison="0" :min="0"></el-input-number>
</el-radio>
</div>
<div class="mb10">
<el-radio :label="3">在线发货,库存
<el-input-number controls-position="right" v-show="form.changeType === 3" v-model="form.virtualStock" class="w150 vertical-middle" :precison="0" :min="0"></el-input-number>
</el-radio>
</div>
<div class="mb10">
<el-radio :label="1" class="vertical-middle">微信兑换券</el-radio>
<span class="gray ml20 fz13 vertical-top">礼品成本金额以选择兑换券的成本金额为准</span>
</div>
</el-radio-group>
</el-form-item>
<div v-show="form.changeType === 1" class="border-radius2" style="padding:15px;margin-bottom:20px;">
<cardTemp pbSize="pb15" :activeId.sync="form.cardId" @emitActiveObj="getCardActiveObjFun" :showPagination="false" :cardLimitType="3"></cardTemp>
</div>
<div class="btn-wrap_fixed" :class="{'on':asideShow}">
<el-button type="primary" @click="submit('form')" v-if="!isInfo">确认新增</el-button>
<el-button @click="$router.go(-1)">返 回</el-button>
</div>
</el-form>
</template>
<script>
import infojs from './info.js';
export default infojs;
</script>
<template>
<section class="dm-wrap">
<div class="pb22 clearfix">
<el-input v-model="listParams.giftName" class="w300" placeholder="请输入礼品名称" clearable @change="getPageGiftList"><i slot="prefix" class="el-input__icon el-icon-search"></i></el-input>
<el-button class="fr" type="primary" @click="$router.push('/mall/gift/info')">新增礼品</el-button>
</div>
<div class="filter--box">
<el-select class="vertical-middle w150 pl10" v-model="listParams.category" placeholder="选择分类" @change="getPageGiftList">
<el-option v-for="v in categoryOptions" :key="v.integralMallCategoryId" :label="v.categoryName" :value="v.integralMallCategoryId"></el-option>
</el-select>
<el-select class="vertical-middle w150" v-model="listParams.changeType" placeholder="选择兑换方式" @change="getPageGiftList">
<el-option v-for="v in changeTypeOptions" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-select class="vertical-middle w150" v-model="listParams.releaseType" placeholder="选择兑换状态" @change="getPageGiftList">
<el-option v-for="v in releaseTypeOptions" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-select class="vertical-middle w150" v-model="listParams.showStatus" placeholder="选择显示状态" @change="getPageGiftList">
<el-option v-for="v in showStatusOptions" :key="v.value" :label="v.label" :value="v.value"></el-option>
</el-select>
<el-checkbox class="vertical-middle" size="small" border :true-label="1" :false-label="0" v-model="listParams.proHot" @change="getPageGiftList">只看热门推荐</el-checkbox>
</div>
<el-table tooltipEffect="light" :data="tableList" style="width: 100%" v-loading="loading" @sort-change="sortList">
<el-table-column :show-overflow-tooltip="false" width="90" align="left" prop="proHot" fixed="left" label="热门推荐">
<template slot-scope="scope">
<el-switch
v-model="scope.row.proHot"
:active-value="1"
:inactive-value="0" @change="changeHotFun(scope.row)">
</el-switch>
</template>
</el-table-column>
<el-table-column label="礼品信息" align="left" prop="proName" min-width="140">
<template slot-scope="scope">
<div class="ellipsis-100" >
<img class="vertical-middle table__avatar" :src="scope.row.mainImageUrl || defaultAvatar" width="60" height="60" />
<div class="inline-block vertical-middle">
<p class="table-name--ellipsis">{{scope.row.proName || '--'}}</p>
<p class="fz13 gray">{{scope.row.giftCategoryName || '--'}}</p>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="积分费用" align="left" prop="integralCost" width="180">
<template slot-scope="scope">
<updateCount :model="scope.row" theType="integralCost" typeName="积分" @refresh="getPageGiftList"></updateCount>
</template>
</el-table-column>
<el-table-column label="现金费用" align="left" prop="cashCost" width="180">
<template slot-scope="scope">
<updateCount :model="scope.row" theType="cashCost" typeName="元" @refresh="getPageGiftList"></updateCount>
</template>
</el-table-column>
<el-table-column label="库存" align="left" prop="sortCost" width="180" sortable="custom">
<template slot-scope="scope">
<updateCount :model="scope.row" theType="virtualStock" @refresh="getPageGiftList"></updateCount>
</template>
</el-table-column>
<el-table-column label="兑换次数" align="left" prop="sortTimes" width="100" sortable="custom">
<template slot-scope="scope">
<span v-if="scope.row.changeType == 1" @click="$router.push('/mall/gift/wxexchange/'+scope.row.integralMallProId)" class="blue">{{scope.row.allExchangeNumber}}</span>
<span v-else @click="$router.push('/mall/gift/exchange/'+scope.row.integralMallProId)" class="blue">{{scope.row.allExchangeNumber}}</span>
</template>
</el-table-column>
<el-table-column label="兑换方式" align="left" prop="changeType" width="80">
<template slot-scope="scope" >
<span v-if="scope.row.changeType == 1">微信兑换</span>
<span v-if="scope.row.changeType == 2">快递发货</span>
<span v-if="scope.row.changeType == 3">在线发货</span>
</template>
</el-table-column>
<el-table-column label="兑换状态" align="left" prop="status" width="100px">
<template slot-scope="scope" >
<span>{{statusFilter(scope.row.status)}}</span>
</template>
</el-table-column>
<el-table-column label="显示状态" align="left" prop="proShowStatus" width="120">
<template slot-scope="scope" >
<span v-if="scope.row.proShowStatus == 1">上架状态就显示</span>
<span v-if="scope.row.proShowStatus == 2">兑换状态下显示</span>
</template>
</el-table-column>
<el-table-column label="操作" align="left" width="140px" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="$router.push('/mall/gift/info/'+scope.row.integralMallProId)">编辑</el-button>
<dm-confirm @confirm="delData(scope.row)" tips="是否删除该优惠券?">
<el-button type="text">删除</el-button>
</dm-confirm>
</template>
</el-table-column>
</el-table>
<el-pagination v-show="tableList.length" background class="dm-pagination" @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></el-pagination>
</section>
</template>
<script>
import { getPageGiftList, getCategoryList, deleteProService ,setHotStatusService} from '@/service/api/mallApi.js';
import updateCount from '../common/update-count';
import {formateDateTimeByType} from '@/utils/index.js';
export default {
name: 'coupon-list',
components: {
updateCount
},
computed:{
},
data () {
return {
defaultAvatar:require('../../../assets/img/head_default.png'),
loading:false,
tableList:[],
listParams:{
currentPage:1,
pageSize:20,
category:'',
changeType:-1,
releaseType:-1,
showStatus:-1,
proHot:'-1',
giftName:'',
sortType:'',
sortColumn:'',
},
total:0,
categoryOptions:[],
releaseTypeOptions:[{label:'所有兑换状态',value:-1},{label:'不可兑换',value:0},{label:'兑换',value:1},{label:'已发货',value:3},{label:'待付款',value:11}],
changeTypeOptions:[{label:'所有兑换方式',value:-1},{label:'微信兑换',value:1},{label:'快递发货',value:2},{label:'在线发货',value:3}],
showStatusOptions:[{label:'所有显示状态',value:-1},{label:'显示',value:1},{label:'不显示',value:2}],
}
},
created() {
this.$store.commit('mutations_breadcrumb',[{name:'积分商城'},{name:'礼品',path:''}]);
this.getPageGiftList();
this.getCategoryList();
},
methods: {
// 获取分类列表
async getCategoryList() {
let res = await getCategoryList();
if (res.errorCode === 0) {
this.categoryOptions = res.result || [];
this.categoryOptions.unshift({categoryName:'所有分类',integralMallCategoryId:''})
}
},
// 列表的方法
search() {
this.listParams.currentPage = 1;
this.getPageGiftList();
},
handleSizeChange(val) {
this.listParams.pageSize = val;
this.getPageGiftList();
},
handleCurrentChange(val) {
this.listParams.currentPage = val;
this.getPageGiftList();
},
async getPageGiftList() {
this.loading = true;
let res = await getPageGiftList(this.listParams);
this.tableList = [];
let result = res.result.rows || [];
result.map(v => {
v.integralCostFlag = false;
v.cashCostFlag = false;
v.virtualStockFlag = false;
v.allExchangeNumberFlag = false;
this.tableList.push(v);
})
this.total = res.result.total;
this.loading = false;
},
// 删除
delData(row) {
deleteProService({proId:row.integralMallProId}).then(res => {
if (res.errorCode === 0) {
this.$tips({type: 'success',message: '删除成功!'});
this.getPageGiftList();
} else {
this.$tips({type: 'error',message: '删除失败!'});
}
}).catch(err => {
this.$tips({type: 'error',message: '删除失败!'});
})
},
// 热门推荐
changeHotFun(row) {
setHotStatusService({status:Number(row.proHot),integralMallProId:row.integralMallProId}).then(res => {
if (res.errorCode === 0) {
this.$tips({type: 'success',message: '设置成功!'});
this.getPageGiftList();
} else {
this.$tips({type: 'error',message: '设置失败!'});
}
}).catch(err => {
this.$tips({type: 'error',message: '删除失败!'});
})
},
statusFilter(val) {
let result = '--';
this.releaseTypeOptions.map(v => {
if (v.value === val) {
result = v.label;
}
});
return result;
},
//列表 排序
sortList(obj) {
this.listParams.sortColumn = obj.prop;
this.listParams.sortType = obj.order ? (obj.order === 'descending' ? 'desc' : 'asc') : '';
this.getPageGiftList();
}
}
}
</script>
<template>
<el-dialog class="express dialog__body__nopadding" title="查看物流信息" :visible.sync="show" width="60%" :before-close="close">
<div class="express--info">
<p>收件人:{{info.clerkName || '--'}}</p>
<p>联系方式:{{info.consigneePhone || '--'}}</p>
<p>收货地址:{{info.receivingAddress || '--'}}</p>
<p class="pb10">快递公司:<el-select class="vertical-middle w200" v-model="params.logisticsCompanyId" placeholder="选择快递">
<el-option v-for="v in logisticsOptions" :key="v.logisticsCompanyCode" :label="v.logisticsCompanyName" :value="v.logisticsCompanyId"></el-option>
</el-select>
</p>
<p>运单号码:<el-input class="vertical-middle w200" v-model="params.courierNumber" placeholder="请输入快递单号"></el-input></p>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="submit">确 定</el-button>
<el-button @click="close">关 闭</el-button>
</span>
</el-dialog>
</template>
<script>
import {getLogisticsInfo,getLogisticsList,orderOptService} from '@/service/api/mallApi.js';
export default {
props:{
show:{
type:Boolean,
default:false
},
id:{
type:String,
default:''
}
},
watch:{
show(val) {
if (val) {
this.getLogisticsInfo();
}
}
},
data() {
return {
loading:false,
info:{},
logisticsOptions:[],
params:{
logisticsCompanyId:'',
logisticsCompanyCode:'',
courierNumber:'',
},
}
},
created() {
this.getLogisticsList();
},
methods: {
close() {
this.$emit('update:show',false);
},
submit() {
if (!this.params.logisticsCompanyId) {
this.$tips({type:'warning',message:'请选择快递'});
return;
}
if (!this.params.courierNumber) {
this.$tips({type:'warning',message:'请填写快递单号'});
return;
}
this.logisticsOptions.map(v => {
if (v.logisticsCompanyId === this.params.logisticsCompanyId) {
this.params.logisticsCompanyCode = v.logisticsCompanyCode;
}
})
let params = {
optType:1,
integralMallProExchangeId:this.id,
logisticsCompanyId:this.params.logisticsCompanyId,
logisticsCompanyCode:this.params.logisticsCompanyCode,
courierNumber:this.params.courierNumber
};
orderOptService(params).then(res => {
if (res.errorCode === 0) {
this.$tips({type:'success',message:'发货成功'});
this.close();
this.$emit('refresh');
} else {
this.$tips({type:'error',message:'发货失败'});
}
});
},
async getLogisticsList() {
let res = await getLogisticsList();
if (res.errorCode === 0) {
this.logisticsOptions = res.result || [];
}
},
async getLogisticsInfo() {
this.loading = true;
let res = await getLogisticsInfo({integralMallProExchangeId:this.id});
if (res.errorCode === 0) {
this.info = res.result.changeLog || {};
}
this.loading = false;
}
}
};
</script>
<style lang="scss" scoped>
.express{
&--info {
padding-bottom:10px;
p {
line-height: 30px;
}
}
}
</style>
<template>
<div>
<router-view></router-view>
<div class="dm-tabs el-tabs">
<div class="el-tabs__header">
<div class="overflow-hidden">
<div id="tab-first" @click="$router.push('/mall/'+v.value)" class="el-tabs__item" v-for="(v,i) in tabs" :key="i" :class="{'is-active':v.value === $route.meta.menu}">
{{v.name === '待发货'?(v.name+'('+total+')'):v.name}}
</div>
</div>
</div>
<div class="el-tabs__content">
<router-view></router-view>
</div>
</div>
</template>
<script>
import { getNotSendCount } from '@/service/api/mallApi.js';
export default {
name: 'mall',
data () {
return {
}
},
created() {
this.$store.commit('mutations_breadcrumb',[{name:'积分商城'}]);
this.$store.commit('aside_handler',false);
this.$nextTick(_ => {
this.$store.commit('aside_handler',true);
})
name: "mall",
data() {
const vm = this;
return {
activeMenu:'',
tabs:[{name:'优惠券',value:'coupon'},{name:'礼品',value:'gift'},{name:'待发货',value:'goods'}],
total:0,
};
},
created() {
this.$store.commit("mutations_breadcrumb", [{ name: "积分商城" }]);
this.$store.commit("aside_handler", false);
this.getNotSendCount();
$bus.$on('refresh-not-send-count',() => {
this.getNotSendCount();
});
},
methods:{
async getNotSendCount(){
let res = await getNotSendCount();
if (res.errorCode === 0) {
this.total = res.result;
}
}
}
}
};
</script>
<template>
<router-view></router-view>
</template>
<script>
export default {
name: 'wechat-temp',
data () {
return {}
},
created() {
this.$store.commit('mutations_breadcrumb',[{name:'营销管理'},{name:'微信营销',path:'/wechat'},{name:'素材库',path:''}]);
}
}
</script>
Markdown is supported
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