f40b1fc9bef249f405061eab23ea1dd33cd7e62a.svn-base 61 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950
  1. <template>
  2. <el-main class="ryjcxx">
  3. <div class="search">
  4. <el-row>
  5. <el-col :span="4">
  6. <el-form :inline="true" size="mini" class="demo-form-inline">
  7. <el-form-item label="性别">
  8. <el-select v-model="form.sex" clearable placeholder="请选择">
  9. <el-option label="男" value="男"></el-option>
  10. <el-option label="女" value="女"></el-option>
  11. </el-select>
  12. </el-form-item>
  13. </el-form>
  14. </el-col>
  15. <el-col :span="4">
  16. <el-form :inline="true" size="mini" class="demo-form-inline">
  17. <el-form-item label="拟推荐岗位">
  18. <el-select v-model="form.roleType" clearable placeholder="请选择" multiple>
  19. <el-option
  20. :label="item.label"
  21. :value="item.value"
  22. v-for="(item,index) in roleTypeData"
  23. :key="index"
  24. ></el-option>
  25. </el-select>
  26. </el-form-item>
  27. </el-form>
  28. </el-col>
  29. <el-col :span="4">
  30. <el-form :inline="true" size="mini" class="demo-form-inline">
  31. <el-form-item label="是否推荐">
  32. <el-select
  33. ref="selectProvince"
  34. v-model="form.state"
  35. clearable
  36. >
  37. <el-option label="已推荐" value="1"></el-option>
  38. <el-option label="未推荐" value="0"></el-option>
  39. </el-select>
  40. </el-form-item>
  41. </el-form>
  42. </el-col>
  43. <el-col :span="4">
  44. <el-form :inline="true" size="mini" class="demo-form-inline">
  45. <el-form-item label="是否公务员">
  46. <el-select v-model="form.isCvl" clearable>
  47. <el-option label="是" value="1"></el-option>
  48. <el-option label="否" value="0"></el-option>
  49. </el-select>
  50. </el-form-item>
  51. </el-form>
  52. </el-col>
  53. <el-col :span="4">
  54. <el-form :inline="true" size="mini" class="demo-form-inline">
  55. <el-form-item label="在职情况">
  56. <el-select v-model="form.isOffice" clearable placeholder="请选择">
  57. <el-option label="是" value="1"></el-option>
  58. <el-option label="否" value="2"></el-option>
  59. </el-select>
  60. </el-form-item>
  61. </el-form>
  62. </el-col>
  63. <el-col :span="2">
  64. <el-button type="primary" @click="associatedResume">批量关联简历</el-button>
  65. </el-col>
  66. <el-col :span="2">
  67. <el-button type="info" @click="changeView" icon="el-icon-sort">视图切换</el-button>
  68. </el-col>
  69. </el-row>
  70. <el-row>
  71. <el-col :span="4">
  72. <el-form :inline="true" size="mini" class="demo-form-inline">
  73. <el-form-item label="学历">
  74. <el-select
  75. v-model="form.education"
  76. clearable
  77. placeholder="请选择"
  78. multiple
  79. >
  80. <el-option label="专科及以下" value="1"></el-option>
  81. <el-option label="本科" value="2"></el-option>
  82. <el-option label="研究生" value="3"></el-option>
  83. <el-option label="博士" value="4"></el-option>
  84. </el-select>
  85. </el-form-item>
  86. </el-form>
  87. </el-col>
  88. <el-col :span="4">
  89. <el-form :inline="true" size="mini" class="demo-form-inline">
  90. <el-form-item label="个人职称">
  91. <el-select v-model="form.titles" clearable placeholder="请选择" multiple>
  92. <el-option label="正高" value="1"></el-option>
  93. <el-option label="副高" value="2"></el-option>
  94. <el-option label="中级" value="3"></el-option>
  95. <el-option label="县市级" value="4"></el-option>
  96. </el-select>
  97. </el-form-item>
  98. </el-form>
  99. </el-col>
  100. <el-col :span="4">
  101. <el-form :inline="true" size="mini" class="demo-form-inline">
  102. <el-form-item label="单位职级">
  103. <el-select v-model="form.unitRanks" clearable placeholder="请选择">
  104. <el-option label="省部级" value="1"></el-option>
  105. <el-option label="地市级" value="2"></el-option>
  106. <el-option label="县市级" value="3"></el-option>
  107. </el-select>
  108. </el-form-item>
  109. </el-form>
  110. </el-col>
  111. <!-- <el-col :span="4">-->
  112. <!-- <el-form :inline="true" size="mini" class="demo-form-inline">-->
  113. <!-- <el-form-item label="是否录用">-->
  114. <!-- <el-select-->
  115. <!-- v-model="form.isAppro"-->
  116. <!-- clearable-->
  117. <!-- -->
  118. <!-- >-->
  119. <!-- <el-option label="录用" value="1"></el-option>-->
  120. <!-- <el-option label="回绝" value="0"></el-option>-->
  121. <!-- </el-select>-->
  122. <!-- </el-form-item>-->
  123. <!-- </el-form>-->
  124. <!-- </el-col>-->
  125. <el-col :span="4">
  126. <el-button type="primary" icon="el-icon-search" @click="searchJcXxData">查询</el-button>
  127. <el-button type="primary" icon="el-icon-plus" @click="addPers">添加人员</el-button>
  128. </el-col>
  129. <el-col :span="4">
  130. <el-button type="success" @click="exportPlan" icon="el-icon-sort-up">导出Excel</el-button>
  131. <el-button type="success" @click="importExcel" icon="el-icon-sort-down">批量导入人员信息</el-button>
  132. </el-col>
  133. </el-row>
  134. </div>
  135. <div class="table">
  136. <el-table
  137. v-if="!changeViewInfo"
  138. v-loading="loading"
  139. border
  140. ref="multipleTable"
  141. :height="tableHeight"
  142. :data="jichuData"
  143. tooltip-effect="dark"
  144. style="width: 100%"
  145. >
  146. <el-table-column align="center" type="index" label="序号" min-width="25">
  147. <template
  148. slot-scope="scope"
  149. >{{ (form.pageNum - 1) * form.pageSize + (scope.$index + 1) }}
  150. </template>
  151. </el-table-column>
  152. <el-table-column
  153. header-align="center"
  154. align="center"
  155. min-width="100"
  156. prop="name"
  157. label="姓名"
  158. show-overflow-tooltip
  159. ></el-table-column>
  160. <el-table-column
  161. header-align="center"
  162. align="center"
  163. min-width="120"
  164. prop="sex"
  165. label="性别"
  166. show-overflow-tooltip
  167. ></el-table-column>
  168. <el-table-column
  169. header-align="center"
  170. align="center"
  171. min-width="80"
  172. show-overflow-tooltip
  173. prop="age"
  174. label="年龄"
  175. ></el-table-column>
  176. <el-table-column
  177. header-align="center"
  178. align="center"
  179. min-width="200"
  180. show-overflow-tooltip
  181. prop="idNo"
  182. label="身份证号码"
  183. ></el-table-column>
  184. <el-table-column
  185. header-align="center"
  186. align="center"
  187. min-width="200"
  188. label="工作单位"
  189. show-overflow-tooltip
  190. prop="workDpNm"
  191. ></el-table-column>
  192. <el-table-column
  193. header-align="center"
  194. align="center"
  195. min-width="100"
  196. label="职务"
  197. show-overflow-tooltip
  198. prop="duty"
  199. ></el-table-column>
  200. <el-table-column
  201. header-align="center"
  202. align="center"
  203. min-width="100"
  204. prop="titles"
  205. label="职称"
  206. show-overflow-tooltip
  207. >
  208. <template slot-scope="scope">
  209. <span v-if="scope.row.titles == '1'">正高</span>
  210. <span v-if="scope.row.titles == '2'">副高</span>
  211. <span v-if="scope.row.titles == '3'">中级</span>
  212. <span v-if="scope.row.titles == '4'">初级</span>
  213. </template>
  214. </el-table-column>
  215. <el-table-column
  216. header-align="center"
  217. align="center"
  218. min-width="100"
  219. prop="isOffice"
  220. label="在职情况"
  221. >
  222. <template slot-scope="scope">
  223. <span v-if="scope.row.isOffice == '1'">是</span>
  224. <span v-if="scope.row.isOffice == '2'">否</span>
  225. </template>
  226. </el-table-column>
  227. <el-table-column
  228. header-align="center"
  229. align="center"
  230. min-width="100"
  231. prop="isOffice"
  232. label="是否为公务员(含参公)"
  233. >
  234. <template slot-scope="scope">
  235. <span v-if="scope.row.isCvl== '1'">是</span>
  236. <span v-if="scope.row.isCvl == '0'">否</span>
  237. </template>
  238. </el-table-column>
  239. <el-table-column
  240. header-align="center"
  241. align="center"
  242. min-width="120"
  243. prop="education"
  244. label="学历"
  245. show-overflow-tooltip
  246. >
  247. <template slot-scope="scope">
  248. <span v-if="scope.row.education == '1'">专科及以下</span>
  249. <span v-if="scope.row.education == '2'">本科</span>
  250. <span v-if="scope.row.education == '3'">研究生</span>
  251. <span v-if="scope.row.education == '4'">博士</span>
  252. </template>
  253. </el-table-column>
  254. <el-table-column
  255. header-align="center"
  256. align="center"
  257. min-width="80"
  258. prop="workAdNm"
  259. label="原工作地"
  260. show-overflow-tooltip
  261. ></el-table-column>
  262. <el-table-column
  263. header-align="center"
  264. align="center"
  265. min-width="150"
  266. prop="professional"
  267. label="从事专业"
  268. show-overflow-tooltip
  269. ></el-table-column>
  270. <el-table-column
  271. header-align="center"
  272. align="center"
  273. min-width="120"
  274. prop="mobilenumb"
  275. label="手机"
  276. show-overflow-tooltip
  277. ></el-table-column>
  278. <el-table-column
  279. header-align="center"
  280. align="center"
  281. min-width="80"
  282. prop="unitRanks"
  283. label="单位职级"
  284. show-overflow-tooltip
  285. >
  286. <template slot-scope="scope">
  287. <span v-if="scope.row.unitRanks == '1'">省部级</span>
  288. <span v-if="scope.row.unitRanks == '2'">地市级</span>
  289. <span v-if="scope.row.unitRanks == '3'">县市级</span>
  290. </template>
  291. </el-table-column>
  292. <el-table-column
  293. header-align="center"
  294. align="center"
  295. min-width="120"
  296. label="电子邮箱"
  297. prop="email"
  298. show-overflow-tooltip
  299. >
  300. <!-- <template slot-scope="scope">
  301. {{groupType(scope.row.groupType)}}
  302. </template>-->
  303. </el-table-column>
  304. <el-table-column
  305. header-align="center"
  306. align="center"
  307. min-width="120"
  308. prop="inTm"
  309. label="简历"
  310. show-overflow-tooltip
  311. >
  312. <template slot-scope="scope">
  313. <span style="color: #409EFF" @click="checkResume(scope.row)">查看</span>
  314. </template>
  315. </el-table-column>
  316. <el-table-column
  317. header-align="center"
  318. align="center"
  319. min-width="80"
  320. prop="roleType"
  321. label="拟推荐稽察岗位"
  322. show-overflow-tooltip
  323. >
  324. <template slot-scope="scope">{{roleType(scope.row.roleType)}}</template>
  325. </el-table-column>
  326. <el-table-column
  327. header-align="center"
  328. align="center"
  329. min-width="80"
  330. prop="state"
  331. label="是否推荐"
  332. show-overflow-tooltip
  333. >
  334. <template slot-scope="scope">
  335. <span v-if="scope.row.state == '0'" style="color: #F56C6C">未推荐</span>
  336. <span v-else style="color: #67C23A">已推荐</span>
  337. </template>
  338. </el-table-column>
  339. <!-- <el-table-column-->
  340. <!-- header-align="center"-->
  341. <!-- align="center"-->
  342. <!-- min-width="80"-->
  343. <!-- prop="state"-->
  344. <!-- label="是否录用"-->
  345. <!-- show-overflow-tooltip>-->
  346. <!-- <template slot-scope="scope">-->
  347. <!-- <div>-->
  348. <!-- <span v-if="scope.row.state == '2'" style="color: #67C23A">录用</span>-->
  349. <!-- </div>-->
  350. <!-- <div v-if="scope.row.state == '3'">-->
  351. <!-- <span style="color: #F56C6C">回绝</span>-->
  352. <!-- <el-button-->
  353. <!-- icon="el-icon-view"-->
  354. <!-- style="color: #F56C6C"-->
  355. <!-- type="text"-->
  356. <!-- @click="showRefuseDetails(scope.row)"-->
  357. <!-- ></el-button>-->
  358. <!-- </div>-->
  359. <!-- </template>-->
  360. <!-- </el-table-column>-->
  361. <el-table-column align="center" min-width="220" label="操作" fixed="right">
  362. <template slot-scope="scope">
  363. <span>
  364. <el-button
  365. type="primary"
  366. size="mini"
  367. @click.stop="renYuanModifyThe(scope.row)"
  368. >编辑</el-button>
  369. <el-button
  370. type="danger"
  371. size="mini"
  372. @click.stop="renYuanDelete(scope.row)"
  373. >删除</el-button>
  374. </span>
  375. </template>
  376. </el-table-column>
  377. </el-table>
  378. <el-row type="flex" justify="space-between" align="middle">
  379. <el-col :span="24">
  380. <el-pagination
  381. style="margin: 10px auto"
  382. v-if="!changeViewInfo"
  383. background
  384. :pager-count="5"
  385. :current-page="form.pageIndex"
  386. :page-size="form.pageSize"
  387. :page-sizes="[10, 20, 30, 40, 50, 100]"
  388. layout="sizes, total, prev, pager, next"
  389. :total="total"
  390. @current-change="pageIndexChange"
  391. @size-change="handleSizeChange"
  392. ></el-pagination>
  393. </el-col>
  394. <el-col :span="2">
  395. <!-- <el-button type="primary">推荐表下载</el-button> -->
  396. </el-col>
  397. </el-row>
  398. <el-tabs
  399. v-model="activeName"
  400. @tab-click="handleClick"
  401. v-if="changeViewInfo"
  402. :style="{'height':tableHeight + 'px'}"
  403. >
  404. <!-- <el-tab-pane label="地区分布" name="first">
  405. <div
  406. v-if="activeName == 'first'"
  407. ref="bar_dv1"
  408. :style="{width:100 + '%',height:tableHeight - 80 + 'px'}"
  409. ></div>
  410. </el-tab-pane> -->
  411. <el-tab-pane label="职称情况" name="second">
  412. <div
  413. v-if="activeName == 'second'"
  414. ref="bar_dv2"
  415. :style="{width:100 + '%',height:tableHeight - 80 + 'px'}"
  416. ></div>
  417. </el-tab-pane>
  418. <el-tab-pane label="角色分类" name="third">
  419. <div
  420. v-if="activeName == 'third'"
  421. ref="bar_dv3"
  422. :style="{width:100 + '%',height:tableHeight - 80 + 'px'}"
  423. ></div>
  424. </el-tab-pane>
  425. <el-tab-pane label="学历情况" name="fourth">
  426. <div
  427. v-if="activeName == 'fourth'"
  428. ref="bar_dv4"
  429. :style="{width:100 + '%',height:tableHeight - 80 + 'px'}"
  430. ></div>
  431. </el-tab-pane>
  432. <!-- <el-tab-pane label="年龄分布" name="five">
  433. <div
  434. v-if="activeName == 'five'"
  435. ref="bar_dv5"
  436. :style="{width:100 + '%',height:tableHeight - 80 + 'px'}"
  437. ></div>
  438. </el-tab-pane> -->
  439. <el-tab-pane label="在职情况" name="six">
  440. <div
  441. v-if="activeName == 'six'"
  442. ref="bar_dv6"
  443. :style="{width:100 + '%',height:tableHeight - 80 + 'px'}"
  444. ></div>
  445. </el-tab-pane>
  446. </el-tabs>
  447. </div>
  448. <!-- 导出人员信息 -->
  449. <el-dialog
  450. title="请选择导出人员信息"
  451. :visible.sync="ExcelDialogVisible"
  452. :close-on-click-modal="false"
  453. width="40%"
  454. >
  455. <el-tree
  456. style="height: 50vh;overflow: auto;"
  457. ref="roleTree"
  458. show-checkbox
  459. highlight-current
  460. node-key="code"
  461. :data="roleData"
  462. :props="roleProps"
  463. :default-checked-keys="defaultCheckedKeys"
  464. :expand-on-click-node="false"
  465. default-expand-all
  466. @check="handleCheck"
  467. ></el-tree>
  468. <div slot="footer" class="dialog-footer">
  469. <el-button @click="ExcelDialogVisible = false">取 消</el-button>
  470. <el-button type="primary" @click="exportPlan">确 定</el-button>
  471. </div>
  472. </el-dialog>
  473. <!-- 添加人员 -->
  474. <el-dialog
  475. :title="dialogFaTitle + '人员信息'"
  476. :visible.sync="addPlanDialogVisible"
  477. v-if="addPlanDialogVisible"
  478. :close-on-click-modal="false"
  479. >
  480. <el-form
  481. :model="renyuanForm"
  482. ref="renyuanForm"
  483. :label-width="FormlableWidth"
  484. class="renyuan_form"
  485. :rules="rulesry"
  486. >
  487. <el-form-item label="姓名" prop="name">
  488. <el-input v-model="renyuanForm.name" placeholder="请输入内容"></el-input>
  489. </el-form-item>
  490. <el-form-item label="性别" prop="sex">
  491. <template>
  492. <el-radio v-model="renyuanForm.sex" label="男">男</el-radio>
  493. <el-radio v-model="renyuanForm.sex" label="女">女</el-radio>
  494. </template>
  495. </el-form-item>
  496. <el-form-item label="身份证号" prop="idNo">
  497. <el-input v-model="renyuanForm.idNo" placeholder="请输入内容"></el-input>
  498. </el-form-item>
  499. <el-form-item label="手机" prop="mobilenumb">
  500. <el-input v-model="renyuanForm.mobilenumb" placeholder="请输入内容"></el-input>
  501. </el-form-item>
  502. <el-form-item label="学历" prop="education">
  503. <el-select v-model="renyuanForm.education">
  504. <el-option label="专科及以下" value="1"></el-option>
  505. <el-option label="本科" value="2"></el-option>
  506. <el-option label="研究生" value="3"></el-option>
  507. <el-option label="博士" value="4"></el-option>
  508. </el-select>
  509. </el-form-item>
  510. <el-form-item label="拟推荐稽察岗位" prop="roleType">
  511. <el-select v-model="renyuanForm.roleType" clearable placeholder="请选择">
  512. <el-option
  513. :label="item.label"
  514. :value="item.value"
  515. v-for="(item,index) in roleTypeData"
  516. :key="index"
  517. ></el-option>
  518. </el-select>
  519. </el-form-item>
  520. <el-form-item label="是否为公务员" prop="isCvl">
  521. <el-select v-model="renyuanForm.isCvl">
  522. <el-option label="是" value="1"></el-option>
  523. <el-option label="否" value="0"></el-option>
  524. </el-select>
  525. </el-form-item>
  526. <!-- <el-form-item label="入库时间" prop="inTm">-->
  527. <!-- <el-date-picker v-model="renyuanForm.inTm" type="date" placeholder="选择日期"></el-date-picker>-->
  528. <!-- </el-form-item>-->
  529. <el-form-item label="在职情况" prop="isOffice">
  530. <el-select v-model="renyuanForm.isOffice">
  531. <el-option label="是" value="1"></el-option>
  532. <el-option label="否" value="2"></el-option>
  533. </el-select>
  534. </el-form-item>
  535. <el-form-item label="是否培训" prop="isTraining" placeholder="否">
  536. <el-select v-model="renyuanForm.isTraining" disabled>
  537. <el-option label="是" value="1"></el-option>
  538. <el-option label="否" value="2"></el-option>
  539. </el-select>
  540. </el-form-item>
  541. <el-form-item label="推荐单位">
  542. <el-input v-model="renyuanForm.depNm" placeholder="请输入推荐单位"></el-input>
  543. </el-form-item>
  544. <el-form-item label="原工作地" prop="workAd">
  545. <el-select
  546. ref="workSelect"
  547. v-model="renyuanForm.workAd"
  548. clearable
  549. @change="workChange"
  550. >
  551. <el-option
  552. v-for="item in provList"
  553. :key="item.adCode"
  554. :label="item.adName"
  555. :value="item.adCode"
  556. ></el-option>
  557. </el-select>
  558. </el-form-item>
  559. <el-form-item label="工作单位">
  560. <el-input v-model="renyuanForm.workDpNm" placeholder="请输入内容"></el-input>
  561. </el-form-item>
  562. <el-form-item label="单位职级" prop="unitRanks">
  563. <el-select v-model="renyuanForm.unitRanks" clearable placeholder="请选择">
  564. <el-option label="省部级" value="1"></el-option>
  565. <el-option label="地市级" value="2"></el-option>
  566. <el-option label="县市级" value="3"></el-option>
  567. </el-select>
  568. </el-form-item>
  569. <el-form-item label="职称" prop="titles">
  570. <el-select v-model="renyuanForm.titles" clearable placeholder="请选择">
  571. <el-option label="正高" value="1"></el-option>
  572. <el-option label="副高" value="2"></el-option>
  573. <el-option label="中级" value="3"></el-option>
  574. <el-option label="县市级" value="4"></el-option>
  575. </el-select>
  576. </el-form-item>
  577. <el-form-item label="职务">
  578. <el-input v-model="renyuanForm.duty" placeholder="请输入内容"></el-input>
  579. </el-form-item>
  580. <el-form-item label="从事专业">
  581. <el-input v-model="renyuanForm.professional" placeholder="请输入内容"></el-input>
  582. </el-form-item>
  583. <el-form-item label="流域机构">
  584. <el-select v-model="renyuanForm.orgCode" clearable @change="changeValue">
  585. <el-option
  586. v-for="item in lyjgData"
  587. :key="item.id"
  588. :label="item.pnm"
  589. :value="item.id"
  590. style="height: 5vh"
  591. ></el-option>
  592. </el-select>
  593. </el-form-item>
  594. <el-form-item label="Email" prop="email">
  595. <el-input v-model="renyuanForm.email" placeholder="请输入内容"></el-input>
  596. </el-form-item>
  597. <el-form-item label="紧急联系人">
  598. <el-input v-model="renyuanForm.emgcCntct" placeholder="请输入内容"></el-input>
  599. </el-form-item>
  600. <el-form-item label="紧急联系方式" prop="emgcCntctPhone">
  601. <el-input v-model="renyuanForm.emgcCntctPhone" placeholder="请输入内容"></el-input>
  602. </el-form-item>
  603. <el-form-item label="银行账户">
  604. <el-input v-model="renyuanForm.bankAccount" placeholder="请输入内容"></el-input>
  605. </el-form-item>
  606. <el-form-item label="开户银行">
  607. <el-input v-model="renyuanForm.bankName" placeholder="请输入内容"></el-input>
  608. </el-form-item>
  609. <el-form-item label="体检结果">
  610. <el-input v-model="renyuanForm.oe" placeholder="请输入内容"></el-input>
  611. </el-form-item>
  612. <el-form-item label="简历">
  613. <el-upload
  614. ref="upload"
  615. class="upload-demo"
  616. :action="UploadUrl()"
  617. :headers="header"
  618. accept=".pdf"
  619. :file-list="fileList"
  620. :on-error="fileUpErr"
  621. :on-success="fileSuccess"
  622. :before-upload="onBeforeUploadpdf"
  623. :on-change="addFile"
  624. :auto-upload="false"
  625. :on-preview="handlePreview"
  626. :before-remove="beforeRemove"
  627. >
  628. <el-button size="small" type="primary">选取文件</el-button>
  629. <div slot="tip" class="el-upload__tip">只能上传pdf文件</div>
  630. </el-upload>
  631. </el-form-item>
  632. </el-form>
  633. <div slot="footer" class="dialog-footer">
  634. <el-button @click="addPlanDialogVisible = false">取 消</el-button>
  635. <el-button type="primary" @click="appendPlan('renyuanForm')">确 定</el-button>
  636. </div>
  637. </el-dialog>
  638. <!--简历详情-->
  639. <el-dialog
  640. title="附件详情"
  641. :visible.sync="fujianVisible"
  642. :close-on-click-modal="false"
  643. width="60%"
  644. class="fjxq"
  645. >
  646. <iframe
  647. width="100%"
  648. height="100%"
  649. :src="pdfTitle"
  650. color="white"
  651. background-color="white"
  652. currentScaleValue="page-width"
  653. ></iframe>
  654. </el-dialog>
  655. <!--批量导入人员信息-->
  656. <el-dialog
  657. title="批量导入人员信息"
  658. :visible.sync="importPersVisible"
  659. :close-on-click-modal="false"
  660. width="40%"
  661. >
  662. <upload
  663. ref="uploadFile"
  664. accept=".xls, .xlsx"
  665. :url="`/pdcApi/tac/expr/rcmm/insertList`"
  666. @uploadOver="removeNewSupervision"
  667. ></upload>
  668. <div slot="footer" class="dialog-footer">
  669. <el-button @click="importPersVisible = false">取 消</el-button>
  670. <el-button type="primary" @click="importExcelPlan">确 定</el-button>
  671. </div>
  672. </el-dialog>
  673. <!--批量关联简历-->
  674. <el-dialog
  675. title="批量关联简历"
  676. :visible.sync="associatedResumeVisible"
  677. :close-on-click-modal="false"
  678. width="40%"
  679. >
  680. <upload
  681. ref="uploadFileJl"
  682. accept=".zip"
  683. :url="`/pdcApi/tac/expr/rcmm/uploadBio`"
  684. @uploadOver="removeNewSupervisionJl"
  685. ></upload>
  686. <div slot="footer" class="dialog-footer">
  687. <el-button @click="associatedResumeVisible = false">取 消</el-button>
  688. <el-button type="primary" @click="associatedResumePlan">确 定</el-button>
  689. </div>
  690. </el-dialog>
  691. </el-main>
  692. </template>
  693. <script>
  694. import echarts from "echarts";
  695. import request from "../../../utils/gw_ajax_request";
  696. import addvSearch from "../../../widgets/addvSearch.vue";
  697. import {exportModel} from "@util/gw_exportModel";
  698. import {mapMutations} from "vuex";
  699. import {hostUrl} from "@util/global_variable.js";
  700. export default {
  701. // 省厅专家推荐
  702. name: "renyuanxinxi",
  703. components: {
  704. addvSearch: addvSearch,
  705. upload: resolve => {
  706. require(["@widget/uploadFile.vue"], resolve);
  707. }
  708. },
  709. data() {
  710. var checkTel = (rule, value, callback) => {
  711. if (!value) {
  712. callback();
  713. }
  714. if (isNaN(value)) {
  715. callback(new Error("请输入合理电话"));
  716. }
  717. var isPhone = /^([0-9]{3,4}-)?[0-9]{7,8}$/; //座机
  718. var isMob = /^[1][3,4,5,6,7,8][0-9]{9}$/; // 手机格式
  719. if (!isMob.test(value) && !isPhone.test(value)) {
  720. callback(new Error("请输入合理电话"));
  721. } else {
  722. callback();
  723. }
  724. };
  725. var isEmail = (rule, value, callback) => {
  726. if (!value) {
  727. callback();
  728. } else {
  729. const reg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
  730. const email = reg.test(value);
  731. if (!email) {
  732. callback(new Error("邮箱格式如:admin@163.com"));
  733. } else {
  734. callback();
  735. }
  736. }
  737. };
  738. return {
  739. tableHeight: window.innerHeight - 240,
  740. changeViewInfo: false,
  741. activeName: "second",
  742. form: {
  743. isOffice: "",
  744. education: [],
  745. titles: [],
  746. unitRanks: [],
  747. sex: "",
  748. isCvl: "",
  749. pageSize: 20,
  750. pageNum: 1,
  751. roleType: [],
  752. state: "",
  753. isAppro: ""
  754. },
  755. valueSt: [],
  756. lyjgData: [],
  757. sfType: [
  758. {
  759. label: "是",
  760. value: "1"
  761. },
  762. {
  763. label: "否",
  764. value: "2"
  765. }
  766. ],
  767. loading: false,
  768. jichuData: [],
  769. total: 0,
  770. ExcelDialogVisible: false,
  771. roleLoading: false,
  772. roleData: [],
  773. roleProps: {
  774. label: "name",
  775. disabled: "selectFlag"
  776. },
  777. defaultCheckedKeys: [],
  778. //添加人员
  779. addPlanDialogVisible: false,
  780. renyuanForm: {
  781. name: "",
  782. sex: "",
  783. idNo: "",
  784. mobilenumb: "",
  785. education: "",
  786. roleType: "",
  787. inTm: "",
  788. isOffice: "",
  789. isTraining: "否",
  790. recommendedUnits: "",
  791. workAdNm: "",
  792. workAd: "",
  793. workDpNm: "",
  794. unitRanks: "",
  795. titles: "",
  796. duty: "",
  797. professional: "",
  798. orgCode: "",
  799. email: "",
  800. emgcCntct: "",
  801. emgcCntctPhone: "",
  802. bankAccount: "",
  803. bankName: "",
  804. oe: "",
  805. resume: "",
  806. isCvl: "是"
  807. },
  808. dialogFaTitle: "添加",
  809. FormlableWidth: window.innerWidth * 0.15 + "px",
  810. rulesry: {
  811. name: [{required: true, message: "姓名不能为空"}],
  812. sex: [{required: true, message: "性别不能为空"}],
  813. idNo: [
  814. {
  815. required: true,
  816. message: "请填写证件号码",
  817. trigger: "blur"
  818. },
  819. {
  820. pattern: /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/,
  821. message: "证件号码格式有误!",
  822. trigger: "blur"
  823. }
  824. ],
  825. mobilenumb: [
  826. {required: true, message: "手机不能为空"},
  827. {validator: checkTel, trigger: "blur"}
  828. ],
  829. education: [{required: true, message: "学历不能为空"}],
  830. roleType: [{required: true, message: "角色不能为空"}],
  831. groupType: [{required: true, message: "库别不能为空"}],
  832. inTm: [{required: true, message: "入库时间不能为空"}],
  833. isOffice: [{required: true, message: "在职情况不能为空"}],
  834. workAd: [{required: true, message: "原工作地不能为空"}],
  835. unitRanks: [{required: true, message: "单位职级不能为空"}],
  836. titles: [{required: true, message: "职称不能为空"}],
  837. isCvl: [{required: true, message: "是否为公务员不能为空"}],
  838. email: [{validator: isEmail, trigger: "blur"}],
  839. emgcCntctPhone: [{validator: checkTel, trigger: "blur"}]
  840. },
  841. url: "",
  842. header: {
  843. persId: localStorage.getItem("userid"),
  844. accessToken: localStorage.getItem("accessToken")
  845. },
  846. fileList: [],
  847. fileBoolean: false,
  848. fujianVisible: false,
  849. pdfTitle: "",
  850. importPersVisible: false,
  851. associatedResumeVisible: false
  852. };
  853. },
  854. mounted() {
  855. this.$nextTick(() => {
  856. this.getRyYjTypeData(); // 流域机构
  857. this.getRyXxData(); // 人员信息
  858. this.getAreaList(); // 获取provList
  859. });
  860. },
  861. methods: {
  862. // 获取adCode
  863. ...mapMutations(["getAreaList"]),
  864. getRyYjTypeData() {
  865. request
  866. .get(`dc/brief/report/getRiverNode?type=1`)
  867. .then(res => {
  868. if (res.success) {
  869. this.lyjgData = res.data;
  870. }
  871. })
  872. .catch(err => {
  873. });
  874. },
  875. // 角色
  876. roleType(row) {
  877. if (row) {
  878. this.roleTypeData.forEach(ele => {
  879. if (ele.value == row) {
  880. row = ele.label;
  881. }
  882. });
  883. return row;
  884. } else {
  885. return "";
  886. }
  887. },
  888. // 库别
  889. groupType(row) {
  890. if (row) {
  891. this.groupTypeData.forEach(ele => {
  892. if (ele.value == row) {
  893. row = ele.label;
  894. }
  895. });
  896. return row;
  897. } else {
  898. return "";
  899. }
  900. },
  901. getTj(val, isExport) {
  902. let obj = {};
  903. obj.roleType = this.form.roleType.toString();
  904. obj.isOffice = this.form.isOffice;
  905. obj.education = this.form.education.toString();
  906. obj.titles = this.form.titles.toString();
  907. obj.unitRanks = this.form.unitRanks.toString();
  908. obj.pageSize = this.form.pageSize;
  909. obj.pageNum = this.form.pageNum;
  910. obj.sex = this.form.sex;
  911. obj.isCvl = this.form.isCvl;
  912. obj.state = this.form.state;
  913. obj.isAppro = this.form.isAppro;
  914. return obj;
  915. },
  916. getRyXxData() {
  917. this.loading = true;
  918. let obj = this.getTj();
  919. request.post(`/tac/expr/rcmm/getRcmmPage`, obj).then(res => {
  920. if (res.success) {
  921. this.loading = false;
  922. this.jichuData = res.data.list;
  923. this.total = res.data.total;
  924. }
  925. });
  926. },
  927. // 查询
  928. searchJcXxData() {
  929. if (this.changeViewInfo) {
  930. if (this.activeName == "first") {
  931. this.initDqfbChart();
  932. } else if (this.activeName == "second") {
  933. this.initZcqkChart();
  934. } else if (this.activeName == "third") {
  935. this.initJsflChart();
  936. } else if (this.activeName == "fourth") {
  937. this.initXlqkChart();
  938. } else if (this.activeName == "five") {
  939. this.initNlfbChart();
  940. } else if (this.activeName == "six") {
  941. this.initZzqkChart();
  942. }
  943. } else {
  944. this.getRyXxData();
  945. }
  946. },
  947. changeView() {
  948. this.changeViewInfo = !this.changeViewInfo;
  949. if (this.changeViewInfo) {
  950. this.$nextTick(() => {
  951. this.activeName = "second";
  952. this.tableHeight = window.innerHeight * 0.58;
  953. this.initZcqkChart();
  954. });
  955. } else {
  956. this.$nextTick(() => {
  957. this.getRyXxData();
  958. this.tableHeight = window.innerHeight * 0.5;
  959. });
  960. }
  961. },
  962. changeValue(value) {
  963. let obj = {};
  964. obj = this.lyjgData.find(item => {
  965. return item.id === value;
  966. });
  967. this.renyuanForm["orgName"] = obj.pnm;
  968. },
  969. handleClick(tab, event) {
  970. if (tab.name == "first") {
  971. this.$nextTick(() => {
  972. this.initDqfbChart();
  973. });
  974. } else if (tab.name == "second") {
  975. this.$nextTick(() => {
  976. this.initZcqkChart();
  977. });
  978. } else if (tab.name == "third") {
  979. this.$nextTick(() => {
  980. this.initJsflChart();
  981. });
  982. } else if (tab.name == "fourth") {
  983. this.$nextTick(() => {
  984. this.initXlqkChart();
  985. });
  986. } else if (tab.name == "five") {
  987. this.$nextTick(() => {
  988. this.initNlfbChart();
  989. });
  990. } else if (tab.name == "six") {
  991. this.$nextTick(() => {
  992. this.initZzqkChart();
  993. });
  994. }
  995. },
  996. getStrParams(obj) {
  997. let str = "?";
  998. for (let key of Object.keys(obj)) {
  999. str += `${key}=${obj[key]}&`;
  1000. }
  1001. str = str.slice(0, str.length - 1);
  1002. return str;
  1003. },
  1004. // 导入
  1005. importExcel() {
  1006. this.importPersVisible = true;
  1007. },
  1008. // 批量关联简历
  1009. associatedResume() {
  1010. this.associatedResumeVisible = true;
  1011. },
  1012. // 批量人员导入确定
  1013. importExcelPlan() {
  1014. this.submitUpload();
  1015. },
  1016. // 批量简历确定
  1017. associatedResumePlan() {
  1018. this.submitUploadJl();
  1019. },
  1020. // Excel导出保存
  1021. async exportPlan() {
  1022. // let data = JSON.stringify(this.getTj(this.defaultCheckedKeys,1));
  1023. let url = `/pdcApi/tac/expr/rcmm/downRcmmExcel${this.getStrParams(
  1024. this.form
  1025. )}`;
  1026. let downloadName = "人员信息.xls";
  1027. let type = "get";
  1028. let result = await exportModel(type, url, downloadName);
  1029. if (!result) {
  1030. this.ExcelDialogVisible = false;
  1031. }
  1032. },
  1033. handleCheck(res) {
  1034. this.defaultCheckedKeys = [];
  1035. let getCheckedNodes = this.$refs.roleTree.getCheckedNodes();
  1036. getCheckedNodes.forEach((item, index) => {
  1037. this.defaultCheckedKeys.push(item.code);
  1038. });
  1039. },
  1040. // 分页
  1041. pageIndexChange(val) {
  1042. this.$nextTick(() => {
  1043. this.form.pageNum = val;
  1044. this.getRyXxData();
  1045. });
  1046. },
  1047. handleSizeChange(val) {
  1048. this.$nextTick(() => {
  1049. this.form.pageSize = val;
  1050. this.getRyXxData();
  1051. });
  1052. },
  1053. // 绘制地区分布
  1054. async initDqfbChart() {
  1055. let xData = [];
  1056. let yData = [];
  1057. await request
  1058. .post(`/tac/worker/b/countByAdCode`, this.getTj())
  1059. .then(res => {
  1060. if (res.success) {
  1061. this.$nextTick(() => {
  1062. res.data.forEach((item, index) => {
  1063. xData.push(item.name);
  1064. yData.push(item.count);
  1065. });
  1066. });
  1067. }
  1068. });
  1069. let myChart = echarts.init(this.$refs.bar_dv1);
  1070. // 绘制图表
  1071. myChart.setOption({
  1072. color: ["#3398DB"],
  1073. tooltip: {
  1074. trigger: "axis",
  1075. axisPointer: {
  1076. // 坐标轴指示器,坐标轴触发有效
  1077. type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
  1078. }
  1079. },
  1080. grid: {
  1081. left: "3%",
  1082. right: "4%",
  1083. bottom: "3%",
  1084. containLabel: true
  1085. },
  1086. xAxis: [
  1087. {
  1088. type: "category",
  1089. data: xData,
  1090. axisTick: {
  1091. alignWithLabel: true
  1092. },
  1093. axisLabel: {
  1094. rotate: 45,
  1095. color: "#333"
  1096. }
  1097. }
  1098. ],
  1099. yAxis: [
  1100. {
  1101. type: "value",
  1102. name: "数量",
  1103. axisLabel: {
  1104. formatter: `{value} 个`
  1105. },
  1106. max: function (value) {
  1107. return value.max;
  1108. },
  1109. min: function (value) {
  1110. return value.min;
  1111. }
  1112. }
  1113. ],
  1114. series: [
  1115. {
  1116. name: "地区分布情况",
  1117. type: "bar",
  1118. barWidth: "50%",
  1119. data: yData
  1120. }
  1121. ]
  1122. });
  1123. },
  1124. // 绘制职称情况
  1125. async initZcqkChart() {
  1126. let xData = [];
  1127. let bData = [];
  1128. await request
  1129. .post(`/tac/expr/rcmm/countRcmmByTitles`, this.getTj())
  1130. .then(res => {
  1131. if (res.success) {
  1132. this.$nextTick(() => {
  1133. res.data.forEach((item, index) => {
  1134. xData.push(item.name);
  1135. bData.push({
  1136. value: item.count,
  1137. name: item.name
  1138. });
  1139. });
  1140. });
  1141. }
  1142. });
  1143. let _self = this;
  1144. let chart = echarts.init(this.$refs.bar_dv2);
  1145. let option = {
  1146. backgroundColor: "rgba(0,0,0,0)",
  1147. color: ["#0195F2", "#5CE9C7", "#FED172", "#FB6086"],
  1148. title: {
  1149. text: "",
  1150. left: "center",
  1151. top: 20,
  1152. textStyle: {
  1153. color: "#ccc"
  1154. }
  1155. },
  1156. legend: {
  1157. icon: "circle",
  1158. orient: "horizontal",
  1159. textStyle: {
  1160. fontSize: 12,
  1161. color: "#333"
  1162. },
  1163. x: "center",
  1164. y: "bottom",
  1165. data: xData
  1166. },
  1167. tooltip: {
  1168. trigger: "item",
  1169. formatter: "{a} <br/>{b} : {c} ({d}%)"
  1170. },
  1171. series: [
  1172. {
  1173. name: "职称情况",
  1174. type: "pie",
  1175. radius: ["40%", "60%"],
  1176. center: ["50%", "35%"],
  1177. data: bData,
  1178. label: {
  1179. normal: {
  1180. show: false,
  1181. textStyle: {
  1182. color: "rgba(255, 255, 255, 0.3)"
  1183. }
  1184. }
  1185. },
  1186. labelLine: {
  1187. normal: {
  1188. lineStyle: {
  1189. color: "rgba(255, 255, 255, 0.3)"
  1190. },
  1191. smooth: 0.2,
  1192. length: 10,
  1193. length2: 20
  1194. }
  1195. },
  1196. animationType: "expansion"
  1197. }
  1198. ],
  1199. animationDuration: "400",
  1200. animationDurationUpdate: "400",
  1201. animationEasing: "cubicOut",
  1202. animationEasingUpdate: "cubicOut"
  1203. };
  1204. chart.setOption(option, true);
  1205. },
  1206. // 绘制角色分类
  1207. async initJsflChart() {
  1208. let xData = [];
  1209. let bData = [];
  1210. await request
  1211. .post(`/tac/expr/rcmm/countRcmmByRoleType`, this.getTj())
  1212. .then(res => {
  1213. if (res.success) {
  1214. this.$nextTick(() => {
  1215. res.data.forEach((item, index) => {
  1216. xData.push(item.name);
  1217. bData.push({
  1218. value: item.count,
  1219. name: item.name
  1220. });
  1221. });
  1222. });
  1223. }
  1224. });
  1225. let _self = this;
  1226. let chart = echarts.init(this.$refs["bar_dv3"]);
  1227. let option = {
  1228. backgroundColor: "rgba(0,0,0,0)",
  1229. color: [
  1230. "#C33531",
  1231. "#EFE42A",
  1232. "#64BD3D",
  1233. "#EE9201",
  1234. "#29AAE3",
  1235. "#B74AE5",
  1236. "#0AAF9F",
  1237. "#E89589"
  1238. ],
  1239. title: {
  1240. text: "",
  1241. left: "center",
  1242. top: 20,
  1243. textStyle: {
  1244. color: "#ccc"
  1245. }
  1246. },
  1247. legend: {
  1248. textStyle: {
  1249. fontSize: 12,
  1250. color: "#333"
  1251. },
  1252. // itemWidth: this.itemWidthChart, // 设置宽度
  1253. // itemHeight: this.itemHeightChart, // 设置高度
  1254. // top:this.topChart,
  1255. x: "center",
  1256. y: "bottom",
  1257. data: xData,
  1258. icon: "circle"
  1259. },
  1260. tooltip: {
  1261. trigger: "item",
  1262. formatter: "{a} <br/>{b} : {c} ({d}%)"
  1263. },
  1264. series: [
  1265. {
  1266. name: "角色分类",
  1267. type: "pie",
  1268. radius: "60%",
  1269. center: ["50%", "40%"],
  1270. data: bData,
  1271. label: {
  1272. normal: {
  1273. show: false,
  1274. textStyle: {
  1275. color: "rgba(255, 255, 255, 0.3)"
  1276. }
  1277. }
  1278. },
  1279. labelLine: {
  1280. normal: {
  1281. lineStyle: {
  1282. color: "rgba(255, 255, 255, 0.3)"
  1283. },
  1284. smooth: 0.2,
  1285. length: 10,
  1286. length2: 20
  1287. }
  1288. },
  1289. animationType: "expansion"
  1290. }
  1291. ],
  1292. animationDuration: "400",
  1293. animationDurationUpdate: "400",
  1294. animationEasing: "cubicOut",
  1295. animationEasingUpdate: "cubicOut"
  1296. };
  1297. chart.setOption(option, true);
  1298. },
  1299. // 绘制学历情况
  1300. async initXlqkChart() {
  1301. let xData = [];
  1302. let bData = [];
  1303. await request
  1304. .post(`/tac/expr/rcmm/countRcmmByEducation`, this.getTj())
  1305. .then(res => {
  1306. if (res.success) {
  1307. this.$nextTick(() => {
  1308. res.data.forEach((item, index) => {
  1309. xData.push(item.name);
  1310. bData.push({
  1311. value: item.count,
  1312. name: item.name
  1313. });
  1314. });
  1315. });
  1316. }
  1317. });
  1318. let _self = this;
  1319. let chart = echarts.init(this.$refs["bar_dv4"]);
  1320. let option = {
  1321. backgroundColor: "rgba(0,0,0,0)",
  1322. color: ["#16A085", "#4A235A", "#C39BD3 ", "#F9E79F"],
  1323. title: {
  1324. text: "",
  1325. left: "center",
  1326. top: 20,
  1327. textStyle: {
  1328. color: "#ccc"
  1329. }
  1330. },
  1331. legend: {
  1332. textStyle: {
  1333. fontSize: 12,
  1334. color: "#333"
  1335. },
  1336. // itemWidth: this.itemWidthChart, // 设置宽度
  1337. // itemHeight: this.itemHeightChart, // 设置高度
  1338. // top:this.topChart,
  1339. x: "center",
  1340. y: "bottom",
  1341. data: xData,
  1342. icon: "circle"
  1343. },
  1344. tooltip: {
  1345. trigger: "item",
  1346. formatter: "{a} <br/>{b} : {c} ({d}%)"
  1347. },
  1348. series: [
  1349. {
  1350. name: "学历情况",
  1351. type: "pie",
  1352. radius: "60%",
  1353. center: ["50%", "40%"],
  1354. data: bData,
  1355. label: {
  1356. normal: {
  1357. show: false,
  1358. textStyle: {
  1359. color: "rgba(255, 255, 255, 0.3)"
  1360. }
  1361. }
  1362. },
  1363. labelLine: {
  1364. normal: {
  1365. lineStyle: {
  1366. color: "rgba(255, 255, 255, 0.3)"
  1367. },
  1368. smooth: 0.2,
  1369. length: 10,
  1370. length2: 20
  1371. }
  1372. },
  1373. animationType: "expansion"
  1374. }
  1375. ],
  1376. animationDuration: "400",
  1377. animationDurationUpdate: "400",
  1378. animationEasing: "cubicOut",
  1379. animationEasingUpdate: "cubicOut"
  1380. };
  1381. chart.setOption(option, true);
  1382. },
  1383. // 绘制年龄分布
  1384. async initNlfbChart() {
  1385. let xData = [];
  1386. let bData = [];
  1387. await request
  1388. .post(`/tac/worker/b/countByAge`, this.getTj())
  1389. .then(res => {
  1390. if (res.success) {
  1391. this.$nextTick(() => {
  1392. res.data.forEach((item, index) => {
  1393. xData.push(item.name);
  1394. bData.push({
  1395. value: item.count,
  1396. name: item.name
  1397. });
  1398. });
  1399. });
  1400. }
  1401. });
  1402. let _self = this;
  1403. let chart = echarts.init(this.$refs["bar_dv5"]);
  1404. let option = {
  1405. backgroundColor: "rgba(0,0,0,0)",
  1406. color: [
  1407. "#EAEA26",
  1408. "#906BF9",
  1409. "#FE5656",
  1410. "#01E17E",
  1411. "#3DD1F9",
  1412. "#FFAD05",
  1413. "#0AAF9F",
  1414. "#E89589",
  1415. "#16A085",
  1416. "#4A235A",
  1417. "#C39BD3 ",
  1418. "#F9E79F",
  1419. "#BA4A00",
  1420. "#ECF0F1",
  1421. "#616A6B",
  1422. "#EAF2F8",
  1423. "#4A235A",
  1424. "#3498DB"
  1425. ],
  1426. title: {
  1427. text: "",
  1428. left: "center",
  1429. top: 20,
  1430. textStyle: {
  1431. color: "#ccc"
  1432. }
  1433. },
  1434. legend: {
  1435. textStyle: {
  1436. fontSize: 12,
  1437. color: "#333"
  1438. },
  1439. // itemWidth: this.itemWidthChart, // 设置宽度
  1440. // itemHeight: this.itemHeightChart, // 设置高度
  1441. // top:this.topChart,
  1442. x: "center",
  1443. y: "bottom",
  1444. data: xData,
  1445. icon: "circle"
  1446. },
  1447. tooltip: {
  1448. trigger: "item",
  1449. formatter: "{a} <br/>{b} : {c} ({d}%)"
  1450. },
  1451. series: [
  1452. {
  1453. name: "年龄分布",
  1454. type: "pie",
  1455. radius: "60%",
  1456. center: ["50%", "40%"],
  1457. data: bData,
  1458. label: {
  1459. normal: {
  1460. show: false,
  1461. textStyle: {
  1462. color: "rgba(255, 255, 255, 0.3)"
  1463. }
  1464. }
  1465. },
  1466. labelLine: {
  1467. normal: {
  1468. lineStyle: {
  1469. color: "rgba(255, 255, 255, 0.3)"
  1470. },
  1471. smooth: 0.2,
  1472. length: 10,
  1473. length2: 20
  1474. }
  1475. },
  1476. animationType: "expansion"
  1477. }
  1478. ],
  1479. animationDuration: "400",
  1480. animationDurationUpdate: "400",
  1481. animationEasing: "cubicOut",
  1482. animationEasingUpdate: "cubicOut"
  1483. };
  1484. chart.setOption(option, true);
  1485. },
  1486. // 绘制在职情况
  1487. async initZzqkChart() {
  1488. let xData = [];
  1489. let bData = [];
  1490. await request
  1491. .post(`/tac/expr/rcmm/countRcmmByIsOffice`, this.getTj())
  1492. .then(res => {
  1493. if (res.success) {
  1494. this.$nextTick(() => {
  1495. res.data.forEach((item, index) => {
  1496. xData.push(item.name);
  1497. bData.push({
  1498. value: item.count,
  1499. name: item.name
  1500. });
  1501. });
  1502. });
  1503. }
  1504. });
  1505. let _self = this;
  1506. let chart = echarts.init(this.$refs["bar_dv6"]);
  1507. let option = {
  1508. backgroundColor: "rgba(0,0,0,0)",
  1509. color: ["#5CE9C7", "#FEB23A"],
  1510. title: {
  1511. text: "",
  1512. left: "center",
  1513. top: 20,
  1514. textStyle: {
  1515. color: "#ccc"
  1516. }
  1517. },
  1518. legend: {
  1519. textStyle: {
  1520. fontSize: 12,
  1521. color: "#333"
  1522. },
  1523. // itemWidth: this.itemWidthChart, // 设置宽度
  1524. // itemHeight: this.itemHeightChart, // 设置高度
  1525. // top:this.topChart,
  1526. x: "center",
  1527. y: "bottom",
  1528. data: xData,
  1529. icon: "circle"
  1530. },
  1531. tooltip: {
  1532. trigger: "item",
  1533. formatter: "{a} <br/>{b} : {c} ({d}%)"
  1534. },
  1535. series: [
  1536. {
  1537. name: "在职情况",
  1538. type: "pie",
  1539. radius: "60%",
  1540. center: ["50%", "40%"],
  1541. data: bData,
  1542. label: {
  1543. normal: {
  1544. show: false,
  1545. textStyle: {
  1546. color: "rgba(255, 255, 255, 0.3)"
  1547. }
  1548. }
  1549. },
  1550. labelLine: {
  1551. normal: {
  1552. lineStyle: {
  1553. color: "rgba(255, 255, 255, 0.3)"
  1554. },
  1555. smooth: 0.2,
  1556. length: 10,
  1557. length2: 20
  1558. }
  1559. },
  1560. animationType: "expansion"
  1561. }
  1562. ],
  1563. animationDuration: "400",
  1564. animationDurationUpdate: "400",
  1565. animationEasing: "cubicOut",
  1566. animationEasingUpdate: "cubicOut"
  1567. };
  1568. chart.setOption(option, true);
  1569. },
  1570. // 添加人员
  1571. addPers() {
  1572. this.fileList = [];
  1573. for (var obj in this.renyuanForm) {
  1574. this.renyuanForm[obj] = "";
  1575. }
  1576. this.renyuanForm["state"] = 0; // 默认人员未推荐
  1577. this.renyuanForm["isTraining"] = "2"; // 默认人员未培训
  1578. this.dialogFaTitle = "添加";
  1579. this.addPlanDialogVisible = true;
  1580. },
  1581. appendPlan(from) {
  1582. if (this.dialogFaTitle == "添加") {
  1583. delete this.renyuanForm["gwComFiles"];
  1584. this.$refs[from].validate(valid => {
  1585. if (valid) {
  1586. request
  1587. .post("/tac/expr/rcmm", this.renyuanForm)
  1588. .then(res => {
  1589. if (res.success) {
  1590. if (this.fileBoolean) {
  1591. // 文件上传
  1592. this.url = res.data.id;
  1593. this.$nextTick(function () {
  1594. this.$refs.upload.submit();
  1595. });
  1596. } else {
  1597. this.getRyXxData();
  1598. this.$message.success("保存成功");
  1599. this.addPlanDialogVisible = false;
  1600. }
  1601. } else {
  1602. this.$message.error(res.message);
  1603. }
  1604. });
  1605. } else {
  1606. console.log("error submit!!");
  1607. return false;
  1608. }
  1609. });
  1610. } else {
  1611. if (this.fileBoolean) {
  1612. this.$refs[from].validate(valid => {
  1613. if (valid) {
  1614. request
  1615. .post("/tac/expr/rcmm", this.renyuanForm)
  1616. .then(res => {
  1617. if (res.success) {
  1618. // 文件上传
  1619. this.url = res.data.id;
  1620. this.$nextTick(function () {
  1621. this.$refs.upload.submit();
  1622. this.fileBoolean = false;
  1623. });
  1624. } else {
  1625. this.$message.error(res.message);
  1626. }
  1627. });
  1628. } else {
  1629. console.log("error submit!!");
  1630. return false;
  1631. }
  1632. });
  1633. } else {
  1634. this.$refs[from].validate(valid => {
  1635. if (valid) {
  1636. request
  1637. .post("/tac/expr/rcmm", this.renyuanForm)
  1638. .then(res => {
  1639. if (res.success) {
  1640. this.$message.success("更新成功");
  1641. this.addPlanDialogVisible = false;
  1642. this.getRyXxData();
  1643. } else {
  1644. this.$message.error(res.message);
  1645. }
  1646. });
  1647. } else {
  1648. console.log("error submit!!");
  1649. return false;
  1650. }
  1651. });
  1652. }
  1653. }
  1654. },
  1655. // 编辑人员
  1656. renYuanModifyThe(row) {
  1657. this.fileList = [];
  1658. request.get(`/tac/expr/rcmm/${row.id}`).then(res => {
  1659. if (res.success) {
  1660. this.renyuanForm = res.data;
  1661. }
  1662. });
  1663. this.checkEditDialogResume(row);
  1664. this.dialogFaTitle = "编辑";
  1665. this.addPlanDialogVisible = true;
  1666. },
  1667. // 删除人员
  1668. renYuanDelete(row) {
  1669. this.$confirm("确定要删除该人员, 是否继续?", "提示", {
  1670. confirmButtonText: "确定",
  1671. cancelButtonText: "取消",
  1672. type: "warning"
  1673. })
  1674. .then(() => {
  1675. request.get(`/tac/expr/rcmm/del/${row.id}`).then(res => {
  1676. if (res.success) {
  1677. this.$message({
  1678. type: "success",
  1679. message: "删除成功",
  1680. duration: 1000
  1681. });
  1682. this.getRyXxData();
  1683. }
  1684. });
  1685. })
  1686. .catch(() => {
  1687. this.$message({
  1688. type: "info",
  1689. message: "已取消删除",
  1690. duration: 1000
  1691. });
  1692. });
  1693. },
  1694. // 简历
  1695. UploadUrl: function () {
  1696. return `/pdcApi/file/insert?bizId=${this.url}`;
  1697. },
  1698. beforeRemove(file, fileList) {
  1699. return this.$confirm(`确定移除 ${file.name}?`)
  1700. .then(() => {
  1701. request.post(`/file/${file.id}`).then(res => {
  1702. if (res.success) {
  1703. this.$message({
  1704. type: "success",
  1705. message: "删除成功!"
  1706. });
  1707. if (fileList.length == "0") {
  1708. this.fileList = [];
  1709. this.fileBoolean = false;
  1710. }
  1711. this.getRyXxData();
  1712. } else {
  1713. this.$alert("删除失败!", "提示", {
  1714. confirmButtonText: "确定",
  1715. type: "warning"
  1716. });
  1717. }
  1718. });
  1719. })
  1720. .catch(() => {
  1721. this.$message({
  1722. type: "info",
  1723. message: "已取消删除"
  1724. });
  1725. });
  1726. },
  1727. fileSuccess() {
  1728. this.getRyXxData();
  1729. this.$message.success("操作成功");
  1730. this.addPlanDialogVisible = false;
  1731. },
  1732. onBeforeUploadpdf(file) {
  1733. var FileExt = file.name.replace(/.+\./, "");
  1734. if (["pdf"].indexOf(FileExt.toLowerCase()) === -1) {
  1735. this.$message({
  1736. type: "warning",
  1737. message: "请上传后缀名为pdf的附件!"
  1738. });
  1739. this.fileList = [];
  1740. return false;
  1741. }
  1742. },
  1743. addFile(file, fileList) {
  1744. this.fileList = fileList;
  1745. this.fileBoolean = true;
  1746. },
  1747. fileUpErr(err, file, fileList) {
  1748. if (file.status == 413) {
  1749. } else {
  1750. this.$message.warning("上传出错!");
  1751. this.fileList = [];
  1752. return false;
  1753. }
  1754. },
  1755. handlePreview(file) {
  1756. const userAgent = navigator.userAgent;
  1757. if (!!window.ActiveXObject || "ActiveXObject" in window) {
  1758. this.$message.info("推荐谷歌进行文件预览");
  1759. } else {
  1760. if (file.url) {
  1761. this.fujianVisible = true;
  1762. this.pdfTitle = `${this.hostUrl}/${file.url}`;
  1763. } else {
  1764. this.$message.warning("请先上传再下载");
  1765. }
  1766. }
  1767. },
  1768. select_handler_province() {
  1769. this.$nextTick(() => {
  1770. // console.log(this.$refs.selectProvince.selectedLabel);
  1771. this.form.adName = this.$refs.selectProvince.selectedLabel;
  1772. });
  1773. },
  1774. workChange() {
  1775. this.$nextTick(() => {
  1776. // console.log(this.$refs.selectProvince.selectedLabel);
  1777. this.renyuanForm.workAdNm = this.$refs.workSelect.selectedLabel;
  1778. });
  1779. },
  1780. // 批量导入人员信息上传
  1781. submitUpload() {
  1782. if (this.$refs.uploadFile.submitUpload("")) {
  1783. this.removeNewSupervision();
  1784. }
  1785. },
  1786. // 批量导入简历
  1787. submitUploadJl() {
  1788. if (this.$refs.uploadFileJl.submitUpload("")) {
  1789. this.removeNewSupervisionJl();
  1790. }
  1791. },
  1792. removeNewSupervision(arg) {
  1793. if (arg) {
  1794. if (arg.length) {
  1795. this.$alert(
  1796. `失败${arg[0].fail}条,成功${arg[0].success}条`,
  1797. "提示",
  1798. {
  1799. confirmButtonText: "确定"
  1800. }
  1801. );
  1802. }
  1803. // this.$message.success('上传成功');
  1804. this.$refs.uploadFile.init();
  1805. this.importPersVisible = false;
  1806. }
  1807. },
  1808. removeNewSupervisionJl(arg) {
  1809. if (arg) {
  1810. this.$message.success("上传成功");
  1811. this.$refs.uploadFileJl.init();
  1812. this.associatedResumeVisible = false;
  1813. }
  1814. },
  1815. // 回绝信息
  1816. showRefuseDetails(row) {
  1817. let params = {
  1818. state: row.state,
  1819. exprRcmmId: row.id
  1820. };
  1821. request
  1822. .post("/tac/expr/rcmm/rcrd/getRcmmRcrdList", params)
  1823. .then(res => {
  1824. if (res.success) {
  1825. this.$alert(`${res.note || ""}`, `${row.name || ""}`, {
  1826. confirmButtonText: "确定"
  1827. });
  1828. } else {
  1829. console.log(res.message);
  1830. }
  1831. })
  1832. .catch(err => {
  1833. console.log(err);
  1834. });
  1835. },
  1836. // 编辑菜单查看简历
  1837. checkEditDialogResume(row) {
  1838. request
  1839. .post(`/file/findFileByBiz?bizId=${row.id}`)
  1840. .then(res => {
  1841. if (res.success) {
  1842. let data = res.data;
  1843. if (data.length !== 0) {
  1844. data.forEach(item => {
  1845. var obj = {};
  1846. this.$set(obj, "name", item.fileName);
  1847. this.$set(obj, "url", item.filePath);
  1848. this.$set(obj, "bizId", item.bizId);
  1849. this.$set(obj, "id", item.id);
  1850. this.fileList.push(obj);
  1851. });
  1852. }
  1853. }
  1854. })
  1855. .catch(err => {
  1856. console.log(err);
  1857. });
  1858. },
  1859. // 查看简历
  1860. checkResume(row) {
  1861. request
  1862. .post(`/file/findFileByBiz?bizId=${row.id}`)
  1863. .then(res => {
  1864. if (res.success) {
  1865. if (res.data.length !== 0) {
  1866. window.open(
  1867. hostUrl + res.data[res.data.length - 1].filePath
  1868. ); // 预览最后上传的简历
  1869. } else {
  1870. this.$alert("未上传简历!");
  1871. }
  1872. } else {
  1873. this.$message.error(res.message);
  1874. }
  1875. })
  1876. .catch(err => {
  1877. console.log(err);
  1878. });
  1879. }
  1880. },
  1881. computed: {
  1882. hostUrl() {
  1883. return window.location.href.indexOf("localhost") > -1 ||
  1884. window.location.href.indexOf("10.1.102.136") > -1
  1885. ? "http://10.1.102.136:8100"
  1886. : `${window.location.protocol}//${window.location.hostname}`;
  1887. },
  1888. groupTypeData() {
  1889. return this.$store.state.jcState.groupTypeData;
  1890. },
  1891. roleTypeData() {
  1892. let roleType = this.$store.state.jcState.roleTypeData;
  1893. roleType.forEach((i, index) => {
  1894. i["label"] === "助理" ? roleType.splice(index, 1) : "";
  1895. });
  1896. return roleType;
  1897. },
  1898. provList() {
  1899. return this.$store.state.jcState.provList;
  1900. }
  1901. }
  1902. };
  1903. </script>
  1904. <style lang="scss">
  1905. .ryjcxx {
  1906. width: 100%;
  1907. height: 100%;
  1908. .el-tree-node__content {
  1909. height: 40px;
  1910. }
  1911. .el-tree-node__label {
  1912. margin-left: 14px;
  1913. }
  1914. .renyuan_form {
  1915. height: 50vh;
  1916. overflow: auto;
  1917. }
  1918. .fjxq .el-dialog__body {
  1919. height: 60vh;
  1920. }
  1921. .renyuan_form .el-input,
  1922. .renyuan_form textarea.el-textarea__inner {
  1923. width: 20vw;
  1924. }
  1925. }
  1926. @media screen and (max-width: 1679px) {
  1927. .ryjcxx .search .el-select {
  1928. width: 130px;
  1929. }
  1930. }
  1931. </style>