resumeHR-list.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">企业HR</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/resumeHR">简历管理</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form
  17. ref="queryForm"
  18. :model="queryModel"
  19. inline
  20. class="demo-form-inline"
  21. >
  22. <el-form-item label="投递职位" prop="t">
  23. <el-select-tree :props="positionCategoryProps" :options="positionCategoryResult" v-model="queryModel.positionCategoryId" size="mini"></el-select-tree>
  24. </el-form-item>
  25. <el-form-item label="年龄" prop="age">
  26. <el-input type="number" size="mini" v-model="queryModel.age" ></el-input>
  27. </el-form-item>
  28. <el-form-item label="性别" prop="sex" >
  29. <el-select v-model="queryModel.sex" filterable placeholder="请选择" size="mini" style="width:80px">
  30. <el-option v-for="item in sexList" :key="item.value" :label="item.name" :value="item.id"></el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item label="工作经验" prop="workExp">
  34. <el-select v-model="queryModel.workExp" filterable placeholder="请选择" size="mini" >
  35. <el-option v-for="item in workExpList" :key="item.value" :label="item.name" :value="item.id"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item label="学历" prop="education">
  39. <el-select v-model="queryModel.education" filterable placeholder="请选择" size="mini" >
  40. <el-option v-for="item in educationList" :key="item.value" :label="item.name" :value="item.id"></el-option>
  41. </el-select>
  42. </el-form-item>
  43. <el-form-item label="选择日期" prop="createTime">
  44. <el-date-picker
  45. v-model="queryModel.createTimeRange"
  46. type="daterange"
  47. size="mini"
  48. range-separator="至"
  49. start-placeholder="开始日期"
  50. end-placeholder="结束日期">
  51. </el-date-picker>
  52. </el-form-item>
  53. <el-form-item>
  54. <el-button
  55. type="primary"
  56. size="mini"
  57. icon="ios-search"
  58. @click="handleSearch(1)"
  59. :loading="loading"
  60. >查询</el-button
  61. >&nbsp;
  62. <el-button
  63. type="info"
  64. size="mini"
  65. style="margin-left: 8px"
  66. @click="handleReset('queryForm')"
  67. >重置</el-button
  68. >&nbsp;
  69. </el-form-item>
  70. </el-form>
  71. <el-tabs v-model="activeName" type="card">
  72. <el-tab-pane label="已查看" name="first">
  73. <div class="mainDiv">
  74. <el-card class="box-card" shadow="hover" v-for="(item,index) in tableData" v-bind:key="index">
  75. <div slot="header" class="clearfix">
  76. <span style="float: left; padding: 3px 0">投递职位:{{item.positionName}}</span>
  77. <span style="float: right; padding: 3px 0" >投递时间:{{item.createTime}}</span>
  78. </div>
  79. <div class="text item">
  80. <div class="avatarDiv">
  81. <el-avatar
  82. :size="80"
  83. shape="circle"
  84. :src="
  85. item.headImageUrl +
  86. '?x-oss-process=image/resize,m_fill,w_100,h_100'
  87. "
  88. :key="item.id"
  89. ></el-avatar>
  90. </div>
  91. <div class="descDiv">
  92. <div class="nameDiv">{{item.name}}</div>
  93. <div class="descFont">基本信息:</div>
  94. <div>
  95. <span v-if="item.sexN=='1'">男</span>
  96. <span v-if="item.sexN=='0'">女</span>
  97. <span v-if="item.sexN=='2'">保密</span>
  98. ·
  99. <span>{{item.age}}岁</span>
  100. ·
  101. <span>{{item.education}}</span>
  102. ·
  103. <span>工作经验:{{item.workExp}}</span>
  104. ·
  105. <span>期望薪资:{{item.dreamMoney}}</span>
  106. </div>
  107. <div class="descFont">工作经历:</div>
  108. <div v-for="(item1,index1) in item.resumeWorkExperienceList" v-bind:key="index1">
  109. <span class="workExpSpan">{{item1.startTime}} — {{item1.endTime}}</span>
  110. <span class="workExpSpan">{{item1.companyName}}</span>
  111. <span class="workExpSpan">{{item1.job}}</span>
  112. </div>
  113. </div>
  114. <div class="buttonDiv">
  115. <el-row>
  116. <el-col :span="24">
  117. <el-button type="primary" style="width:210px" @click="handleJobInterview(item)">面试邀请</el-button>
  118. </el-col>
  119. </el-row>
  120. <el-row style="margin-top:20px">
  121. <el-col :span="24">
  122. <el-button type="primary" style="width:210px" plain @click="handleDownload(item)">导出</el-button>
  123. </el-col>
  124. </el-row>
  125. </div>
  126. <div class="phoneDiv">
  127. <i class="el-icon-phone" style="color:#1677ff;margin-right:10px"></i>
  128. <span>{{item.userTel}}</span>
  129. </div>
  130. </div>
  131. </el-card>
  132. </div>
  133. <el-pagination
  134. :current-page.sync="pageIndex"
  135. :total="totalElements"
  136. :page-sizes="pageSizeList"
  137. @current-change="changePage"
  138. @size-change="pageSizeChange"
  139. layout="total, sizes, prev, pager, next, jumper"
  140. ></el-pagination>
  141. </el-tab-pane>
  142. <el-tab-pane label="对我感兴趣" name="second">
  143. <div class="mainDiv">
  144. <el-card class="box-card" shadow="hover" v-for="(item,index) in tableData2" v-bind:key="index">
  145. <div slot="header" class="clearfix">
  146. <span style="float: left; padding: 3px 0">投递职位:{{item.positionName}}</span>
  147. <span style="float: right; padding: 3px 0" >投递时间:{{item.createTime}}</span>
  148. </div>
  149. <div class="text item">
  150. <div class="avatarDiv">
  151. <el-avatar
  152. :size="80"
  153. shape="circle"
  154. :src="
  155. item.headImageUrl +
  156. '?x-oss-process=image/resize,m_fill,w_100,h_100'
  157. "
  158. :key="item.id"
  159. ></el-avatar>
  160. </div>
  161. <div class="descDiv">
  162. <div class="nameDiv">{{item.name}}</div>
  163. <div class="descFont">基本信息:</div>
  164. <div>
  165. <span v-if="item.sexN=='1'">男</span>
  166. <span v-if="item.sexN=='0'">女</span>
  167. <span v-if="item.sexN=='2'">保密</span>
  168. ·
  169. <span>{{item.age}}岁</span>
  170. ·
  171. <span>{{item.education}}</span>
  172. ·
  173. <span>工作经验:{{item.workExp}}</span>
  174. ·
  175. <span>期望薪资:{{item.dreamMoney}}</span>
  176. </div>
  177. <div class="descFont">工作经历:</div>
  178. <div v-for="(item1,index1) in item.resumeWorkExperienceList" v-bind:key="index1">
  179. <span class="workExpSpan">{{item1.startTime}} — {{item1.endTime}}</span>
  180. <span class="workExpSpan">{{item1.companyName}}</span>
  181. <span class="workExpSpan">{{item1.job}}</span>
  182. </div>
  183. </div>
  184. <div class="buttonDiv">
  185. <el-row>
  186. <el-col :span="24">
  187. <el-button type="primary" style="width:210px" @click="handleJobInterview(item)">面试邀请</el-button>
  188. </el-col>
  189. </el-row>
  190. <el-row style="margin-top:20px">
  191. <el-col :span="24">
  192. <el-button type="primary" style="width:210px" plain @click="handleDownload(item)">导出</el-button>
  193. </el-col>
  194. </el-row>
  195. </div>
  196. <div class="phoneDiv">
  197. <i class="el-icon-phone" style="color:#1677ff;margin-right:10px"></i>
  198. <span>{{item.userTel}}</span>
  199. </div>
  200. </div>
  201. </el-card>
  202. </div>
  203. <el-pagination
  204. :current-page.sync="pageIndex2"
  205. :total="totalElements2"
  206. :page-sizes="pageSizeList2"
  207. @current-change="changePage2"
  208. @size-change="pageSizeChange2"
  209. layout="total, sizes, prev, pager, next, jumper"
  210. ></el-pagination>
  211. </el-tab-pane>
  212. <el-tab-pane label="收藏的简历" name="third">
  213. <div class="mainDiv">
  214. <el-card class="box-card" shadow="hover" v-for="(item,index) in tableData3" v-bind:key="index">
  215. <div slot="header" class="clearfix">
  216. <span style="float: left; padding: 3px 0">投递职位:{{item.positionName}}</span>
  217. <span style="float: right; padding: 3px 0" >投递时间:{{item.createTime}}</span>
  218. </div>
  219. <div class="text item">
  220. <div class="avatarDiv">
  221. <el-avatar
  222. :size="80"
  223. shape="circle"
  224. :src="
  225. item.headImageUrl +
  226. '?x-oss-process=image/resize,m_fill,w_100,h_100'
  227. "
  228. :key="item.id"
  229. ></el-avatar>
  230. </div>
  231. <div class="descDiv">
  232. <div class="nameDiv">{{item.name}}</div>
  233. <div class="descFont">基本信息:</div>
  234. <div>
  235. <span v-if="item.sexN=='1'">男</span>
  236. <span v-if="item.sexN=='0'">女</span>
  237. <span v-if="item.sexN=='2'">保密</span>
  238. ·
  239. <span>{{item.age}}岁</span>
  240. ·
  241. <span>{{item.education}}</span>
  242. ·
  243. <span>工作经验:{{item.workExp}}</span>
  244. ·
  245. <span>期望薪资:{{item.dreamMoney}}</span>
  246. </div>
  247. <div class="descFont">工作经历:</div>
  248. <div v-for="(item1,index1) in item.resumeWorkExperienceList" v-bind:key="index1">
  249. <span class="workExpSpan">{{item1.startTime}} — {{item1.endTime}}</span>
  250. <span class="workExpSpan">{{item1.companyName}}</span>
  251. <span class="workExpSpan">{{item1.job}}</span>
  252. </div>
  253. </div>
  254. <div class="buttonDiv">
  255. <el-row>
  256. <el-col :span="24">
  257. <el-button type="primary" style="width:210px" @click="handleJobInterview(item)">面试邀请</el-button>
  258. </el-col>
  259. </el-row>
  260. <el-row style="margin-top:20px">
  261. <el-col :span="13">
  262. <el-button type="primary" style="width:80px" plain @click="handleDownload(item)">导出</el-button>
  263. </el-col>
  264. <el-col :span="11">
  265. <el-button type="danger" style="width:95px" plain @click="handleDeleteCollection(item)">取消收藏</el-button>
  266. </el-col>
  267. </el-row>
  268. </div>
  269. <div class="phoneDiv">
  270. <i class="el-icon-phone" style="color:#1677ff;margin-right:10px"></i>
  271. <span>{{item.userTel}}</span>
  272. </div>
  273. </div>
  274. </el-card>
  275. </div>
  276. <el-pagination
  277. :current-page.sync="pageIndex3"
  278. :total="totalElements3"
  279. :page-sizes="pageSizeList3"
  280. @current-change="changePage3"
  281. @size-change="pageSizeChange3"
  282. layout="total, sizes, prev, pager, next, jumper"
  283. ></el-pagination>
  284. </el-tab-pane>
  285. </el-tabs>
  286. </div>
  287. </template>
  288. <script>
  289. import Constant from "@/constant";
  290. import resumeDeliverApi from "@/api/job/resumeDeliver";
  291. import userBrowseApi from "@/api/job/userBrowse";
  292. import userBrowseHrApi from "@/api/job/userBrowseHR";
  293. import recruitmentCollectionApi from "@/api/job/recruitmentCollection";
  294. import NProgress from "nprogress"; // progress bar
  295. import "nprogress/nprogress.css"; // progress bar style
  296. import dataDictionaryApi from "@/api/sys/dataDictionary";
  297. import SelectTree from "@/components/SelectTree";
  298. import workCategoryApi from "@/api/job/workCategory";
  299. import jobUserApi from "@/api/job/jobUser";
  300. export default {
  301. data() {
  302. var self = this;
  303. return {
  304. queryModel: {
  305. positionCategoryId:'',
  306. age:'',
  307. sex:'',
  308. workExp:'',
  309. education:'',
  310. },
  311. loading: false,
  312. tableData: [],
  313. pageIndex: 1,
  314. pageSize: 10,
  315. totalPages: 0,
  316. totalElements: 0,
  317. field: "",
  318. direction: "",
  319. pageSizeList: [10, 20, 30],
  320. multipleSelection: [],
  321. loading2: false,
  322. tableData2: [],
  323. pageIndex2: 1,
  324. pageSize2: 10,
  325. totalPages2: 0,
  326. totalElements2: 0,
  327. pageSizeList2: [10, 20, 30],
  328. multipleSelection2: [],
  329. loading3: false,
  330. tableData3: [],
  331. pageIndex3: 1,
  332. pageSize3: 10,
  333. totalPages3: 0,
  334. totalElements3: 0,
  335. pageSizeList3: [10, 20, 30],
  336. multipleSelection3: [],
  337. showModal: false,
  338. modalTitle: "",
  339. businessKey: "",
  340. approvalStatusList:[],
  341. activeName: 'first',
  342. styleObject:{
  343. color:"red"
  344. },
  345. sexList:[],
  346. workExpList:[],
  347. educationList:[],
  348. positionCategoryResult: [],
  349. positionCategoryProps: {
  350. value: "id",
  351. label: "name"
  352. },
  353. };
  354. },
  355. created() {
  356. dataDictionaryApi
  357. .findByCatalogName({
  358. catalogName: "性别",
  359. })
  360. .then((response) => {
  361. var jsonData = response.data;
  362. this.sexList = jsonData.data;
  363. });
  364. dataDictionaryApi
  365. .findByCatalogName({
  366. catalogName: "工作经验",
  367. })
  368. .then((response) => {
  369. var jsonData = response.data;
  370. this.workExpList = jsonData.data;
  371. });
  372. dataDictionaryApi
  373. .findByCatalogName({
  374. catalogName: "学历",
  375. })
  376. .then((response) => {
  377. var jsonData = response.data;
  378. this.educationList = jsonData.data;
  379. });
  380. workCategoryApi.listSelectTree().then(response=>{
  381. var jsonData = response.data;
  382. if(jsonData.result){
  383. this.positionCategoryResult = jsonData.data;
  384. }
  385. else{
  386. this.$message.error(jsonData.message + "");
  387. }
  388. });
  389. },
  390. methods: {
  391. changePage(pageIndex) {
  392. var self = this;
  393. self.loading = true;
  394. self.pageIndex = pageIndex;
  395. var formData = new FormData();
  396. formData.append("pageIndex", self.pageIndex);
  397. formData.append("pageSize", self.pageSize);
  398. if(self.queryModel.positionCategoryId!=null&&self.queryModel.positionCategoryId!=""){
  399. formData.append("positionCategoryId", self.queryModel.positionCategoryId);
  400. }
  401. formData.append("age", self.queryModel.age);
  402. formData.append("sex", self.queryModel.sex);
  403. formData.append("workExp", self.queryModel.workExp);
  404. formData.append("education", self.queryModel.education);
  405. if(self.queryModel.createTimeRange!=null&&self.queryModel.createTimeRange!=""){
  406. formData.append("createTimeRange", self.queryModel.createTimeRange);
  407. }
  408. userBrowseHrApi
  409. .pageListHR(formData)
  410. .then(function (response) {
  411. self.loading = false;
  412. var jsonData = response.data.data;
  413. self.tableData = jsonData.data;
  414. self.totalPages = jsonData.totalPages;
  415. self.totalElements = jsonData.recordsTotal;
  416. })
  417. .catch((error) => {
  418. self.loading = false;
  419. // self.$message.error(error + "");
  420. });
  421. },
  422. changePage2(pageIndex2) {
  423. var self = this;
  424. self.loading2 = true;
  425. self.pageIndex2 = pageIndex2;
  426. var formData = new FormData();
  427. formData.append("pageIndex", self.pageIndex2);
  428. formData.append("pageSize", self.pageSize2);
  429. if(self.queryModel.positionCategoryId!=null&&self.queryModel.positionCategoryId!=""){
  430. formData.append("positionCategoryId", self.queryModel.positionCategoryId);
  431. }
  432. formData.append("age", self.queryModel.age);
  433. formData.append("sex", self.queryModel.sex);
  434. formData.append("workExp", self.queryModel.workExp);
  435. formData.append("education", self.queryModel.education);
  436. if(self.queryModel.createTimeRange!=null&&self.queryModel.createTimeRange!=""){
  437. formData.append("createTimeRange", self.queryModel.createTimeRange);
  438. }
  439. userBrowseApi
  440. .pageListHR(formData)
  441. .then(function (response) {
  442. self.loading2 = false;
  443. var jsonData = response.data.data;
  444. self.tableData2 = jsonData.data;
  445. self.totalPages2 = jsonData.totalPages;
  446. self.totalElements2 = jsonData.recordsTotal;
  447. })
  448. .catch((error) => {
  449. self.loading2 = false;
  450. // self.$message.error(error + "");
  451. });
  452. },
  453. changePage3(pageIndex3) {
  454. var self = this;
  455. self.loading3 = true;
  456. self.pageIndex3 = pageIndex3;
  457. var formData = new FormData();
  458. formData.append("pageIndex", self.pageIndex3);
  459. formData.append("pageSize", self.pageSize3);
  460. if(self.queryModel.positionCategoryId!=null&&self.queryModel.positionCategoryId!=""){
  461. formData.append("positionCategoryId", self.queryModel.positionCategoryId);
  462. }
  463. formData.append("age", self.queryModel.age);
  464. formData.append("sex", self.queryModel.sex);
  465. formData.append("workExp", self.queryModel.workExp);
  466. formData.append("education", self.queryModel.education);
  467. if(self.queryModel.createTimeRange!=null&&self.queryModel.createTimeRange!=""){
  468. formData.append("createTimeRange", self.queryModel.createTimeRange);
  469. }
  470. recruitmentCollectionApi
  471. .pageListHR(formData)
  472. .then(function (response) {
  473. self.loading3 = false;
  474. var jsonData = response.data.data;
  475. self.tableData3 = jsonData.data;
  476. self.totalPages3 = jsonData.totalPages;
  477. self.totalElements3 = jsonData.recordsTotal;
  478. })
  479. .catch((error) => {
  480. self.loading3 = false;
  481. // self.$message.error(error + "");
  482. });
  483. },
  484. pageSizeChange(pageSize) {
  485. this.pageSize = pageSize;
  486. this.$nextTick(() => {
  487. this.changePage(this.pageIndex);
  488. });
  489. },
  490. pageSizeChange2(pageSize2) {
  491. this.pageSize2 = pageSize2;
  492. this.$nextTick(() => {
  493. this.changePage2(this.pageSize2);
  494. });
  495. },
  496. pageSizeChange3(pageSize3) {
  497. this.pageSize3 = pageSize3;
  498. this.$nextTick(() => {
  499. this.changePage3(this.pageSize3);
  500. });
  501. },
  502. handleSelectionChange(val) {
  503. this.multipleSelection = val;
  504. },
  505. handleSelectionChange2(val) {
  506. this.multipleSelection2 = val;
  507. },
  508. handleSelectionChange3(val) {
  509. this.multipleSelection3 = val;
  510. },
  511. handleReset(name) {
  512. this.$refs[name].resetFields();
  513. this.approveTimeRange="";
  514. },
  515. handleAdd() {
  516. this.modalTitle = "新增";
  517. this.businessKey = "";
  518. this.showModal = true;
  519. },
  520. handleEdit(record) {
  521. this.modalTitle = "编辑";
  522. this.businessKey = record.id;
  523. this.showModal = true;
  524. },
  525. handleDelete(record) {
  526. var self = this;
  527. self
  528. .$confirm("是否确认删除?", "提示", {
  529. confirmButtonText: "确定",
  530. cancelButtonText: "取消",
  531. type: "warning",
  532. })
  533. .then(() => {
  534. userBrowseApi.remove(record.id).then(function (response) {
  535. var jsonData = response.data;
  536. if (jsonData.result) {
  537. // var index = self.tableData.indexOf(record);
  538. // self.tableData.splice(index, 1);
  539. self.changePage2(self.pageIndex);
  540. self.$message({
  541. type: "success",
  542. message: "删除成功!",
  543. });
  544. }
  545. });
  546. });
  547. },
  548. handleDeleteHr(record){
  549. var self = this;
  550. self
  551. .$confirm("是否确认删除?", "提示", {
  552. confirmButtonText: "确定",
  553. cancelButtonText: "取消",
  554. type: "warning",
  555. })
  556. .then(() => {
  557. userBrowseHrApi.remove(record.id).then(function (response) {
  558. var jsonData = response.data;
  559. if (jsonData.result) {
  560. // var index = self.tableData.indexOf(record);
  561. // self.tableData.splice(index, 1);
  562. self.changePage(self.pageIndex);
  563. self.$message({
  564. type: "success",
  565. message: "删除成功!",
  566. });
  567. }
  568. });
  569. });
  570. },
  571. handleDeleteCollection(record){
  572. var self = this;
  573. self
  574. .$confirm("是否确认取消收藏?", "提示", {
  575. confirmButtonText: "确定",
  576. cancelButtonText: "取消",
  577. type: "warning",
  578. })
  579. .then(() => {
  580. recruitmentCollectionApi.remove(record.id).then(function (response) {
  581. var jsonData = response.data;
  582. if (jsonData.result) {
  583. // var index = self.tableData.indexOf(record);
  584. // self.tableData.splice(index, 1);
  585. self.changePage3(self.pageIndex);
  586. self.$message({
  587. type: "success",
  588. message: "取消成功!",
  589. });
  590. }
  591. });
  592. });
  593. },
  594. handleBatchDelete() {
  595. var self = this;
  596. var idList = this.multipleSelection.map((record) => {
  597. return record.id;
  598. });
  599. this.$confirm("是否确认删除选中项?", "提示", {
  600. confirmButtonText: "确定",
  601. cancelButtonText: "取消",
  602. type: "warning",
  603. }).then(() => {
  604. resumeDeliverApi.batchRemove(idList).then(function (response) {
  605. var jsonData = response.data;
  606. if (jsonData.result) {
  607. self.changePage(self.pageIndex);
  608. self.$message({
  609. type: "success",
  610. message: "删除成功!",
  611. });
  612. }
  613. });
  614. });
  615. },
  616. handleDownload(row){
  617. var self = this;
  618. self.loading = true;
  619. self.loading2 = true;
  620. self.loading3 = true;
  621. var formData = new FormData();
  622. formData.append("id", row.jobUserId);
  623. jobUserApi
  624. .exportXls(formData)
  625. .then(function (response) {
  626. self.loading = false;
  627. self.loading2 = false;
  628. self.loading3 = false;
  629. var jsonData = response.data;
  630. if(jsonData.result) {
  631. //导出
  632. self.$message({
  633. showClose: true,
  634. type: "success",
  635. message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,
  636. dangerouslyUseHTMLString: true,
  637. duration: 30000,
  638. });
  639. }
  640. })
  641. .catch((error) => {
  642. self.loading = false;
  643. self.loading2 = false;
  644. self.loading3 = false;
  645. // self.$message.error(error + "");
  646. });
  647. },
  648. handleJobInterview(item){
  649. console.log(item);
  650. var self = this;
  651. var formData = new FormData();
  652. formData.append("resumeId", item.resumeId);
  653. resumeDeliverApi
  654. .checkChatStatus(formData)
  655. .then(function (response) {
  656. var jsonData = response.data;
  657. if(jsonData.result){
  658. var isCheck = jsonData.data;
  659. if(isCheck){
  660. window["listPage"] = self;
  661. var path = "/job/resumeDeliver/list";
  662. self.$store
  663. .dispatch("tagsView/delView", {
  664. name: "resumeDeliverList",
  665. path: path,
  666. })
  667. .then(({ visitedViews }) => {
  668. self.$router.push({
  669. path: path,
  670. query: {
  671. resumeId: item.resumeId,
  672. },
  673. });
  674. });
  675. }
  676. else{
  677. self.$message.error("求职者沟通状态已为邀请面试,邀请入职或者已拒绝,不能重复邀请!");
  678. }
  679. }
  680. })
  681. },
  682. onDetailModalClose(refreshed) {
  683. //保存成功后回调
  684. this.showModal = false;
  685. if (refreshed) {
  686. this.changePage(this.pageIndex);
  687. }
  688. },
  689. handleSearch(pageIndex){
  690. this.changePage(pageIndex);
  691. this.changePage2(pageIndex);
  692. this.changePage3(pageIndex);
  693. },
  694. },
  695. mounted: function () {
  696. this.changePage(1);
  697. this.changePage2(1);
  698. this.changePage3(1);
  699. var header = document.getElementsByClassName('el-card__header');
  700. // var arr = Array.from(header);
  701. // console.info(header);
  702. },
  703. components: {
  704. "el-select-tree": SelectTree
  705. },
  706. };
  707. </script>
  708. <style lang="scss" scoped>
  709. .el-breadcrumb {
  710. margin: 10px;
  711. line-height: 20px;
  712. }
  713. .el-divider {
  714. margin: 5px 0;
  715. }
  716. .demo-form-inline {
  717. margin-left: 10px;
  718. text-align: left;
  719. }
  720. .button-group {
  721. margin-left: 10px;
  722. text-align: left;
  723. }
  724. .text {
  725. font-size: 14px;
  726. text-align: left;
  727. }
  728. .item {
  729. margin-bottom: 18px;
  730. }
  731. .clearfix:before,
  732. .clearfix:after {
  733. display: table;
  734. content: "";
  735. }
  736. .clearfix:after {
  737. clear: both
  738. }
  739. .box-card{
  740. margin-bottom: 10px;
  741. }
  742. .avatarDiv{
  743. float: left;
  744. margin: 20px;
  745. }
  746. .descDiv{
  747. line-height: 20px;
  748. float: left;
  749. line-height: 30px;
  750. margin-bottom: 20px;
  751. font-size: 14px;
  752. }
  753. .phoneDiv{
  754. float:right;
  755. margin-right: 20px;
  756. font-size: 24px;
  757. }
  758. .buttonDiv{
  759. float:right;
  760. }
  761. .nameDiv{
  762. font-size: 20px;
  763. }
  764. .descFont{
  765. font-size: 12px;
  766. color: #A4A4A4;
  767. }
  768. .workExpSpan{
  769. margin-right: 10px;
  770. }
  771. </style>