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

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

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

const co = Promise.coroutine;

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


module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);
    }

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

        const process = function*() {
            let resData = {};
            let result = yield this.get({
                data: {
                    method: 'web.complaints.getList',
                    uid: uid,
                    page: page,
                    limit: limit
                },
                param: {
                    cache: 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 } 添加投诉结果
     */
    addComplaints(uid, params) {
        return this.post({
            data: {
                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)
            }
        });
    }

    /**
     * 撤销投诉
     * @function addComplaints
     * @param { Number } uid 用户uid
     * @param { Number } id 投诉id
     * @return { Object } 撤销投诉结果
     */
    cancelComplaints(uid, id) {
        return this.post({
            data: {
                method: 'web.complaints.cancel',
                uid: uid,
                id: id
            }
        });
    }
};