page.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. const path = require('path')
  2. const fs = require('fs')
  3. module.exports = app => ({
  4. /**
  5. * 我的页面列表
  6. * @returns {Promise<void>}
  7. */
  8. async myPages() {
  9. const { ctx, $service, $helper } = app;
  10. let { pageMode, type } = ctx.request.query;
  11. const pages = await $service.page.getMyPages(pageMode, type);
  12. const myPageCount = await $service.page.getMyPagesCount(pageMode);
  13. const myCooperationPageCount = await $service.page.getCooperationPagesCount(pageMode);
  14. $helper.returnBody(true, {
  15. pages: pages.reverse(),
  16. myPageCount: myPageCount,
  17. myCooperationPageCount: myCooperationPageCount
  18. })
  19. },
  20. /**
  21. * 获取我的模板列表
  22. * @returns {Promise<void>}
  23. */
  24. async getMyTemplates() {
  25. const { ctx, $service, $helper } = app;
  26. let { pageMode } = ctx.request.query;
  27. const pages = await $service.page.getMyTemplates(pageMode);
  28. $helper.returnBody(true, pages)
  29. },
  30. /**
  31. * 创建页面
  32. * @returns {Promise<void>}
  33. */
  34. async create(data) {
  35. const { ctx, $service, $helper } = app;
  36. let newPageData = ctx.request.body;
  37. const page = await $service.page.create(newPageData);
  38. $helper.returnBody(true, page)
  39. },
  40. /**
  41. * 修改更新页面
  42. * @returns {Promise<void>}
  43. */
  44. async updatePage() {
  45. const { ctx, $service, $helper } = app;
  46. let { pageData } = ctx.request.body;
  47. await $service.page.update(pageData);
  48. $helper.returnBody(true)
  49. },
  50. /**
  51. * 删除页面
  52. */
  53. async deletePage() {
  54. const { ctx, $service, $helper } = app;
  55. let { id } = ctx.request.body;
  56. await $service.page.deletePage(id);
  57. $helper.returnBody(true)
  58. },
  59. /**
  60. * 复制页面
  61. * @returns {Promise<void>}
  62. isPublish: false,
  63. isTemplate: false,
  64. members: [],
  65. author: author,
  66. */
  67. async copyPage() {
  68. const { ctx, $service, $helper } = app;
  69. let { id } = ctx.request.body;
  70. let page = await $service.page.getPageDetail(id);
  71. page._id = undefined;
  72. page.isPublish = false;
  73. page.isTemplate = false;
  74. page.members = [];
  75. let newPage = await $service.page.create(page);
  76. $helper.returnBody(true, { _id: newPage._id });
  77. },
  78. /**
  79. * 发布页面
  80. * @returns {Promise<void>}
  81. */
  82. async publish() {
  83. const { ctx, $service, $helper } = app;
  84. let { id } = ctx.request.body;
  85. await $service.page.setPublish(id);
  86. $helper.returnBody(true);
  87. },
  88. /**
  89. * 设为我的模板
  90. * @returns {Promise<void>}
  91. */
  92. async setTemplate() {
  93. const { ctx, $service, $helper } = app;
  94. let userData = ctx.userData
  95. let { id } = ctx.request.body;
  96. let page = await $service.page.getPageDetail(id);
  97. page = page.toObject();
  98. page._id = undefined;
  99. page.isPublish = false;
  100. page.isTemplate = true;
  101. page.members = [];
  102. page.author = userData._id;
  103. let newPage = await $service.page.create({...page });
  104. $helper.returnBody(true, { _id: newPage._id });
  105. },
  106. /**
  107. * 获取模板市场所有模板
  108. * @returns {Promise<void>}
  109. */
  110. async getPublishTemplates() {
  111. const { ctx, $service, $helper } = app;
  112. let { pageMode } = ctx.request.query;
  113. const pages = await $service.page.getPublishTemplates(pageMode);
  114. $helper.returnBody(true, pages)
  115. },
  116. /**
  117. * 获取页面详情
  118. * @returns {Promise<void>}
  119. */
  120. async pageDetail(ctx) {
  121. let { pageId } = ctx.request.query;
  122. const { $service, $helper } = app;
  123. if (!pageId) {
  124. // 如果 pageId 不存在,返回 404 错误
  125. ctx.status = 404;
  126. ctx.body = {
  127. status: false,
  128. body: {},
  129. msg: 'Page not found',
  130. code: 404
  131. };
  132. return;
  133. }
  134. try {
  135. const pageData = await $service.page.getPageDetail(pageId);
  136. if (!pageData) {
  137. // 如果没有找到页面数据,返回 404 错误
  138. ctx.status = 404;
  139. ctx.body = {
  140. status: false,
  141. body: {},
  142. msg: 'Page not found',
  143. code: 404
  144. };
  145. return;
  146. }
  147. $helper.returnContentBody(ctx, { body: pageData })
  148. } catch (error) {
  149. // 处理异常情况
  150. ctx.status = 500;
  151. ctx.body = {
  152. status: false,
  153. body: {},
  154. msg: 'Internal Server Error',
  155. code: 500
  156. };
  157. }
  158. },
  159. /**
  160. * 渲染页面
  161. * @returns {Promise<void>}
  162. */
  163. async view() {
  164. const { ctx, $service } = app;
  165. let pageId = ctx.params._id;
  166. const pageData = await $service.page.getPageDetail(pageId);
  167. let pageMode = {
  168. 'h5': 'h5-swiper',
  169. 'longPage': 'h5-long',
  170. 'relativePage': 'h5-relative',
  171. 'pc': 'pc'
  172. };
  173. ctx.status = 200;
  174. await ctx.render(pageMode[pageData.pageMode], { pageData: pageData })
  175. },
  176. /**
  177. * 下载页面数据为JSON
  178. */
  179. async jsonDownload() {
  180. const { ctx, $service, $helper } = app;
  181. let { pageId } = ctx.request.query;
  182. const pageData = await $service.page.getPageDetail(pageId);
  183. let userID = pageData.author
  184. let currentPathDir = `/resource/Output/${userID}`
  185. // 判断文件夹是否存在不存在则新建一个
  186. await $helper.dirExists(path.join(__dirname, '../public' + currentPathDir));
  187. await fs.writeFile(path.join(__dirname, '../public' + currentPathDir + `/${pageId}.json`), JSON.stringify(pageData), error => {
  188. if (error) return console.log("写入文件失败:" + error.message);
  189. console.log("写入成功");
  190. })
  191. $helper.returnBody(true, { outputDir: currentPathDir + `/${pageId}.json` })
  192. }
  193. })