complaints.js 3.35 KB
/**
 * 我的投诉 model
 * @author: yyq<yanqing.yang@yoho.cn>
 * @date: 2016/8/18
 */
'use strict';

const api = global.yoho.API;

const _ = require('lodash');
const Promise = require('bluebird');

const setPager = require(`${global.utils}/pager`).setPager;

const co = Promise.coroutine;

const complaintType = {
    0: '全部',
    1: '产品相关',
    2: '物流相关'
};

/**
 * 获取投诉列表
 * @function getComplaintsList
 * @param { Number } uid 用户uid
 * @param { Number } page 页码
 * @param { Number } limit 每页数目
 * @return { Object } 投诉列表数据
 */
const getComplaintsList = (uid, page, limit) => {
    page = page || 1;
    limit = limit || 10;

    const process = function*() {
        let resData = {};
        let result = yield api.get('', {
            method: 'web.complaints.getList',
            uid: uid,
            page: page,
            limit: limit
        }, {code: 200});

        if (!_.isEmpty(result.data)) {
            let list = [];

            _.forEach(_.get(result, 'data.complaintList', []), value => {
                list.push({
                    id: value.id,
                    title: value.title,
                    target: value.customer,
                    type: complaintType[value.complaintsType],
                    order: value.orderCode,
                    time: value.createTime,
                    question: value.content,
                    reply: value.reply,
                    replyTime: value.replyTime,
                    revoke: value.status === -1
                });
            });

            if (_.isEmpty(list)) {
                resData.complaints = {empty: '您尚未投诉任何内容'};
            } else {
                resData.complaints = list;
            }

            resData.pager = Object.assign({
                count: _.get(result, 'data.total', 0),
                curPage: page,
                totalPages: _.get(result, 'data.page_total', 0)
            }, setPager(_.get(result, 'data.page_total', 0), {
                page: page
            }));

            if (!_.get(resData, 'pager.pages[1]')) {
                _.unset(resData, 'pager.pages');
            }
        }

        return resData;
    };

    return co(process)();
};

/**
 * 添加投诉
 * @function addComplaints
 * @param { Number } uid 用户uid
 * @param { Object } params 投诉内容信息
 * @return { Object } 添加投诉结果
 */
const addComplaints = (uid, params) => {
    let process = function*() {
        let res = api.post('', {
            method: 'web.complaints.add',
            uid: uid,
            title: _.trim(params.title),
            customer: _.trim(params.customer),
            complaintsType: _.trim(params.complaintsType),
            orderCode: _.trim(params.orderCode),
            content: _.trim(params.content)
        });

        return res;
    };

    return co(process)();
};

/**
 * 撤销投诉
 * @function addComplaints
 * @param { Number } uid 用户uid
 * @param { Number } id 投诉id
 * @return { Object } 撤销投诉结果
 */
const cancelComplaints = (uid, id) => {
    let process = function*() {
        let res = api.post('', {
            method: 'web.complaints.cancel',
            uid: uid,
            id: id
        });

        return res;
    };

    return co(process)();
};

module.exports = {
    getComplaintsList,
    addComplaints,
    cancelComplaints
};