detailPdf.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <!-- 省事直接cv一下老项目代码 -->
  2. <template>
  3. <div class="wrapper" ref="wrapper">
  4. <div id="reportdtl" v-if="isshow">
  5. <header>
  6. <p>
  7. <span style="margin-left: -0.45rem"
  8. >【No.{{ reportInfo.Stage }}|FICC】{{
  9. reportInfo.Title
  10. }}</span
  11. >
  12. <span v-if="reportInfo.CreateTime"
  13. >({{ reportInfo.CreateTime.substring(5, 7)
  14. }}{{ reportInfo.CreateTime.substring(8, 10) }})</span
  15. >
  16. </p>
  17. </header>
  18. <div
  19. style="
  20. padding: 0rem 0.8rem 0.4rem;
  21. box-sizing: border-box;
  22. color: #666;
  23. font-size: 0.66rem;
  24. overflow: hidden;
  25. "
  26. >
  27. <span>{{ reportInfo.Author }}</span>
  28. <span style="float: right">{{ reportInfo.PublishTime }}</span>
  29. </div>
  30. <div id="abstract">
  31. <div class="abstract_cont">
  32. <div>Abstract:{{ reportInfo.Abstract }}</div>
  33. <div style="color: #666; margin-top: 1.2rem">
  34. *Note: Please be sure to read the <strong
  35. style="font-weight: normal; cursor: pointer; color: #3e8ce6"
  36. >disclaimer</strong
  37. >
  38. </div>
  39. </div>
  40. </div>
  41. <div style="padding: 0.6rem; box-sizing: border-box; overflow: hidden">
  42. <div id="overview" style="margin-bottom:1.25rem;font: 0.7rem/1.5 'segoe';" v-if="reportInfo.Overview">
  43. <p><strong>Overview:</strong></p>
  44. <div class="overview" style="overflow:hidden;margin-top:0.83rem;line-height:1.3rem;" v-html="reportInfo.Overview"></div>
  45. </div>
  46. <div id="resetcss" style="overflow:hidden;">
  47. <div v-html="reportInfo.Content"></div>
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. </template>
  53. <script>
  54. import {
  55. reportEnDetail,
  56. } from "@/api/api.js";
  57. import { BlindWatermark } from 'watermark-js-plus'
  58. import { Base64 } from 'js-base64';
  59. export default {
  60. data() {
  61. return {
  62. id: this.$route.query.code || '',
  63. isshow: false,
  64. reportInfo: {}
  65. };
  66. },
  67. mounted() {
  68. this.getreportdetail();
  69. document.title='Reoprt'
  70. },
  71. updated() {
  72. $("#resetcss")
  73. .find("img")
  74. .css({ display: "block", margin: "0 auto", maxWidth: "100%" });
  75. $("#resetcss")
  76. .find("video")
  77. .css({ display: "block", margin: "0 auto", maxWidth: "100%" });
  78. $("#resetcss")
  79. .find("p")
  80. .css({
  81. margin: "0 auto 0",
  82. font: "0.7rem/1.5 'segoe'",
  83. color: "#333",
  84. letterSpacing: "0",
  85. lineHeight: "1.3rem",
  86. });
  87. $("#resetcss")
  88. .find("span")
  89. .css({
  90. font: "0.7rem/1.5 'segoe'",
  91. letterSpacing: "0",
  92. lineHeight: "1.3rem",
  93. });
  94. $("#resetcss")
  95. .find("span.fr-emoticon")
  96. .css({
  97. width: "20px",
  98. height: "20px",
  99. backgroundRepeat: "no-repeat",
  100. backgroundSize: "cover",
  101. display: "inline-block",
  102. verticalAlign: "middle",
  103. });
  104. $("#resetcss").find("ol").css({ listStyleType: "disc" });
  105. $("#resetcss")
  106. .find("pre")
  107. .css({ display: "block", whiteSpace: "pre-wrap" });
  108. $("#overview")
  109. .find("p")
  110. .css({
  111. margin: "0 auto 0",
  112. font: "0.7rem/1.5 'segoe'",
  113. color: "#333",
  114. letterSpacing: "0",
  115. lineHeight: "1.3rem",
  116. });
  117. },
  118. methods: {
  119. async getreportdetail() {
  120. const { Data,Ret } = await reportEnDetail({ ReportCode: this.id,ShareEmail:Number(this.$route.query.ShareEmail)||0 });
  121. if (Ret !== 200) return
  122. this.reportInfo = Data.Report;
  123. this.$route.query.viewType=="!pdf!" && (this.reportInfo.Content=this.setReportContent(this.reportInfo.Content))
  124. this.isshow = true;
  125. localStorage.setItem('waterMarkStr',this.$route.query.flag||'')
  126. const temwaterMarkStr=this.$route.query.flag||localStorage.getItem('waterMarkStr')
  127. const waterMarkStr=decodeURIComponent(Base64.decode(temwaterMarkStr))
  128. this.$nextTick(()=>{
  129. if(Data.WatermarkReport==='true'){
  130. this.setWaterMark(waterMarkStr)
  131. }
  132. this.setBlindWaterMark(waterMarkStr)
  133. })
  134. },
  135. setReportContent(str){
  136. str=str.replace(/(<iframe)( src="\S+\/chartshow)/g,(match, tag,attr)=>{
  137. return '<eta-chart class="no-wrap"'+attr
  138. })
  139. str=str.replace(/(<iframe)( src="\S+\/sheetshow)/g,(match, tag,attr)=>{
  140. return '<eta-table class="no-wrap"'+attr
  141. })
  142. return str
  143. },
  144. setWaterMark(str){
  145. const text=str||''
  146. const target=document.getElementById('resetcss')
  147. const canvas = document.createElement("canvas");
  148. const ctx = canvas.getContext("2d");
  149. ctx.font = "18px Arial";
  150. ctx.rotate((-45 * Math.PI) / 200);
  151. ctx.fillStyle='#f1f1f1'
  152. ctx.fillText(text, 30, 200);
  153. ctx.fillText(text, -40, 100);
  154. // 将canvas的内容转换为base64编码
  155. const data = canvas.toDataURL("image/png");
  156. target.style.background = "url(" + data + ") repeat";
  157. },
  158. // 设置水印
  159. setBlindWaterMark(str){
  160. const blindwatermark = new BlindWatermark({
  161. content: str||'',
  162. width: 200,
  163. height: 200,
  164. onSuccess: () => {
  165. // success callback
  166. }
  167. })
  168. blindwatermark.create()
  169. },
  170. },
  171. };
  172. </script>
  173. <style lang="scss" scoped>
  174. .wrapper {
  175. position: relative;
  176. overflow: hidden;
  177. height: 100%;
  178. #noaccess {
  179. width: 100%;
  180. height: 12rem;
  181. padding: 5rem 0.6rem 1rem;
  182. box-sizing: border-box;
  183. text-align: center;
  184. position: absolute;
  185. bottom: 0;
  186. background: url(~@/assets/img/accessbg.png) no-repeat;
  187. background-size: 100% auto;
  188. overflow: hidden;
  189. > a,
  190. button {
  191. width: 12rem;
  192. height: 2rem;
  193. background: url(~@/assets/img/newbtn600.png) no-repeat;
  194. background-size: 100% 100%;
  195. font-size: 0.48rem;
  196. color: #fff;
  197. border: none;
  198. margin-top: 1.5rem;
  199. }
  200. }
  201. }
  202. #reportdtl {
  203. background: #fff;
  204. overflow: auto;
  205. // max-width: 1200px;
  206. margin: 0 auto;
  207. font-family: 'segoe';
  208. header {
  209. padding: 0.6rem;
  210. box-sizing: border-box;
  211. text-align: left;
  212. background: #fff;
  213. p {
  214. font-size: 0.84rem;
  215. font-weight: 600;
  216. color: #000;
  217. }
  218. }
  219. #abstract {
  220. padding: 0.6rem;
  221. box-sizing: border-box;
  222. font-size: 0.7rem;
  223. line-height: 1.4rem;
  224. letter-spacing: 0;
  225. font-family: 'segoe';
  226. .abstract_cont {
  227. border-left: 0.2rem solid #007aff;
  228. padding: 0.14rem 0.4rem;
  229. box-sizing: border-box;
  230. color: #333;
  231. }
  232. }
  233. #noaccess {
  234. width: 100%;
  235. height: 12rem;
  236. padding: 5rem 0.6rem 1rem;
  237. box-sizing: border-box;
  238. text-align: center;
  239. position: relative;
  240. top: -4rem;
  241. background: url(~@/assets/img/accessbg.png) no-repeat;
  242. background-size: 100% auto;
  243. margin-bottom: -4rem;
  244. overflow: hidden;
  245. > a,
  246. button {
  247. width: 12rem;
  248. height: 2rem;
  249. background: url(~@/assets/img/newbtn600.png) no-repeat;
  250. background-size: 100% 100%;
  251. font-size: 0.48rem;
  252. color: #fff;
  253. border: none;
  254. margin-top: 1.5rem;
  255. }
  256. }
  257. #overview{
  258. padding:0.83rem;
  259. background-color: rgba(77, 130, 191, 0.1);
  260. border: 1px solid #E2E2E2;
  261. }
  262. table {
  263. border-top: 1px solid #ccc;
  264. border-left: 1px solid #ccc;
  265. border-collapse: collapse;
  266. th,
  267. td {
  268. border-right: 1px solid #ccc;
  269. border-bottom: 1px solid #ccc;
  270. padding: 0.1rem 0.2rem;
  271. box-sizing: border-box;
  272. }
  273. }
  274. #resetcss {
  275. pre {
  276. white-space: pre-wrap;
  277. }
  278. }
  279. }
  280. </style>
  281. <!-- 不禁止页面打印,不然转pdf会出现空白页 -->
  282. <style lang="scss">
  283. @media print{
  284. body{
  285. display: unset;
  286. }
  287. }
  288. </style>