governmentArticlesDetail.js 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. // pages/publics/governmentArticlesDetail/governmentArticlesDetail.js
  2. import {
  3. imgUrl
  4. } from "../../api/request"
  5. Page({
  6. /**
  7. * 页面的初始数据
  8. */
  9. data: {
  10. // 屏幕宽度
  11. windowsWidth: '',
  12. // 图片前缀
  13. imgUrl: imgUrl,
  14. // 文章内容
  15. articles: '',
  16. // 文本字号大小
  17. fontSize: '中',
  18. // 是否播放语音
  19. isPlay: false,
  20. // 是否存在文件
  21. isFile: true,
  22. // 文件路径前缀
  23. fileUrlPrefix: '',
  24. // 文件列表
  25. fileList: [],
  26. zcyw: [],
  27. },
  28. chooseFontSize(e) {
  29. let temp = this.data.articles;
  30. switch (this.data.fontSize) {
  31. case '大':
  32. temp.DOCHTMLCON = temp.DOCHTMLCON.replace(/\<span class="fontSizeMax"/gi, '<span"');
  33. break;
  34. case '中':
  35. temp.DOCHTMLCON = temp.DOCHTMLCON.replace(/\<span class="fontSize"/gi, '<span');
  36. break;
  37. case '小':
  38. temp.DOCHTMLCON = temp.DOCHTMLCON.replace(/\<span class="fontSizeSmall"/gi, '<span');
  39. break;
  40. }
  41. switch (e.currentTarget.dataset.size) {
  42. case '大':
  43. temp.DOCHTMLCON = temp.DOCHTMLCON.replace(/\<span/gi, '<span class="fontSizeMax"');
  44. break;
  45. case '中':
  46. temp.DOCHTMLCON = temp.DOCHTMLCON.replace(/\<span/gi, '<span class="fontSize"');
  47. break;
  48. case '小':
  49. temp.DOCHTMLCON = temp.DOCHTMLCON.replace(/\<span/gi, '<span class="fontSizeSmall"');
  50. break;
  51. }
  52. this.setData({
  53. fontSize: e.currentTarget.dataset.size,
  54. articles: temp
  55. })
  56. },
  57. /**
  58. * 生命周期函数--监听页面加载
  59. */
  60. onLoad(options) {
  61. this.setData({
  62. windowsWidth: wx.getSystemInfoSync().windowWidth * 0.85 + 'px'
  63. })
  64. // 是否显示附件下载
  65. if (options.isFile == 'false') {
  66. this.setData({
  67. isFile: false
  68. })
  69. }
  70. // 图文解读
  71. if (options.isPic) {
  72. wx.request({
  73. url: 'https://data.cqna.gov.cn/mini/hlw/info?channelId=' + options.channelId + '&docId=' + options.docId,
  74. method: 'GET',
  75. success: res => {
  76. res.data.data.DOCPUBTIME = res.data.data.DOCPUBTIME.split(" ")[0];
  77. res.data.data.DOCHTMLCON = res.data.data.DOCHTMLCON.replace(/\<span/gi, '<span class="fontSize"');
  78. // 存在多个隐藏图片,取最后一张图片
  79. if (res.data.data.THUMBFILES.indexOf(",") >= 0) {
  80. let index = res.data.data.THUMBFILES.lastIndexOf(",")
  81. res.data.data.THUMBFILES = res.data.data.THUMBFILES.substring(index + 1)
  82. }
  83. // 替换图片路径
  84. res.data.data.DOCHTMLCON = res.data.data.DOCHTMLCON.replace(/src="[^"]+"/gi, 'style="width:' + this.data.windowsWidth + '" src="' + options.url + res.data.data.THUMBFILES + '"');
  85. // 替换特定图片宽度样式
  86. res.data.data.DOCHTMLCON = res.data.data.DOCHTMLCON.replace('style="width:600px;"', 'style="width:' + this.data.windowsWidth + '"')
  87. console.log(res.data.data);
  88. this.setData({
  89. fileUrlPrefix: options.url,
  90. articles: res.data.data,
  91. fileList: res.data.data.DOCATTACHFILEFIELD,
  92. zcyw:res.data.data.ZCYW
  93. })
  94. }
  95. })
  96. return
  97. }
  98. if (!options.docId) {
  99. wx.request({
  100. url: 'https://data.cqna.gov.cn/mini/hlw/send?page=1&limit=1&channelId=' + options.channelId,
  101. method: 'GET',
  102. success: res => {
  103. let url = res.data.data.DATA[0].DOCPUBURL.substring(0, res.data.data.DATA[0].DOCPUBURL.lastIndexOf("/") + 1)
  104. wx.request({
  105. url: 'https://data.cqna.gov.cn/mini/hlw/info?channelId=' + res.data.data.DATA[0].CHNLID + '&docId=' + res.data.data.DATA[0].DOCID,
  106. method: 'GET',
  107. success: res1 => {
  108. if (res1.data.data.DOCHTMLCON == undefined) {
  109. res1.data.data.DOCHTMLCON = res1.data.data.CONTENT;
  110. res1.data.data.DOCTITLE = res1.data.data.TITLE;
  111. res1.data.data.DOCSOURCENAME = res1.data.data.ORGANCAT_DISP;
  112. }
  113. res1.data.data.DOCPUBTIME = res1.data.data.DOCPUBTIME.split(" ")[0];
  114. res1.data.data.DOCHTMLCON = res1.data.data.DOCHTMLCON.replace(/\<span/gi, '<span class="fontSize"');
  115. // let text = res1.data.data.DOCHTMLCON.replace(/<[^>]+>/g, "");
  116. res1.data.data.DOCHTMLCON = res1.data.data.DOCHTMLCON.replace(/<img [^>]*src="([^'"]+)[^>]*>/gi,
  117. function (match, capture) {
  118. // 替换小图片地址
  119. if (capture.split("/").length > 1) {
  120. return match.replace(/src=['"]([^'"]+)[^>]/gi, 'src="' + 'https://www.cqna.gov.cn' +
  121. capture +
  122. '"');
  123. }
  124. return match.replace(/src=['"]([^'"]+)[^>]/gi, 'src="' + url +
  125. capture +
  126. '"');
  127. });
  128. if (res1.data.data.DOCATTACHFILEFIELD.length > 0) {
  129. this.setData({
  130. fileList: res1.data.data.DOCATTACHFILEFIELD
  131. })
  132. } else {
  133. this.getAhrefs(res1.data.data.DOCHTMLCON);
  134. }
  135. console.log(res1.data.data);
  136. this.setData({
  137. fileUrlPrefix: url,
  138. articles: res1.data.data,
  139. zcyw:res1.data.data.ZCYW
  140. })
  141. }
  142. })
  143. }
  144. })
  145. } else {
  146. wx.request({
  147. url: 'https://data.cqna.gov.cn/mini/hlw/info?channelId=' + options.channelId + '&docId=' + options.docId,
  148. method: 'GET',
  149. success: res => {
  150. res.data.data.DOCTITLE = res.data.data.DOCTITLE ? res.data.data.DOCTITLE : res.data.data.TITLE;
  151. res.data.data.DOCPUBTIME = res.data.data.DOCPUBTIME.split(" ")[0];
  152. res.data.data.DOCHTMLCON = res.data.data.DOCHTMLCON?res.data.data.DOCHTMLCON:res.data.data.CONTENT;
  153. res.data.data.DOCHTMLCON = res.data.data.DOCHTMLCON.replace(/\<span/gi, '<span class="fontSize"');
  154. res.data.data.DOCHTMLCON = res.data.data.DOCHTMLCON.replace(/<img [^>]*src="([^'"]+)[^>]*>/gi,
  155. function (match, capture) {
  156. // 替换小图片地址
  157. if (capture.split("/").length > 1) {
  158. return match.replace(/src=['"]([^'"]+)[^>]/gi, 'src="' + 'https://www.cqna.gov.cn' +
  159. capture +
  160. '"');
  161. }
  162. return match.replace(/src=['"]([^'"]+)[^>]/gi, 'src="' + options.url +
  163. capture +
  164. '"');
  165. });
  166. if (res.data.data.DOCATTACHFILEFIELD.length > 0) {
  167. this.setData({
  168. fileList: res.data.data.DOCATTACHFILEFIELD
  169. })
  170. } else {
  171. this.getAhrefs(res.data.data.DOCHTMLCON);
  172. }
  173. console.log(res.data.data);
  174. this.setData({
  175. fileUrlPrefix: options.url,
  176. articles: res.data.data,
  177. zcyw:res.data.data.ZCYW
  178. })
  179. }
  180. })
  181. }
  182. },
  183. audioPlay() {
  184. if (!this.data.isPlay) {
  185. let that = this;
  186. that.innerAudioContext = wx.createInnerAudioContext({
  187. useWebAudioImplement: false
  188. })
  189. that.innerAudioContext.src = 'https://www.cqna.gov.cn/voice_assistant/2022-11-28/a05-60ff109e2a32_10281519.mp3';
  190. that.innerAudioContext.play()
  191. } else {
  192. this.innerAudioContext.pause();
  193. }
  194. this.setData({
  195. isPlay: !this.data.isPlay
  196. })
  197. },
  198. downloadFile(e) {
  199. wx.downloadFile({
  200. url: this.data.fileUrlPrefix + e.currentTarget.dataset.url,
  201. success: function (res) {
  202. if (res.statusCode === 200) {
  203. let filename = res.tempFilePath;
  204. let fileType = filename.split('.').pop();
  205. wx.openDocument({
  206. filePath: res.tempFilePath,
  207. fileType: fileType,
  208. showMenu: true, // 关键,这里开启预览页面的右上角菜单,才能另存为
  209. });
  210. } else {
  211. wx.showToast({
  212. title: '失败',
  213. });
  214. }
  215. },
  216. });
  217. },
  218. getAhrefs(content) {
  219. let fileTemp = [];
  220. let temp;
  221. let regex = /<a[^>]*href=['"]([^"]*)['"][^>]*>(.*?)<\/a>/g;
  222. while (regex.exec(content) != null) {
  223. temp = {
  224. APPDESC: RegExp.$2,
  225. APPFILE: RegExp.$1.substring(RegExp.$1.lastIndexOf('/') + 1, RegExp.$1.length)
  226. }
  227. }
  228. fileTemp.push(temp);
  229. this.setData({
  230. fileList: fileTemp
  231. })
  232. },
  233. /**
  234. * 生命周期函数--监听页面初次渲染完成
  235. */
  236. onReady() {
  237. },
  238. /**
  239. * 生命周期函数--监听页面显示
  240. */
  241. onShow() {
  242. },
  243. /**
  244. * 生命周期函数--监听页面隐藏
  245. */
  246. onHide() {
  247. if (this.innerAudioContext) {
  248. this.innerAudioContext.stop(); //暂停音频
  249. }
  250. },
  251. /**
  252. * 生命周期函数--监听页面卸载
  253. */
  254. onUnload() {
  255. if (this.innerAudioContext) {
  256. this.innerAudioContext.stop(); //暂停音频
  257. }
  258. },
  259. /**
  260. * 页面相关事件处理函数--监听用户下拉动作
  261. */
  262. onPullDownRefresh() {
  263. },
  264. /**
  265. * 页面上拉触底事件的处理函数
  266. */
  267. onReachBottom() {
  268. },
  269. /**
  270. * 用户点击右上角分享
  271. */
  272. onShareAppMessage() {
  273. return {
  274. title: this.data.articles.DOCTITLE
  275. };
  276. },
  277. goDetail(){
  278. }
  279. })