pdf.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <template>
  2. <view class="page-wrappe">
  3. <view id="pdfContainer" class="pdf-container" :style="{'transform':'scale('+scale+')', 'height': containerScaledHeight + 'px'}">
  4. <!-- 封面 -->
  5. <view class="cd_box fm2 adffc" style="margin-top: 20px;height: 868px;">
  6. <img class="fm2-logo" src="https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/fm_logo.png">
  7. <img class="fm2-perill" src="https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/fm_perill.png">
  8. <view class="fm2-line"></view>
  9. <view class="fm2-p">团队发展动态评估报告(基础版)</view>
  10. <view class="fm2-texts adf">
  11. <view class="fm2-texts-pre"><span style="letter-spacing: 2.5px;">报告撰写人:</span>{{ '甜梦(中国)巧克力有限公司' }}</view>
  12. <view class="fm2-texts-pre"><span>团队结构类型:</span>{{ '团队结构类型:' }}</view>
  13. <view class="fm2-texts-pre"><span>团队职能类型:</span>{{ '团队职能类型:' }}</view>
  14. <view class="fm2-texts-pre"><span style="letter-spacing: 6px;">报告时间:</span>{{ '2025-11-25' }}</view>
  15. </view>
  16. </view>
  17. <!-- 介绍 -->
  18. <view class="cd_box">
  19. <view class="v2-top adfacjb" :style="{'background-image':'url(https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_title_bg.png)'}">
  20. <view class="vt-left">介绍<span>PERILL模型简介</span></view>
  21. <view class="vt-right">团队发展动态评估报告(基础版)</view>
  22. </view>
  23. <view class="v2-box">
  24. <img class="vb-img1" :src="'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_box_img1.png'">
  25. <img class="vb-img2" :src="'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_box_img2.png'">
  26. <view class="v2-p">PERILL团队发展动态评估源于团队教练辅导领域的先驱、管理思维与团队绩效领域的权威、全球顶尖团队教练David Clutterbuck教授及其团队通过深入研究,提炼出影响团队绩效的140多个基于实证的因素,整合而成的团队诊断和提升工具-PERILL模型。</view>
  27. <view class="v2-p" style="margin-top: 8px;">创衡国际基于10多年来在全球与200多家具有前瞻性的国际公司以及国内具有行业代表性公司的合作经验,结合CCMI的PERILL测评工具,在中国推出的团队发展动态评估系统,旨在帮助团队更全面、更有效地从六个维度评估团队的发展现状,为支持团队成为高价值团队提供全景式的客观诊断。</view>
  28. <view class="v2-p" style="margin-top: 8px;">PERILL团队发展动态评估的主体内容由<span>36</span>个关于团队的描述组成。</view>
  29. </view>
  30. <view class="v2-six">
  31. <view class="vsix-title">PERILL六大纬度</view>
  32. <view class="vsix-p">PERILL诊断提供了一个复杂的团队系统概览,它并非针对孤立的问题,也不是简单的优缺点,而是着眼于团队系统的复杂性。它 通过6个影响因素(如下所述)提出问题,以揭示团队系统各要素之间的联系,以及这些联系如何影响团队的高效运作能力。</view>
  33. <view class="vsix-boxs">
  34. <view class="vsb adfac" v-for="(item,index) in sixWd" :key="index">
  35. <img class="vsb-img" :src="item.image"/>
  36. <view class="vsb-right">
  37. <view class="vsbr-top adfac">
  38. <view class="vsbrt-type" :style="{'background':item.color}">{{ item.type }}</view>
  39. <view class="vsbrt-title" :style="{'color':item.color}">{{ item.title }}</view>
  40. </view>
  41. <view class="vsbr-desc">{{ item.desc }}</view>
  42. </view>
  43. </view>
  44. </view>
  45. </view>
  46. </view>
  47. <!-- 总体诊断分析 -->
  48. <view class="cd_box adffc">
  49. <view class="v2-top adfacjb" :style="{'background-image':'url(https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_top_title_bg2.png)'}">
  50. <view class="vt-left">总体诊断分析</view>
  51. <view class="vt-right">团队发展动态评估报告(基础版)</view>
  52. </view>
  53. <view class="v2-box" @click="downloadZtzdfxImg">
  54. <img class="vb-img1" :src="'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_box_img1.png'">
  55. <img class="vb-img2" :src="'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_box_img2.png'">
  56. <view class="v2-p2">报告的核心是PERILL诊断分析下的整体团队表现。这包括团队在PERILL模型每个关键要素上的综合得分,通过结合得分和置信指数,我们能够展示出高功能领域和低功能域。</view>
  57. <view class="v2-p2" style="margin-top: 16px;">下面的条形图上的位置标记显示了团队在各个支柱上的总分。</view>
  58. <view style="width:100%;height:200px;" class="pdfEchart">
  59. <l-echart ref="ztzdfxRef" :canvas2d="true" @finished="initZtzdfxChart"></l-echart>
  60. </view>
  61. </view>
  62. <view class="v2-data">
  63. <view class="vd-title" :style="{'background-image':'url(https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_title_bg1.png)'}">诊断结果</view>
  64. <view class="v2-p" v-html="'后端返回数据后端返回数据 后端返回数据 '"></view>
  65. </view>
  66. <view class="v2-data" style="flex: 1;margin-top: 20px;">
  67. <view class="vd-title vt2" :style="{'background-image':'url(https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+'intro'+'_title_bg2.png)'}">团队提升&教练建议</view>
  68. <view class="v2-p" v-html="'后端返回数据后端返回数据 后端返回数据 '"></view>
  69. </view>
  70. </view>
  71. <!-- 多维度 -->
  72. <template v-if="reportData&&reportData.dimensionAnalysis&&reportData.dimensionAnalysis.length">
  73. <div class="cd_box adffc" style="border: none;" v-for="(item,index) in reportData.dimensionAnalysis" :key="index">
  74. <div class="v2-top adfacjb" :style="{'background-image':'url('+'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+typeDict[item.title]+'_title_bg.png)'}">
  75. <div class="vt-left" :class="{'black':item.title==='目的与动机'}">{{ item.title }}</div>
  76. <div class="vt-right">团队发展动态评估报告(基础版)</div>
  77. </div>
  78. <div class="v2-box" :style="{'border':'1px solid '+item.bcolor}">
  79. <img class="vb-img1" :src="'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+typeDict[item.title]+'_box_img1.png'">
  80. <img class="vb-img2" :src="'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+typeDict[item.title]+'_box_img2.png'">
  81. <div class="v2-p2">{{ item.desc }}</div>
  82. <div class="v2-p2" style="margin-top: 16px;">评分总体分布</div>
  83. <div class="vb-table" :style="{'border':'1px solid '+item.bcolor}">
  84. <div class="vbt-pre adfac" v-for="i in 5" :key="item">
  85. <div class="vbtp-left adfacjc" :class="{'black':item.title==='目的与动机'}" :style="{'background':item.titlecolor}">{{ '宗旨共融,同心共识' }}</div>
  86. <div class="vbtp-right" :style="{'border':'1px solid '+item.bcolor}">
  87. <div class="vbtpr-title">{{ '团队成员能够共同阐述其共享目的,并且在团队使命上保持高度一致。' }}</div>
  88. <div class="vbtpr-jd">
  89. <div class="vj_num" :style="{'width':(4/5*100)+'%','background':item.pfztfb}"></div>
  90. <div class="vj-val" :style="{'border':'1px solid '+item.bcolor,'left':'calc('+(4/5*100)+'% - 12px)','box-shadow':'0px 2px 6px 0px '+item.bcolor}">{{ 4 }}</div>
  91. </div>
  92. </div>
  93. </div>
  94. </div>
  95. </div>
  96. <div class="v2-data" :style="{'border':'1px solid '+item.bcolor}">
  97. <div class="vd-title vt3" :class="{'black':item.title==='目的与动机'}" :style="{'background-image':'url(https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+typeDict[item.title]+'_title_bg1.png)'}">诊断结果</div>
  98. <div class="v2-p3">纬度得分</div>
  99. <div class="vd-wd adfac" :style="{'background':item.wddf}">
  100. <div class="vdwd-pre">维度加权总分:<span>{{ 34 }}</span></div>
  101. <div class="vdwd-pre vp">维度同意度总分(未加权):<span>{{ 34 }}</span></div>
  102. <div class="vdwd-pre">维度权重:<span>{{ 34 }}</span></div>
  103. </div>
  104. <div class="v2-p3" style="margin-top: 16px;">团队维度诊断结果</div>
  105. <div class="v2-p" style="margin-top: 8px;" v-html="'后端返回数据 后端返回数据 后端返回数据 后端返回数据 后端返回数据 后端返回数据 '"></div>
  106. </div>
  107. <div class="v2-data" :style="{'border':'1px solid '+item.bcolor}" style="flex: 1;margin-top: 15px;">
  108. <div class="vd-title vt3" :class="{'black':item.title==='目的与动机'}" :style="{'background-image':'url(https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/'+typeDict[item.title]+'_title_bg1.png)'}">诊断建议</div>
  109. <div class="v2-p" v-html="'后端返回数据 后端返回数据 后端返回数据 后端返回数据 后端返回数据 后端返回数据 '"></div>
  110. </div>
  111. </div>
  112. </template>
  113. </view>
  114. </view>
  115. </template>
  116. <script name="">
  117. import { BaseApi } from '@/http/baseApi.js';
  118. import * as echarts from '@/components/lime-echart/static/echarts.min.js'
  119. import lEchart from '@/components/lime-echart/components/l-echart/l-echart.vue'
  120. export default {
  121. name: 'ZtzdfxChart',
  122. // props: {
  123. // reportData: {
  124. // type: Object,
  125. // default: null
  126. // }
  127. // },
  128. components:{ lEchart },
  129. data() {
  130. return {
  131. reportData: null,
  132. isChartReady: false,
  133. scale:1,
  134. originalContainerHeight: 0,
  135. containerScaledHeight: 'auto',
  136. typeDict: {
  137. '目的与动机': 'zzdj',
  138. '外部流程及系统与架构': 'wbjg',
  139. '人际关系': 'rjgx',
  140. '内部流程及系统与架构': 'nbjg',
  141. '学习': 'xx',
  142. '领导力': 'ldl'
  143. },
  144. sixWd: [
  145. {
  146. image: 'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_img_p.png',
  147. type: 'P',
  148. title: '宗旨与动机',
  149. desc: '指团队共享的目的和存在的意义, 包含对共同的愿景,目标和优先级的清晰度。',
  150. color: '#833479'
  151. },
  152. {
  153. image: 'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_img_e.png',
  154. type: 'E',
  155. title: '外部流程、系统与结构',
  156. desc: '指团队与其外部利益相关者 - 客户,供应商,股东,组织内的其他团队等的互动关联。',
  157. color: '#199C9C'
  158. },
  159. {
  160. image: 'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_img_r.png',
  161. type: 'R',
  162. title: '人际关系',
  163. desc: '指团队成员如何共同工作–他们是否相互尊重对方的能力,足够心理安全以能够坦诚相对,真正关心彼此的幸福感。',
  164. color: '#FEDA60'
  165. },
  166. {
  167. image: 'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_img_i.png',
  168. type: 'I',
  169. title: '内部流程、系统与结构',
  170. desc: '指团队如何管理工作流程,互相支持和高质量的沟通和决策(包括工作任务和团队感情)。',
  171. color: '#7AABED'
  172. },
  173. {
  174. image: 'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_img_l.png',
  175. type: 'L',
  176. title: '学习',
  177. desc: '指团队应对多变的环境和保持持续的进步和成长的能力。团队如何提高绩效(如何完成今天的任务)、能力(如何提高技能和资源以处理明天的任务)和容量(长期的愿景, 如何用更少的资源做更多的事情)',
  178. color: '#8093A3'
  179. },
  180. {
  181. image: 'https://gitee.com/hw_0302/chuang-heng-wechat-images/raw/master/versionTwo/intro_img_l2.png',
  182. type: 'L',
  183. title: '领导力',
  184. desc: '指团队认为需要怎样的领导行为能够让他们,作为个人或者团队做到最好。团队可以和他们的领导者讨论他们的责任,以帮助领导者成为他们需要的领导者。',
  185. color: '#0096D8'
  186. }
  187. ],
  188. };
  189. },
  190. mounted() {
  191. // reportData.value = props.reportData;
  192. this.reportData = {
  193. dimensionAnalysis: [
  194. {title:'目的与动机',bcolor:'#FFE796',titlecolor:'#FFE796',wddf:'linear-gradient( 90deg, rgba(255,215,80,0.34) 0%, rgba(251,225,130,0.09) 100%)',
  195. pfztfb:'linear-gradient( 90deg, #FEDA60 0%, #FBE182 100%)',
  196. desc:`「宗旨与动机」维度,我们旨在探究是否存在一个清晰的存在理由和明确的方向,能够激发团队成员的动力并吸引他们的想象力,以及个人与集体的身份认同是否围绕共同的目标,并达成一致。`},
  197. {title:'外部流程及系统与架构',bcolor:'#E4D2E1',titlecolor:'#BA8EB4',wddf:'linear-gradient( 90deg, #F5EFF5 0%, #FAF2F9 100%)',
  198. pfztfb:'linear-gradient( 90deg, #833479 0%, #9F6196 100%)',
  199. desc:`「外部流程、系统与结构」维度,我们旨在探究团队如何与各种利益相关者互动,他们与团队的利益相关方各自如何寻求了解对方,以及现有系统和流程的有效性,以帮助管理不同的期望和需求。`},
  200. {title:'人际关系',bcolor:'#B3DEDE',titlecolor:'#66BDBD',wddf:'linear-gradient( 90deg, #E8F5F5 0%, #F0F8F8 100%)',
  201. pfztfb:'linear-gradient( 90deg, #189B9B 0%, #64BBBB 100%)',
  202. desc:`「人际关系」维度,我们旨在探究团队成员如何相互交流、信任程度、尊重和关心的程度,以及团队成员之间的关系如何促进(或破坏)协作。`},
  203. {title:'内部流程及系统与架构',bcolor:'#C7DCF8',titlecolor:'#95BDF1',wddf:'linear-gradient( 90deg, #E3ECF8 0%, #F2F5F9 100%)',
  204. pfztfb:'linear-gradient( 90deg, #7AABED 0%, #AFCDF5 100%)',
  205. desc:`「内部流程、系统与结构」维度,我们旨在探究团队如何在平衡责任与自主权方面进行协作。我们关注团队的敏捷程度、沟通方式以及决策过程的有效性。`},
  206. {title:'学习',bcolor:'#E6EAED',titlecolor:'#8093A3',wddf:'linear-gradient( 90deg, #EDF0F2 0%, #F2F4F6 100%)',
  207. pfztfb:'linear-gradient( 90deg, #4D697E 0%, #8093A3 100%)',
  208. desc:`「学习」维度,我们旨在探究团队如何提高其绩效、技能和资源以应对当前和未来的任务。我们还希望了解团队如何管理能力和提高效率。`},
  209. {title:'领导力',bcolor:'#D4EDF8',titlecolor:'#3BB6D9',wddf:'linear-gradient( 90deg, #E6F5FB 0%, #F3FCFB 100%)',
  210. pfztfb:'linear-gradient( 90deg, #0096D8 0%, #5CC9DA 100%)',
  211. desc:`「领导力」维度,我们旨在探究领导素质和行为如何对团队功能和其他因素产生调节影响,以及这是积极的还是消极的。`}
  212. ]
  213. };
  214. this.calculateScaleAndPosition();
  215. uni.onWindowResize(() => {
  216. this.calculateScaleAndPosition();
  217. });
  218. },
  219. methods: {
  220. calculateScaleAndPosition() {
  221. uni.getSystemInfo({
  222. success: (res) => {
  223. const screenWidth = res.windowWidth; // 手机屏幕的宽度
  224. const pcContentWidth = 630; // PC端内容的原始宽度
  225. this.scale = screenWidth / pcContentWidth;
  226. this.$nextTick(() => {
  227. if (this.$refs.ztzdfxRef) {
  228. this.initZtzdfxChart();
  229. }
  230. });
  231. }
  232. });
  233. },
  234. calculatePdfContainerHeight() {
  235. uni.createSelectorQuery().in(this).select('#pdfContainer').boundingClientRect(rect => {
  236. if (rect) {
  237. this.originalContainerHeight = rect.height;
  238. this.containerScaledHeight = this.originalContainerHeight * this.scale;
  239. console.log('原始高度:', this.originalContainerHeight, '缩放比例:', this.scale, '缩放后高度:', this.containerScaledHeight);
  240. }
  241. }).exec();
  242. },
  243. downloadZtzdfxImg(){
  244. if (!this.isChartReady) return console.log('图表尚未准备好');
  245. const chartRef = this.$refs.ztzdfxRef;
  246. if (!chartRef) return console.log('无法找到图表组件');
  247. chartRef.canvasToTempFilePath({
  248. success: async (res) => {
  249. const imgUrl = await this.uploadFilePromise(res.tempFilePath);
  250. console.log(imgUrl,'imgUrl');
  251. },
  252. fail: (err) => {
  253. console.log('生成图片失败:', err);
  254. }
  255. });
  256. },
  257. uploadFilePromise(url) {
  258. return new Promise((resolve, reject) => {
  259. let a = uni.uploadFile({
  260. url: BaseApi+'/uploadFile',
  261. filePath: url,
  262. name: 'file',
  263. success: (res) => {
  264. setTimeout(() => {
  265. let data = JSON.parse(res.data)
  266. if(data&&data.code===0){
  267. resolve(data.data);
  268. }else this.$showToast(data?.msg)
  269. }, 1000);
  270. },
  271. fail: err =>{
  272. resolve('');
  273. }
  274. });
  275. });
  276. },
  277. async initZtzdfxChart() {
  278. let xdata = ['目的与动机', '外部流程及系统与架构', '关系', '内部流程及系统与架构', '学习', '领导力'].reverse();
  279. let yvalue = [40, 25, 30, 35, 33, 47].reverse();
  280. let ycolor = [['#FEDA60', '#FBE182'], ['#833479', '#9F6196'], ['#189B9B', '#64BBBB'], ['#7AABED', '#AFCDF5'], ['#4D697E', '#8093A3'], ['#0096D8', '#5CC9DA']].reverse();
  281. let yData = yvalue.map((v, i) => {
  282. return {
  283. value: v,
  284. itemStyle: {
  285. color: new echarts.graphic.LinearGradient(
  286. 0, 0, 1, 0,
  287. [
  288. { offset: 0, color: ycolor[i][0] },
  289. { offset: 1, color: ycolor[i][1] }
  290. ]
  291. ),
  292. borderRadius: [0, 4, 4, 0]
  293. }
  294. };
  295. });
  296. const chart = await this.$refs.ztzdfxRef.init(echarts);
  297. let option = {
  298. grid: {
  299. left: '2%',
  300. right: '10%',
  301. bottom: '0%',
  302. top: '10%',
  303. containLabel: true
  304. },
  305. xAxis: {
  306. type: 'value',
  307. boundaryGap: [0, 0.01],
  308. axisLabel: {
  309. fontSize: 10
  310. }
  311. },
  312. yAxis: {
  313. type: 'category',
  314. data: xdata,
  315. axisLabel: {
  316. color: '#193D59',
  317. fontSize: 10
  318. }
  319. },
  320. series: [
  321. {
  322. type: 'bar',
  323. barWidth: '8px',
  324. data: yData
  325. }
  326. ]
  327. };
  328. chart.setOption(option);
  329. this.isChartReady = true;
  330. this.$nextTick(() => {
  331. this.calculatePdfContainerHeight();
  332. });
  333. },
  334. }
  335. };
  336. </script>
  337. <style scoped lang="scss">
  338. .page-wrappe{
  339. width: 100%;
  340. background: #FFFFFF;
  341. overflow-x: hidden;
  342. overflow-y: auto;
  343. .pdf-container{
  344. width: 630px;
  345. padding: 0 20rpx;
  346. box-sizing: border-box;
  347. transform-origin: top left;
  348. }
  349. }
  350. @import '../static/pdf.scss';
  351. </style>