const connection = require('../sql'); class ProjectsService { // 查询项目分类总条数 async getCategoryCount(keyword, userId) { const statement = ` SELECT count(DISTINCT p.id) total FROM projects p LEFT JOIN pages pg ON p.id = pg.project_id LEFT JOIN pages_role pr ON p.id = pr.page_id AND pr.user_id = ? WHERE (p.name like COALESCE(CONCAT('%',?,'%'), p.name) OR ? IS NULL) AND p.user_id = ? OR pr.user_id = ? `; const [result] = await connection.execute(statement, [userId, keyword || null, keyword || null, userId, userId]); return result[0]; } // 查询页面分类列表 async getCategoryList(pageNum, pageSize, keyword, userId) { const offset = (+pageNum - 1) * pageSize + ''; const statement = ` SELECT p.id, p.name, p.remark, p.user_id as userId, p.user_name as userName, p.logo, p.updated_at as updatedAt, COUNT(pg.id) as count FROM projects p LEFT JOIN pages pg ON p.id = pg.project_id LEFT JOIN pages_role pr ON p.id = pr.page_id AND pr.user_id = ? WHERE (p.name like COALESCE(CONCAT('%',?,'%'), p.name) OR ? IS NULL) AND p.user_id = ? OR pr.user_id = ? GROUP BY p.id, p.name, p.user_id ORDER BY p.updated_at DESC LIMIT ?, ? `; const [result] = await connection.execute(statement, [userId, keyword || null, keyword || null, userId, userId, offset, pageSize]); return result; } // 查询项目总条数:mars-admin async getProjectCount(isTemplate, userId) { let statement = ` SELECT count(id) total FROM projects WHERE 1 = 1 `; if (isTemplate !== '') { statement += ` and is_template = ${isTemplate}`; } if (userId) { statement += ` and user_id = ${userId}`; } const [result] = await connection.execute(statement, []); return result[0]; } // 查询项目总条数:mars-admin async getProjectList(pageNum, pageSize, isTemplate, userId) { const offset = (+pageNum - 1) * pageSize + ''; let statement = ` SELECT id, name, remark, logo, user_id as userId, user_name as userName, is_template as isTemplate, is_public as isPublic, breadcrumb, layout, menu_mode as menuMode, menu_theme_color as menuThemeColor, tag, footer, system_theme_color as systemThemeColor, updated_at as updatedAt, created_at as createdAt FROM projects WHERE 1 = 1 `; if (isTemplate !== '') { statement += ` and is_template = ${isTemplate}`; } if (userId) { statement += ` and user_id = ${userId}`; } statement += ` LIMIT ${offset}, ${pageSize}`; const [result] = await connection.execute(statement, []); return result; } async getProjectByName(name) { const statement = `SELECT * FROM projects WHERE name = ?;`; const [result] = await connection.execute(statement, [name]); return result; } async createProject(params) { const statement = 'INSERT INTO projects (name, remark, logo, user_name, user_id, is_public) VALUES (?, ?, ?, ?, ?, ?);'; const [result] = await connection.execute(statement, [ params.name, params.remark, params.logo, params.userName, params.userId, params.isPublic || 1, ]); return result; } async installProject(params) { const statement = 'INSERT INTO projects (name, remark, logo, user_name, user_id, is_public, breadcrumb, layout, menu_mode, menu_theme_color, tag, footer, system_theme_color, home_page) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'; const [result] = await connection.execute(statement, [ params.name, params.remark, params.logo, params.userName, params.userId, 2, params.breadcrumb, params.layout, params.menuMode, params.menuThemeColor, params.tag, params.footer, params.systemThemeColor, params.homePage || 'welcome', ]); return result; } async checkAuth(id) { const statement = `SELECT p.id,p.user_id userId, pr.user_id devUserId FROM projects p LEFT JOIN pages_role pr on p.id = pr.page_id WHERE p.id = ?;`; const [result] = await connection.execute(statement, [id]); return result; } async getProjectInfoById(id) { const statement = "SELECT id,name,remark,logo,user_id as userId,layout,menu_mode as menuMode,menu_theme_color as menuThemeColor,breadcrumb,tag,footer,is_public as isPublic,SUBSTRING_INDEX(user_name, '@', 1) as userName,show_header showHeader,show_tab_bar showTabBar,home_page homePage, extra_data extraData FROM projects WHERE id = ?;"; const [result] = await connection.execute(statement, [id]); return result; } async deleteProject(id, userId) { const statement = 'DELETE FROM projects WHERE id = ? and user_id = ?;'; const [result] = await connection.execute(statement, [id, userId]); return result; } async updateProjectInfo(params) { const statement = 'UPDATE projects SET name = ?, remark = ?, logo = ?, layout = ?, menu_mode = ?, menu_theme_color = ?, system_theme_color = ?, breadcrumb = ?, tag = ?, footer = ?, is_public = ?, show_header = ?, show_tab_bar = ?, home_page = ?, extra_data = ? WHERE id = ?;'; const [result] = await connection.execute(statement, [ params.name, params.remark, params.logo, params.layout, params.menuMode, params.menuThemeColor, params.systemThemeColor, params.breadcrumb ?? 1, params.tag ?? 1, params.footer ?? 0, params.isPublic ?? 2, params.showHeader ?? 1, params.showTabBar ?? 0, params.homePage || 'welcome', params.extraData || '{}', params.id, ]); return result; } // 根据项目模板id查询项目信息 async getProjectByTemplateId(id) { const statement = ` SELECT p.id, p.name, p.remark, p.logo, p.breadcrumb, p.layout, p.menu_mode menuMode, p.menu_theme_color menuThemeColor, p.tag, p.footer, p.system_theme_color systemThemeColor FROM projects p LEFT JOIN templates t on p.id = t.union_id WHERE t.id = ?; `; const [result] = await connection.execute(statement, [id]); return result[0]; } // 设置模板以后,更新项目标识 async updateProjectTemplate(id, status) { const statement = 'UPDATE projects SET is_template = ? WHERE id = ?;'; const [result] = await connection.execute(statement, [status, id]); return result; } // 注销项目 async deleteAllProject(userId, userName) { const statement = 'DELETE FROM projects WHERE user_id = ? and user_name = ?;'; const [result] = await connection.execute(statement, [userId, userName]); return result; } } module.exports = new ProjectsService();