index.vue 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item :label="$t('年份')" prop="years">
  5. <el-date-picker clearable size="small" style="width: 200px"
  6. v-model="queryParams.years"
  7. type="year"
  8. value-format="yyyy"
  9. :placeholder="$t('请选择') + $t('年份')"
  10. @change="handleQuery" >
  11. </el-date-picker>
  12. </el-form-item>
  13. <el-form-item :label="$t('培训课程')" prop="course">
  14. <el-input
  15. v-model="queryParams.course"
  16. :placeholder="$t('请输入') + $t('培训课程')"
  17. clearable
  18. size="small"
  19. @input="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item :label="$t('培训类型')" prop="trainingType" label-width="50">
  23. <el-select v-model="queryParams.trainingType" @change="handleQuery" :placeholder="$t('请选择') + $t('培训类型')" clearable size="small">
  24. <el-option
  25. v-for="dict in trainingTypeOptions"
  26. :key="dict.dictValue"
  27. :label="dict.dictLabel"
  28. :value="dict.dictValue"
  29. />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item :label="$t('是否完成')" prop="isfinish" label-width="50">
  33. <el-select v-model="queryParams.isfinish" @change="handleQuery" :placeholder="$t('请选择') + $t('是否完成')" clearable size="small">
  34. <el-option
  35. v-for="dict in isfinishOptions"
  36. :key="dict.dictValue"
  37. :label="dict.dictLabel"
  38. :value="dict.dictValue"
  39. />
  40. </el-select>
  41. </el-form-item>
  42. <el-form-item :label="$t('未参培情况')" prop="isNon" label-width="50">
  43. <el-select v-model="queryParams.isNon" @change="handleQuery" :placeholder="$t('请选择') + $t('是否未参培')" clearable size="small">
  44. <el-option
  45. key="0"
  46. label="全部"
  47. value="0"
  48. />
  49. <el-option
  50. key="1"
  51. label="未参培"
  52. value="1"
  53. />
  54. <el-option
  55. key="2"
  56. label="已完成"
  57. value="2"
  58. />
  59. <el-option
  60. key="3"
  61. label="未完成"
  62. value="3"
  63. />
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item :label="$t('培训开始日期')" label-width="60">
  67. <el-date-picker
  68. v-model="chooseDate"
  69. @change="handleQuery"
  70. type="daterange"
  71. align="right"
  72. unlink-panels
  73. :range-separator="$t('至')"
  74. :start-placeholder="$t('开始日期')"
  75. :end-placeholder="$t('结束日期')"
  76. value-format="yyyy-MM-dd"
  77. :picker-options="pickerOptions">
  78. </el-date-picker>
  79. </el-form-item>
  80. <el-form-item>
  81. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('搜索') }}</el-button>
  82. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('重置') }}</el-button>
  83. </el-form-item>
  84. </el-form>
  85. <el-row :gutter="10" class="mb8">
  86. <el-col :span="1.5">
  87. <el-button
  88. type="primary"
  89. icon="el-icon-plus"
  90. size="mini"
  91. @click="handleAdd"
  92. v-hasPermi="['training:training:add']"
  93. >{{ $t('新增') }}</el-button>
  94. </el-col>
  95. <el-col :span="1.5">
  96. <el-button
  97. type="success"
  98. icon="el-icon-edit"
  99. size="mini"
  100. :disabled="single"
  101. @click="handleUpdate"
  102. v-hasPermi="['training:training:edit']"
  103. >{{ $t('修改') }}</el-button>
  104. </el-col>
  105. <el-col :span="1.5">
  106. <el-button
  107. type="danger"
  108. icon="el-icon-delete"
  109. size="mini"
  110. :disabled="multiple"
  111. @click="handleDelete"
  112. v-hasPermi="['training:training:remove']"
  113. >{{ $t('删除') }}</el-button>
  114. </el-col>
  115. <el-col :span="1.5">
  116. <el-button
  117. type="warning"
  118. icon="el-icon-download"
  119. size="mini"
  120. @click="handleExport"
  121. v-hasPermi="['training:training:export']"
  122. >{{ $t('导出') }}</el-button>
  123. </el-col>
  124. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  125. </el-row>
  126. <el-row>
  127. <el-col :span="24">
  128. <el-button type="primary" plain @click="selectCourse('10')">定期类</el-button>
  129. <el-button type="primary" plain @click="selectCourse('12')">
  130. EHS类培训、学习及信息通告
  131. </el-button>
  132. <el-button type="primary" plain @click="selectCourse('14')">
  133. 程序和操作手册培训更新培训
  134. </el-button>
  135. <el-button type="primary" plain @click="selectCourse('16')">事件报告和调查</el-button>
  136. <el-button type="primary" plain @click="selectCourse('20')">MOC培训</el-button>
  137. </el-col>
  138. </el-row>
  139. <el-table v-loading="loading" :data="trainingList" @selection-change="handleSelectionChange" :cell-style="tableCellStyle" :height="clientHeight" border>
  140. <el-table-column type="selection" width="55" align="center" />
  141. <el-table-column :label="$t('年份')" align="center" prop="years" :show-overflow-tooltip="true"/>
  142. <el-table-column :label="$t('培训课程')" align="center" prop="course" width="250" :show-overflow-tooltip="true"/>
  143. <el-table-column :label="$t('培训类型')" align="center" prop="trainingType" width="120" :formatter="trainingTypeFormat"/>
  144. <el-table-column :label="$t('培训内容')" align="center" prop="content" width="250" :show-overflow-tooltip="true" />
  145. <el-table-column :label="$t('课程代码')" align="center" prop="courseid" width="150" :show-overflow-tooltip="true"/>
  146. <el-table-column :label="$t('是否完成')" align="center" prop="isfinish" width="120">
  147. <template slot-scope="scope">
  148. <el-progress :percentage="scope.row.trainingPercent"></el-progress>
  149. <span > ({{ scope.row.haveTraining }}/{{ scope.row.mustTraining }})</span>
  150. </template>
  151. </el-table-column>
  152. <el-table-column :label="$t('培训周期')" align="center" prop="period" :show-overflow-tooltip="true"/>
  153. <el-table-column :label="$t('课时')" align="center" prop="duration" :show-overflow-tooltip="true"/>
  154. <el-table-column :label="$t('培训人')" align="center" prop="trainer" :show-overflow-tooltip="true"/>
  155. <el-table-column :label="$t('培训岗位')" align="center" prop="position" width="250" :show-overflow-tooltip="true" />
  156. <el-table-column :label="$t('培训开始日期')" align="center" prop="courseStartdate" width="100">
  157. <template slot-scope="scope">
  158. <span>{{ parseTime(scope.row.courseStartdate, '{y}-{m}-{d}') }}</span>
  159. </template>
  160. </el-table-column>
  161. <el-table-column :label="$t('培训结束日期')" align="center" prop="courseEnddate" width="100">
  162. <template slot-scope="scope">
  163. <span>{{ parseTime(scope.row.courseEnddate, '{y}-{m}-{d}') }}</span>
  164. </template>
  165. </el-table-column>
  166. <!-- <el-table-column :label="$t('未参培人员名单')" align="center" prop="nonParticipants" width="200" :show-overflow-tooltip="true" />-->
  167. <el-table-column :label="$t('备注')" align="center" prop="remarks" :show-overflow-tooltip="true"/>
  168. <el-table-column :label="$t('操作')" align="center" fixed="right" width="270" class-name="small-padding fixed-width">
  169. <template slot-scope="scope">
  170. <el-button
  171. size="mini"
  172. type="text"
  173. icon="el-icon-edit"
  174. @click="handleUpdate(scope.row)"
  175. v-hasPermi="['training:training:edit']"
  176. >{{ $t('修改') }}</el-button>
  177. <el-button
  178. size="mini"
  179. type="text"
  180. icon="el-icon-edit"
  181. @click="handleStaffmgr(scope.row)"
  182. v-hasPermi="['training:training:edit']"
  183. >人员名单</el-button>
  184. <el-button
  185. size="mini"
  186. type="text"
  187. icon="el-icon-edit"
  188. @click="handleDetail(scope.row)"
  189. v-hasPermi="['training:training:edit']"
  190. >培训详情</el-button>
  191. </template>
  192. </el-table-column>
  193. </el-table>
  194. <pagination
  195. v-show="total>0"
  196. :total="total"
  197. :page.sync="queryParams.pageNum"
  198. :limit.sync="queryParams.pageSize"
  199. @pagination="getList"
  200. />
  201. <!-- 添加或修改培训计划对话框 -->
  202. <el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="80%" append-to-body>
  203. <el-form ref="form" :model="form" :rules="rules" label-width="110px">
  204. <el-row>
  205. <el-col :span="12">
  206. <el-form-item :label="$t('培训课程')" prop="course">
  207. <el-input v-model="form.course" :placeholder="$t('请输入') + $t('培训课程')" />
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="12">
  211. <el-form-item :label="$t('培训类型')" prop="trainingType">
  212. <el-select v-model="form.trainingType" :placeholder="$t('请选择') + $t('培训类型')">
  213. <el-option
  214. v-for="dict in trainingTypeOptions"
  215. :key="dict.dictValue"
  216. :label="dict.dictLabel"
  217. :value="dict.dictValue"
  218. ></el-option>
  219. </el-select>
  220. </el-form-item>
  221. </el-col>
  222. </el-row>
  223. <el-row>
  224. <el-col :span="12">
  225. <el-form-item :label="$t('培训内容')" prop="content">
  226. <el-input v-model="form.content" :placeholder="$t('请输入') + $t('培训内容')" />
  227. </el-form-item>
  228. </el-col>
  229. <el-col :span="12">
  230. <el-form-item :label="$t('课程代码')" prop="courseid">
  231. <el-input v-model="form.courseid" :placeholder="$t('请输入') + $t('课程代码')" />
  232. </el-form-item>
  233. </el-col>
  234. </el-row>
  235. <el-row>
  236. <el-col :span="12">
  237. <el-form-item :label="$t('培训周期')" prop="period">
  238. <el-input v-model="form.period" :placeholder="$t('请输入') + $t('培训周期')" />
  239. </el-form-item>
  240. </el-col>
  241. <el-col :span="12">
  242. <el-form-item :label="$t('课时')" prop="duration">
  243. <el-input v-model="form.duration" :placeholder="$t('请输入') + $t('课时')" />
  244. </el-form-item>
  245. </el-col>
  246. </el-row>
  247. <el-row>
  248. <el-col :span="12">
  249. <el-form-item :label="$t('培训人')" prop="trainer">
  250. <el-select v-model="form.trainer" filterable multiple :placeholder="$t('请选择') + $t('培训人')">
  251. <el-option
  252. v-for="dict in stffmgrOptions"
  253. :key="dict.staffid"
  254. :label="dict.name"
  255. :value="dict.staffid">
  256. <span style="float: left">{{ dict.name }}</span>
  257. <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.staffid }}</span>
  258. </el-option>
  259. </el-select>
  260. </el-form-item>
  261. </el-col>
  262. </el-row>
  263. <el-row>
  264. <el-col :span="12">
  265. <el-form-item :label="$t('培训岗位')" prop="position">
  266. <el-select v-model="form.position" multiple :placeholder="$t('请选择') + $t('培训岗位')" @change="changePosition" style="width: 400px">
  267. <el-option
  268. v-for="dict in positionOptions"
  269. :key="dict.dictValue"
  270. :label="dict.dictLabel"
  271. :value="dict.dictValue"
  272. ></el-option>
  273. </el-select>
  274. </el-form-item>
  275. </el-col>
  276. <el-col :span="12">
  277. <el-form-item :label="$t('是否存在') +$t('指定人员')" prop="haveDesignated" >
  278. <el-checkbox v-model="haveDesignated" @change="changeHave"></el-checkbox>
  279. </el-form-item>
  280. </el-col>
  281. </el-row>
  282. <el-row>
  283. <el-col :span="12">
  284. <el-form-item :label="$t('年份')" prop="years">
  285. <el-date-picker clearable size="small" style="width: 200px"
  286. v-model="form.years"
  287. type="years"
  288. value-format="yyyy"
  289. @change="handleStaff"
  290. :placeholder="$t('请选择') + $t('年份')">
  291. </el-date-picker>
  292. </el-form-item>
  293. </el-col>
  294. <el-col :span="12">
  295. <el-form-item :label="$t('指定人员') + $t('岗位')" prop="designatedPosition" v-if="haveDesignated === true">
  296. <el-select v-model="designatedPositions" multiple :placeholder="$t('请选择') + $t('指定岗位')" @change="changeDesignated" style="width: 400px">
  297. <el-option
  298. v-for="dict in designatedPositionOptions"
  299. :key="dict.dictValue"
  300. :label="dict.dictLabel"
  301. :value="dict.dictValue"
  302. ></el-option>
  303. </el-select>
  304. </el-form-item>
  305. </el-col>
  306. </el-row>
  307. <el-row>
  308. <el-col :span="12">
  309. <el-form-item :label="$t('培训开始日期')" prop="courseStartdate">
  310. <el-date-picker clearable size="small" style="width: 200px"
  311. v-model="form.courseStartdate"
  312. type="date"
  313. value-format="yyyy-MM-dd"
  314. :placeholder="$t('请选择') + $t('培训开始日期')">
  315. </el-date-picker>
  316. </el-form-item>
  317. </el-col>
  318. <el-col :span="12">
  319. <el-form-item :label="$t('指定人员')" prop="designatedStaff" v-if="haveDesignated === true && designatedPositions.length > 0">
  320. <el-select v-model="designatedStaffs" filterable multiple :placeholder="$t('请选择') + $t('指定人员')" style="width: 400px">
  321. <el-option
  322. v-for="dict in designatedStaffsOptions"
  323. :key="dict.staffid"
  324. :label="dict.name"
  325. :value="dict.staffid">
  326. <span style="float: left">{{ dict.name }}</span>
  327. <span style="float: right; color: #8492a6; font-size: 13px">{{ dict.staffid }}</span>
  328. </el-option>
  329. </el-select>
  330. </el-form-item>
  331. </el-col>
  332. </el-row>
  333. <el-row>
  334. <el-col :span="12">
  335. <el-form-item :label="$t('培训结束日期')" prop="courseEnddate">
  336. <el-date-picker clearable size="small" style="width: 200px"
  337. v-model="form.courseEnddate"
  338. type="date"
  339. value-format="yyyy-MM-dd"
  340. :placeholder="$t('请选择') + $t('培训结束日期')">
  341. </el-date-picker>
  342. </el-form-item >
  343. </el-col>
  344. <el-col :span="12">
  345. <el-form-item :label="$t('是否完成')" prop="isfinish">
  346. <el-select v-model="form.isfinish" :placeholder="$t('请选择') + $t('是否完成')">
  347. <el-option
  348. v-for="dict in isfinishOptions"
  349. :key="dict.dictValue"
  350. :label="dict.dictLabel"
  351. :value="parseInt(dict.dictValue)"
  352. ></el-option>
  353. </el-select>
  354. </el-form-item>
  355. </el-col>
  356. </el-row>
  357. <el-row>
  358. <el-col :span="12">
  359. <el-form-item label="培训考试" prop="examId">
  360. <el-select v-model="form.examId" filterable :placeholder="$t('请选择') + $t('培训考试')">
  361. <el-option
  362. v-for="dict in examOptions"
  363. :key="dict.examId"
  364. :label="dict.title"
  365. :value="dict.examId">
  366. </el-option>
  367. </el-select>
  368. </el-form-item>
  369. </el-col>
  370. <el-col :span="12">
  371. <el-form-item :label="$t('备注')" prop="remarks">
  372. <el-input v-model="form.remarks" :placeholder="$t('请输入') + $t('备注')" />
  373. </el-form-item>
  374. </el-col>
  375. </el-row>
  376. </el-form>
  377. <div slot="footer" class="dialog-footer">
  378. <el-button type="primary" @click="submitForm" :disabled="submitDisabled">{{ $t('确 定') }}</el-button>
  379. <el-button @click="cancel">{{ $t('取 消') }}</el-button>
  380. </div>
  381. </el-dialog>
  382. <!-- 添加参与公司级培训人员名单对话框 -->
  383. <el-dialog :close-on-click-modal="false" v-dialogDrag title="培训人员名单" :visible.sync="personOpen" width="1500px" append-to-body>
  384. <el-form ref="personForm" :model="personForm" label-width="80px">
  385. <el-form-item :label="$t('课程名称')" prop="item">
  386. <el-input v-model="personForm.course" disabled />
  387. </el-form-item>
  388. <el-form-item :label="$t('实际岗位')">
  389. <el-checkbox-group v-model="checkboxPost" size="medium" @change="postChange">
  390. <el-checkbox-button v-for="post in positionOptions" :label="post.dictValue" :key="post.dictValue">{{post.dictLabel}}</el-checkbox-button>
  391. </el-checkbox-group>
  392. </el-form-item>
  393. </el-form>
  394. <div class="staff_checked">
  395. <el-transfer v-model="checked" :data="selectPersonOptions" @change="staffChange" :left-default-checked="leftList" filterable
  396. :titles="['无需参培人员', '需要参培人员']"
  397. >
  398. <span slot-scope="{ option }">{{ option.label }}
  399. <span style="float: right; color: #8492a6; font-size: 12px; padding-left: 10px;padding-right: 15px;">{{ option.staffid }}</span>
  400. <span style="float: right; color: #8492a6; font-size: 12px; padding-left: 10px;">{{ option.actualpost }}</span>
  401. </span>
  402. </el-transfer>
  403. </div>
  404. <div slot="footer" class="dialog-footer">
  405. <el-button type="primary" @click="submitParticipants">{{ $t('确 定') }}</el-button>
  406. <el-button @click="cancelParticipants">{{ $t('取 消') }}</el-button>
  407. </div>
  408. </el-dialog>
  409. </div>
  410. </template>
  411. <script>
  412. import { listTrainingbcc,getTrainingbccStaffIds,updateTrainingbccStaffIds, getTrainingbcc, delTrainingbcc, addTrainingbcc, updateTrainingbcc, exportTrainingbcc } from "@/api/training/trainingbcc";
  413. import nonAdd from './trainingNon'
  414. import newAdd from './trainingNew'
  415. import {listStaffmgrAll, listAllStaffmgr, listStaffmgr, selectTimeStaffmgr} from "@/api/plant/staffmgr";
  416. import { treeselect } from "@/api/system/dept";
  417. import { getToken } from "@/utils/auth";
  418. import Treeselect from "@riophae/vue-treeselect";
  419. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  420. import { allFileList, listCommonfile, getCommonfile, delCommonfile, addCommonfile, updateCommonfile, exportCommonfile} from "@/api/common/commonfile";
  421. import {getCompanylevel, updateCompanylevel} from "@/api/training/companylevel";
  422. import {listExam} from "@/api/training/elearn/exam";
  423. export default {
  424. name: "Training",
  425. components: { Treeselect, nonAdd, newAdd},
  426. data() {
  427. return {
  428. // 遮罩层
  429. loading: true,
  430. positionVisible: false,
  431. showFlag: false,
  432. //确认按钮是否可点
  433. submitDisabled: false,
  434. //左侧选框默认选择
  435. leftList: [],
  436. // 选中数组
  437. ids: [],
  438. //人员筛选按钮选择数据
  439. checkboxPost: [],
  440. // 非单个禁用
  441. single: true,
  442. // 非多个禁用
  443. multiple: true,
  444. // 显示搜索条件
  445. showSearch: false,
  446. // 总条数
  447. total: 0,
  448. // 培训计划表格数据
  449. trainingList: [],
  450. positionIds: [],
  451. trainers: [],
  452. units: [],
  453. nonParticipants: [],
  454. // 弹出层标题
  455. title: "",
  456. // 部门树选项
  457. deptOptions: undefined,
  458. clientHeight:300,
  459. // 是否显示弹出层
  460. open: false,
  461. personOpen: false,
  462. // 装置名称字典
  463. plantCodeOptions: [],
  464. // 部门字典
  465. unitOptions: [],
  466. examOptions: [],
  467. // 培训岗位字典
  468. positionOptions: [],
  469. //选择人员数据
  470. checked: [],
  471. trainingTypeOptions: [],
  472. // 是否完成字典
  473. isfinishOptions: [],
  474. // 指定岗位字典
  475. designatedPositionOptions: [],
  476. //指定人员岗位多选
  477. designatedPositions: [],
  478. //指定人员id多选
  479. designatedStaffs: [],
  480. selectPersonOptions: [],
  481. //是否存在岗位多选
  482. haveDesignated: '',
  483. //人员表联查
  484. stffmgrOptions: undefined,
  485. //人员表联查-包含离职
  486. stffmgrAllOptions: undefined,
  487. //指定人员选项
  488. designatedStaffsOptions: [],
  489. // 用户导入参数
  490. upload: {
  491. downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
  492. //下载模板类型
  493. type: "training",
  494. // 是否显示弹出层(用户导入)
  495. open: false,
  496. // 弹出层标题(用户导入)
  497. title: "",
  498. // 是否禁用上传
  499. isUploading: false,
  500. // 是否更新已经存在的用户数据
  501. updateSupport: 0,
  502. // 设置上传的请求头部
  503. headers: { Authorization: "Bearer " + getToken() },
  504. // 上传的地址
  505. url: process.env.VUE_APP_BASE_API + "/training/training/importData"
  506. },
  507. //未参会人员弹窗是否打开
  508. nonVisible: false,
  509. //新员工弹窗是否打开
  510. newVisible: false,
  511. // 报告附件参数
  512. doc: {
  513. file: "",
  514. // 是否显示弹出层(报告附件)
  515. open: false,
  516. // 弹出层标题(报告附件)
  517. title: "",
  518. // 是否禁用上传
  519. isUploading: false,
  520. // 是否更新已经存在的用户数据
  521. updateSupport: 0,
  522. // 报告附件上传位置编号
  523. ids: 0,
  524. // 设置上传的请求头部
  525. headers: { Authorization: "Bearer " + getToken() },
  526. // 上传的地址
  527. url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
  528. commonfileList: null,
  529. queryParams: {
  530. pId: null,
  531. pType: 'training'
  532. },
  533. pType: 'training',
  534. pId: null
  535. },
  536. pdf : {
  537. title: '',
  538. pdfUrl: '',
  539. numPages: null,
  540. open: false,
  541. pageNum: 1,
  542. pageTotalNum: 1,
  543. loadedRatio: 0,
  544. },
  545. pic: {
  546. imageUrl: '',
  547. fileList: [],
  548. // 设置上传的请求头部
  549. headers: { Authorization: "Bearer " + getToken() },
  550. // 上传的地址
  551. url: process.env.VUE_APP_BASE_API + "/training/training/uploadFile",
  552. },
  553. photoList: [],
  554. dialogImageUrl: '',
  555. dialogVisible: false,
  556. // 查询参数
  557. queryParams: {
  558. pageNum: 1,
  559. pageSize: 20,
  560. course: null,
  561. position: [],
  562. years: this.getNowTime(),
  563. isfinish: null,
  564. startDate: null,
  565. endDate: null,
  566. trainingType: null,
  567. isNon: null,
  568. },
  569. trainingId: null,
  570. //地址
  571. downloadAction: process.env.VUE_APP_BASE_API + '/training/training/trainingReport',
  572. //人员表查询参数
  573. staffmgrQueryParams: {},
  574. searchStaffmgr: "",
  575. //日期快速选择
  576. pickerOptions: {
  577. shortcuts: [{
  578. text: this.$t('最近一周'),
  579. onClick(picker) {
  580. const end = new Date();
  581. const start = new Date();
  582. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  583. picker.$emit('pick', [start, end]);
  584. }
  585. }, {
  586. text: this.$t('最近一个月'),
  587. onClick(picker) {
  588. const end = new Date();
  589. const start = new Date();
  590. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  591. picker.$emit('pick', [start, end]);
  592. }
  593. }, {
  594. text: this.$t('最近三个月'),
  595. onClick(picker) {
  596. const end = new Date();
  597. const start = new Date();
  598. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  599. picker.$emit('pick', [start, end]);
  600. }
  601. }]
  602. },
  603. //日期选择器
  604. chooseDate: [],
  605. // 表单参数
  606. form: {},
  607. personForm: {},
  608. // 表单校验
  609. rules: {
  610. course: [
  611. { required: true, message: this.$t('培训课程') + this.$t('不能为空'), trigger: "blur" }
  612. ],
  613. trainingType: [
  614. { required: true, message: this.$t('培训类型') + this.$t('不能为空'), trigger: "blur" }
  615. ],
  616. trainer: [
  617. { required: true, message: this.$t('培训人') + this.$t('不能为空'), trigger: "blur" }
  618. ],
  619. unit: [
  620. { required: true, message: this.$t('部门') + this.$t('不能为空'), trigger: "blur" }
  621. ],
  622. position: [
  623. { required: true, message: this.$t('培训岗位') + this.$t('不能为空'), trigger: "blur" }
  624. ],
  625. years: [
  626. { required: true, message: this.$t('年份') + this.$t('不能为空'), trigger: "blur" }
  627. ],
  628. courseStartdate: [
  629. { required: true, message: this.$t('培训开始日期') + this.$t('不能为空'), trigger: "blur" }
  630. ],
  631. isfinish: [
  632. { required: true, message: this.$t('是否完成') + this.$t('不能为空'), trigger: "blur" }
  633. ],
  634. deptId: [
  635. { required: true, message: this.$t('部门编号') + this.$t('不能为空'), trigger: "blur" }
  636. ]
  637. }
  638. };
  639. },
  640. watch: {
  641. // 根据名称筛选部门树
  642. deptName(val) {
  643. this.$refs.tree.filter(val);
  644. },
  645. },
  646. created() {
  647. const queryName = this.$route.query && this.$route.query.status;
  648. if (queryName == '未参培'){
  649. this.queryParams.isNon = "1"
  650. }
  651. if (queryName == '已完成'){
  652. this.queryParams.isNon = "2"
  653. }
  654. if (queryName == '未完成'){
  655. this.queryParams.isNon = "3"
  656. }
  657. this.getStaffmar();
  658. this.getStaffmarAll();
  659. listExam({ pageNum: 1, pageSize: 1000, examType: 2 }).then(response => {
  660. this.examOptions = response.rows;
  661. });
  662. //设置表格高度对应屏幕高度
  663. this.$nextTick(() => {
  664. this.clientHeight = (document.body.clientHeight - 80) * 0.8
  665. })
  666. this.getTreeselect();
  667. this.getDicts("PLANT_DIVIDE").then(response => {
  668. this.plantCodeOptions = response.data;
  669. });
  670. this.getDicts("ACTUALPOST").then(response => {
  671. this.positionOptions = response.data;
  672. this.designatedPositionOptions = response.data;
  673. const allData = response.data
  674. const data = [];
  675. for (let i = 0; i < allData.length; i++) {
  676. data.push({
  677. key: allData[i].dictValue,
  678. label: allData[i].dictLabel,
  679. });
  680. }
  681. this.positionOpt = response.data;
  682. });
  683. this.getDicts("YES_NO_EN").then(response => {
  684. this.isfinishOptions = response.data;
  685. });
  686. this.getDicts("STAFF_UNIT").then(response => {
  687. this.unitOptions = response.data;
  688. });
  689. this.getDicts("TRAINING_TYPE_BCC").then(response => {
  690. this.trainingTypeOptions = response.data;
  691. });
  692. },
  693. methods: {
  694. /** 查询培训计划列表 */
  695. getList() {
  696. let _this = this
  697. this.loading = true;
  698. listTrainingbcc(this.queryParams).then(response => {
  699. this.trainingList = response.rows;
  700. this.trainingList.forEach(function (value,key,arr) {
  701. var positionid = null;
  702. var positionName = null;
  703. let unitid = null;
  704. let unitName = null;
  705. if (value.position != null) {
  706. positionid = value.position.split(',');
  707. positionid.forEach(function (value, key, arr) {
  708. if (key != 0) {
  709. positionName = positionName + "," + _this.selectDictLabel(_this.positionOptions, value);
  710. }else if (key == 0) {
  711. positionName = _this.selectDictLabel(_this.positionOptions, value);
  712. }
  713. })
  714. }
  715. if (value.unit != null) {
  716. unitid = value.unit.split(',');
  717. unitid.forEach(function (value, key, arr) {
  718. if (key != 0) {
  719. unitName = unitName + "," + _this.selectDictLabel(_this.unitOptions, value);
  720. }else if (key == 0) {
  721. unitName = _this.selectDictLabel(_this.unitOptions, value);
  722. }
  723. })
  724. }
  725. _this.trainingList[key].positionid = value.position;
  726. _this.trainingList[key].position = positionName;
  727. _this.trainingList[key].unitid = value.unit;
  728. _this.trainingList[key].unit = unitName;
  729. var parentName = null;
  730. if (value.trainer != null) {
  731. let staffId = value.trainer.split(",");
  732. staffId.forEach(function (id, index) {
  733. _this.stffmgrAllOptions.forEach(function (item) {
  734. if (item.staffid === id) {
  735. if (index === 0) {
  736. parentName = item.name
  737. }else {
  738. parentName = parentName + "," + item.name
  739. }
  740. }
  741. });
  742. });
  743. }
  744. _this.trainingList[key].trainer = parentName;
  745. })
  746. this.total = response.total;
  747. this.loading = false;
  748. });
  749. },
  750. /** 获取当前年份 */
  751. getNowTime() {
  752. var now = new Date();
  753. var year = now.getFullYear(); //得到年份
  754. var defaultDate = `${year}`;
  755. defaultDate = `${year}`
  756. return defaultDate;
  757. },
  758. closeChildDialog () {
  759. this.showFlag = false
  760. this.getList();
  761. },
  762. /** 查询部门下拉树结构 */
  763. getTreeselect() {
  764. treeselect().then(response => {
  765. this.deptOptions = response.data;
  766. });
  767. },
  768. // 装置名称字典翻译
  769. plantCodeFormat(row, column) {
  770. return this.selectDictLabel(this.plantCodeOptions, row.plantCode);
  771. },
  772. // 部门字典翻译
  773. unitFormat(row, column) {
  774. return this.selectDictLabel(this.unitOptions, row.unit);
  775. },
  776. // 培训类型翻译
  777. trainingTypeFormat(row, column) {
  778. return this.selectDictLabel(this.trainingTypeOptions, row.trainingType);
  779. },
  780. // 培训岗位字典翻译
  781. positionFormat(row, column) {
  782. return this.selectDictLabel(this.positionOptions, row.position);
  783. },
  784. // 是否完成字典翻译
  785. isfinishFormat(row, column) {
  786. return this.selectDictLabel(this.isfinishOptions, row.isfinish);
  787. },
  788. //获取人员表
  789. getStaffmar(year) {
  790. this.staffmgrQueryParams.leftYear = year
  791. listAllStaffmgr(this.staffmgrQueryParams).then(response => {
  792. this.stffmgrOptions = response.rows;
  793. //
  794. const allData = response.rows
  795. const data = [];
  796. for (let i = 0; i < allData.length; i++) {
  797. data.push({
  798. key: allData[i].staffid,
  799. label: allData[i].name,
  800. staffid: allData[i].staffid,
  801. actualpost: this.selectDictLabel(this.positionOptions, allData[i].actualpost)
  802. });
  803. }
  804. this.selectPersonOptions = data;
  805. });
  806. },
  807. //年份选择change事件
  808. handleStaff(val){
  809. this.getStaffmar(val)
  810. },
  811. //获取人员表--包含离职
  812. getStaffmarAll() {
  813. listStaffmgrAll(this.staffmgrQueryParams).then(response => {
  814. this.stffmgrAllOptions = response.rows;
  815. this.getList();
  816. });
  817. },
  818. //遍历人员表
  819. forEachStaffmar(id) {
  820. let stffmgrName = "";
  821. this.stffmgrOptions.forEach(function (item) {
  822. if (item.staffid === id) {
  823. stffmgrName = item.name
  824. }
  825. });
  826. return stffmgrName
  827. },
  828. // 取消按钮
  829. cancel() {
  830. this.open = false;
  831. this.reset();
  832. },
  833. // 表单重置
  834. reset() {
  835. this.form = {
  836. id: null,
  837. plantCode: null,
  838. course: null,
  839. courseid: null,
  840. period: null,
  841. duration: null,
  842. trainer: null,
  843. positionId: [],
  844. position: null,
  845. content: null,
  846. unit : null,
  847. years: null,
  848. courseStartdate: null,
  849. courseEnddate: null,
  850. isfinish: null,
  851. delFlag: null,
  852. createrCode: null,
  853. createdate: null,
  854. updaterCode: null,
  855. updatedate: null,
  856. remarks: null,
  857. deptId: null,
  858. startDate: null,
  859. endDate: null,
  860. nonParticipants: null,
  861. trainingType: null,
  862. picUrl: null,
  863. mustTraining: null,
  864. haveTraining: null
  865. };
  866. this.resetForm("form");
  867. },
  868. /** 搜索按钮操作 */
  869. handleQuery() {
  870. this.queryParams.pageNum = 1;
  871. this.queryParams.startDate = this.chooseDate[0];
  872. this.queryParams.endDate = this.chooseDate[1];
  873. this.getList();
  874. },
  875. /** 重置按钮操作 */
  876. resetQuery() {
  877. this.resetForm("queryForm");
  878. this.chooseDate = "";
  879. this.handleQuery();
  880. },
  881. // 多选框选中数据
  882. handleSelectionChange(selection) {
  883. this.ids = selection.map(item => item.id)
  884. this.single = selection.length!==1
  885. this.multiple = !selection.length
  886. },
  887. //根据分数显示颜色提示
  888. tableCellStyle({ row, column, rowIndex, columnIndex }) {
  889. if (columnIndex == 6 && row.isfinish == 0){
  890. return "color: rgba(255, 26, 26, 0.98) "
  891. }
  892. },
  893. //培训岗位变动
  894. changePosition() {
  895. let _this = this
  896. this.getDicts("ACTUALPOST").then(response => {
  897. this.designatedPositionOptions = response.data;
  898. this.form.position.forEach(function (value, key, arr) {
  899. _this.designatedPositionOptions.forEach(function (positionValue, positionkey, arr) {
  900. if (positionValue.dictValue === value) {
  901. _this.designatedPositionOptions.splice(positionkey ,1)
  902. }
  903. })
  904. })
  905. });
  906. },
  907. //指定人员训岗位变动
  908. changeDesignated() {
  909. if (this.designatedPositions.length > 0) {
  910. var designatedId = null;
  911. this.designatedPositions.forEach(function (value,key,arr) {
  912. if (key != 0) {
  913. designatedId = designatedId + "," + value;
  914. }else if (key == 0) {
  915. designatedId = value;
  916. }
  917. })
  918. this.staffmgrQueryParams.actualposts = designatedId;
  919. listStaffmgr(this.staffmgrQueryParams).then(response => {
  920. this.designatedStaffsOptions = response.rows;
  921. });
  922. let _this = this
  923. this.getDicts("ACTUALPOST").then(response => {
  924. this.positionOptions = response.data;
  925. this.designatedPositions.forEach(function (value, key, arr) {
  926. _this.positionOptions.forEach(function (positionValue, positionkey, arr) {
  927. if (positionValue.dictValue === value) {
  928. _this.positionOptions.splice(positionkey ,1)
  929. }
  930. })
  931. })
  932. });
  933. }else {
  934. this.designatedStaffs = [];
  935. }
  936. },
  937. //指定人员按钮变动
  938. changeHave() {
  939. if (this.haveDesignated === false) {
  940. this.designatedPositions = []
  941. this.designatedStaffs = []
  942. }
  943. },
  944. /** 新增按钮操作 */
  945. handleAdd() {
  946. this.reset();
  947. this.open = true;
  948. this.submitDisabled = false;
  949. this.haveDesignated = false;
  950. this.designatedPositions = [];
  951. this.getDicts("ACTUALPOST").then(response => {
  952. this.positionOptions = response.data;
  953. });
  954. this.getDicts("ACTUALPOST").then(response => {
  955. this.designatedPositionOptions = response.data;
  956. });
  957. this.form.trainingType = this.queryParams.trainingType
  958. this.title = this.$t('新增') + this.$t('空格') + this.$t('培训计划');
  959. this.getStaffmar()
  960. },
  961. /** 修改按钮操作 */
  962. handleUpdate(row) {
  963. this.reset();
  964. let _this = this
  965. this.submitDisabled = false;
  966. const id = row.id || this.ids
  967. getTrainingbcc(id).then(response => {
  968. this.form = response.data;
  969. this.getStaffmar(response.data.years)
  970. if (this.form.position != null) {
  971. this.form.position = this.form.position.split(',');
  972. this.getDicts("ACTUALPOST").then(response => {
  973. this.designatedPositionOptions = response.data;
  974. this.form.position.forEach(function (value, key, arr) {
  975. _this.designatedPositionOptions.forEach(function (positionValue, positionkey, arr) {
  976. if (positionValue.dictValue === value) {
  977. _this.designatedPositionOptions.splice(positionkey ,1)
  978. }
  979. })
  980. })
  981. })
  982. }else {
  983. this.getDicts("ACTUALPOST").then(response => {
  984. this.designatedPositionOptions = response.data;
  985. })
  986. this.form.position = [];
  987. }
  988. if (this.form.designatedPosition != null) {
  989. this.designatedPositions = this.form.designatedPosition.split(',');
  990. this.getDicts("ACTUALPOST").then(response => {
  991. this.positionOptions = response.data;
  992. this.designatedPositions.forEach(function (value, key, arr) {
  993. _this.positionOptions.forEach(function (positionValue, positionkey, arr) {
  994. if (positionValue.dictValue === value) {
  995. _this.positionOptions.splice(positionkey ,1)
  996. }
  997. })
  998. })
  999. });
  1000. this.haveDesignated = true;
  1001. var designatedId = null;
  1002. this.designatedPositions.forEach(function (value,key,arr) {
  1003. if (key != 0) {
  1004. designatedId = designatedId + "," + value;
  1005. }else if (key == 0) {
  1006. designatedId = value;
  1007. }
  1008. })
  1009. this.staffmgrQueryParams.actualposts = designatedId;
  1010. this.$nextTick(() => {
  1011. listAllStaffmgr(this.staffmgrQueryParams).then(response => {
  1012. this.designatedStaffsOptions = response.rows;
  1013. });
  1014. })
  1015. }else {
  1016. this.haveDesignated = false;
  1017. this.designatedPositions = [];
  1018. this.getDicts("ACTUALPOST").then(response => {
  1019. this.positionOptions = response.data;
  1020. })
  1021. }
  1022. if (this.form.designatedStaff != null) {
  1023. this.designatedStaffs = this.form.designatedStaff.split(',');
  1024. }else {
  1025. this.designatedStaffs = [];
  1026. }
  1027. if (this.form.unit != null) {
  1028. this.form.unit = this.form.unit.split(',');
  1029. /*this.changeUnit(this.form.unit)*/
  1030. }else {
  1031. this.form.unit = [];
  1032. }
  1033. if (this.form.nonParticipants != null) {
  1034. this.nonParticipants = this.form.nonParticipants.split(",");
  1035. }
  1036. if (this.form.picUrl!= null){
  1037. this.photoList =[]
  1038. let fileList = this.form.picUrl.split(",")
  1039. for (let i = 0; i < fileList.length; i++) {
  1040. let item = {url: process.env.VUE_APP_BASE_API +fileList[i],response: {msg: fileList[i]} }
  1041. this.photoList.push(item)
  1042. }
  1043. }
  1044. if (this.form.trainer != null) {
  1045. this.form.trainer = this.form.trainer.split(',');
  1046. }else {
  1047. this.form.trainer = [];
  1048. }
  1049. this.open = true;
  1050. this.title = this.$t('修改') + this.$t('培训计划');
  1051. });
  1052. },
  1053. /** 提交按钮 */
  1054. submitForm() {
  1055. this.submitDisabled = true;
  1056. this.$refs["form"].validate(valid => {
  1057. if (valid) {
  1058. var trainerId = null;
  1059. this.form.trainer.forEach(function (value,key,arr) {
  1060. if (key != 0) {
  1061. trainerId = trainerId + "," + value;
  1062. }else if (key == 0) {
  1063. trainerId = value;
  1064. }
  1065. })
  1066. var id = null;
  1067. this.form.position.forEach(function (value,key,arr) {
  1068. if (key != 0) {
  1069. id = id + "," + value;
  1070. }else if (key == 0) {
  1071. id = value;
  1072. }
  1073. })
  1074. var designatedId = null;
  1075. this.designatedPositions.forEach(function (value,key,arr) {
  1076. if (key != 0) {
  1077. designatedId = designatedId + "," + value;
  1078. }else if (key == 0) {
  1079. designatedId = value;
  1080. }
  1081. })
  1082. this.form.designatedPosition = designatedId;
  1083. var staffId = null;
  1084. this.designatedStaffs.forEach(function (value,key,arr) {
  1085. if (key != 0) {
  1086. staffId = staffId + "," + value;
  1087. }else if (key == 0) {
  1088. staffId = value;
  1089. }
  1090. })
  1091. this.form.designatedStaff = staffId;
  1092. var u = null;
  1093. this.form.unit.forEach(function (value,key,arr) {
  1094. if (key != 0) {
  1095. u = u + "," + value;
  1096. }else if (key == 0) {
  1097. u = value;
  1098. }
  1099. })
  1100. var parentId = null;
  1101. this.nonParticipants.forEach(function (value,key,arr) {
  1102. if (key != 0) {
  1103. parentId = parentId + "," + value;
  1104. }else if (key == 0) {
  1105. parentId = value;
  1106. }
  1107. })
  1108. this.form.trainer = trainerId;
  1109. this.form.position = id;
  1110. this.form.unit = u;
  1111. // this.form.nonParticipants = parentId;
  1112. if (this.form.id != null) {
  1113. updateTrainingbcc(this.form).then(response => {
  1114. this.msgSuccess(this.$t('修改成功'));
  1115. this.open = false;
  1116. this.submitDisabled = false;
  1117. this.getList();
  1118. });
  1119. } else {
  1120. addTrainingbcc(this.form).then(response => {
  1121. this.msgSuccess(this.$t('新增成功'));
  1122. this.open = false;
  1123. this.submitDisabled = false;
  1124. this.getList();
  1125. });
  1126. }
  1127. } else {
  1128. this.submitDisabled = false;
  1129. }
  1130. });
  1131. },
  1132. /** 删除按钮操作 */
  1133. handleDelete(row) {
  1134. const ids = row.id || this.ids;
  1135. this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
  1136. confirmButtonText: this.$t('确定'),
  1137. cancelButtonText: this.$t('取消'),
  1138. type: "warning"
  1139. }).then(function() {
  1140. return delTrainingbcc(ids);
  1141. }).then(() => {
  1142. this.getList();
  1143. this.msgSuccess(this.$t('删除成功'));
  1144. })
  1145. },
  1146. /** 导出按钮操作 */
  1147. handleExport() {
  1148. const queryParams = this.queryParams;
  1149. this.$confirm(this.$t('是否确认导出所有培训计划数据项?'), this.$t('警告'), {
  1150. confirmButtonText: this.$t('确定'),
  1151. cancelButtonText: this.$t('取消'),
  1152. type: "warning"
  1153. }).then(function() {
  1154. return exportTrainingbcc(queryParams);
  1155. }).then(response => {
  1156. this.download(response.msg);
  1157. })
  1158. },
  1159. /** 参会人员名单按钮操作 */
  1160. handleStaffmgr(row) {
  1161. this.leftList = [];
  1162. const id = row.id || this.ids
  1163. getTrainingbccStaffIds(id).then(response => {
  1164. this.personForm = response.data;
  1165. if (response.data.staffIds != null) {
  1166. this.checked = response.data.staffIds.split(",");
  1167. }else {
  1168. this.checked = [];
  1169. }
  1170. this.personOpen = true;
  1171. });
  1172. },
  1173. handleDetail(row){
  1174. this.$router.push({ name: 'deviceList', params: { id: row.id }})
  1175. },
  1176. //岗位筛选变动
  1177. postChange() {
  1178. this.leftList = [];
  1179. if (this.checkboxPost.length > 0) {
  1180. this.staffmgrQueryParams.actualposts = this.checkboxPost.toString();
  1181. this.$nextTick(() => {
  1182. selectTimeStaffmgr(this.staffmgrQueryParams).then(response => {
  1183. const allData = response.rows
  1184. const data = [];
  1185. for (let i = 0; i < allData.length; i++) {
  1186. data[i] = allData[i].staffid
  1187. }
  1188. this.leftList = data;
  1189. })
  1190. })
  1191. }
  1192. },
  1193. //选择参会人员变动
  1194. staffChange() {
  1195. this.personForm.staffIds = this.checked.toString()
  1196. },
  1197. selectCourse(val) {
  1198. this.queryParams.trainingType = val
  1199. this.handleQuery()
  1200. },
  1201. /** 参会人员提交按钮 */
  1202. submitParticipants() {
  1203. this.$refs["personForm"].validate(valid => {
  1204. if (valid) {
  1205. updateTrainingbccStaffIds(this.personForm).then(response => {
  1206. this.msgSuccess(this.$t('修改成功'));
  1207. this.personOpen = false;
  1208. this.checkboxPost = [];
  1209. this.getList();
  1210. });
  1211. }
  1212. });
  1213. },
  1214. // 选择参会人员取消按钮
  1215. cancelParticipants() {
  1216. this.personOpen = false;
  1217. this.reset();
  1218. },
  1219. }
  1220. };
  1221. </script>
  1222. <style scoped>
  1223. .staff_checked >>> .el-transfer-panel {
  1224. width : 600px;
  1225. }
  1226. .el-transfer-panel__item.el-checkbox {
  1227. width: 553px !important;
  1228. }
  1229. .avatar-uploader .el-upload {
  1230. border: 1px dashed #d9d9d9;
  1231. border-radius: 6px;
  1232. cursor: pointer;
  1233. position: relative;
  1234. overflow: hidden;
  1235. }
  1236. .avatar-uploader .el-upload:hover {
  1237. border-color: #409EFF;
  1238. }
  1239. .avatar-uploader-icon {
  1240. font-size: 28px;
  1241. color: #8c939d;
  1242. width: 178px;
  1243. height: 178px;
  1244. line-height: 178px;
  1245. text-align: center;
  1246. }
  1247. .avatar {
  1248. width: 178px;
  1249. height: 178px;
  1250. display: block;
  1251. }
  1252. </style>