Authored by dongjunjie

商家端销售类目

module.exports = function (app){
app.get("/shop/shopCategory/index", "shop.ShopCategory.Index", function (req,res){
this.$extend={
moduleName:"店铺管理",
pageName:"店铺销售类目管理"
}
});
app.get("/shop/shopCategory/edit/:categoryId/", "shop.ShopCategory.Edit", "shopCategory_selectCategoryNameById", function (rs){
this.$extend={
moduleName:"店铺管理",
pageName:"店铺销售类目管理",
subPageName:"店铺销售类目编辑",
categoryName: rs.data
}
});
//店铺销售类目列表
app.post("/shops/shopCategory/list","shopCategory_shopsCategoryList");
//新增店铺销售类目
app.post("/shops/shopCategory/add","shopCategory_insertShopsAndLinkCategory");
//编辑店铺销售类目
app.post("/shops/shopCategory/update","shopCategory_updateShopsAndLinkCategory");
//删除店铺销售类目
app.post("/shops/shopCategory/delete","shopCategory_deleteShopsCategory");
//获取店铺下该类目所有商品接口
app.post("/shops/shopCategory/allProducts","shopCategory_selectAllProduct");
//获取店铺下该类目已选商品接口
app.post("/shops/shopCategory/selectedProducts","shopCategory_selectCheckedProduct");
//选择关联
app.post("/shops/shopCategory/link","shopCategory_insertProductLinkCategory");
//取消选择
app.post("/shops/shopCategory/unlink","shopCategory_deleteProductLinkCategory");
//全部取消选择
app.post("/shops/shopCategory/unlinkAll","shopCategory_deleteAllProductLinkedCategory");
}
... ...
module.exports={
namespace:"shopCategory",
apis:{
selectCategoryNameById:{
title:"根据ID获取店铺名称或者类目名称",
url:"/ShopsSalesCategoryRest/selectNameById",
params:[
{name:"categoryId",type:"Number"}
]
},
shopsCategoryList:{
title:"店铺销售类目列表",
url:"/ShopsSalesCategoryRest/shopsCategoryList",
params:[]
},
insertShopsAndLinkCategory:{
title:"新增店铺销售类目",
url:"/ShopsSalesCategoryRest/insertShopsAndLinkCategory",
params:[
{name:"categoryName",type:"String"}
]
},
updateShopsAndLinkCategory:{
title:"编辑店铺销售类目",
url:"/ShopsSalesCategoryRest/updateShopsAndLinkCategory",
params:[
{name:"categoryId",type:"Number"},
{name:"categoryName",type:"String"}
]
},
deleteShopsCategory:{
title:"删除店铺销售类目",
url:"/ShopsSalesCategoryRest/deleteShopsCategory",
params:[
{name:"categoryId",type:"Number"}
]
},
selectAllProduct:{
title:"获取店铺下该类目所有商品接口",
url:"/ShopsSalesCategoryRest/selectAllProduct",
params:[
{name:"categoryId",type:"Number"},
{name:"productSKN",type:"Number"},
{name:"factoryCode",type:"String"},
{name:"page",type:"Number"}
]
},
selectCheckedProduct:{
title:"获取店铺下该类目已选商品接口",
url:"/ShopsSalesCategoryRest/selectCheckedProduct",
params:[
{name:"categoryId",type:"Number"},
{name:"productSKN",type:"Number"},
{name:"factoryCode",type:"String"},
{name:"page",type:"Number"}
]
},
insertProductLinkCategory:{
title:"单个将商品关联类目",
url:"/ShopsSalesCategoryRest/insertProductLinkCategory",
params:[
{name:"categoryId",type:"Number"},
{name:"productSKN",type:"Number"}
]
},
deleteProductLinkCategory:{
title:"单个将商品取消与类目的关联",
url:"/ShopsSalesCategoryRest/deleteProductLinkCategory",
params:[
{name:"categoryId",type:"Number"},
{name:"productSKN",type:"Number"}
]
},
deleteAllProductLinkedCategory:{
title:"取消所有商品与类目的关联关系",
url:"/ShopsSalesCategoryRest/deleteAllProductLinkedCategory",
params:[
{name:"categoryId",type:"Number"}
]
}
}
}
... ...
<%include '../../../common/views/__ui/header'%>
<%include '../../../common/views/__partail/ListHeader'%>
<div class="contentpanel">
<div class="panel" style="padding: 20px">
<div class="selectShop" style="font-family:'microsoft yahei';font-size: 18px;line-height: 40px;margin-bottom: 20px">
<div id="shopInfo">
<span id="categoryName"><font color="#999">销售类目名称:</font><b><%categoryName%></b></span>
<a href="/shop/shopCategory/index" class="btn btn-default btn-return" style="float: right">返回</a>
</div>
</div>
<div class="tabheader">
<ul class="nav nav-tabs">
<li class="active"><a href="javascript:">全部商品</a></li>
<li><a href="javascript:">已选&nbsp;(<b class="selectedProductsNum">0</b>)</a></li>
</ul>
</div>
<div class="mainTable" style="padding: 20px 20px 60px; border: 1px solid #ddd; background: #FFFFFF">
<div class="filter form-inline" style="margin-bottom: 20px">
<input id="productSKN" type="text" class="form-control" placeholder="SKN" />&nbsp;&nbsp;
<input id="factoryCode" type="text" class="form-control" placeholder="商家编码" />&nbsp;&nbsp;
<a href="javascript:" class="btn btn-info filter-btn">查询</a>
<a href="javascript:" class="btn btn-danger cancelAll" style="float: right;display: none">全部取消</a>
</div>
<div id="productTable"></div>
</div>
</div>
</div>
<%include '../../../common/views/__ui/footer'%>
\ No newline at end of file
... ...
<%include '../../../common/views/__ui/header'%>
<%include '../../../common/views/__partail/ListHeader'%>
<div class="contentpanel">
<div class="panel" style="padding: 20px">
<div id="showCategory" style="display: none"></div>
</div>
</div>
<script type="text/template" id="addTemplate">
<div class="form-horizontal" id="shopCategoryAdd">
<div class="form-group">
<label for="categoryName" class="col-sm-3 control-label">销售类目名称:</label>
<div class="col-sm-5">
<input type="text" id="categoryName" value="[[data]]" class="form-control" />
</div>
<div class="col-sm-2"><label style="color: #ff0000; line-height: 40px"> * 必填</label></div>
</div>
</div>
</script>
<script type="text/template" id="listTemplate">
<div class="addCategory" style="margin-bottom: 20px">
<a class="btn btn-success addBtn"><i class="fa fa-plus"></i> 新增销售类目</a>
<span style="float: right;font-size: 16px;line-height:37px;font-family:'simhei'">
当前店铺共有:<b style="color: #5cb85c;font-size: 20px">[[data.length]]</b>&nbsp;条销售类目,<font color="#f0ad4e">最多可以添加20条</font>
</span>
</div>
<table class="table table-striped table-bordered responsive dataTable no-footer" style="text-align: center">
<thead>
<tr>
<th style="text-align: center">类目ID</th>
<th style="text-align: center">类目名称</th>
<th style="text-align: center">创建时间</th>
<th style="text-align: center">已关联商品数量</th>
<th style="text-align: center">操作</th>
</tr>
</thead>
<tbody style="line-height: 27px">
[[if data.length > 0]]
[[each data as item _index]]
<tr>
<td style="line-height: 27px">[[item.categoryId]]</td>
<td style="line-height: 27px">[[item.categoryName]]</td>
<td style="line-height: 27px">[[item.addTime]]</td>
<td style="line-height: 27px">[[item.productNum]]</td>
<td style="line-height: 27px">
<a href='javascript:' class='btn btn-xs btn-primary editCategory' data-categoryid='[[item.categoryId]]'>编辑名称</a>
<a href='/shop/shopCategory/edit/[[item.categoryId]]/' class='btn btn-xs btn-info'>关联商品</a>
<a href='/shop/shopCategory/info/[[item.categoryId]]/' class='btn btn-xs btn-info' style="display: none">查看</a>
<a href='javascript:' class='btn btn-xs btn-danger deleteBtn' data-categoryid='[[item.categoryId]]'>删除</a>
</td>
</tr>
[[/each]]
[[else]]
<tr><td colspan="6">当前店铺暂无销售类目!</td></tr>
[[/if]]
</tbody>
</table>
</script>
<%include '../../../common/views/__ui/footer'%>
\ No newline at end of file
... ...
... ... @@ -6,16 +6,16 @@
**/
/*var g=new grid({
el:"#id",
columns:[
{display:"性别",name:"sex"},
{display:"全名",name:"name",render:function(item){
return item.xingshi+item.name;
}}
]
el:"#id",
columns:[
{display:"性别",name:"sex"},
{display:"全名",name:"name",render:function(item){
return item.xingshi+item.name;
}}
]
});
g.init('url');*/
});
g.init('url');*/
var $ = require('jquery');
... ... @@ -36,7 +36,7 @@ var grid = function(options) {
tabUrl: false,
pagesizes:pagesizes,
usepagesize:false
}
};
this.options = $.extend({}, defaults, options);
}
... ... @@ -47,7 +47,7 @@ grid.prototype = {
init: function(url, second) {
var g = this,
p = this.options;
p.page = 1;
p.page = 1;
g.destory();
p.url = url;
... ... @@ -61,7 +61,6 @@ grid.prototype = {
if(p.usepagesize){
$(".t_size", g.foot).show();
}
g.pagination = $(".pagination", g.grid);
g.records = [];
g.rows = [];
... ... @@ -186,7 +185,10 @@ grid.prototype = {
if(p.size){
$(".t_size",g.foot).val(p.size);
}
if(p.nopage){
$(".t_size",g.foot).hide();
}
}
},
... ... @@ -260,15 +262,20 @@ grid.prototype = {
total: data.totalPage,
page: data.page
});
g.__bodyClomun(data.list, p.second);
if(data.list){
g.__bodyClomun(data.list, p.second);
}else{
g.__bodyClomun([], p.second);
}
g.total = data.total?data.total:0;
p.complete2 && p.complete2(res);
},
complete: function(res) {
console.log("complete~~");
//p.complete && p.complete();
console.log("gridComplete~~");
//p.complete && p.complete();
},
error: function(res) {
console.log("error~~", res);
console.log("gridError~~", res);
clearTimeout(timeid);
if (res.status == 429) {
timeid = setTimeout(function() {
... ... @@ -297,8 +304,6 @@ grid.prototype = {
return (p.page - 1) * parseInt(p.rp);
}
if (rows.length > 0) {
for (var row in rows) {
var item = rows[row],
... ...
'use strict';
var $ = require('jquery'),
common = require('../../../common/common');
var curCategoryId = 0,
selectedNum = 0,
curTab = 0;
var g1 = new common.grid({
el: '#productTable',
parms: function() {
return {
categoryId: curCategoryId,
productSKN: common.util.__input("productSKN"),
factoryCode: common.util.__input("factoryCode")
};
},
columns: [
{display: "商品图片", render: function (item) {
return item.productPic ? '<img src="'+item.productPic+'">' : '';
}},
{display: "SKN", name: "productSKN"},
{display: "厂家编号", name: "factoryCode"},
{display: "商品名称", name: "productName"},
{display: "销售价(元)", name: "salePrice"},
{display: "分类", name: "productSort"},
{display: "销售类目", render: function (item) {
var name = item.categoryName ? item.categoryName : '未分类';
var categoryList = '<span class="name" style="display: block; text-align: center">'+ name +'</span>';
if(item.saleCategory && item.saleCategory.length > 1){
categoryList += '<ul class="list" style="display: none;margin: 0; padding: 0;text-align:center">';
for(var i=0; i<item.saleCategory.length; i++){
categoryList += '<li>'+item.saleCategory[i]+'</li>'
}
categoryList += '</ul>' +
'<a href="javascript:" class="moreCategory" style="display: block;text-align: center;color:#999">显示更多</a>';
}
return categoryList;
}},
{display: "操作", render: function (item) {
if(item.checked){
return '<a href="javascript:" class="btn btn-warning btn-xs cancelProduct" data-index="'+item.__index+'">取消选择</a>'
}else{
return '<a href="javascript:" class="btn btn-success btn-xs selectProduct" data-index="'+item.__index+'">选择</a>'
}
}}
],
complete2: function (res) {
selectedNum = res.data.checkedCount;
$('.selectedProductsNum').text(selectedNum);
}
});
var g2 = new common.grid({
el: '#productTable',
parms: function() {
return {
categoryId: curCategoryId,
productSKN: common.util.__input("productSKN"),
factoryCode: common.util.__input("factoryCode")
};
},
columns: [
{display: "商品图片", render: function (item) {
return item.productPic ? '<img src="'+item.productPic+'">' : '';
}},
{display: "SKN", name: "productSKN"},
{display: "厂家编号", name: "factoryCode"},
{display: "商品名称", name: "productName"},
{display: "销售价(元)", name: "salePrice"},
{display: "分类", name: "productSort"},
{display: "销售类目", render: function (item) {
var name = item.categoryName ? item.categoryName : '未分类';
var categoryList = '<span class="name" style="display: block; text-align: center">'+ name +'</span>';
if(item.saleCategory && item.saleCategory.length > 1){
categoryList += '<ul class="list" style="display: none;margin: 0; padding: 0;text-align:center">';
for(var i=0; i<item.saleCategory.length; i++){
categoryList += '<li>'+item.saleCategory[i]+'</li>'
}
categoryList += '</ul>' +
'<a href="javascript:" class="moreCategory" style="display: block;text-align: center;color:#999">显示更多</a>';
}
return categoryList;
}},
{display: "操作", render: function (item) {
return '<a href="javascript:" class="btn btn-warning btn-xs cancelProduct" data-index="'+item.__index+'">取消选择</a>'
}}
],
complete2: function (res) {
selectedNum = res.data.list.length;
$('.selectedProductsNum').text(selectedNum);
}
});
var Bll = {
init: function () {
this.getParamsInUrl();
g1.init('/shops/shopCategory/allProducts');
},
getParamsInUrl: function () {
var paramUrl = location.href + "";
if(paramUrl.indexOf("edit") > 0){
var param = paramUrl.substring(paramUrl.indexOf("edit"));
var paramList = param.split("/");
curCategoryId = paramList[1];
}
}
};
Bll.init();
//tab切换
$(document).on("click", ".nav-tabs li", function () {
if($(this).hasClass('active')) return false;
$(this).addClass('active').siblings().removeClass('active');
curTab = $(this).index();
switch (curTab){
case 0:
$('.cancelAll').hide();
g1.init('/shops/shopCategory/allProducts');
break;
case 1:
$('.cancelAll').show();
g2.init('/shops/shopCategory/selectedProducts');
break;
}
});
//选择商品
$(document).on("click", ".selectProduct", function () {
var self = this;
var index = $(self).data("index");
var item = g1.rows[index];
common.util.__ajax({
url:'/shops/shopCategory/link',
data:{
categoryId: curCategoryId,
productSKN: item.productSKN
}
},function(){
$(self).parent().html('<a href="javascript:" class="btn btn-warning btn-xs cancelProduct" data-index="'+index+'">取消选择</a>');
$('.selectedProductsNum').text(++selectedNum);
}, true);
});
//在全部商品中,取消选择商品
$(document).on("click", ".cancelProduct", function () {
var self = this;
var index = $(self).data("index");
var g = curTab == 0 ? g1 : g2;
var item = g.rows[index];
common.util.__ajax({
url:'/shops/shopCategory/unlink',
data:{
categoryId: curCategoryId,
productSKN: item.productSKN
}
},function(){
if(curTab == 0){
$(self).parent().html('<a href="javascript:" class="btn btn-success btn-xs selectProduct" data-index="'+index+'">选择</a>');
$('.selectedProductsNum').text(--selectedNum);
}
if(curTab == 1){
g2.reload();
}
}, true);
});
//全部取消选择
$(document).on("click", ".cancelAll", function () {
common.dialog.confirm(
"温馨提示", "你确定全部取消选择所有商品么?",
function(){
common.util.__ajax({
url:'/shops/shopCategory/unlinkAll',
data:{
categoryId: curCategoryId
}
},function(){
g2.reload();
}, true);
},
function(){}
);
});
//查看更多销售类目
$(document).on("click", ".moreCategory", function () {
if($(this).hasClass('open')){
$(this).text('显示更多').removeClass('open').prev('ul').hide().prev('span').show();
}else{
$(this).text('收起更多').addClass('open').prev('ul').show().prev('span').hide();
}
});
//筛选
$(document).on("click", ".filter-btn", function () {
if(curTab == 0){
g1.reload();
}else{
g2.reload();
}
});
\ No newline at end of file
... ...
'use strict';
var $ = require('jquery'),
common = require('../../../common/common');
var currentShopCategoryNum = 0; //店铺销售类目数量
var Bll = {
init: function () {
common.util.__ajax({
url:'/shops/shopCategory/list',
data: {}
}, function (res) {
var data = res.data;
console.log(data);
currentShopCategoryNum = data.length;
$('#showCategory').html(common.util.__template2($("#listTemplate").html(),{data:data})).show();
},true)
},
//新增,编辑销售类目名称
toast: function (type, url, name, id) {
var self = this;
common.dialog.confirm(
type == 0 ? "新增销售类目" : "编辑销售类目",
common.util.__template2($("#addTemplate").html(),{data:name}),
function () {
var categoryName = $('#categoryName').val();
if($.trim(categoryName) != ''){
common.util.__ajax({
url:url,
data: {
categoryId: id,
categoryName: categoryName
}
},function (rs) {
self.init();
});
}else{
common.util.__tip('店铺销售类目名称不能为空!');
return false;
}
}
)
},
//删除销售类目
deleteCategory: function (categoryId) {
var self = this;
common.util.__ajax({
url:'/shops/shopCategory/delete',
data: {
categoryId:categoryId
}
}, function (res) {
self.init();
})
}
};
Bll.init();
//新增类目
$(document).on('click', '.addBtn', function () {
if(currentShopCategoryNum < 20){
Bll.toast(0, '/shops/shopCategory/add', '', null);
}else {
common.util.__tip('店铺最多添加只能添加20个销售类目!');
}
});
//编辑类目名称
$(document).on('click', '.editCategory', function () {
var categoryName = $(this).parent().parent().find('td').eq(1).text();
var categoryId = $(this).data('categoryid');
Bll.toast(1, '/shops/shopCategory/update', categoryName, categoryId);
});
//删除类目
$(document).on('click', '.deleteBtn', function () {
var categoryName = $(this).parent().parent().find('td').eq(1).text();
var categoryId = $(this).data('categoryid');
common.dialog.confirm(
"删除店铺销售类目",
"你确定<b style='color: #ff0000'>&nbsp;删除&nbsp;</b>销售类目<b style='color:#428bca'>&nbsp;"+categoryName+"&nbsp;</b>么?",
function () {
Bll.deleteCategory(categoryId);
}
)
});
\ No newline at end of file
... ...