myInterview.vue 6.4 KB

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