| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 'use strict';/** * * * @author Mai * @date * @version */module.exports = app => {    class BudgetPermission extends app.BaseService {        /**         * 构造函数         *         * @param {Object} ctx - egg全局变量         * @param {String} tableName - 表名         * @return {void}         */        constructor(ctx) {            super(ctx);            this.tableName = 'budget_permission';            this.PermissionConst = {                view: { title: '查看', value: 1 },                edit: { title: '编辑', value: 2 },            };        }        async showBudget(uid) {            const count = await this.count({ pid: this.ctx.session.sessionProject.id, uid });            return count > 0;        }        async getBudgetPermission(bid) {            const _ = this.ctx.helper._;            const result = await this.db.query(`SELECT bp.*, p.name, p.role                 FROM ${this.tableName} bp LEFT JOIN ${this.ctx.service.projectAccount.tableName} p                On bp.uid = p.id WHERE bid = ?`, [bid]);            result.forEach(x => {                x.permission = x.permission ? _.map(x.permission.split(','), _.toInteger) : []            });            return result;        }        async getUserPermission() {            const _ = this.ctx.helper._;            const result = await this.getAllDataByCondition({                where: { uid: this.ctx.session.sessionUser.accountId, pid: this.ctx.session.sessionProject.id }            });            result.forEach(x => {                x.permission = x.permission ? _.map(x.permission.split(','), _.toInteger) : []            });            return result;        }        async getBudgetUserPermission(bid) {            const _ = this.ctx.helper._;            const result = await this.getDataByCondition({uid: this.ctx.session.sessionUser.accountId, bid});            if (result) result.permission = result.permission ? _.map(result.permission.split(','), _.toInteger) : [];            return result;        }        async saveBudgetPermission(bid, member) {            const orgMember = await this.getAllDataByCondition({ where: { bid } });            const dm = [], um = [], im = [], cur = new Date();            for (const om of orgMember) {                const nm = member.find(x => { return om.uid === x.uid });                if (!nm) {                    dm.push(om.id);                } else {                    um.push({                        id: om.id,                        permission: nm.permission.join(','),                        modify_time: cur,                    });                    member.splice(member.indexOf(nm), 1);                }            }            for (const m of member) {                im.push({                    pid: this.ctx.session.sessionProject.id, bid, uid: m.uid,                    permission: m.permission.join(','), in_time: cur, modify_time: cur,                })            }            const conn = await this.db.beginTransaction();            try {                if (dm.length > 0) await conn.delete(this.tableName, { id: dm });                if (um.length > 0) await conn.updateRows(this.tableName, um);                if (im.length > 0) await conn.insert(this.tableName, im);                await conn.commit();            } catch (err) {                await conn.rollback();                throw err;            }        }    }    return BudgetPermission;};
 |