index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. <template>
  2. <div class="app-container">
  3. <!-- 搜索栏 -->
  4. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  5. <el-form-item label="学员" prop="staffId">
  6. <el-select
  7. v-model="queryParams.successorId"
  8. placeholder="请选择学员"
  9. @change="someMethod()"
  10. >
  11. <el-option
  12. v-for="successor in this.successorOptions"
  13. :key="successor.key"
  14. :label="successor.value"
  15. :value="successor.key"
  16. ></el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="年" prop="feedbackYear">
  20. <el-date-picker
  21. v-model="queryParams.feedbackYear"
  22. placeholder="请选择年"
  23. clearable
  24. type="year"
  25. size="small"
  26. @keyup.enter.native="handleQuery"
  27. />
  28. </el-form-item>
  29. <el-form-item label="季度" prop="feedbackSeason">
  30. <el-select
  31. v-model="queryParams.feedbackSeason"
  32. placeholder="请选择季度"
  33. clearable
  34. size="small"
  35. @keyup.enter.native="handleQuery"
  36. >
  37. <el-option
  38. label="第一季度"
  39. value="1">
  40. </el-option>
  41. <el-option
  42. label="第二季度"
  43. value="2">
  44. </el-option>
  45. <el-option
  46. label="第三季度"
  47. value="3">
  48. </el-option>
  49. <el-option
  50. label="第四季度"
  51. value="4">
  52. </el-option>
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item>
  56. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  57. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  58. </el-form-item>
  59. </el-form>
  60. <!-- 标签页:后期改成每个导师生成独立标签页 -->
  61. <el-tabs type="border-card" id="border-card">
  62. <el-tab-pane label="居海波">
  63. <el-table
  64. :span-method="spanMethod"
  65. v-loading="loading"
  66. :data="dataList"
  67. @selection-change="handleSelectionChange"
  68. ref="feedbackListSeasonalTable"
  69. border
  70. :cell-style="tableCellStyle"
  71. >
  72. <el-table-column label="时间" align="center" :show-overflow-tooltip="true">
  73. <template slot-scope="scope">
  74. <span>{{scope.row.feedbackYear}}年{{scope.row.feedbackMonth}}月</span>
  75. </template>
  76. </el-table-column>
  77. <el-table-column label="培养内容" align="center" :show-overflow-tooltip="true" prop="plantName" width="400"/>
  78. <el-table-column label="开始日期" align="center" :show-overflow-tooltip="true" prop="startDate"/>
  79. <el-table-column label="结束日期" align="center" :show-overflow-tooltip="true" prop="endDate"/>
  80. <el-table-column label="实际完成日期" align="center" :show-overflow-tooltip="true" prop="dateOfCompletion"/>
  81. <el-table-column label="学习状态" align="center" :show-overflow-tooltip="true" prop="studyState"/>
  82. <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
  83. <template slot-scope="scope">
  84. <el-button
  85. size="mini"
  86. type="text"
  87. icon="el-icon-chat-dot-round"
  88. v-hasPermi="['spec:plan:edit']"
  89. @click="handleFeedback(scope.row)"
  90. >详情</el-button>
  91. </template>
  92. </el-table-column>
  93. </el-table>
  94. <h3>汇报展示PPT</h3>
  95. <div>
  96. <el-upload
  97. ref="doc"
  98. :headers="doc.headers"
  99. class="upload-demo"
  100. action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
  101. :disabled="doc.isUploading"
  102. :on-progress="handleFileDocProgress"
  103. :on-success="handleFileDocSuccess"
  104. :auto-upload="true"
  105. multiple
  106. :limit="3">
  107. <el-button size="small" type="primary" style="margin-bottom:10px;">点击上传汇报展示PPT</el-button>
  108. </el-upload>
  109. <el-table :data="doc.commonfileList" border style="width:50%;">
  110. <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
  111. <template slot-scope="scope">
  112. <a class="link-type" @click="handleDownload(scope.row)">
  113. <span>{{ scope.row.fileName }}</span>
  114. </a>
  115. </template>
  116. </el-table-column>
  117. <!-- <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80" />
  118. <el-table-column :label="$t('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/> -->
  119. <el-table-column :label="$t('操作')" align="center" width="120" class-name="small-padding fixed-width">
  120. <template slot-scope="scope">
  121. <el-button
  122. v-if="scope.row.fileName.endsWith('pdf')"
  123. size="mini"
  124. type="text"
  125. icon="el-icon-view"
  126. @click="handleSee(scope.row)"
  127. >{{ $t('预览') }}</el-button>
  128. <el-button
  129. size="mini"
  130. type="text"
  131. icon="el-icon-download"
  132. @click="handleDownload(scope.row)"
  133. >{{ $t('下载') }}</el-button>
  134. <el-button
  135. size="mini"
  136. type="text"
  137. icon="el-icon-delete"
  138. @click="handleDeleteDoc(scope.row)"
  139. >{{ $t('删除') }}</el-button>
  140. </template>
  141. </el-table-column>
  142. </el-table>
  143. </div>
  144. <div style="display:inline-block;width:40%;">
  145. <h3 style="margin-bottom:0px;">学员表现</h3>
  146. <div class="question">
  147. 1、学员的现场表现、语言表达、汇报逻辑如何?
  148. </div>
  149. <div class="answer">
  150. <el-radio-group v-model="radio1" size="small">
  151. <el-radio label="1">优秀</el-radio>
  152. <el-radio label="2">良好</el-radio>
  153. <el-radio label="3">一般</el-radio>
  154. <el-radio label="4">合格</el-radio>
  155. </el-radio-group>
  156. </div>
  157. <h3 style="margin-bottom:0px;">汇报材料及内容</h3>
  158. <div class="question">
  159. 2、汇报材料准备是否充足,汇报材料是否紧贴课题内容?
  160. </div>
  161. <div class="answer">
  162. <el-radio-group v-model="radio2" size="small">
  163. <el-radio label="1">优秀</el-radio>
  164. <el-radio label="2">良好</el-radio>
  165. <el-radio label="3">一般</el-radio>
  166. <el-radio label="4">合格</el-radio>
  167. </el-radio-group>
  168. </div>
  169. <div class="question">
  170. 3、学员汇报内容中是否存在明显的不足点?
  171. </div>
  172. <div class="answer">
  173. <el-radio-group v-model="radio3" size="small">
  174. <el-radio label="1">内容出色</el-radio>
  175. <el-radio label="2">内容完善</el-radio>
  176. <el-radio label="3">基本完善</el-radio>
  177. <el-radio label="4">合格</el-radio>
  178. </el-radio-group>
  179. </div>
  180. <div class="question">
  181. 4、学员汇报内容是否符合学习材料(SOP或者程序)的要求?
  182. </div>
  183. <div class="answer">
  184. <el-radio-group v-model="radio4" size="small">
  185. <el-radio label="1">完全符合</el-radio>
  186. <el-radio label="2">基本符合</el-radio>
  187. <el-radio label="3">一般</el-radio>
  188. <el-radio label="4">合格</el-radio>
  189. </el-radio-group>
  190. </div>
  191. <div class="question">
  192. 5、学员对本季度的学习过程、学习目标及学习结果的阐述是否具体、完整、正确?
  193. </div>
  194. <div class="answer">
  195. <el-radio-group v-model="radio5" size="small">
  196. <el-radio label="1">完整流畅</el-radio>
  197. <el-radio label="2">阐述清晰</el-radio>
  198. <el-radio label="3">一般</el-radio>
  199. <el-radio label="4">合格</el-radio>
  200. </el-radio-group>
  201. </div>
  202. </div>
  203. <div style="display:inline-block;width:40%;">
  204. <div class="question">
  205. 6、学员的汇报内容是否具有一定的意义,与学员的现阶段表现是否一致?
  206. </div>
  207. <div class="answer">
  208. <el-radio-group v-model="radio6" size="small">
  209. <el-radio label="1">内容积极,表现高度一致</el-radio>
  210. <el-radio label="2">内容充分,表现良好</el-radio>
  211. <el-radio label="3">一般</el-radio>
  212. <el-radio label="4">合格</el-radio>
  213. </el-radio-group>
  214. </div>
  215. <div class="question">
  216. 7、学员汇报内容是否对装置后期的管理或者生产起到一定的启发作用?
  217. </div>
  218. <div class="answer">
  219. <el-radio-group v-model="radio7" size="small">
  220. <el-radio label="1">优秀</el-radio>
  221. <el-radio label="2">良好</el-radio>
  222. <el-radio label="3">一般</el-radio>
  223. <el-radio label="4">合格</el-radio>
  224. </el-radio-group>
  225. </div>
  226. <div class="question">
  227. 8、学员在实际工作中是否运用到培训所学内容?
  228. </div>
  229. <div class="answer">
  230. <el-radio-group v-model="radio8" size="small">
  231. <el-radio label="1">灵活运用</el-radio>
  232. <el-radio label="2">基本运用</el-radio>
  233. <el-radio label="3">初步尝试</el-radio>
  234. <el-radio label="4">合格</el-radio>
  235. </el-radio-group>
  236. </div>
  237. <div class="question">
  238. 9、学员的汇报内容对于装置及公司的人才培养计划是否能起到帮助?
  239. </div>
  240. <div class="answer">
  241. <el-radio-group v-model="radio9" size="small">
  242. <el-radio label="1">大有裨益</el-radio>
  243. <el-radio label="2">推进作用</el-radio>
  244. <el-radio label="3">参考意义</el-radio>
  245. <el-radio label="4">合格</el-radio>
  246. </el-radio-group>
  247. </div>
  248. <div class="question">
  249. 10、学员本次汇报相较于上次是否有提升?
  250. </div>
  251. <div class="answer">
  252. <el-radio-group v-model="radio10" size="small">
  253. <el-radio label="1">进步明显</el-radio>
  254. <el-radio label="2">略有进步</el-radio>
  255. <el-radio label="3">一般</el-radio>
  256. <el-radio label="4">合格</el-radio>
  257. </el-radio-group>
  258. </div>
  259. </div>
  260. <h3 style="margin-top:0px;">导师反馈</h3>
  261. <div>
  262. <el-form>
  263. <el-form-item>
  264. <editor :min-height="300"/>
  265. </el-form-item>
  266. </el-form>
  267. </div>
  268. <div style="text-align:center; margin:30px 0px;">
  269. <el-button size="medium" type="success">保存</el-button>
  270. </div>
  271. </el-tab-pane>
  272. <el-tab-pane label="朱晶">
  273. </el-tab-pane>
  274. <el-tab-pane label="张磊">
  275. </el-tab-pane>
  276. </el-tabs>
  277. <!-- 反馈对话框 -->
  278. <el-dialog v-dialogDrag :title="feedbackDialog.title" :visible.sync="feedbackDialog.open" width="800px" append-to-body>
  279. <div style="width:700px; margin:0px auto;">
  280. <h3 style="margin-bottom:20px;text-align:center;">学员心得</h3>
  281. <el-table :data="tableData" border style="width: 100%">
  282. <el-table-column prop="id" label="编号" width="50"></el-table-column>
  283. <el-table-column prop="question" label="问题" width="250"></el-table-column>
  284. <el-table-column prop="answer" label="答案"></el-table-column>
  285. </el-table>
  286. <h3 style="margin-bottom:20px;text-align:center;">学习成果</h3>
  287. <el-table :data="doc.commonfileList" border>
  288. <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
  289. <template slot-scope="scope">
  290. <a class="link-type" @click="handleDownload(scope.row)">
  291. <span>{{ scope.row.fileName }}</span>
  292. </a>
  293. </template>
  294. </el-table-column>
  295. <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80" />
  296. <el-table-column :label="$t('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
  297. <el-table-column :label="$t('操作')" align="center" width="120" class-name="small-padding fixed-width">
  298. <template slot-scope="scope">
  299. <el-button
  300. v-if="scope.row.fileName.endsWith('pdf')"
  301. size="mini"
  302. type="text"
  303. icon="el-icon-view"
  304. @click="handleSee(scope.row)"
  305. >{{ $t('预览') }}</el-button>
  306. <el-button
  307. size="mini"
  308. type="text"
  309. icon="el-icon-download"
  310. @click="handleDownload(scope.row)"
  311. >{{ $t('下载') }}</el-button>
  312. <el-button
  313. size="mini"
  314. type="text"
  315. icon="el-icon-delete"
  316. @click="handleDeleteDoc(scope.row)"
  317. >{{ $t('删除') }}</el-button>
  318. </template>
  319. </el-table-column>
  320. </el-table>
  321. <h3 style="margin-top:30px;margin-bottom:20px;text-align:center;">导师反馈</h3>
  322. <el-form>
  323. <el-form-item>
  324. <editor :min-height="192" v-model="mentorFeedback"/>
  325. <!-- <p v-html="mentorFeedback" /> -->
  326. </el-form-item>
  327. </el-form>
  328. <div style="text-align:center;">
  329. <el-button @click="handleReject()">{{ $t('确 定') }}</el-button>
  330. </div>
  331. </div>
  332. </el-dialog>
  333. </div>
  334. </template>
  335. <script>
  336. import {listSuccessorsByMentorId} from "@/api/training/spec/plan";
  337. import { listFeedback } from "@/api/training/spec/feedback";
  338. import { getToken } from "@/utils/auth";
  339. import Treeselect from "@riophae/vue-treeselect";
  340. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  341. import Editor from '@/components/Editor';
  342. export default {
  343. name: "SeasonalFeedback",
  344. components: { Treeselect, Editor },
  345. data() {
  346. return {
  347. successorOptions: [],
  348. queryObject: {
  349. mentorStaffId: ""
  350. },
  351. dataList: [],
  352. tableData: [],
  353. // 导师反馈内容
  354. mentorFeedback: "<p>此处稍有不足,请重新学习<br/><img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIkAAAAjCAYAAACgoylBAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAUcSURBVHhe7VpBixxFFO5f5JznLioJcQ+2oEkuanYirCYq2rjJogEJUYlDENnJTfRg/sDOCIqgKwmKScDticRJrh4CCrkYkKDP+qq6el5VV3f1jN0zk7E++EhPvXqvq977+lXPbCJqGB/f+oMupr/nPPTiq7Q9/NEYswmfAkY9iqJIsEejbEhhRD0x3u1Pss8aajzqZbMnfepGXVLTYNPXwIT63YjUVOWn3YBRT8Tp9sUsARmHrcH4DF9+XXIP7EXHc0KtwdiT3D+PXbY3TGW+hfXxvak1Va+liAWI5BXa3vvBGLPpFEmGSb+rxKJ3WppwV5Gyz7ngTMrEuuLxsboimfUeHE67LeSSvQmUisS3t5poXCSf371vCODEpU/p2eQ9+uDmb8Y4J3yqwZ6I0k16RFKWGF8iZxFJafLttVlw+nIhrJlIrt57YAjgw5/v0ealz+jIy2/QxlZCz525YNhB+BjARqc9UoAnCde8hY6oLw1VibR9xEiPF7qiJcukT+OqzuYQSSEOv4f24+sTEAVTxVW+eaEBo5iwl+0NU0tEUliTtbeaaFwkfz78u3DkVBFz4WMjP2Yy8uSrRGgbT0h5Ik0fKx4KktuET9982vhauqLwzk4CVN0DMO4jaC5CFnRqZ3GlbR6RCBhrKu6tDhoXCTC5/xd9lPqFgjmYG7BArMJxo4HiV3UU2IJA2gY6jt2RrGOtBloTCfDg4T/yfQMvphAFiGuMwRawAFhH4KwCAVoVScB6IIgkwIsgkgAvovF4TIGBVQwiCfQyiCTQyyCSQC9bFcmNg1t05afbdPHahM59f0cS1xiDzeUTuHpsTSRf3viF3t2f0Nn9O07Chjku32UzHSbUiTqUDFOnfRlM0yElHfWD2DPn3lro+loRCYq/s3/XKQ5OzCkTSpoOKGa/FMaDxRXsv4jEXncUD5zzZuUw6eSxFi3ixkVy/WBc2UFsYi58eAydaC0M9RTFNEgXJxRN/QTXEWk6iAuCxlgnGRrz5uEgjhqJMw8bFwneN7gIznz3Kx17/zI9+dIpOnzyTXr69I5hB+HDY8gnpZPQcAmisFlXJLawm+ZaiQQvplwAxy5cpo3Xdujtb8bGOCd8eAxfwu2WzpPnsqn2PO1E/PNUBJmfEOfeHs78mHYPzFjRY5u0KeYa90P3gE/2b5Ww7bVFfE3SJo6QRHUjUN8HAuE+u9n6TF9tz2I0+JA1LhL7qHn8+EnauvK1MWYTPnYc3bp5IuW4TmZ2HvMnXSfLfuLqiMQomFNEmc0SAwoo7+0RiWttao/6PlmhS947eCcx16f88vXp/TxaIunR1hdfGWM2XSLRlC9sPHm5eEwigWWFqiMS3rUqRcJEqq6zeT6ROOw8No87tdUQiSuuZy2zsvXj5vnzn9CRU2dnOm5s8qelKgFltiZFAkK4KJjxjcMqss1ykXDB/U9EYr+4bn97m46e36UnXtiip06cpo3X3zHsoPPFlX115AnkgtH2QawLatrwOUGHkUmdJlx1p/lFIu3i21bMigiquOYYCia7XLY2XWht08Xke5S2uiIp7Fmtd6VF0sRXYDA/ZjIWi1jHphJpx+sIUdXtJIYvSzyK5iqELHx+f8GC2JmN3WNekUw/65jCZ9VfXMEmfkxbdfKirRpX/rjRRPGrOgpsj6pA7Cd5mVQdx+5IzQq4NZGA6/gHPnnMiCLw42nZNI+b5jtcqyIJXA8GkQR6GUQS6GX43/IBXgSRBHgRRBLgAdG/w/eQqkOct4wAAAAASUVORK5CYII='></p>",
  355. // 反馈对话框参数
  356. feedbackDialog: {
  357. id: 0,
  358. // 是否显示弹出层(报告附件)
  359. open: false,
  360. // 弹出层标题(报告附件)
  361. title: ""
  362. },
  363. // 问卷单选框
  364. radio1: '',
  365. radio2: '',
  366. radio3: '',
  367. radio4: '',
  368. radio5: '',
  369. radio6: '',
  370. radio7: '',
  371. radio8: '',
  372. radio9: '',
  373. radio10: '',
  374. // 报告附件参数
  375. doc: {
  376. file: "",
  377. // 是否显示弹出层(报告附件)
  378. open: false,
  379. // 弹出层标题(报告附件)
  380. title: "",
  381. // 是否禁用上传
  382. isUploading: false,
  383. // 是否更新已经存在的用户数据
  384. updateSupport: 0,
  385. // 报告附件上传位置编号
  386. ids: 0,
  387. // 设置上传的请求头部
  388. headers: { Authorization: "Bearer " + getToken() },
  389. // 上传的地址
  390. url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
  391. commonfileList: null,
  392. queryParams: {
  393. pId: null,
  394. pType: 'plan'
  395. },
  396. pType: 'plan',
  397. pId: null
  398. },
  399. // 标签页选中项
  400. activeName: 'first',
  401. // 遮罩层
  402. loading: true,
  403. // 选中数组
  404. ids: [],
  405. // 非单个禁用
  406. single: true,
  407. // 非多个禁用
  408. multiple: true,
  409. // 显示搜索条件
  410. showSearch: true,
  411. // 总条数
  412. total: 0,
  413. // 专项培训反馈表格数据
  414. feedbackList: [],
  415. // 弹出层标题
  416. title: "",
  417. // 部门树选项
  418. deptOptions: undefined,
  419. clientHeight:300,
  420. // 是否显示弹出层
  421. open: false,
  422. // 用户导入参数
  423. upload: {
  424. // 是否显示弹出层(用户导入)
  425. open: false,
  426. // 弹出层标题(用户导入)
  427. title: "",
  428. // 是否禁用上传
  429. isUploading: false,
  430. // 是否更新已经存在的用户数据
  431. updateSupport: 0,
  432. // 设置上传的请求头部
  433. headers: { Authorization: "Bearer " + getToken() },
  434. // 上传的地址
  435. url: process.env.VUE_APP_BASE_API + "/spec/feedback/importData"
  436. },
  437. // 查询参数
  438. queryParams: {
  439. pageNum: 1,
  440. pageSize: 100,
  441. feedbackType: null,
  442. mentorId: null,
  443. successorId: null,
  444. successorName: null,
  445. parentId: null,
  446. planId: null,
  447. feedbackYear: null,
  448. feedbackSeason: null,
  449. feedbackMonth: null,
  450. successorFeedback: null,
  451. mentorFeedback: null,
  452. feedbackScore: null,
  453. feedbackStatus: null,
  454. meetingDate: null
  455. },
  456. // 表单参数
  457. form: {},
  458. // 表单校验
  459. rules: {
  460. }
  461. };
  462. },
  463. watch: {
  464. },
  465. created() {
  466. //设置表格高度对应屏幕高度
  467. this.$nextTick(() => {
  468. this.clientHeight = document.body.clientHeight -250
  469. })
  470. // 获取学员下拉列表
  471. this.getSuccessorOptions();
  472. // 获取当前日期
  473. let date = new Date();
  474. // 搜索条件默认为当年、当季度
  475. this.queryParams.feedbackYear = date.getFullYear().toString();
  476. this.queryParams.feedbackSeason = ( ( date.getMonth() + 2 ) / 3 ).toString();
  477. // 获取计划列表
  478. this.getList();
  479. },
  480. methods: {
  481. /** 查询学员下拉列表 */
  482. getSuccessorOptions() {
  483. listSuccessorsByMentorId(this.queryObject).then(response => {
  484. let successorList = response.data;
  485. for (let i = 0; i < successorList.length; i++) {
  486. if (i == 0) {
  487. // 默认选中列表中第一个学员
  488. this.queryParams.successorId = successorList[i].staffId;
  489. }
  490. let successor = {};
  491. successor.key = successorList[i].staffId;
  492. successor.value = successorList[i].staffName;
  493. this.successorOptions.push(successor);
  494. }
  495. });
  496. },
  497. /** 反馈处理 */
  498. handleFeedback(row) {
  499. this.feedbackDialog.title = "李滕 " + row.plantName + " " + this.$t('学习情况');
  500. this.feedbackDialog.open = true;
  501. },
  502. /** 合并单元格 */
  503. spanMethod({ row, column, rowIndex, columnIndex }) {
  504. if (columnIndex === 0) {
  505. if (row.isFirstLine == 1) {
  506. return {
  507. rowspan: 3,
  508. colspan: 1
  509. };
  510. } else {
  511. return {
  512. rowspan: 0,
  513. colspan: 0
  514. };
  515. }
  516. }
  517. },
  518. /** 单元格样式 */
  519. tableCellStyle (row, column, rowIndex, columnIndex) {
  520. if (row.column.label === "实际完成日期" && row.row.dateOfCompletion > row.row.endDate) {
  521. return "background: #FFEEEE"
  522. }
  523. },
  524. /** 报告附件按钮操作 */
  525. handleDoc(row) {
  526. this.doc.id = row.id;
  527. this.doc.title = row.plantName + this.$t('附件');
  528. this.doc.open = true;
  529. this.doc.queryParams.pId = row.id
  530. this.doc.pId = row.id
  531. this.getFileList()
  532. this.$nextTick(() => {
  533. this.$refs.doc.clearFiles()
  534. })
  535. },
  536. getFileList (){
  537. allFileList(this.doc.queryParams).then(response => {
  538. this.doc.commonfileList = response;
  539. });
  540. },
  541. /** 附件上传中处理 */
  542. handleFileDocProgress(event, file, fileList) {
  543. this.doc.file = file;
  544. this.doc.isUploading = true;
  545. },
  546. /** 附件上传成功处理 */
  547. handleFileDocSuccess(response, file, fileList) {
  548. this.doc.isUploading = false;
  549. this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
  550. this.getFileList()
  551. },
  552. /** 查询专项培训反馈列表 */
  553. getList() {
  554. this.loading = true;
  555. listFeedback(this.queryParams).then(response => {
  556. this.feedbackList = response.rows;
  557. this.total = response.total;
  558. this.loading = false;
  559. });
  560. },
  561. // 取消按钮
  562. cancel() {
  563. this.open = false;
  564. this.reset();
  565. },
  566. // 表单重置
  567. reset() {
  568. this.form = {
  569. id: null,
  570. feedbackType: null,
  571. mentorId: null,
  572. successorId: null,
  573. successorName: null,
  574. parentId: null,
  575. planId: null,
  576. feedbackYear: null,
  577. feedbackSeason: null,
  578. feedbackMonth: null,
  579. successorFeedback: null,
  580. mentorFeedback: null,
  581. feedbackScore: null,
  582. feedbackStatus: 0,
  583. meetingDate: null
  584. };
  585. this.resetForm("form");
  586. },
  587. /** 搜索按钮操作 */
  588. handleQuery() {
  589. this.queryParams.pageNum = 1;
  590. this.getList();
  591. },
  592. /** 重置按钮操作 */
  593. resetQuery() {
  594. this.resetForm("queryForm");
  595. this.handleQuery();
  596. },
  597. // 多选框选中数据
  598. handleSelectionChange(selection) {
  599. this.ids = selection.map(item => item.id)
  600. this.single = selection.length!==1
  601. this.multiple = !selection.length
  602. },
  603. }
  604. };
  605. </script>
  606. <style scoped>
  607. .question,.answer{
  608. margin: 30px 0px;
  609. padding-left: 20px;
  610. }
  611. h3{
  612. margin: 30px 0px;
  613. }
  614. </style>