TestingPreview.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <!-- 预览提测报告 -->
  3. <div class="parent-style">
  4. <div class="backStyle"> 邮件列表</div>
  5. <div class="Layout_space_between" style="margin-bottom: 10px;">
  6. <div class="div1">收件人</div>
  7. <searchTeam :value.sync="form.name" :clearable="true" :multiple="true" style="width:100%" />
  8. </div>
  9. <div class="Layout_space_between">
  10. <div class="div1">抄送</div>
  11. <searchTeam :value.sync="form.names" :clearable="true" :multiple="true" style="width:100%" />
  12. </div>
  13. <span class="backStyle"> 关联任务</span>
  14. <div v-for="(item, index) in fromCreateData.taskDetailList" :key="index" class="Layout_flex_start report-taskList">
  15. <span>{{ item.taskId }}</span>
  16. <span>{{ item.name }}</span>
  17. </div>
  18. <div class="backStyle"> 报告预览</div>
  19. <div id="repot-list">
  20. <div class="Layout_space_between" style="border-bottom: 0.5px solid #eee;margin-bottom: 15px;">
  21. <div class="report-tit">{{ fromCreateData.reportName }}</div>
  22. <div>报告人:{{ userNames }}</div>
  23. </div>
  24. <el-row>
  25. <el-col :span="12" class="Layout_space_between">
  26. <span class="parent-style">计划提测时间:{{ fromCreateData.deliverTestPlanTime }}</span>
  27. </el-col>
  28. <el-col :span="12">
  29. <span class="parent-style">实际提测时间:{{ fromCreateData.deliverTestActualTime }}</span>
  30. </el-col>
  31. </el-row>
  32. <el-row v-if="fromCreateData.deliverTestPlanTime < fromCreateData.deliverTestActualTime ">
  33. <el-col :span="24" class="Layout_space_between">
  34. <span class="parent-style">提测延期原因 : {{ fromCreateData.delayReason }}</span>
  35. </el-col>
  36. </el-row>
  37. <el-row>
  38. <el-col :span="12" class="Layout_space_between">
  39. <span class="parent-style">计划开发时间:{{ fromCreateData.devPlanTimeStart !== null ? fromCreateData.devPlanTimeStart + '至' + fromCreateData.devPlanTimeEnd : '' }}</span>
  40. </el-col>
  41. <el-col :span="12" class="Layout_space_between">
  42. <span class="parent-style">实际开发时间:{{ fromCreateData.devActualTimeStart !== null ? fromCreateData.devActualTimeStart + '至' + fromCreateData.devActualTimeEnd : '' }}</span>
  43. </el-col>
  44. </el-row>
  45. <el-row>
  46. <el-col :span="12" class="Layout_space_between">
  47. <span class="parent-style">是否跟版:{{ fromCreateData.followVersion === 2 ? '否' : '是' }} </span>
  48. </el-col>
  49. <el-col v-if="fromCreateData.followVersion === 1" :span="12" class="Layout_space_between">
  50. <span class="parent-style">跟版客户端:{{ fromCreateData.involveAppString }}</span>
  51. </el-col>
  52. </el-row>
  53. <el-row>
  54. <el-col :span="12" class="Layout_space_between">
  55. <span class="parent-style">CodeReview:{{ fromCreateData.isCodeReview === 0 ? '否' : '是' }}</span>
  56. </el-col>
  57. <el-col v-if="fromCreateData.isCodeReview === 1" :span="12" class="Layout_space_between">
  58. <div class="parent-style">执行人:
  59. <span v-for="(item, index) in fromCreateData.codeReviewExecutorObject" :key="index">
  60. {{ item.name }}
  61. <span v-if="index < fromCreateData.codeReviewExecutorObject.length - 1">,</span>
  62. </span>
  63. </div>
  64. </el-col>
  65. </el-row>
  66. <div class="backStyle">需求列表</div>
  67. <el-table
  68. :data="tableData"
  69. border
  70. size="mini"
  71. :header-cell-style="{ backgroundColor: 'rgba(241,241,241,1)', color: 'rgba(51,59,74,1)', fontSize: '14px', fontWeight: '400'}"
  72. style="width: 100%; margin-bottom: 20px;"
  73. >
  74. <el-table-column prop="name" label="需求" min-width="250">
  75. <template slot-scope="scope">
  76. <span class="didi-hover" @click="goRequired(scope.row.id)">{{ scope.row.name }}</span>
  77. </template>
  78. </el-table-column>
  79. <el-table-column prop="priorityName" label="优先级" min-width="100" />
  80. <el-table-column label="PM" min-width="100">
  81. <template slot-scope="scope">
  82. <span class="didi-hover">{{ scope.row.pmMemberInfoResponse.name }}</span>
  83. </template>
  84. </el-table-column>
  85. <el-table-column prop="referredClientTypeName" label="跟版客户端" min-width="90" />
  86. </el-table>
  87. <div v-html="fromCreateData.content" />
  88. </div>
  89. </div>
  90. </template>
  91. <script>
  92. import '@/styles/PublicStyle/index.scss'
  93. import html2canvas from 'html2canvas'
  94. import searchTeam from '@/components/select/searchTeam'
  95. import { reportdelivertestGetReportById, reportdelivertestSendmail, reportdelivertestGetRequiresByTaskIds } from '@/api/reportTemplate' // 模版添删改查
  96. export default {
  97. name: 'DailyNewsAdded',
  98. components: {
  99. searchTeam
  100. },
  101. props: {
  102. dailyId: { type: [String, Number], default: null }
  103. },
  104. data() {
  105. return {
  106. form: {}, // 发送报告content
  107. userNames: localStorage.getItem('realname'),
  108. fromCreateData: {}, // listAll
  109. tasksOptions: [], // 任务下拉选项
  110. tasksDetailList: [], // 已有任务项目
  111. taskid_arr: [], // taskIds
  112. moduleId: '', // 模块id
  113. tableData: [],
  114. daily_Id: '' // daily_Id
  115. }
  116. },
  117. watch: {
  118. dailyId: {
  119. handler(newV) {
  120. this.daily_Id = newV
  121. this.reportdelivertestGetReportById(newV)
  122. },
  123. immediate: true
  124. }
  125. },
  126. methods: {
  127. async reportdelivertestGetReportById(val) { // 获取提测报告数据
  128. const res = await reportdelivertestGetReportById(val)
  129. if (res.code === 200) {
  130. this.fromCreateData = res.data
  131. if (res.data.sendTo) {
  132. this.$set(this.form, 'name', [res.data.sendTo])
  133. }
  134. if (res.data.sendCc) {
  135. this.$set(this.form, 'names', [res.data.sendCc])
  136. }
  137. this.reportdelivertestGetRequiresByTaskIds(this.fromCreateData.taskIds)
  138. }
  139. },
  140. async reportdelivertestGetRequiresByTaskIds(val) {
  141. const res2 = await reportdelivertestGetRequiresByTaskIds({ taskIds: val })
  142. if (res2.code === 200) {
  143. this.tableData = res2.data
  144. }
  145. },
  146. goRequired(id) {
  147. this.$router.push({ name: '需求详情', query: { id: id }})
  148. },
  149. sendReport() {
  150. if (this.form.name !== undefined) {
  151. setTimeout(() => {
  152. html2canvas(document.getElementById('repot-list'), { useCORS: true }).then(canvas => {
  153. const imgData = canvas.toDataURL('image/png', 1)
  154. const sendImgData = imgData.toString().substring(imgData.indexOf(',') + 1)
  155. const postData = { 'reportId': this.daily_Id, 'imgStr': sendImgData, 'url': window.location.href, 'emailUser': this.form.name ? this.form.name.join(',') : null, 'copyTo': this.form.names ? this.form.names.join(',') : null }
  156. reportdelivertestSendmail(postData).then(res => {
  157. res.code === 200 ? this.$message.success('报告发送中,请稍后进行邮件查收!') : this.$message.error('发送测试日报失败,请联系管理员!')
  158. this.$emit('handleClose')
  159. })
  160. })
  161. }, 500)
  162. } else {
  163. this.$message({ message: '请填写邮箱', type: 'error', offset: 150 })
  164. }
  165. }
  166. }
  167. }
  168. </script>
  169. <style lang="scss" scoped>
  170. .parent-style {
  171. width: 100%;
  172. display: inline-block;
  173. font-size:14px;
  174. font-family:Microsoft Sans Serif;
  175. font-weight:400;
  176. line-height:22px;
  177. color:#666666;
  178. opacity:1;
  179. margin-bottom: 10px;
  180. .report-taskList{
  181. font-size:14px;
  182. font-family:MicrosoftYaHei;
  183. line-height:17px;
  184. color:rgba(102,102,102,1);
  185. margin-top: 10px;
  186. opacity:1;
  187. }
  188. }
  189. .div1 {
  190. width: 60px;
  191. font-size: 14px;
  192. font-family: MicrosoftYaHei;
  193. color: rgba(51, 51, 51, 1);
  194. line-height: 19px;
  195. }
  196. .backStyle {
  197. color: #333;
  198. font-size: 14px;
  199. font-weight: bold;
  200. border-radius: 4px;
  201. margin: 10px 0;
  202. }
  203. .report-tit {
  204. font-size: 20px;
  205. font-weight: bold;
  206. border-radius: 4px;
  207. margin: 15px 0;
  208. color:#409EFF;
  209. }
  210. .report-margin {
  211. margin-bottom: 20px;
  212. }
  213. </style>