applicant.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  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 title="发送面试邀请" :visible.sync="dialogVisible" width="30%">
  129. <el-form :model="form" :inline="true">
  130. <el-form-item label="意向岗位" :label-width="formLabelWidth">
  131. {{ form.postName }}
  132. </el-form-item>
  133. <el-form-item label="邀请面试时间" :label-width="formLabelWidth">
  134. <el-date-picker
  135. v-model="form.interviewTime"
  136. type="datetime"
  137. placeholder="选择日期"
  138. >
  139. </el-date-picker>
  140. </el-form-item>
  141. <el-form-item label="邀请面试方式" :label-width="formLabelWidth">
  142. <el-select v-model="form.interviewMethod" placeholder="面试方式">
  143. <el-option label="现场面试" value="1"></el-option>
  144. <el-option label="视频面试" value="0"></el-option>
  145. </el-select>
  146. </el-form-item>
  147. <el-form-item
  148. v-if="form.interviewMethod == 1"
  149. label="邀请面试区域"
  150. :label-width="formLabelWidth"
  151. >
  152. <el-cascader
  153. filterable
  154. size="large"
  155. ref="addressSelect"
  156. :options="addressOptions"
  157. v-model="areaCode"
  158. :leafOnly="true"
  159. @change="addrChange"
  160. >
  161. </el-cascader>
  162. <!-- <el-input v-model="form.interviewArea" autocomplete="off"></el-input> -->
  163. </el-form-item>
  164. <el-form-item
  165. v-if="form.interviewMethod == 1"
  166. label="邀请面试地址"
  167. :label-width="formLabelWidth"
  168. >
  169. <el-input
  170. v-model="form.interviewAddress"
  171. autocomplete="off"
  172. ></el-input>
  173. </el-form-item>
  174. <el-form-item
  175. v-if="form.status == 50"
  176. label="邀请入职时间"
  177. :label-width="formLabelWidth"
  178. >
  179. <el-date-picker
  180. v-model="form.hiredate"
  181. type="datetime"
  182. placeholder="选择日期"
  183. >
  184. </el-date-picker>
  185. </el-form-item>
  186. </el-form>
  187. <div slot="footer" class="dialog-footer">
  188. <el-button @click="dialogVisible = false">取 消</el-button>
  189. <el-button type="primary" @click="submit">确 定</el-button>
  190. </div>
  191. </el-dialog>
  192. </div>
  193. </template>
  194. <script>
  195. import Header from "@/components/header.vue";
  196. import Mainmenu from "@/components/mainmenu.vue";
  197. import { parseTime } from "@/utils/index";
  198. import { regionDataPlus, CodeToText } from "element-china-area-data";
  199. import {
  200. getapplicantInfo,
  201. updateStatus,
  202. invite,
  203. getApplyStatus,
  204. } from "@/utils/api";
  205. export default {
  206. name: "",
  207. components: {
  208. Header,
  209. Mainmenu,
  210. },
  211. data() {
  212. return {
  213. areaCode: ["520000", "520100", "520102"],
  214. addressOptions: regionDataPlus,
  215. dialogVisible: false,
  216. veteMemberId: "",
  217. postId: "",
  218. applyId: "",
  219. applyInfo: {},
  220. applicantInfo: {},
  221. status: "",
  222. form: {},
  223. formLabelWidth: "80",
  224. };
  225. },
  226. filters: {
  227. filtersSex(val) {
  228. if (val == "0") {
  229. return "男";
  230. } else if (val == "1") {
  231. return "女";
  232. }
  233. },
  234. filterMethod(val) {
  235. if (val == "0") {
  236. return "视频";
  237. } else if (val == "1") {
  238. return "现场";
  239. }
  240. },
  241. verifyStatusFilter(value) {
  242. if (value == 0) {
  243. return "未查看";
  244. } else if (value == 10) {
  245. return "已查看";
  246. } else if (value == 20) {
  247. return "已邀请面试";
  248. } else if (value == 30) {
  249. return "已接受面试";
  250. } else if (value == 40) {
  251. return "已拒绝面试";
  252. } else if (value == 50) {
  253. return "面试通过";
  254. } else if (value == 60) {
  255. return "不合适";
  256. } else if (value == 70) {
  257. return "未参加面试";
  258. } else if (value == 80) {
  259. return "已拒绝入职";
  260. } else if (value == 90) {
  261. return "已入职";
  262. } else {
  263. return "未知";
  264. }
  265. },
  266. },
  267. created() {
  268. this.veteMemberId = this.$route.query.veteMemberId;
  269. this.applyId = this.$route.query.applyId;
  270. this.form.id = this.$route.query.applyId;
  271. this.handelGetapplicantInfo();
  272. this.handelApplyInfo();
  273. },
  274. methods: {
  275. handelGetapplicantInfo() {
  276. getapplicantInfo({ memberId: this.veteMemberId })
  277. .then((res) => {
  278. console.log("getapplicantInfo", res);
  279. this.applicantInfo = res.data;
  280. })
  281. .catch((err) => {
  282. console.log("getapplicantInfo err", err);
  283. });
  284. },
  285. handelApplyInfo() {
  286. getApplyStatus({ applyId: this.applyId })
  287. .then((res) => {
  288. console.log("getApplyStatus", res);
  289. this.applyInfo = res.data;
  290. })
  291. .catch((err) => {
  292. console.log("getApplyStatus err", err);
  293. });
  294. },
  295. refused() {
  296. let that = this;
  297. this.$confirm("确认不合适?")
  298. .then((res) => {
  299. console.log("res", res);
  300. updateStatus({ id: this.applyId, status: "60" }).then((res) => {
  301. this.handelApplyInfo();
  302. this.$message({
  303. message: res.msg,
  304. type: "success",
  305. duration: 1000,
  306. onClose: function () {},
  307. });
  308. // console.log("updateStatus", res);
  309. });
  310. })
  311. .catch((err) => {
  312. console.log("err", err);
  313. });
  314. },
  315. submit() {
  316. console.log("this.form", this.form);
  317. if (this.form.interviewMethod == "1") {
  318. this.form.interviewArea =
  319. CodeToText[this.areaCode[0]] +
  320. CodeToText[this.areaCode[1]] +
  321. CodeToText[this.areaCode[2]];
  322. }
  323. this.form.interviewTime = parseTime(this.form.interviewTime);
  324. let param = {
  325. id: "",
  326. interviewMethod: "",
  327. interviewArea: "",
  328. interviewTime: "",
  329. interviewAddress: "",
  330. };
  331. let that = this;
  332. invite(this.form)
  333. .then((res) => {
  334. this.handelApplyInfo();
  335. this.$message({
  336. message: res.msg,
  337. type: "success",
  338. duration: 1000,
  339. onClose: function () {},
  340. });
  341. // console.log("updateStatus", res);
  342. })
  343. .catch((err) => {
  344. console.log("invite err", err);
  345. });
  346. },
  347. handleinvite() {
  348. this.dialogVisible = true;
  349. },
  350. addrChange(value) {
  351. this.form.interviewArea =
  352. CodeToText[value[0]] + CodeToText[value[1]] + CodeToText[value[2]];
  353. console.log(
  354. CodeToText[value[0]] + CodeToText[value[1]] + CodeToText[value[2]],
  355. "选中地址"
  356. );
  357. // console.log("addrChange", value);
  358. },
  359. },
  360. };
  361. </script>
  362. <style lang='scss' scoped>
  363. .gap {
  364. height: 15px;
  365. background: #eee;
  366. }
  367. .wrap {
  368. padding-top: 63px;
  369. .left {
  370. width: 675px;
  371. float: left;
  372. .base-info {
  373. overflow: hidden;
  374. margin-bottom: 44px;
  375. .portrait {
  376. width: 80px;
  377. height: 80px;
  378. float: left;
  379. }
  380. .text {
  381. float: left;
  382. margin-left: 20px;
  383. color: #6f6f6f;
  384. font-size: 14px;
  385. div {
  386. margin: 5px 0;
  387. }
  388. .name {
  389. font-size: 24px;
  390. font-weight: 400;
  391. color: #262626;
  392. line-height: 33px;
  393. }
  394. }
  395. }
  396. .block {
  397. margin-bottom: 30px;
  398. line-height: 1.5;
  399. .title {
  400. margin-bottom: 10px;
  401. font-size: 18px;
  402. font-weight: 500;
  403. color: #1c1c1c;
  404. line-height: 25px;
  405. }
  406. span + span {
  407. margin-left: 10px;
  408. }
  409. }
  410. }
  411. .right {
  412. width: 358px;
  413. float: right;
  414. .btn {
  415. height: 67px;
  416. line-height: 67px;
  417. background: #4aad78;
  418. border-radius: 5px;
  419. text-align: center;
  420. color: #fff;
  421. font-size: 20px;
  422. cursor: pointer;
  423. margin-bottom: 10px;
  424. box-sizing: border-box;
  425. &.refused {
  426. background: transparent;
  427. border: 2px solid #f56c6c;
  428. color: #f56c6c;
  429. }
  430. &.result {
  431. background: transparent;
  432. border: 2px solid #f56c6c;
  433. color: #f56c6c;
  434. cursor: default;
  435. }
  436. }
  437. }
  438. }
  439. </style>