applicant.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. <template>
  2. <div class="">
  3. <Header />
  4. <Mainmenu />
  5. <div class="gap"></div>
  6. <section class="wrap">
  7. <section class="left">
  8. <div class="base-info">
  9. <img class="portrait" :src="applicantInfo.avatar" alt="" />
  10. <div class="text">
  11. <div class="name">{{ applicantInfo.name }}</div>
  12. <div class="sex">{{ applicantInfo.menSex | filtersSex }}</div>
  13. <div class="lable">
  14. {{ applicantInfo.menBirth }} / {{ applicantInfo.politOutlook }} /
  15. {{ applicantInfo.degrEduc }}
  16. </div>
  17. <div class="">
  18. <i class="el-icon-mobile"></i>{{ applicantInfo.mobile }}
  19. </div>
  20. </div>
  21. </div>
  22. <!-- base-info end -->
  23. <div class="block">
  24. <div class="title">求职意向</div>
  25. <p>
  26. <span>{{ applicantInfo.expectedPost }}</span>
  27. <span> {{ applicantInfo.cityName }}</span>
  28. <span
  29. >{{ applicantInfo.expectedLowestSalary }}-{{
  30. applicantInfo.expectedHighestSalary
  31. }}K</span
  32. >
  33. </p>
  34. <p>
  35. <span>{{ applicantInfo.expectedIndustry }}</span>
  36. </p>
  37. </div>
  38. <div class="block">
  39. <div class="title">自我介绍</div>
  40. <p>
  41. {{ applicantInfo.selfAssessment }}
  42. </p>
  43. </div>
  44. <div class="block">
  45. <div class="title">工作经历</div>
  46. <div>暂无</div>
  47. <!-- <el-timeline :reverse="false">
  48. <el-timeline-item timestamp="2020/03-至今" placement="top">
  49. <el-card>
  50. <h4>贵州威振押运有限公司</h4>
  51. <p>武装押运员</p>
  52. <p>
  53. 本人综合素质佳,能够吃苦耐劳,忠诚稳重,坚守诚信正直原则,勇于挑战自我开发自身潜力。善于学习,勤奋务实,刻苦钻研,具备广泛的兴趣和很丰富的知识,适应能力强,能够在很短时间内融入一个新的领域,适应它并且把它做好。
  54. </p>
  55. </el-card>
  56. </el-timeline-item>
  57. <el-timeline-item timestamp="2018/4-2020/2" placement="top">
  58. <el-card>
  59. <h4>贵州威振押运有限公司</h4>
  60. <p>武装押运员</p>
  61. <p>
  62. 本人综合素质佳,能够吃苦耐劳,忠诚稳重,坚守诚信正直原则,勇于挑战自我开发自身潜力。善于学习,勤奋务实,刻苦钻研,具备广泛的兴趣和很丰富的知识,适应能力强,能够在很短时间内融入一个新的领域,适应它并且把它做好。
  63. </p>
  64. </el-card>
  65. </el-timeline-item>
  66. <el-timeline-item timestamp="2016/4-2018/1" placement="top">
  67. <el-card>
  68. <h4>贵州威振押运有限公司</h4>
  69. <p>武装押运员</p>
  70. <p>
  71. 本人综合素质佳,能够吃苦耐劳,忠诚稳重,坚守诚信正直原则,勇于挑战自我开发自身潜力。善于学习,勤奋务实,刻苦钻研,具备广泛的兴趣和很丰富的知识,适应能力强,能够在很短时间内融入一个新的领域,适应它并且把它做好。
  72. </p>
  73. </el-card>
  74. </el-timeline-item>
  75. </el-timeline> -->
  76. </div>
  77. <div class="block">
  78. <div class="title">培训与教育经历</div>
  79. <div>暂无</div>
  80. <!-- <el-timeline :reverse="false">
  81. <el-timeline-item timestamp="2020/03-至今" placement="top">
  82. <el-card>
  83. <h4>贵州威振押运有限公司</h4>
  84. <p>武装押运员</p>
  85. <p>
  86. 本人综合素质佳,能够吃苦耐劳,忠诚稳重,坚守诚信正直原则,勇于挑战自我开发自身潜力。善于学习,勤奋务实,刻苦钻研,具备广泛的兴趣和很丰富的知识,适应能力强,能够在很短时间内融入一个新的领域,适应它并且把它做好。
  87. </p>
  88. </el-card>
  89. </el-timeline-item>
  90. <el-timeline-item timestamp="2018/4-2020/2" placement="top">
  91. <el-card>
  92. <h4>贵州威振押运有限公司</h4>
  93. <p>武装押运员</p>
  94. <p>
  95. 本人综合素质佳,能够吃苦耐劳,忠诚稳重,坚守诚信正直原则,勇于挑战自我开发自身潜力。善于学习,勤奋务实,刻苦钻研,具备广泛的兴趣和很丰富的知识,适应能力强,能够在很短时间内融入一个新的领域,适应它并且把它做好。
  96. </p>
  97. </el-card>
  98. </el-timeline-item>
  99. <el-timeline-item timestamp="2016/4-2018/1" placement="top">
  100. <el-card>
  101. <h4>贵州威振押运有限公司</h4>
  102. <p>武装押运员</p>
  103. <p>
  104. 本人综合素质佳,能够吃苦耐劳,忠诚稳重,坚守诚信正直原则,勇于挑战自我开发自身潜力。善于学习,勤奋务实,刻苦钻研,具备广泛的兴趣和很丰富的知识,适应能力强,能够在很短时间内融入一个新的领域,适应它并且把它做好。
  105. </p>
  106. </el-card>
  107. </el-timeline-item>
  108. </el-timeline> -->
  109. </div>
  110. </section>
  111. <!-- left end -->
  112. <section class="right">
  113. <div class="btn" v-if="applyInfo.status <= 10" @click="handleinvite">
  114. 邀请面试
  115. </div>
  116. <div class="btn refused" v-if="applyInfo.status <= 10" @click="refused">
  117. 不合适
  118. </div>
  119. <!-- <div class="btn result" v-if="applyInfo.status == 60">已标为不合适</div> -->
  120. <div class="btn result">
  121. {{ applyInfo.status | verifyStatusFilter }}
  122. <span v-if="applyInfo.status == '20'"
  123. >({{ applyInfo.interviewMethod | filterMethod }})</span
  124. >
  125. </div>
  126. </section>
  127. </section>
  128. <el-dialog
  129. title="发送面试邀请"
  130. :visible.sync="dialogVisible"
  131. :center="true"
  132. width="30%"
  133. >
  134. <el-form :model="form" :inline="false">
  135. <el-form-item label="意向岗位" :label-width="formLabelWidth">
  136. {{ postName }}
  137. ({{ postLowestSalary }}-{{ postHighestSalary }}K)
  138. </el-form-item>
  139. <el-form-item label="邀请面试时间" :label-width="formLabelWidth">
  140. <el-date-picker
  141. v-model="form.interviewTime"
  142. type="datetime"
  143. placeholder="选择日期"
  144. >
  145. </el-date-picker>
  146. </el-form-item>
  147. <el-form-item label="邀请面试方式" :label-width="formLabelWidth">
  148. <el-select v-model="form.interviewMethod" placeholder="面试方式">
  149. <el-option label="现场面试" value="1"></el-option>
  150. <el-option label="视频面试" value="0"></el-option>
  151. </el-select>
  152. </el-form-item>
  153. <el-form-item
  154. v-if="form.interviewMethod == 1"
  155. label="邀请面试区域"
  156. :label-width="formLabelWidth"
  157. >
  158. <el-cascader
  159. filterable
  160. size="large"
  161. ref="addressSelect"
  162. :options="addressOptions"
  163. v-model="areaCode"
  164. :leafOnly="true"
  165. @change="addrChange"
  166. >
  167. </el-cascader>
  168. <!-- <el-input v-model="form.interviewArea" autocomplete="off"></el-input> -->
  169. </el-form-item>
  170. <el-form-item
  171. v-if="form.interviewMethod == 1"
  172. label="邀请面试地址"
  173. :label-width="formLabelWidth"
  174. >
  175. <el-input
  176. style="width: 60%"
  177. v-model="form.interviewAddress"
  178. autocomplete="off"
  179. ></el-input>
  180. </el-form-item>
  181. <!-- <el-form-item
  182. v-if="form.status == 50"
  183. label="邀请入职时间"
  184. :label-width="formLabelWidth"
  185. >
  186. <el-date-picker
  187. v-model="form.hiredate"
  188. type="datetime"
  189. placeholder="选择日期"
  190. >
  191. </el-date-picker>
  192. </el-form-item> -->
  193. </el-form>
  194. <div slot="footer" class="dialog-footer">
  195. <el-button @click="dialogVisible = false">取 消</el-button>
  196. <el-button type="primary" @click="submit">确 定</el-button>
  197. </div>
  198. </el-dialog>
  199. </div>
  200. </template>
  201. <script>
  202. import Header from "@/components/header.vue";
  203. import Mainmenu from "@/components/mainmenu.vue";
  204. import { parseTime } from "@/utils/index";
  205. import { regionDataPlus, CodeToText } from "element-china-area-data";
  206. import {
  207. getapplicantInfo,
  208. updateStatus,
  209. invite,
  210. getApplyStatus,
  211. } from "@/utils/api";
  212. export default {
  213. name: "",
  214. components: {
  215. Header,
  216. Mainmenu,
  217. },
  218. data() {
  219. return {
  220. areaCode: ["520000", "520100", "520102"],
  221. addressOptions: regionDataPlus,
  222. dialogVisible: false,
  223. veteMemberId: "",
  224. postId: "",
  225. applyId: "",
  226. applyInfo: {},
  227. applicantInfo: {},
  228. status: "",
  229. form: {},
  230. formLabelWidth: "80",
  231. postName: "",
  232. postLowestSalary: "",
  233. postHighestSalary: "",
  234. };
  235. },
  236. filters: {
  237. filtersSex(val) {
  238. if (val == "0") {
  239. return "男";
  240. } else if (val == "1") {
  241. return "女";
  242. }
  243. },
  244. filterMethod(val) {
  245. if (val == "0") {
  246. return "视频";
  247. } else if (val == "1") {
  248. return "现场";
  249. }
  250. },
  251. verifyStatusFilter(value) {
  252. if (value == 0) {
  253. return "未查看";
  254. } else if (value == 10) {
  255. return "已查看";
  256. } else if (value == 20) {
  257. return "已邀请面试";
  258. } else if (value == 30) {
  259. return "已接受面试";
  260. } else if (value == 40) {
  261. return "已拒绝面试";
  262. } else if (value == 50) {
  263. return "面试通过";
  264. } else if (value == 60) {
  265. return "不合适";
  266. } else if (value == 70) {
  267. return "未参加面试";
  268. } else if (value == 80) {
  269. return "已拒绝入职";
  270. } else if (value == 90) {
  271. return "已入职";
  272. } else {
  273. return "未知";
  274. }
  275. },
  276. },
  277. created() {
  278. this.veteMemberId = this.$route.query.veteMemberId;
  279. this.applyId = this.$route.query.applyId;
  280. this.form.id = this.$route.query.applyId;
  281. this.postName = this.$route.query.postName;
  282. this.postLowestSalary = this.$route.query.postLowestSalary;
  283. this.postHighestSalary = this.$route.query.postHighestSalary;
  284. this.handelGetapplicantInfo();
  285. this.handelApplyInfo();
  286. },
  287. methods: {
  288. handelGetapplicantInfo() {
  289. getapplicantInfo({ memberId: this.veteMemberId })
  290. .then((res) => {
  291. console.log("getapplicantInfo", res);
  292. this.applicantInfo = res.data;
  293. })
  294. .catch((err) => {
  295. console.log("getapplicantInfo err", err);
  296. });
  297. },
  298. handelApplyInfo() {
  299. getApplyStatus({ applyId: this.applyId })
  300. .then((res) => {
  301. console.log("getApplyStatus", res);
  302. this.applyInfo = res.data;
  303. })
  304. .catch((err) => {
  305. console.log("getApplyStatus err", err);
  306. });
  307. },
  308. refused() {
  309. let that = this;
  310. this.$confirm("确认不合适?")
  311. .then((res) => {
  312. console.log("res", res);
  313. updateStatus({ id: this.applyId, status: "60" }).then((res) => {
  314. this.handelApplyInfo();
  315. this.$message({
  316. message: res.msg,
  317. type: "success",
  318. duration: 1000,
  319. onClose: function () {
  320. this.dialogVisible = false;
  321. },
  322. });
  323. // console.log("updateStatus", res);
  324. });
  325. })
  326. .catch((err) => {
  327. console.log("err", err);
  328. });
  329. },
  330. submit() {
  331. console.log("this.form", this.form);
  332. if (this.form.interviewMethod == "1") {
  333. this.form.interviewArea =
  334. CodeToText[this.areaCode[0]] +
  335. CodeToText[this.areaCode[1]] +
  336. CodeToText[this.areaCode[2]];
  337. }
  338. this.form.interviewTime = parseTime(this.form.interviewTime);
  339. let param = {
  340. id: "",
  341. interviewMethod: "",
  342. interviewArea: "",
  343. interviewTime: "",
  344. interviewAddress: "",
  345. };
  346. let that = this;
  347. invite(this.form)
  348. .then((res) => {
  349. this.handelApplyInfo();
  350. this.$message({
  351. message: res.msg,
  352. type: "success",
  353. duration: 1000,
  354. onClose: function () {
  355. this.dialogVisible = false;
  356. },
  357. });
  358. // console.log("updateStatus", res);
  359. })
  360. .catch((err) => {
  361. console.log("invite err", err);
  362. });
  363. },
  364. handleinvite() {
  365. this.dialogVisible = true;
  366. },
  367. addrChange(value) {
  368. this.form.interviewArea =
  369. CodeToText[value[0]] + CodeToText[value[1]] + CodeToText[value[2]];
  370. console.log(
  371. CodeToText[value[0]] + CodeToText[value[1]] + CodeToText[value[2]],
  372. "选中地址"
  373. );
  374. // console.log("addrChange", value);
  375. },
  376. },
  377. };
  378. </script>
  379. <style lang='scss' scoped>
  380. .gap {
  381. height: 15px;
  382. background: #eee;
  383. }
  384. .wrap {
  385. padding-top: 63px;
  386. .left {
  387. width: 675px;
  388. float: left;
  389. .base-info {
  390. overflow: hidden;
  391. margin-bottom: 44px;
  392. .portrait {
  393. width: 80px;
  394. height: 80px;
  395. float: left;
  396. }
  397. .text {
  398. float: left;
  399. margin-left: 20px;
  400. color: #6f6f6f;
  401. font-size: 14px;
  402. div {
  403. margin: 5px 0;
  404. }
  405. .name {
  406. font-size: 24px;
  407. font-weight: 400;
  408. color: #262626;
  409. line-height: 33px;
  410. }
  411. }
  412. }
  413. .block {
  414. margin-bottom: 30px;
  415. line-height: 1.5;
  416. .title {
  417. margin-bottom: 10px;
  418. font-size: 18px;
  419. font-weight: 500;
  420. color: #1c1c1c;
  421. line-height: 25px;
  422. }
  423. span + span {
  424. margin-left: 10px;
  425. }
  426. }
  427. }
  428. .right {
  429. width: 358px;
  430. float: right;
  431. .btn {
  432. height: 67px;
  433. line-height: 67px;
  434. background: #4aad78;
  435. border-radius: 5px;
  436. text-align: center;
  437. color: #fff;
  438. font-size: 20px;
  439. cursor: pointer;
  440. margin-bottom: 10px;
  441. box-sizing: border-box;
  442. &.refused {
  443. background: transparent;
  444. border: 2px solid #f56c6c;
  445. color: #f56c6c;
  446. }
  447. &.result {
  448. background: transparent;
  449. color: #878787;
  450. cursor: default;
  451. }
  452. }
  453. }
  454. }
  455. ::v-deep {
  456. .el-cascader {
  457. width: 100%;
  458. }
  459. .el-select {
  460. width: 100%;
  461. }
  462. .el-dialog {
  463. -moz-box-shadow: rgba(169, 169, 169, 0.6) 0px 0px 0px 10px; /* 老的 Firefox */
  464. box-shadow: rgba(169, 169, 169, 0.6) 0px 0px 0px 10px;
  465. border-radius: 0px;
  466. .el-dialog__header {
  467. background: rgb(0, 179, 138);
  468. span {
  469. color: white;
  470. font-size: 16px;
  471. }
  472. .el-dialog__headerbtn .el-dialog__close {
  473. color: white;
  474. }
  475. }
  476. }
  477. }
  478. </style>