Authored by 陶雨

优惠券管理界面

/**
* Created by ty on 2016/5/24.
*/
'use strict';
var $ = require('jquery'),
common=require('../common/common');
var departments = ["渠道二部", "渠道一部", "零售部", "品牌资源部", "店铺运营部", "类目运营部", "营销部", "市场部", "会员部 ", "客服部", "内容营销部"];
var couponTypes = ["A券", "B券", "公开券", "生日券", "免邮券"];
new common.dropDown({el: '#filter-dep'});
var ENUM={
status:{0:'待审核',1:'审核通过',2:'驳回',3:'过期',4:'作废'},//全部
tips:{"0":0,"1":0,"2":0,"3":0,"4":0,"all":0}
}
var t = new common.tab({
el:"#basicTab",
click:function(){
g.reload(1);
},
columns:[
{name:"all",display:"全部"},
{name:"1",display:"已通过"},
{name:"0",display:"待审核"},
{name:"2",display:"已驳回"},
{name:"4",display:"已作废"},
{name:"3",display:"已过期"}
]
}).init(ENUM.tips);
var g = new common.grid({
el: '#basicTable',
parms:function(){
return {
couponId:common.util.__input("filter-couponId"),
couponName:common.util.__input("filter-couponName"),
department:common.util.__input("filter-dep"),
status: t.active
};
},
columns:[
{display:"优惠券ID",name:"id"},
{display:"基本信息",render:function(item){
var arr=[];
arr.push("<p>名称:"+item.couponName+"</p>");
arr.push("<p>类型:"+couponTypes[item.couponType]+"</p>");
arr.push("<p>优惠结果:"+item.couponAmount+"</p>");
arr.push("<p>数量:"+item.couponNum+"</p>");
arr.push("<p>部门:"+departments[item.department]+"</p>");
return arr.join('');
}},
{display:"使用期限",render:function(item){
var startTime = common.util.__dateFormat(new Date(item.startTime), "yyyy-MM-dd hh:mm:ss");
var endTime = common.util.__dateFormat(new Date(item.endTime), "yyyy-MM-dd hh:mm:ss");
return startTime+"</br> 至 "+endTime;
}},
{display:"使用条件", render: function(item) {
var str = "无限制";
if(item.useLimitType == 1) {
str = "件数满:" + item.useLimit;
} else if(item.useLimitType == 2) {
str = "金额满:" + item.useLimit;
}
return '<p style="max-width: 200px;word-wrap: break-word;">' + str + '</p>';
}},
{display:"优惠券说明", name:"explains"},
{display:"申请人",name:"creatorName", render: function(item) {
return item.creatorName + '<br>' + item.createTime;
}},
{display: '状态', render: function(item) {
var html = ENUM.status[item.status]||'全部';
if (item.reason) {
if (item.status == 2 || item.status == 4) {
html += '<p style="color:red;word-wrap: break-word;">(' + item.reason + ')</p>';
}
}
return html;
}},
{display:"操作",render:function(item){
var HtmArr=[];
//限购码状态0:待审核 1:审核通过 2:驳回 3:过期 4:作废
HtmArr.push('<a href="/market/limitcode/info/'+ item.id+'" class="btn btn-info btn-xs">查看详情</a>');
if(item.status == 0){
HtmArr.push('<a class="btn btn-primary btn-xs apply-success" data-index="'+ item.__index+'" href="javascript:;">通过</a>');
HtmArr.push('<a class="btn btn-warning btn-xs apply-back" data-index="'+ item.__index+'" href="javascript:;">驳回</a>');
HtmArr.push('<a class="btn btn-danger btn-xs apply-cancel" data-index="'+ item.__index+'" href="javascript:;">作废</a>');
}else if(item.status==1){
HtmArr.push('<a class="btn btn-danger btn-xs apply-cancel" data-index="'+ item.__index+'" href="javascript:;">作废</a>');
HtmArr.push('<a class="btn btn-info btn-xs" data-index="'+ item.__index+'" href="/market/limitcode/edit/'+ item.id+'">编辑</a>');
}else if(item.status==2){
HtmArr.push('<a class="btn btn-info btn-xs apply-modify" href="/market/limitcode/update/'+ item.id+'">修改</a>');
}
return HtmArr.join('');
}}
]
});
g.init("/coupon/queryCouponList");
$("#filter-btn").click(function(){
g.reload(1);
});
var Bll={
toast:function(content,fn){
common.dialog.confirm("温馨提示",content,function(){
common.util.__ajax({
url:'/limitCode/auditLimitCode',
data:fn()
},function(){
loadtab();
g.reload();
});
});
}
}
//审核通过
$('#basicTable').on('click', '.apply-success', function() {
var item=g.rows[$(this).data("index")];
var data=function(){
return{
id:item.id,
status:1
};
};
Bll.toast("确定要通过该申请吗?",data);
});
//驳回
$('#basicTable').on('click', '.apply-back', function() {
var item=g.rows[$(this).data("index")];
var data=function(){
var reason = $('#reason').val();
if (reason === '' || $.trim(reason) === '') {
return "请填写驳回原因";
}
return {
id:item.id,
status:2,
reason:reason
};
};
Bll.toast(common.util.__template($("#template").html(),{name:"你确定要驳回该申请吗?"}),data);
});
//作废
$('#basicTable').on('click', '.apply-cancel', function() {
var item=g.rows[$(this).data("index")];
var data=function(){
var reason = $('#reason').val();
if (reason == '' || $.trim(reason) == '') {
return "请填写作废原因";
}
return {
id:item.id,
status: 4,
reason:reason
};
}
Bll.toast(common.util.__template($("#template").html(),{name:"你确定要作废此限购码吗?"}),data);
});
\ No newline at end of file
... ...
/**
* Created by ty on 2016/5/24.
*/
var $ = require('jquery');
var common = require('../common/common');
var editBean = require('./partials/limitcode-edit-bean');
var e = new common.edit2("#basicForm");
var type = $("#basicForm").attr("role"),
action = $("#basicForm").data("action");
var isFirst = true;
var limitDateFromObj;
var limitDateToObj;
var Bll = {
__render:function() {
editBean.currTime = common.util.__dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
$("#basicForm").html(common.util.__template2($("#couponListAdd-template").html(), editBean));
e.init();
limitDateFromObj = $("#limitDateFrom").fdatepicker({
format: 'yyyy-mm-dd hh:ii:ss',
pickTime: true
}).data("datepicker");
limitDateToObj = $("#limitDateTo").fdatepicker({
format: 'yyyy-mm-dd hh:ii:ss',
pickTime: true
}).data("datepicker");
limitDateFromObj.setEndDate(editBean.limitDateTo);
if(editBean.limitDateFrom) {
limitDateToObj.setStartDate(editBean.currTime);
} else if(new Date(editBean.currTime).getTime() < new Date(editBean.limitDateFrom)){
limitDateToObj.setStartDate(editBean.limitDateFrom);
} else {
limitDateToObj.setStartDate(editBean.currTime);
}
if(type == "edit") {
$('input[name="skn_sku"]').prop('disabled', true);
$(".noEdit").prop("disabled", true);
$('input[name="userTypeLimit"]').prop('disabled', true);
if((new Date(editBean.limitDateFrom).getTime() <= new Date().getTime()) && isFirst) {
$("#limitDateFrom").prop("disabled", true);
}
isFirst = false;
}
},
__checkSkn:function(callback) {
var flag = false;
if(editBean.limitSkn) {
common.util.__ajax2({
async: false,
url: "/limitCode/checkSknValidity",
data: {
skn: editBean.limitSkn,
id: editBean.id
}
}, function (res) {
if (!res.data.isExist) {
flag = true;
common.util.__tip("SKN不存在");
} else if (res.data.isConflict) {
flag = true;
common.util.__tip("SKN与其他限购冲突");
} else if (res.data.isOnSales) {
flag = true;
common.util.__tip("SKN已上架,请先下架");
}
callback && callback(res);
}, function() {
flag = true;
common.util.__tip("网络请求异常");
});
}
return flag;
}
};
if(type != "add") {
var id = location.href.substring(location.href.lastIndexOf("/") + 1);
common.util.__ajax({
url: "/limitCode/getLimitCode",
data: {id: id}
}, function (res) {
editBean = res.data;
editBean.reqDepartment = editBean.reqDepartment.split("/");
if(!editBean.reqDepartment.length) {
editBean.reqDepartment = [
"零售部",
"营销策划"
];
}
editBean.selected = editBean.skus ? "SKU" : "SKN";
editBean.updateType = type == "edit" ? "1":"2";
editBean.skusInfo = [];
if(editBean.skus) {
var skuArr = editBean.skus.split(";");
var skuNumArr = editBean.skuTimes.split(";");
for(var i = 0; i < skuArr.length; i++) {
editBean.skusInfo.push({
"sku": skuArr[i],
"skuTimes": skuNumArr[i]
});
}
}
Bll.__render();
},true);
} else {
Bll.__render();
}
$(document).on("change", ".observe", function () {
var $this = $(this);
var name = $this.data("field");
editBean = common.util.__buildobj(name, '.', editBean, function (obj, name) {
obj[name] = $this.val();
});
if($this.prop("id") == "limitDateFrom" && new Date($this.val()).getTime() ) {
if(new Date(editBean.currTime).getTime() > new Date(editBean.limitDateFrom)) {
limitDateToObj.setStartDate(editBean.currTime);
} else {
limitDateToObj.setStartDate(editBean.limitDateFrom);
}
//console.log(editBean.limitDateFrom);
}
//console.log(editBean);
});
//输入限制
$(document).on("keyup", ".number", function() {
$(this).val($(this).val().replace(/\D/g, ''));
});
//单选框点击事件
$(document).on("click", ".limitProduct", function() {
editBean.limitCodeType = $(this).val();
$("#limitSkn").attr("required", !(editBean.limitCodeType == "N"));
Bll.__render();
//console.log(editBean);
});
$(document).on("click", ".delSku", function () {
var index = $(this).data("index");
editBean.skusInfo.splice(index, 1);
Bll.__render();
$(".addSku").attr("disabled", false);
});
$(document).on("click", ".addSku", function () {
editBean.skusInfo.push({
"sku": "",
"skuTimes": ""
});
Bll.__render();
});
$(document).on("blur", "#limitSkn", function() {
Bll.__checkSkn(function(res) {
if (res.data.skuList) {
editBean.skusInfo = [];
for (var i = 0; i < res.data.skuList.length; i++) {
editBean.skusInfo.push({
"sku": res.data.skuList[i],
"skuTimes": ""
});
}
Bll.__render();
$(".addSku").attr("disabled", false);
}
});
});
$(document).on("click","#save_brand", function() {
// 限购码状态0:待审核 1:审核通过 2:驳回 3:过期 4:作废
if(e.validate() && (type == "add" ? (!editBean.limitSkn || !Bll.__checkSkn()) : true)) {
if(editBean.limitCodeType == "U") {
for (var i in editBean.skusInfo) {
if(!editBean.skusInfo[i].skuTimes || editBean.skusInfo[i].skuTimes == "0") {
common.util.__tip("SKU数量不能为0");
return;
}
}
}
editBean.reqDepartment = editBean.reqDepartment.join("/");
editBean.creatorId = $("#auth_id").val();
editBean.creatorName = $("#auth_name").val();
if (editBean.status != 1) {
editBean.status = 0;
}
if(editBean.limitCodeType == "U") {
editBean.skus = "";
editBean.skuTimes = "";
for(var item in editBean.skusInfo) {
if(item != 0) {
editBean.skus+=";";
editBean.skuTimes+=";";
}
editBean.skus += editBean.skusInfo[item].sku;
editBean.skuTimes+=editBean.skusInfo[item].skuTimes;
}
}
//console.log(JSON.stringify(editBean));
common.util.__ajax({
url: action,
data: editBean
}, function (res) {
location.href = "/market/limitcode/index";
});
}
return false;
});
\ No newline at end of file
... ...
... ... @@ -3,8 +3,8 @@
//exports.domain = 'http://172.16.6.162:8088/platform';
//exports.domain = 'http://172.16.6.108:8088/platform';//谭玲
//exports.domain = 'http://172.16.6.201:8088/platform';//谭玲
//exports.domain = 'http://172.16.6.250:2081/platform';//庞洁
exports.domain = 'http://172.16.6.189:8088/platform';//李建
exports.domain = 'http://172.16.6.250:2081/platform';//庞洁
//exports.domain = 'http://172.16.6.189:8088/platform';//李建
//营销管理路由配置
exports.res = [
... ... @@ -713,5 +713,36 @@ exports.res = [
params: [
{name: "id", type: "number"}
]
},
{
//优惠券管理页面渲染
route: "/market/couponList/index",
method: "GET",
view: "pages/market/couponList",
src: "/market/couponList",
data: {
createUrl: "/market/couponList/add"
}
},
{
//优惠券列表
route: "/coupon/queryCouponList",
method: "POST",
url: "/coupon/queryCouponList",
params: [
{name: "page", type: "number"},
{name: "size", type: "number"},
{name: "couponId", type: "number"},
{name: "department", type: "number"},
{name: "couponName", type: "string"},
{name: "status", type: "number"}
]
},
{
//优惠券列表新增页面渲染
route: "/market/couponList/add",
method: "GET",
view: "pages/market/couponListAdd",
src: "/market/couponListAdd"
}
]
\ No newline at end of file
... ...
<div class="pageheader">
<div class="media">
<div class="pageicon pull-left">
<i class="fa fa-th-list"></i>
</div>
<div class="media-body">
<ul class="breadcrumb">
<li><a href=""><i class="glyphicon glyphicon-home"></i></a></li>
<li><a href="">营销管理</a></li>
<li>优惠券管理</li>
</ul>
<div>
<div style="width: 30%;float: left;">
<h4>优惠券列表</h4>
</div>
</div>
</div>
</div>
</div>
<div class="contentpanel">
<div class="panel panel-default" style="margin-bottom:10px;">
<div class="panel-heading">
<a href="{{createUrl}}" id="add-btn" class="btn btn-success add-btn"><i class="fa fa-plus"></i> 添加</a>
</div>
<div class="panel-body">
<div class="row">
<div class="panel-col">
<input id="filter-couponId" class="form-control panel-input" type="text" placeholder="优惠券ID">
</div>
<div class="panel-col">
<input id="filter-couponName" class="form-control panel-input" type="text" placeholder="名称">
</div>
<div class="panel-col">
<select id="filter-dep" name="filter-dep" tabindex="-1" title="" class="select2-offscreen brandBtn-group">
<option value="-1">申请部门</option>
<option value="1">渠道二部</option>
<option value="2">渠道一部</option>
<option value="3">零售部</option>
<option value="4">品牌资源部</option>
<option value="5">店铺运营部</option>
<option value="6">类目运营部</option>
<option value="7">营销部</option>
<option value="8">市场部</option>
<option value="9">会员部</option>
<option value="10">客服部</option>
<option value="11">内容营销部</option>
</select>
</div>
<a id="filter-btn" href="javascript:;" class="btn btn-info">筛选</a>
<a id="all-btn" href="" class="btn btn-info">全部</a>
</div>
</div>
</div>
<div class="panel panel-primary-head">
<div class="dataTab_wrapper" id="basicTab">
</div>
<div class="basicTable_wrapper" id="basicTable">
</div>
</div>
</div>
<script type="text/template" id="template">
<p>{name}</p>
<label class="col-sm-3 control-label">*请填写原因</label>
<input id="reason" type="text" class="form-control" name="agreement-code" style="width:280px;">
</script>
... ...
<div class="pageheader">
<div class="media">
<div class="pageicon pull-left">
<i class="fa fa-th-list"></i>
</div>
<div class="media-body">
<ul class="breadcrumb">
<li><a href=""><i class="glyphicon glyphicon-home"></i></a></li>
<li><a href="">营销管理</a></li>
<li>优惠券管理</li>
</ul>
<div>
<div style="width: 30%;float: left;">
<h4>新增优惠券</h4>
</div>
</div>
</div>
</div>
</div>
<div class="contentpanel">
<div class="row">
<div class="col-md-12">
<div id="basicForm" role="{{type}}" data-action="{{action}}" class="form-horizontal form-bordered">
</div>
</div>
</div>
</div>
<script type="text/template" id="couponListAdd-template">
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">基本信息</h4>
</div><!-- panel-heading -->
<div class="panel-body">
<div class="row">
<div class="form-group">
<label class="col-sm-2 control-label">名称 <span class="red">*</span></label>
<div class="col-sm-8">
<input type="text" placeholder="名称建议30字以内" prompt="名称" class="form-control observe noEdit" data-field="name" required maxlength="30" value="[[name]]">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">数量<i class="red">*</i></label>
<div class="col-sm-8">
<input type="text" placeholder="数量" class="form-control observe noEdit number" data-field="limitTimes" required value="[[limitTimes]]">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">申请部门</label>
<div class="col-sm-3">
<select value="[[reqDepartment[0] ]]" class="form-control observe noEdit" data-field="reqDepartment[0]">
<option value="零售部">零售部</option>
<option value="市场部">市场部</option>
<option value="会员部">会员部</option>
<option value="品牌合作部">品牌合作部</option>
<option value="潮流资源部">潮流资源部</option>
<option value="其他">其他</option>
</select>
</div>
<div class="col-sm-3">
<select value="[[reqDepartment[1] ]]" class="form-control observe noEdit" data-field="reqDepartment[1]">
<option value="营销策划">营销策划</option>
<option value="类目运营">类目运营</option>
<option value="店铺运营">店铺运营</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">使用期限<span class="red">*</span></label>
<div class="col-sm-6">
<div class="col-sm-6">
<input type="text" class="form-control observe" data-field="limitDateFrom" id="limitDateFrom" placeholder="开始时间" value="[[limitDateFrom]]" readonly required>
</div>
<div class="col-sm-6">
<input type="text" class="form-control observe" data-field="limitDateTo" id="limitDateTo" placeholder="结束时间" value="[[limitDateTo]]" readonly required>
</div>
</div>
<input type="hidden" jsaction="time" id="limitDateCurr" value="[[currTime]]" readonly>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">限购码说明<i class="red">*</i></label>
<div class="col-sm-8">
<textarea class="form-control observe" prompt="限购码说明" data-field="describe" maxlength="100" placeholder="限购码使用条件简介,最多100个字" required>[[describe]]</textarea>
</div>
</div>
</div>
</div>
<div class="panel-heading">
<h4 class="panel-title">使用条件</h4>
</div>
<div class="form-group" hidden>
<label class="col-sm-2 control-label">会员身份<i class="red">*</i></label>
<div class="col-sm-10">
<label class="checkbox-inline">
<input type="checkbox" value="新注册" name="userTypeLimit" > 新注册
</label>
<label class="checkbox-inline">
<input type="checkbox" value="注册未购买" name="userTypeLimit"> 注册未购买
</label>
<label class="checkbox-inline">
<input type="checkbox" value="普通会员" name="userTypeLimit"> 普通会员
</label>
<label class="checkbox-inline">
<input type="checkbox" value="银卡会员" name="userTypeLimit"> 银卡会员
</label>
<label class="checkbox-inline">
<input type="checkbox" value="金卡会员" name="userTypeLimit"> 金卡会员
</label>
<label class="checkbox-inline">
<input type="checkbox" value="白金会员" name="userTypeLimit"> 白金会员
</label>
<label class="checkbox-inline">
<input type="checkbox" value="指定用户" name="userTypeLimit"> 指定用户
</label>
</div>
<div class="col-sm-2">
<input type="text" class="form-control observe noEdit" data-field="UID" value="[[UID]]" placeholder="UID">
</div>
<input type="hidden" value="[[userTypeLimit]]" id="userTypeLimit" for="checkbox" required placeholder="会员身份">
</div>
<div class="form-group" hidden>
<label class="col-sm-2 control-label">限用次数<i class="red">*</i></label>
<div class="col-sm-8">
<input type="text" prompt="限用次数" placeholder="0 表示不限制" class="form-control observe noEdit" data-field="userUseLimit" required pattern="^[0-9]+$" value="[[userUseLimit]]">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">指定商品<i class="red">*</i></label>
<div class="col-sm-4">
<div class="col-sm-10">
<input type="radio" class="limitProduct" value="N" name="skn_sku" checked />SKN
<input type="radio" class="limitProduct" value="U" name="skn_sku" />SKU
<input type="hidden" id="skn_sku" for="radio" value="[[limitCodeType]]"/><br>
</div>
<label class="col-sm-3 control-label">SKN值:</label>
<div class="col-sm-4">
<input id="limitSkn" type="text" maxlength="8" placeholder="SKN" class="form-control observe number noEdit" data-field="limitSkn" value="[[limitSkn]]" [[limitCodeType=="N"?'':'required']]>
</div><br>
<div id="skus" class="col-sm-10" [[limitCodeType=="U"?"":"hidden"]]>
<table class="table table-bordered responsive dataTable no-footer">
[[each skusInfo as item index]]
<tr>
<td><input type="text" class="form-control observe skus number noEdit" placeholder="sku值" data-field="skusInfo.[[index]].sku" value="[[item.sku]]" [[limitCodeType=="N"?"":"required"]]></td>
<td><input type="text" class="form-control observe number noEdit" prompt="sku数量" placeholder="数量" data-field="skusInfo.[[index]].skuTimes" value="[[item.skuTimes]]" [[limitCodeType=="N"?"":"required"]]></td>
<td><a href="javascript:;" class="btn btn-danger btn-xs delSku noEdit" data-index="[[index]]">删除</a></td>
</tr>
[[/each]]
<tr>
<td>sku</td>
<td>数量</td>
<td><a href="javascript:;" class="btn btn-info btn-xs addSku" disabled>添加</a></td>
</tr>
</table>
</div>
</div>
</div>
<input type="hidden" value="[[status]]">
<input type="hidden" value="[[id]]">
<input type="hidden" value="[[batchNo]]">
<div class="form-group">
<label class="col-sm-2 control-label">申请人</label>
<div class="col-sm-8">
<label class="form-label control-label" id="creatorName">{{auth.name}}</label>
</div>
</div>
<input id="auth_id" type="hidden" value="{{auth.uid}}">
<input id="auth_name" type="hidden" value="{{auth.name}}">
<div class="panel-footer">
<div class="row">
<div class="col-sm-8 col-sm-offset-2">
<a href="javascript:;" onclick="history.go(-1);" class="btn btn-default">取消</a>
<button id="save_brand" type="button" data-loading-text="保存中..." class="btn btn-primary">保存</button>
</div>
</div>
</div>
</div>
</script>
... ...