'use strict'; const auditConst = require('../const/audit'); /** * 附件表 数据模型 * @author LanJianRong * @date 2020/6/30 * @version */ module.exports = app => { class MaterialFile extends app.BaseService { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @return {void} */ constructor(ctx) { super(ctx); this.tableName = 'material_file'; } /** * 获取当前标段(期)所有上传的附件 * @param {Number} tid 标段id * @param {Number?} mid 期id * @return {Promise} 数据库查询实例 */ async getAllMaterialFiles(tid, mid) { const where = { tid }; if (mid) where.mid = mid; const materialList = await this.db.select(this.ctx.service.material.tableName, { where: { tid }, }); // 当用户点击所有期时,不能通过当前的material.status !== auditConst.status.checked来判断是否有删除权限 // 需要获取当前标段所有期与fileList一一对比,可删除的加上pre_delete标记true const fileList = await this.db.select(this.tableName, { where, }); return fileList.map(file => { const material = materialList.find(i => i.id === file.mid && i.tid === file.tid); if (material) { const { status } = material; if ( status !== auditConst.stage.status.checked) { return { ...file, pre_delete: true } } } return file }) } /** * 存储上传的文件信息至数据库 * @param {Array} payload 载荷 * @return {Promise} 数据库插入执行实例 */ async saveFileMsgToDb(payload) { return await this.db.insert(this.tableName, payload); } /** * 获取单个文件信息 * @param {Number} id 文件id * @return {Promise} 数据库查询实例 */ async getMaterialFileById(id) { return await this.getDataByCondition({ id }); } /** * 删除附件 * @param {Number} id - 附件id * @return {void} */ async delete(id) { return await this.deleteById(id); } } return MaterialFile; };