用工小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

476 lines
16 KiB

1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
  1. <template>
  2. <view class="u-page">
  3. <!-- 使用状态组件 -->
  4. <view class="se-px-20 se-pt-40" v-if="obj && Object.keys(obj).length > 0">
  5. <order-status :order-data="obj" page-type="job-order"></order-status>
  6. </view>
  7. <!-- 先支付后试用 payType=0 -->
  8. <view class="se-px-20" v-if="obj.payType == 0">
  9. <!-- 企业 -->
  10. <view class="se-px-220 se-pb-30 se-fs-20 se-flex se-flex-h-c"
  11. v-if="!type">
  12. <button
  13. open-type="contact"
  14. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange"
  15. style="background: #ff7a31; border: none; padding: 0; margin: 0; line-height: 50rpx;">
  16. <text>联系客服</text>
  17. </button>
  18. <template v-if="obj.status==0">
  19. <view @click="onCancel()"
  20. class="se-mx-10 se-w-200 se-b se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-66 se-bgc-f5">
  21. <text>取消</text>
  22. </view>
  23. </template>
  24. <template v-if="obj.status == 3">
  25. <view @click="confirmOrderTryCompany()"
  26. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  27. <text>企业确认</text>
  28. </view>
  29. </template>
  30. <template v-if="obj.status==1">
  31. <view @click="onPay()"
  32. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  33. <text>去支付</text>
  34. </view>
  35. </template>
  36. </view>
  37. <!-- 求职者 -->
  38. <view class="se-px-220 se-pb-30 se-fs-20 se-flex se-flex-h-c"
  39. v-else>
  40. <button
  41. open-type="contact"
  42. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange"
  43. style="background: #ff7a31; border: none; padding: 0; margin: 0; line-height: 50rpx;">
  44. <text>联系客服</text>
  45. </button>
  46. <template v-if="obj.status==0">
  47. <view @click="confirmOrder()"
  48. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  49. <text>接受工作</text>
  50. </view>
  51. <view @click="onCancel()"
  52. class="se-mx-10 se-w-200 se-b se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-66 se-bgc-f5">
  53. <text>取消</text>
  54. </view>
  55. </template>
  56. <template v-if="obj.status==2">
  57. <view @click="confirmOrderTry()"
  58. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  59. <text>确认试工完成</text>
  60. </view>
  61. </template>
  62. </view>
  63. </view>
  64. <!-- 先后支付 payType=1 -->
  65. <view class="se-px-20" v-else>
  66. <!-- 企业 -->
  67. <view class="se-px-220 se-pb-30 se-fs-20 se-flex se-flex-h-c"
  68. v-if="!type">
  69. <button
  70. open-type="contact"
  71. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange"
  72. style="background: #ff7a31; border: none; padding: 0; margin: 0; line-height: 50rpx;">
  73. <text>联系客服</text>
  74. </button>
  75. <template v-if="obj.status==0">
  76. <view @click="onCancel()"
  77. class="se-mx-10 se-w-200 se-b se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-66 se-bgc-f5">
  78. <text>取消</text>
  79. </view>
  80. </template>
  81. <template v-if="obj.status == 2">
  82. <view @click="confirmOrderTryCompany()"
  83. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  84. <text>企业确认</text>
  85. </view>
  86. </template>
  87. <template v-if="obj.status==3">
  88. <view @click="onPay()"
  89. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  90. <text>去支付</text>
  91. </view>
  92. </template>
  93. </view>
  94. <!-- 求职者 -->
  95. <view class="se-px-220 se-pb-30 se-fs-20 se-flex se-flex-h-c"
  96. v-else>
  97. <button
  98. open-type="contact"
  99. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange"
  100. style="background: #ff7a31; border: none; padding: 0; margin: 0; line-height: 50rpx;">
  101. <text>联系客服</text>
  102. </button>
  103. <template v-if="obj.status==0">
  104. <view @click="confirmOrder()"
  105. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  106. <text>接受工作</text>
  107. </view>
  108. <view @click="onCancel()"
  109. class="se-mx-10 se-w-200 se-b se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-66 se-bgc-f5">
  110. <text>取消</text>
  111. </view>
  112. </template>
  113. <template v-if="obj.status==1">
  114. <view @click="confirmOrderTry()"
  115. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  116. <text>确认试工完成</text>
  117. </view>
  118. </template>
  119. <template v-if="obj.status==4">
  120. <view @click="confirmOrderTryCompanyOk()"
  121. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  122. <text>确认到账</text>
  123. </view>
  124. </template>
  125. </view>
  126. </view>
  127. <!-- 企业信息展示部分 (师傅视角) -->
  128. <company-info
  129. :company-data="obj"
  130. v-if="!!type"
  131. :show-contact-button="!!type">
  132. </company-info>
  133. <view class="se-px-40 se-py-20" @click="toPayment">
  134. <view class="se-flex se-flex-ai-c se-pb-10">
  135. <view class="line-orange"></view>
  136. <view class="se-ml-10 se-fs-32 se-c-black se-fw-6">
  137. 师傅求职详情
  138. </view>
  139. </view>
  140. <view class="se-flex se-flex-v-sa se-flex-ai-fs se-py-20">
  141. <view class="se-flex">
  142. <view class="se-w-160 se-h-160">
  143. <image class="se-w-160 se-h-160 se-br-10" :src="obj.employResume.headImage" mode=""></image>
  144. </view>
  145. <view class="se-ml-20 se-flex se-flex-v-sa se-flex-ai-fs">
  146. <view class="se-fw-6 se-c-black se-fs-30 se-display-ib">出发地址:{{obj.employSeek.address || '暂未'}}</view>
  147. <view class="se-fs-24 se-c-text-third se-display-ib">所属行业:{{obj.employSeek.categoryOne || '暂未'}}</view>
  148. <view class="se-fs-24 se-c-text-third se-display-ib">所属工种:{{obj.employSeek.categoryTwo || '暂未'}}</view>
  149. </view>
  150. </view>
  151. <view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
  152. <view class="se-fs-24 se-display-ib">试工日资</view>
  153. <view class="se-c-orange se-fs-32 se-fw-6 se-display-ib"
  154. v-if="obj.employSeek && obj.employSeek.dayMoney">
  155. {{obj.employSeek.dayMoney}}/
  156. </view>
  157. <view class="se-fs-24 se-display-ib se-c-99" v-else>暂未</view>
  158. </view>
  159. <view class="se-flex se-flex-h-sb se-w-p-100 se-pt-20">
  160. <view class="se-fs-24 se-display-ib">月薪</view>
  161. <view class="se-c-orange se-fs-32 se-fw-6 se-display-ib"
  162. v-if="obj.employSeek && (obj.employSeek.salaryMax || obj.employSeek.salaryMin)">
  163. <text v-if="obj.employSeek.salaryMin">{{obj.employSeek.salaryMin}}</text>
  164. <text v-if="obj.employSeek.salaryMax != obj.employSeek.salaryMin
  165. && obj.employSeek.salaryMax != 0 && obj.employSeek.salaryMin != 0">-</text>
  166. <text
  167. v-if="obj.employSeek.salaryMax != obj.employSeek.salaryMin && obj.employSeek.salaryMax != 0">
  168. {{obj.employSeek.salaryMax || 0}}
  169. </text>
  170. /
  171. </view>
  172. <view class="se-fs-24 se-display-ib se-c-99" v-else>暂未</view>
  173. </view>
  174. </view>
  175. <u-line dashed></u-line>
  176. <view class="se-py-10 se-pb-30">
  177. <view class="se-mt-30">
  178. <text class="se-fs-28 se-c-black se-fw5">师傅姓名{{obj.employResume.name || '暂未'}}</text>
  179. <br>
  180. <text class="se-fs-28 se-c-black se-fw5">民族{{obj.employResume.nation || '暂未'}}</text>
  181. <br>
  182. <text class="se-fs-28 se-c-black se-fw5">性别{{obj.employResume.sex == 1 ? '男' : obj.employResume.sex == 2 ? '女' : '暂未'}}</text>
  183. <br>
  184. <text class="se-fs-28 se-c-black se-fw5">年龄{{obj.employResume.age || '暂未'}}</text>
  185. <br>
  186. <text class="se-fs-28 se-c-black se-fw5">地区{{obj.employResume.address || '暂未'}}</text>
  187. <br>
  188. <text class="se-fs-28 se-c-black se-fw5">简介{{obj.employResume.brief || '暂未'}}</text>
  189. <br>
  190. <text class="se-fs-24 se-c-text-third">师傅电话{{obj.employResume.phone || '暂未'}}</text>
  191. <view class="se-bgc-orange se-c-white se-fs-20 se-display-ib se-px-10 se-py-5 se-br-10 se-ml-10"
  192. @click="copyText(obj.employResume.phone)">
  193. 复制
  194. </view>
  195. </view>
  196. <view class="se-mt-10">
  197. <text class="se-fs-24 se-c-33">简历地址{{obj.workAddress || '暂未'}}</text>
  198. <view class="se-bgc-orange se-c-white se-fs-20 se-display-ib se-px-10 se-py-5 se-br-10 se-ml-10"
  199. @click="copyText(obj.workAddress)">
  200. 复制
  201. </view>
  202. </view>
  203. </view>
  204. <u-line dashed></u-line>
  205. <view class="se-mt-20 se-pt-20 se-pb-30">
  206. <view class="se-fw-6 se-fs-32 se-c-black">
  207. 师傅简历
  208. </view>
  209. <view class="se-flex se-pt-30 se-flex-h-sb">
  210. <view class="se-fs-24 se-display-ib">简介</view>
  211. <view class="se-fs-24 se-display-ib">{{obj.employResume.brief || '暂未'}}</view>
  212. </view>
  213. <view class="se-flex se-pt-30 se-flex-h-sb">
  214. <view class="se-fs-24 se-display-ib">出行方式</view>
  215. <view class="se-fs-24 se-display-ib">{{obj.employSeek.selectGo || '暂未'}}</view>
  216. </view>
  217. <view class="se-flex se-pt-30 se-flex-h-sb">
  218. <view class="se-fs-24 se-display-ib">支付方式</view>
  219. <view class="se-fs-24 se-display-ib" v-if="obj.employSeek.payType==0">先付后试用</view>
  220. <view class="se-fs-24 se-display-ib" v-else>先试用后支付</view>
  221. <view class="se-fs-24 se-display-ib se-c-99" v-if="obj.employSeek.payType==null || obj.employSeek.payType==undefined">暂未</view>
  222. </view>
  223. <!-- <view class="se-flex se-pt-30 se-flex-h-sb">
  224. <view class="se-fs-24 se-display-ib">工作时间</view>
  225. <view class="se-fs-24 se-display-ib">{{obj.workTime}}</view>
  226. </view> -->
  227. </view>
  228. <u-line dashed></u-line>
  229. <view class="se-mt-20 se-pt-20 se-pb-30">
  230. <view class="se-fw-6 se-fs-32 se-c-black">
  231. 师傅技能
  232. </view>
  233. <view class="se-fs-24 se-pt-20 se-pb-20 se-lh-40">
  234. <u-parse :content="obj.employSeek.workDetail"></u-parse>
  235. </view>
  236. </view>
  237. <view class="se-px-220 se-pb-30 se-fs-20 se-flex se-flex-h-c" v-if="!type">
  238. <view
  239. @click="callMaster()"
  240. class="se-mx-10 se-w-200 se-br-40 se-flex-h-c se-h-50 se-lh-50 se-ta-c se-fs-24 se-c-white se-bgc-orange">
  241. <text>联系师傅</text>
  242. </view>
  243. </view>
  244. </view>
  245. <!-- 企业信息展示部分 (师傅视角) -->
  246. <company-info
  247. :company-data="obj"
  248. v-if="!type"
  249. :show-contact-button="!!type">
  250. </company-info>
  251. </view>
  252. </template>
  253. <script>
  254. import {
  255. orderDetail,
  256. deleteOrder,
  257. confirmOrder,
  258. confirmOrderTry,
  259. confirmOrderTryCompany,
  260. confirmOrderTryCompanyOk,
  261. } from "@/common/api.js"
  262. import OrderStatus from "@/components/order-status/index.vue"
  263. import CompanyInfo from "@/components/company-info/index.vue"
  264. export default {
  265. components: {
  266. OrderStatus,
  267. CompanyInfo
  268. },
  269. data() {
  270. return {
  271. detail: `<p>
  272. 1全日制大专以上学历艺术设计类相关专业;<br/>
  273. 2两年以上平面品牌视觉设计等相关工作经验能独立完成项目的设计工作 3C数码/个护健 类产品服务经验优先有乙方工作经验佳;<br/>
  274. 3具备一定的设计提案能力能完整的呈现设计思路与创意能清晰的表达设计逻辑与思考;<br/>
  275. 4热爱设计平面基本功扎实拥有优良的审美与创意想法对版式色彩把控能力强;对工作富有责任心具备团队沟通与协作能力;<br/>
  276. 5精通 PSAICDR 等平面设计软件能独立完成日常平面设计工作内容熟练使用 PPT/Keynote能完成提案内容的材料美化工作<br/>
  277. </p>`,
  278. obj: {},
  279. type : '',
  280. }
  281. },
  282. onLoad(options) {
  283. this.orderId = options.orderId
  284. this.type = options.type || ''
  285. },
  286. onShow(){
  287. this.onOrderDetail()
  288. },
  289. methods: {
  290. checkStatus(){
  291. let that = this
  292. // 根据订单类型和用户视角判断跳转逻辑
  293. // type == 1: 个人发布求职企业进行招聘,企业接受后师傅跳转保险页面
  294. // type != 1: 企业招聘师傅,师傅接受后企业跳转保险页面
  295. if (that.obj && !that.obj.orderStatusSeek && that.obj.status > 0 && that.obj.status < 4) {
  296. // 如果是个人发布求职(type == 0),师傅视角(type存在)才跳转
  297. if (that.obj.type == 1 && that.type) {
  298. uni.navigateTo({
  299. url: "/pages_subpack/payment/index?id=" + that.orderId
  300. })
  301. }
  302. // 如果是企业招聘师傅(type != 0),企业视角(!type)才跳转
  303. else if (that.obj.type != 1 && !that.type) {
  304. uni.navigateTo({
  305. url: "/pages_subpack/payment/index?id=" + that.orderId
  306. })
  307. }
  308. }
  309. },
  310. toPayment(){
  311. uni.navigateTo({
  312. url: "/pages_subpack/payment/index?id=" + this.orderId
  313. })
  314. },
  315. onOrderDetail() {
  316. let that = this
  317. let params = {
  318. orderId: that.orderId
  319. }
  320. orderDetail(params).then(response => {
  321. that.obj = response.result
  322. this.checkStatus()
  323. }).catch(error => {
  324. })
  325. },
  326. copyText(event) {
  327. uni.setClipboardData({
  328. data: event,
  329. success: () => {
  330. uni.showToast({
  331. title: "复制成功",
  332. icon: "none",
  333. });
  334. },
  335. fail: (err) => {
  336. console.error("复制失败", err);
  337. },
  338. })
  339. },
  340. onCancel() {
  341. deleteOrder(this.orderId).then(res => {
  342. if (res.code == 200) {
  343. uni.navigateBack(-1)
  344. }
  345. })
  346. },
  347. // 订单信息-求职者确认订单
  348. confirmOrder() {
  349. confirmOrder(this.orderId)
  350. .then(res => {
  351. if(res.code == 200){
  352. uni.showToast({
  353. title: '确认成功',
  354. icon: 'none'
  355. })
  356. this.onOrderDetail()
  357. }
  358. })
  359. },
  360. // 订单信息-确认试工完成
  361. confirmOrderTry(){
  362. confirmOrderTry(this.orderId)
  363. .then(res => {
  364. if(res.code == 200){
  365. uni.showToast({
  366. title: '确认成功',
  367. icon: 'none'
  368. })
  369. this.onOrderDetail()
  370. }
  371. })
  372. },
  373. // 确认企业已结款
  374. confirmOrderTryCompanyOk(){
  375. confirmOrderTryCompanyOk({
  376. orderId : this.orderId
  377. })
  378. .then(res => {
  379. this.onOrderDetail()
  380. })
  381. },
  382. onPay() {
  383. uni.navigateTo({
  384. url: "/pages_subpack/pay/index?orderId=" + this.orderId
  385. })
  386. },
  387. /**
  388. * 企业方法
  389. */
  390. // 订单信息-企业确认试工完成
  391. confirmOrderTryCompany(){
  392. confirmOrderTryCompany(this.orderId)
  393. .then(res => {
  394. if(res.code == 200){
  395. uni.showToast({
  396. title: '确认成功',
  397. icon: 'none'
  398. })
  399. this.onOrderDetail()
  400. }
  401. })
  402. },
  403. // 订单信息-企业确认订单
  404. confirmOrder() {
  405. confirmOrder(this.orderId)
  406. .then(res => {
  407. if(res.code == 200){
  408. uni.showToast({
  409. title: '确认成功',
  410. icon: 'none'
  411. })
  412. this.onOrderDetail()
  413. }
  414. })
  415. },
  416. // 拨打师傅电话
  417. callMaster() {
  418. const phone = this.obj.employResume && this.obj.employResume.phone;
  419. if (phone) {
  420. uni.makePhoneCall({
  421. phoneNumber: phone,
  422. fail: (err) => {
  423. console.error('拨打电话失败', err);
  424. uni.showToast({
  425. title: '拨打电话失败',
  426. icon: 'none'
  427. });
  428. }
  429. });
  430. } else {
  431. uni.showToast({
  432. title: '师傅电话号码不存在',
  433. icon: 'none'
  434. });
  435. }
  436. },
  437. }
  438. }
  439. </script>
  440. <style lang="scss" scoped>
  441. .line-orange {
  442. width: 8rpx;
  443. height: 32rpx;
  444. background: #ff7a31;
  445. border-radius: 4rpx;
  446. }
  447. </style>