myInterview.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <!-- 我的面试 -->
  2. <!--
  3. 投递状态码 status
  4. 0 未查看
  5. 10 已查看
  6. 11 不合适
  7. 20 已邀请面试
  8. 30 已接受面试
  9. 40 已拒绝面试
  10. 50 面试通过
  11. 60 不合适
  12. 70 未参加面试
  13. 80 已拒绝入职
  14. 90 已入职
  15. -->
  16. <template>
  17. <view class="interview">
  18. <u-navbar back-text="" title="" back-icon-color="#FFFFFF" :background="{ background: '#3D5D4C' }"
  19. :border-bottom="false"></u-navbar>
  20. <z-paging ref="paging" v-model="interviewList" @query="queryList">
  21. <view class="interview-list">
  22. <view class="interview-list-item" v-for="(item, index) in interviewList" :key="index">
  23. <view class="interview-list-item-title">
  24. <view>{{ getDictLabel(item.status, 'deliveryStatusList') }}</view>
  25. <view>
  26. <image src="../../static/img/shijian.png" />
  27. </view>
  28. </view>
  29. <view class="interview-list-item-date" :class="{'disable': item.status == 40 || item.status == 80}">
  30. {{ item.interviewTime }}</view>
  31. <view class="interview-list-item-way">{{ item.interviewAddress }}</view>
  32. <view class="interview-list-item-position">
  33. <view class="left">
  34. <view style="margin-right: 20rpx;">
  35. <u-image :src="item.companyLogoUrl" width="100" height="100" border-radius="10" />
  36. </view>
  37. <view class="info">
  38. <view>{{ item.postName }}</view>
  39. <view>
  40. {{ `${item.provinceName} | 经验${item.workYear}年 | ${getEducationBg(item.educationBg)}` }}
  41. </view>
  42. <view>{{ item.companyName }}</view>
  43. </view>
  44. </view>
  45. <view class="right">
  46. <view>{{ `${item.lowestSalary}k ~ ${item.highestSalary}k` }}</view>
  47. <view v-if="item.updateTime">{{ item.updateTime.split(' ')[0] }}</view>
  48. <view v-else>{{ item.createTime.split(' ')[0] }}</view>
  49. </view>
  50. </view>
  51. <!-- 当状态为20时,拒绝面试/接受面试 -->
  52. <view class="interview-list-item-button double" v-if="Number(item.status) === 20">
  53. <view class="btn" @click="changeInterviewState(item, 30)">接受</view>
  54. <view class="btn" @click="changeInterviewState(item, 40)">拒绝</view>
  55. </view>
  56. <!-- 当状态为30时且面试时间大于当前时间 -->
  57. <view class="interview-list-item-button"
  58. v-if="Number(item.interviewMethod === 0) && Number(item.status) === 30 && new Date(item.interviewTime).valueOf() < new Date().valueOf()">
  59. <view class="submit btn" @click="videoInterview(item)">发起视频面试</view>
  60. </view>
  61. <!-- 当状态为30时且面试时间小于当前时间 -->
  62. <view class="interview-list-item-button"
  63. v-else-if="Number(item.interviewMethod === 0) && Number(item.status) === 30 && new Date(item.interviewTime).valueOf() >= new Date().valueOf()">
  64. <view class="not btn">未到视频面试</view>
  65. </view>
  66. <!-- 当状态为50时,拒绝入职/接受入职 -->
  67. <view class="interview-list-item-button double" v-else-if="Number(item.status) === 50">
  68. <view class="btn" @click="changeInterviewState(item, 90)">接受</view>
  69. <view class="btn" @click="changeInterviewState(item, 80)">拒绝</view>
  70. </view>
  71. </view>
  72. </view>
  73. </z-paging>
  74. <u-toast ref="uToast" />
  75. </view>
  76. </template>
  77. <script>
  78. export default {
  79. data() {
  80. return {
  81. // 面试列表
  82. interviewList: [],
  83. // 面试状态
  84. deliveryStatusList: [],
  85. degrEducList: [],
  86. pageNum: 1,
  87. pageSize: 10
  88. }
  89. },
  90. onLoad() {
  91. this.getDict('delivery_status')
  92. this.getDictEduc();
  93. },
  94. methods: {
  95. /**
  96. * 获取教育等级名称
  97. * @param {Object} value
  98. */
  99. getEducationBg(value) {
  100. let name;
  101. this.degrEducList.forEach(item => {
  102. if (item.text == value) {
  103. name = item.label
  104. }
  105. })
  106. return name;
  107. },
  108. /**
  109. * 获取字典
  110. */
  111. getDictEduc() {
  112. this.$u.api.getDictdataUrl({
  113. key: 'degr_educ'
  114. }).then(res => {
  115. if (res.code === 200) {
  116. this.degrEducList = res.data;
  117. }
  118. })
  119. },
  120. /**
  121. * 获取我的面试列表
  122. * @param { Number } pageNum
  123. * @param { Number } pageSize
  124. */
  125. getInterviewList(pageNum, pageSize) {
  126. this.$u.api.interview.getInterviewList({
  127. pageNum,
  128. pageSize
  129. }).then(res => {
  130. if (res.code === 200) {
  131. this.pageNum = pageNum
  132. this.pageSize = pageSize
  133. this.$refs.paging.complete(res.rows)
  134. } else {
  135. this.$refs.paging.complete([])
  136. this.$refs.uToast.show({
  137. title: res.msg,
  138. type: 'error'
  139. })
  140. }
  141. }).catch(err => {
  142. this.$refs.uToast.show({
  143. title: '系统异常!',
  144. type: 'error'
  145. })
  146. })
  147. },
  148. /**
  149. * 组件下拉加载触发
  150. * @param { Number } pageNo
  151. * @param { Number } pageSize
  152. */
  153. queryList(pageNo, pageSize) {
  154. this.getInterviewList(pageNo, pageSize);
  155. },
  156. /**
  157. * 获取数据字典
  158. * @param { String } key
  159. */
  160. getDict(key) {
  161. this.$u.api.getDictdataUrl({
  162. key
  163. }).then(res => {
  164. if (res.code === 200) {
  165. switch (key) {
  166. case 'delivery_status':
  167. this.deliveryStatusList = res.data;
  168. break;
  169. }
  170. }
  171. })
  172. },
  173. /**
  174. * 获取字典名称
  175. * @param { String } val
  176. * @param { String } key
  177. */
  178. getDictLabel(val, key) {
  179. let label;
  180. this[key].forEach(item => {
  181. if (Number(item.text) === Number(val)) {
  182. label = item.label
  183. }
  184. })
  185. return label;
  186. },
  187. /**
  188. * 修改面试状态
  189. * @param {Number} state
  190. */
  191. changeInterviewState(item, state) {
  192. this.$u.api.interview.changeInterviewStateApi({
  193. status: state,
  194. id: item.id
  195. }).then(res => {
  196. console.log(res)
  197. if (res.code === 200) {
  198. let msg;
  199. switch (state) {
  200. case 30:
  201. msg = '已接受面试'
  202. break;
  203. case 40:
  204. msg = '已拒绝面试'
  205. break;
  206. case 80:
  207. msg = '已拒绝入职'
  208. break;
  209. case 90:
  210. msg = '已接受入职'
  211. break;
  212. default:
  213. msg = '更新成功'
  214. break
  215. }
  216. this.$refs.uToast.show({
  217. title: msg,
  218. type: 'success'
  219. })
  220. this.getInterviewList(this.pageNum, this.pageSize);
  221. }
  222. })
  223. },
  224. /**
  225. * 视频面试
  226. * @param {Object} item
  227. */
  228. videoInterview(item) {
  229. let url =
  230. `${this.config.viewInterviewUrl}?veteMemberId=${item.companyId}&inviterId=${this.vuex_user.userId}&from=veterans`
  231. this.$u.route({
  232. url: '/pages/webView/webView',
  233. params: {
  234. url: encodeURIComponent(url)
  235. }
  236. })
  237. }
  238. }
  239. }
  240. </script>
  241. <style lang="scss" scoped>
  242. @import './myInterview.scss';
  243. </style>