myInterview.vue 6.3 KB

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