pages.service.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. const connection = require('../sql');
  2. class PagesService {
  3. async listCount(keyword, userId, projectId) {
  4. let statement = '';
  5. if (projectId) {
  6. statement = `
  7. SELECT
  8. count(p.id) total
  9. FROM
  10. pages p
  11. LEFT JOIN
  12. pages_role pr
  13. ON
  14. p.project_id = pr.page_id and pr.user_id = ${userId}
  15. WHERE
  16. (p.name like COALESCE(CONCAT('%',?,'%'), p.name) OR ? IS NULL)
  17. AND
  18. p.project_id = ${projectId}
  19. AND
  20. (pr.page_id IS NOT NULL OR p.user_id = ${userId})`;
  21. } else {
  22. statement = `
  23. SELECT
  24. count(p.id) as total
  25. FROM
  26. pages p
  27. LEFT JOIN
  28. pages_role pr
  29. ON
  30. p.project_id = pr.page_id and pr.user_id = ${userId}
  31. WHERE
  32. (
  33. (p.name like COALESCE(CONCAT('%',?,'%'), p.name) OR ? IS NULL)
  34. AND p.user_id = ${userId}
  35. )
  36. AND
  37. (pr.page_id IS NOT NULL OR p.user_id = ${userId})
  38. `;
  39. }
  40. const [result] = await connection.execute(statement, [keyword || null, keyword || null]);
  41. return result[0];
  42. }
  43. async list(pageNum, pageSize, keyword, userId, projectId) {
  44. const offset = (+pageNum - 1) * pageSize + '';
  45. const limit = pageSize;
  46. let statement = '';
  47. if (projectId) {
  48. statement = `
  49. SELECT
  50. p.id,
  51. p.name,
  52. p.user_id as userId,
  53. p.remark,
  54. p.app_type as appType,
  55. p.is_public as isPublic,
  56. p.is_edit as isEdit,
  57. p.preview_img as previewImg,
  58. p.stg_publish_id as stgPublishId,
  59. p.pre_publish_id as prePublishId,
  60. p.prd_publish_id as prdPublishId,
  61. p.stg_state as stgState,
  62. p.pre_state as preState,
  63. p.prd_state as prdState,
  64. p.project_id as projectId,
  65. p.updated_at as updatedAt,
  66. SUBSTRING_INDEX(p.user_name, '@', 1) as userName
  67. FROM
  68. pages p
  69. LEFT JOIN
  70. pages_role pr
  71. ON
  72. p.project_id = pr.page_id and pr.user_id = ${userId}
  73. WHERE
  74. (p.name like COALESCE(CONCAT('%',?,'%'), p.name) OR ? IS NULL)
  75. AND
  76. p.project_id = ${projectId}
  77. AND
  78. (pr.page_id IS NOT NULL OR p.user_id = ${userId})
  79. ORDER BY
  80. p.updated_at DESC LIMIT ${offset},${limit};`;
  81. } else {
  82. statement = `
  83. SELECT
  84. p.id,
  85. p.name,
  86. p.user_id as userId,
  87. p.remark,
  88. p.app_type as appType,
  89. p.is_public as isPublic,
  90. p.is_edit as isEdit,
  91. p.preview_img as previewImg,
  92. p.stg_publish_id as stgPublishId,
  93. p.pre_publish_id as prePublishId,
  94. p.prd_publish_id as prdPublishId,
  95. p.stg_state as stgState,
  96. p.pre_state as preState,
  97. p.prd_state as prdState,
  98. p.project_id as projectId,
  99. p.updated_at as updatedAt,
  100. SUBSTRING_INDEX(p.user_name, '@', 1) as userName
  101. FROM
  102. pages p
  103. LEFT JOIN
  104. pages_role pr
  105. ON
  106. pr.user_id = ${userId} and pr.page_id = p.id
  107. WHERE
  108. (p.name like COALESCE(CONCAT('%',?,'%'), p.name) OR ? IS NULL)
  109. AND
  110. (p.user_id = ${userId} OR pr.page_id IS NOT NULL)
  111. ORDER BY
  112. p.updated_at DESC LIMIT ${offset},${limit};`;
  113. }
  114. const [result] = await connection.execute(statement, [keyword || null, keyword || null]);
  115. return result;
  116. }
  117. // 根据模板项目ID查询页面ID
  118. async getPageIdsByProjectId(projectId) {
  119. const statement = `
  120. SELECT
  121. id
  122. FROM
  123. pages
  124. WHERE
  125. project_id = ?;
  126. `;
  127. const [result] = await connection.execute(statement, [projectId]);
  128. return result;
  129. }
  130. // 查询项目总条数:mars-admin
  131. async getPageCount(isTemplate, userId) {
  132. let statement = `
  133. SELECT
  134. count(id) total
  135. FROM
  136. pages
  137. WHERE
  138. 1 = 1
  139. `;
  140. if (isTemplate !== '') {
  141. statement += ` and is_template = ${isTemplate}`;
  142. }
  143. if (userId) {
  144. statement += ` and user_id = ${userId}`;
  145. }
  146. const [result] = await connection.execute(statement, []);
  147. return result[0];
  148. }
  149. // 查询页面总条数:mars-admin
  150. async getPageList(pageNum, pageSize, isTemplate, userId) {
  151. const offset = (+pageNum - 1) * pageSize + '';
  152. let statement = `
  153. SELECT
  154. id,
  155. name,
  156. user_id as userId,
  157. user_name as userName,
  158. remark,
  159. app_type as appType,
  160. is_template as isTemplate,
  161. is_public as isPublic,
  162. is_edit as isEdit,
  163. preview_img as previewImg,
  164. project_id as projectId,
  165. updated_at as updatedAt,
  166. created_at as createdAt
  167. FROM
  168. pages
  169. WHERE
  170. 1 = 1
  171. `;
  172. if (isTemplate !== '') {
  173. statement += ` and is_template = ${isTemplate}`;
  174. }
  175. if (userId) {
  176. statement += ` and user_id = ${userId}`;
  177. }
  178. statement += ` LIMIT ${offset}, ${pageSize}`;
  179. const [result] = await connection.execute(statement, []);
  180. return result;
  181. }
  182. // 查询页面模板总条数
  183. async listPageTemplateCount(keyword) {
  184. const statement = "SELECT COUNT(`id`) total FROM pages WHERE (name like COALESCE(CONCAT('%',?,'%'), name) OR ? IS NULL) AND is_public = 3;";
  185. const [result] = await connection.execute(statement, [keyword || null, keyword || null]);
  186. return result[0];
  187. }
  188. // 查询页面模板
  189. async listPageTemplate(pageNum, pageSize, keyword) {
  190. const offset = (+pageNum - 1) * pageSize + '';
  191. const statement = `
  192. SELECT
  193. id,
  194. name,
  195. user_id as userId,
  196. remark,
  197. app_type as appType,
  198. is_public as isPublic,
  199. is_edit as isEdit,
  200. preview_img as previewImg,
  201. stg_publish_id as stgPublishId,
  202. stg_state as stgState,
  203. project_id as projectId,
  204. updated_at as updatedAt,
  205. SUBSTRING_INDEX(user_name, '@', 1) as userName
  206. FROM
  207. pages
  208. WHERE
  209. (name like COALESCE(CONCAT('%',?,'%'), name) OR ? IS NULL)
  210. AND
  211. is_public = 3
  212. ORDER BY
  213. updated_at DESC LIMIT ?,?;`;
  214. const [result] = await connection.execute(statement, [keyword || null, keyword || null, offset, pageSize]);
  215. return result;
  216. }
  217. async getPageInfoById(id) {
  218. const statement = `
  219. SELECT
  220. id,
  221. name,
  222. user_id as userId,
  223. user_name as userName,
  224. remark,
  225. app_type as appType,
  226. is_public as isPublic,
  227. is_edit as isEdit,
  228. preview_img as previewImg,
  229. page_data as pageData,
  230. stg_publish_id as stgPublishId,
  231. pre_publish_id as prePublishId,
  232. prd_publish_id as prdPublishId,
  233. stg_state as stgState,
  234. pre_state as preState,
  235. prd_state as prdState,
  236. project_id as projectId,
  237. updated_at as updatedAt,
  238. SUBSTRING_INDEX(user_name, '@', 1) as userName
  239. FROM
  240. pages
  241. WHERE id = ?;
  242. `;
  243. const [result] = await connection.execute(statement, [id]);
  244. return result;
  245. }
  246. async getPageSimpleById(id) {
  247. const statement =
  248. 'SELECT user_id as userId, app_type as appType, is_public as isPublic, is_edit as isEdit,project_id projectId FROM pages WHERE id = ?;';
  249. const [result] = await connection.execute(statement, [id]);
  250. return result;
  251. }
  252. async createPage(name, userId, userName, remark = '', pageData = '', projectId = 0, appType) {
  253. const statement = 'INSERT INTO pages (name, user_id, user_name, app_type, remark, page_data, project_id) VALUES (?, ?, ?, ?, ?, ?, ?);';
  254. const [result] = await connection.execute(statement, [name, userId, userName, appType || 1, remark, pageData, projectId]);
  255. return result;
  256. }
  257. async deletePage(pageId, userId) {
  258. const statement = 'DELETE FROM pages WHERE id = ? and user_id = ?;';
  259. const [result] = await connection.execute(statement, [pageId, userId]);
  260. return result;
  261. }
  262. // 删除项目下所有页面
  263. async deletePageByProjectId(projectId, userId) {
  264. const statement = 'DELETE FROM pages WHERE project_id = ? and user_id = ?;';
  265. const [result] = await connection.execute(statement, [projectId, userId]);
  266. return result;
  267. }
  268. // 解除项目下页面列表归属
  269. async updatePageForProjectId(projectId) {
  270. const statement = 'update pages set project_id = null where project_id = ?';
  271. const [result] = await connection.execute(statement, [projectId]);
  272. return result;
  273. }
  274. //state=> 1: 未保存 2: 已保存 3: 已发布 4: 已回滚
  275. async updatePageInfo(id, name, remark, pageData, previewImg, projectId, isPublic) {
  276. let statement = `UPDATE pages SET stg_state=2, pre_state=2, prd_state=2`;
  277. let sql_params = [];
  278. if (name) {
  279. statement += `, name = ?`;
  280. sql_params.push(name);
  281. }
  282. if (remark != null) {
  283. statement += `, remark = ?`;
  284. sql_params.push(remark);
  285. }
  286. if (previewImg) {
  287. statement += `, preview_img = ?`;
  288. sql_params.push(previewImg);
  289. }
  290. if (pageData) {
  291. statement += `, page_data = ?`;
  292. sql_params.push(pageData);
  293. }
  294. if (projectId) {
  295. statement += `, project_id = ?`;
  296. sql_params.push(projectId);
  297. }
  298. if (isPublic) {
  299. statement += `, is_public = ?`;
  300. sql_params.push(isPublic);
  301. }
  302. statement += ` WHERE id = ?;`;
  303. sql_params.push(id);
  304. const [result] = await connection.execute(statement, sql_params);
  305. return result;
  306. }
  307. //state=> 1: 未保存 2: 已保存 3: 已发布 4: 已回滚
  308. async updatePageState(lastPublishId, id, env, previewImg) {
  309. let statement = `UPDATE pages SET ${env}_state=3, ${env}_publish_id = ?`;
  310. let sql_params = [lastPublishId];
  311. if (previewImg) {
  312. statement += `, preview_img = ?`;
  313. sql_params.push(previewImg);
  314. }
  315. statement += ` WHERE id = ?;`;
  316. sql_params.push(id);
  317. const [result] = await connection.execute(statement, sql_params);
  318. return result;
  319. }
  320. async updateLastPublishId(pageId, lastPublishId, env) {
  321. const statement = `UPDATE pages SET ${env}_state=4, ${env}_publish_id = ? WHERE id = ?;`;
  322. const [result] = await connection.execute(statement, [lastPublishId, pageId]);
  323. return result;
  324. }
  325. // 根据页面模板id查询页面信息
  326. async getPageByTemplateId(id) {
  327. const statement = `
  328. SELECT
  329. p.project_id projectId, p.name, p.remark, p.app_type, p.page_data pageData
  330. FROM
  331. pages p
  332. LEFT JOIN
  333. templates t
  334. on
  335. p.id = t.union_id
  336. WHERE
  337. t.id = ?;
  338. `;
  339. const [result] = await connection.execute(statement, [id]);
  340. return result[0];
  341. }
  342. // 根据项目模板id查询关联的菜单页面列表
  343. async getPagesById(id) {
  344. const statement = `
  345. SELECT
  346. id, name, app_type as appType, page_data pageData, stg_state stgState, remark
  347. FROM
  348. pages
  349. WHERE id = ?
  350. `;
  351. const [result] = await connection.execute(statement, [id]);
  352. return result[0];
  353. }
  354. // 设置模板以后,更新项目标识
  355. async updatePageTemplate(id, status) {
  356. const statement = 'UPDATE pages SET is_template = ? WHERE id = ?;';
  357. const [result] = await connection.execute(statement, [status, id]);
  358. return result;
  359. }
  360. // 注销用户所有页面
  361. async deleteAllPage(userId, userName) {
  362. const statement = 'DELETE FROM pages WHERE user_id = ? and user_name = ?;';
  363. const [result] = await connection.execute(statement, [userId, userName]);
  364. return result;
  365. }
  366. }
  367. module.exports = new PagesService();