Greasy Fork

Greasy Fork is available in English.

天猫商家中心商品管理提取SKU

天猫商家中心商品管理提取SKU.

当前为 2018-03-15 提交的版本,查看 最新版本

// ==UserScript==
// @name         天猫商家中心商品管理提取SKU
// @namespace    http://leironghua.com/
// @version      0.7
// @description  天猫商家中心商品管理提取SKU.
// @author       雷荣华
// @include      *//sell.tmall.com/auction/item/item_list.htm*
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    (function(S) {
        window.LRH = {
            totalPage: 0,
            pageData: [],
            itemData: []
        };
        S.use('core,node,anim,io,json', function(S) {


            // 检查商品的工具栏是否已经出现
            function checkOperate() {
                if (S.all('.goods-operate').length == 0) {
                    return;
                }
                //去掉定时器的方法,已经加载完成
                window.clearInterval(window.t1);
                appendBtn();
            }
            // 添加自定义的提取按钮
            function appendBtn() {
                //prepend
                S.all('.goods-operate').append('<span class="goods-operate-item" id="_btn_goods" style="margin-left: 5px" ><a href="javascript:void(0)" target="_blank" class="sui-btn-primary sui-btn">提取商品信息</a></span><span class="icon icon-loading icon-loading-animate" id="_extract_loading" style="display: none;"></span><span id="_extract_status" style="font-size: 12px;"></span>');
                S.all('body').append('<div id="_reuslt" style="display: none;"><div class="sui-modal-container active"><div class="sui-modal-overlay" style="z-index: 1100;"></div><div class="sui-modal-inner" style="z-index:1100;"><div style="width:1000px;" class="sui-modal"><a class="sui-modal-close"><span>×</span></a><div class="sui-modal-title">处理完成请复制到剪贴板</div><div style="height:auto;" class="sui-modal-content"><div class="goods-title"><form novalidate="" class="sui-form"><div class="sui-field sui-row"><div class="sui-value sui-col-20"><textarea class="sui-textarea " rows="30" style="min-height:auto;width:950px;resize:vertical;" readonly="readonly"></textarea><div class="remain-tip"><span></span></div></div></div></form><div class="goods-title-btns"><a class="sui-btn">关闭</a></div></div></div></div></div></div></div>');

                S.Event.add('#_btn_goods', 'click', function(e) {
                    run();
                });
                // 点击关闭功能
                S.Event.add('#_reuslt a', 'click', function(e) {
                    S.all('#_reuslt').hide();
                });
                // 焦点全选功能
                S.all('#_reuslt textarea').style('cursor','pointer').on('focus', function(e) {
                    S.all('#_reuslt textarea')[0].select();
                });

                // S.Event.add('#_reuslt textarea', 'focus', function(e) {
                //     S.all('#_reuslt textarea')[0].select();
                // });
                // 点击再次显示结果
                S.Event.add('#_extract_status','click',function(e){
                    if(S.all('#_extract_status').text().indexOf('处理完成') != -1){
                        S.all('#_reuslt').show();
                    }
                });
            }

            // 分页提取数据
            function doPage(currentPage) {
                // 已经加载完成window.LRH.totalPage
                if (currentPage >window.LRH.totalPage && window.LRH.totalPage != 0) {
                    // 把分页中的商品数组合并成为一个数组
                    S.each(window.LRH.pageData, function(v, i) {
                        window.LRH.itemData = window.LRH.itemData.concat(v.module.itemList);
                    });
                    doItemDataHandle(0);
                    return;
                }
                S.all('#_extract_status').text('第1/3步:正在加载第' +currentPage + '/' + window.LRH.totalPage + '页的数据……');
                // 发起Ajax请求
                S.IO({
                    type:"get",
                    dataType: 'json',
                    url: window.config.urls.submitQueryUrl + window.g_config.tb_token,
                    data: {
                        currentPage: currentPage
                    },
                    success :function( data , textStatus , io){
                    },
                    error :function( data , textStatus , io){
                    },
                    complete : function(data , textStatus , io){
                        if(data != null){
                            window.LRH.pageData.push(data);
                            // 设置服务器返回的总页数
                            if(window.LRH.totalPage < data.module.totalPage) {
                                window.LRH.totalPage = data.module.totalPage;
                            }
                        } else {
                            alert(S.all('#_extract_status').text() + "\r\n" + "加载失败," + textStatus);
                        }
                        doPage(currentPage + 1);
                        // doPage(parseInt(io.config.uri.query._queryMap.currentPage) + 1);
                    }
                });

                // S.IO.get(window.config.urls.submitQueryUrl + window.g_config.tb_token, {
                //     currentPage: currentPage
                // }, function(result) {
                //     window.LRH.pageData.push(result);
                //     doPage(parseInt(this.uri.query._queryMap.currentPage) + 1);
                // }, "json");
            }

            // 进行商品数据处理
            function doItemDataHandle(index) {
                if(index > window.LRH.itemData.length-1){
                    S.all('#_extract_status').text('第3/3步:正在整理'+window.LRH.itemData.length+'个商品的SKU……');
                    var content = "商品ID\t商家编码\t商品名称\t商品地址\t价格\t总库存\t总销量\t上架时间\t库存ID\t库存名称\t库存量",tempData;
                    var skuCount = 0;
                    S.each(window.LRH.itemData,function(item){
                        tempData = "\r\n" +item.itemId +
                            "\t" + (getItemComponentByID(item,'listItemOuterIdComponent').data.outerId || '') +
                            "\t" + getItemComponentByID(item,'listItemTitleComponent').data.value +
                            "\thttp:" + getItemComponentByID(item,'listItemTitleComponent').data.detailUrl +
                            "\t" + getItemComponentByID(item,'listItemPriceComponent').data.price+
                            "\t" +getItemComponentByID(item,'listItemQuantityComponent').data.quantity+
                            "\t" + getItemComponentByID(item,'listItemTotalSoldQuantityComponent').data.totalSoldQuantity +
                            "\t" +getItemComponentByID(item,'listItemOldStartsComponent').data.oldStarts;
                        content += tempData;

                        if(item.quantity.module && item.quantity.module.skuList) {
                            S.each(item.quantity.module.skuList,function(sku,skuIndex){
                                skuCount++;
                                if(skuIndex != 0) {
                                    content += tempData;
                                }
                                content += "\t" +sku.skuId + "\t" +sku.skuName + "\t" +sku.skuQuantity;
                            });
                        }
                    });
                    var sumMsg = "合计:共" + window.LRH.itemData.length+'个商品,共' + skuCount + "个SKU";
                    content += "\r\n" + sumMsg;
                    S.all('#_extract_status').text('处理完成,共'+window.LRH.itemData.length+'个商品,点击显示结果!');
                    //console.info(content);
                    S.all('#_reuslt textarea').text(content);
                    S.all('#_reuslt').show().all('.remain-tip span').text(sumMsg);
                    //GM_setClipboard(content,'text');
                    setTimeout(function () { alert(S.all('#_extract_status').text()); }, 200);

                    return;
                }

                var item = window.LRH.itemData[index];
                S.all('#_extract_status').text('第2/3步:正在加载第' +(index +1)+ '/' + window.LRH.itemData.length + '个商品的SKU……');
                S.IO({
                    type:"get",
                    dataType: 'json',
                    url: getItemComponentByID(item,'listItemQuantityComponent').data.editUrl,
                    data: {
                        _itemId: item.itemId
                    },
                    success :function( data , textStatus , io){
                    },
                    error :function( data , textStatus , io){
                    },
                    complete : function(data , textStatus , io){
                        // var itemTemp = getItemByID(io.config.uri.getQuery()._queryMap._itemId);
                        if(data != null){
                            item.quantity = data;
                        } else {
                            getItemComponentByID(item,'listItemTitleComponent').data.value += "(SKU数据拉取失败,"+textStatus+")";
                        }
                        doItemDataHandle(index+1);
                    }
                });

                // S.IO.get(getItemComponentByID(item,'listItemQuantityComponent').data.editUrl, {
                //     _itemId: item.itemId
                // }, function(result) {
                //     var item = getItemByID(this.uri.query._queryMap._itemId);
                //     item.quantity = result;
                //     doItemDataHandle(index+1);
                // }, "json");
            }

            // 获取商品的属性
            function getItemComponentByID(item, componentId){
                var c = { data :{}};
                S.each(item.components,function(v){
                    if(v.componentId == componentId){
                        c = v;
                        return false;
                    }
                });
                return c;
            }

            function getItemByID(itemId) {
                var item = null;
                S.each(window.LRH.itemData,function(v){
                    if(v.itemId == itemId){
                        item = v;
                        return false;
                    }
                });
                return item;
            }



            function run() {
                window.LRH.pageData = [];
                window.LRH.itemData = [];
                window.LRH.totalPage = 0;
                // S.all('.goods-operate').fire('click');
                // var item = [];
                // S.all('.sui-table-tbody tr').each(function(v,i){
                //     item.push({
                //         itemID:v.all('.goods-item-id').text().replace("商品ID:",""),
                //         itemTitle:v.all('.goods-item-title a').text(),
                //         itemCode:v.all('.goods-item-outerid span:last-child').text(),
                //         price:v.all('.price-value').text(),
                //         itemCount:v.all('.goods-item-quantity div span').text(),
                //         itemSaled:v.all('.goods-item-text').text()
                //     });
                // });
                // https://sell.tmall.com/auction/command.htm?action=item/ItemListAction&event_submit_do_query=1&_input_charset=utf-8&tab=onsale&status=item_on_sale&_tb_token_=7a4bedc5e8f3b&sortField=starts&status=item_on_sale&order=desc&currentPage=2
                //console.info(window.config.urls.submitQueryUrl + window.g_config.tb_token);

                window.LRH.totalPage = parseInt(S.all('.sui-total-page span:last-child').text());

                doPage(1);

                return;
            }


            window.t1 = window.setInterval(checkOperate, 1000);


        });
    })(KISSY);

    // S.all('.sui-page-next').fire('click');
})();