用工小程序前端代码
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.

294 lines
11 KiB

9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
  1. <template>
  2. <view class="se-p-40 se-bgc-f5">
  3. <view class="se-flex se-flex-v-sa se-flex-ai-fs se-py-20 se-px-30 se-bs se-bgc-white se-br-20">
  4. <view class="se-flex">
  5. <view class="se-w-160 se-h-160">
  6. <image class="se-w-160 se-h-160 se-br-10" :src="detail.employJob.image || detail.jobHeadImg" mode="">
  7. </image>
  8. </view>
  9. <view class="se-ml-20 se-flex se-flex-v-sa se-flex-ai-fs">
  10. <view class="se-fw-6 se-c-black se-fs-30 se-display-ib">{{ detail.title }}</view>
  11. <view class="se-fs-24 se-c-text-third se-display-ib">所属行业:{{ detail.categoryOne }}</view>
  12. <view class="se-fs-24 se-c-text-third se-display-ib">所属工种:{{ detail.categoryTwo }}</view>
  13. <!-- <view class="se-fs-24 se-c-text-third se-display-ib">工作时间:3h</view> -->
  14. </view>
  15. </view>
  16. </view>
  17. <view class="se-flex se-flex-h-fs se-mt-30 se-py-20 se-px-30 se-bs se-bgc-white se-br-20">
  18. <image class="se-a-30" src="@/static/image/46502.png" mode=""></image>
  19. <text class="se-c-black se-fs-32 se-ml-20">{{ detail.workUser }}</text>
  20. <text class="se-c-black se-fs-32 se-ml-20">{{ detail.workPhone }}</text>
  21. </view>
  22. <view class="se-mt-30 se-py-20 se-px-30 se-bs se-bgc-white se-br-20">
  23. <view class="se-flex se-flex-h-sb se-pb-20 se-b-b">
  24. <view class="se-flex se-flex-h-fs">
  25. <image class="se-w-30 se-h-40" src="@/static/image/47961.png" mode=""></image>
  26. <text class="se-c-black se-fs-32 se-ml-20">{{ detail.workUser }}</text>
  27. </view>
  28. <view>
  29. <text class="se-c-orange se-fs-32 se-ml-20">$ {{ detail.payMoney }}</text>
  30. </view>
  31. </view>
  32. <!-- 新增保险费明细 type==1 时显示 -->
  33. <template v-if="detail.type == 1">
  34. <view class="se-flex se-flex-h-sb se-pt-20">
  35. <view class="se-flex se-flex-h-fs">
  36. <image class="se-w-30 se-h-40" src="@/static/image/46524.png" mode=""></image>
  37. <text class="se-c-black se-fs-32 se-ml-20">保险费</text>
  38. </view>
  39. <view>
  40. <text class="se-c-orange se-fs-32 se-ml-20">{{ detail.premium }}</text>
  41. </view>
  42. </view>
  43. <view class="se-flex se-flex-h-sb se-pt-20"
  44. v-if="detail.employSeek">
  45. <view class="se-flex se-flex-h-fs">
  46. <image class="se-w-30 se-h-40" src="@/static/image/47961.png" mode=""></image>
  47. <text class="se-c-black se-fs-32 se-ml-20">师傅试工交通费用</text>
  48. </view>
  49. <view class="se-flex se-flex-ai-c">
  50. <view class="se-bgc-orange se-display-ib se-br-10 se-py-5 se-px-20 se-c-white se-fs-20">
  51. {{ detail.employSeek.selectGo }}
  52. </view>
  53. <text class="se-c-orange se-fs-32 se-ml-20">$ {{ fare }}</text>
  54. </view>
  55. </view>
  56. <view class="se-c-black se-p-20 se-fs-24 se-flex se-flex-ai-c se-mt-20"
  57. style="background-color:rgba(255,164,113,0.48);">
  58. <view class="se-w-10 se-h-10 se-br-5 se-bgc-orange se-mr-10"></view>
  59. <text>全程共</text>
  60. <text class="se-c-orange se-px-5 se-fw-6">{{ distance }}</text>
  61. <text>公里</text>
  62. </view>
  63. <view class="se-p-20 se-fs-24 se-flex se-flex-ai-c" style="background-color:rgba(255,164,113,0.18);">
  64. 从师傅出发地到用工目的地总全程为5公里{{ distance }}公里x{{ farePerKm }}={{ fare }}
  65. </view>
  66. <view class="se-fs-22 se-lh-50 se-flex se-flex-v se-mt-10">
  67. <text>1.公交/地铁出行费用每公里{{ trafficPrice.bus }}</text>
  68. <text>2.出租车出行费用每公里{{ trafficPrice.taxi }}</text>
  69. <text>3.网约车出行费用每公里{{ trafficPrice.online }}</text>
  70. </view>
  71. </template>
  72. </view>
  73. <view class="se-mt-30 se-py-30 se-px-30 se-bs se-bgc-white se-br-20">
  74. <u-radio-group size="18" v-model="payRadio" iconPlacement="right">
  75. <view class="se-flex-v-sb se-w-p-100" style="align-items: unset;">
  76. <u-radio name="1" activeColor="#ff7a31">
  77. <view class="se-flex se-flex-ai-c se-pb-20">
  78. <image class="se-w-30 se-h-25 se-mt-5" src="@/static/image/46518.png" mode=""></image>
  79. <text class="se-c-black se-fs-30 se-ml-15">账户余额</text>
  80. <text class="se-c-text-third se-fs-28 se-ml-15">(余额{{ amount }})</text>
  81. </view>
  82. </u-radio>
  83. <u-radio name="2" activeColor="#ff7a31">
  84. <view class="se-flex se-flex-ai-c se-pt-20">
  85. <image class="se-w-35 se-h-30 se-mt-5" src="@/static/image/46662.png" mode=""></image>
  86. <text class="se-c-black se-fs-30 se-ml-15">微信支付</text>
  87. </view>
  88. </u-radio>
  89. </view>
  90. </u-radio-group>
  91. </view>
  92. <view class="se-mt-10 se-py-10 se-br-20"
  93. style="display: flex;flex-direction: column;align-items: center;">
  94. <text class="se-c-66 se-fs-22">温馨提示下单前请仔细查看下单需知</text>
  95. <view class="se-flex-h-fs se-br-40 se-mt-20 se-flex-ai-fs se-h-80 se-lh-80 se-ta-c se-fs-24 se-c-33"
  96. style="align-items: unset;">
  97. <u-checkbox :checked="checked" activeColor="#ff7a31" label-size="12" shape="circle"
  98. label="阅读并同意"></u-checkbox>
  99. <text class="se-c-orange" @click="show=true">用户使用协议</text>
  100. </view>
  101. </view>
  102. <view class="se-pos-fixed se-pos-lb se-bs-t se-flex se-flex-h-sb se-pb-60 se-pt-20 se-bgc-white se-w-vw-100">
  103. <view class="se-fs-32 se-c-black se-ml-30">
  104. <text class="se-fs-24">合计</text>
  105. <text class="se-c-orange">{{price}}</text>
  106. </view>
  107. <view @click="payOrderCompany"
  108. class="se-mr-30 se-w-240 se-h-80 se-lh-80 se-ta-c se-c-white se-fs-32 se-br-40 se-bgc-orange">
  109. 立即支付
  110. </view>
  111. </view>
  112. </view>
  113. </template>
  114. <script>
  115. import {
  116. orderDetail,
  117. deleteOrder,
  118. confirmOrder,
  119. payOrderCompany,
  120. userInfo,
  121. } from "@/common/api.js"
  122. import position from "@/utils/position.js"
  123. export default {
  124. data() {
  125. return {
  126. amount: 0,
  127. payRadio: "1",
  128. orderId : 0,
  129. checked : 0,
  130. detail : {},
  131. // type 0企业发布招聘,企业不需要支付保险、交通费,由个人承担
  132. // type 1个人发布求职,企业承担保险费、交通费用
  133. // 出行价格定义
  134. trafficPrice: {
  135. bus: 2, // 公交/地铁单价
  136. taxi: 3, // 出租车每公里单价
  137. online: 2.5 // 网约车每公里单价
  138. },
  139. fare : 0,//出行费
  140. distance : 0,//距离
  141. farePerKm : 2,//每公里单价
  142. }
  143. },
  144. computed : {
  145. price(){
  146. // type 0企业发布招聘,企业不需要支付保险、交通费,由个人承担
  147. // type 1个人发布求职,企业承担保险费、交通费用
  148. let basePrice = Number(this.detail.payMoney) || 0;
  149. let premiumFee = Number(this.detail.premium) || 0;
  150. let trafficFee = Number(this.fare) || 0;
  151. if (this.detail.type == 1) {
  152. // 个人发布求职,企业承担保险费、交通费用
  153. return basePrice + premiumFee + trafficFee;
  154. } else {
  155. // 企业发布招聘,企业不需要支付保险、交通费,由个人承担
  156. return basePrice;
  157. }
  158. },
  159. },
  160. onLoad(options) {
  161. this.orderId = options.orderId
  162. },
  163. onShow() {
  164. this.onOrderDetail()
  165. this.onUserInfo()
  166. },
  167. methods: {
  168. onUserInfo(){
  169. let params={}
  170. userInfo(params).then(response=>{
  171. this.amount=response.result.amount?response.result.amount:0
  172. }).catch(error=>{
  173. })
  174. },
  175. onOrderDetail() {
  176. let that = this
  177. let params = {
  178. orderId: that.orderId
  179. }
  180. orderDetail(params).then(response => {
  181. that.detail = response.result
  182. that.calcDistance()
  183. that.calcFare()
  184. }).catch(error => {
  185. console.log(error)
  186. })
  187. },
  188. //计算距离
  189. calcDistance(){
  190. console.log('calcDistance-计算距离')
  191. let distance = 0;
  192. if (this.detail.type == 1) {
  193. let seek = this.detail.employSeek
  194. let company = this.detail.employAuthenticationCompany
  195. distance = position.calculateDistance(seek.latitude, seek.longitude, company.latitude, company.longitude)
  196. }
  197. this.distance = distance;
  198. },
  199. //计算路费
  200. calcFare(){
  201. console.log('calcFare-计算费用')
  202. let fare = 0;
  203. if (this.detail.type == 1) {
  204. // 个人发布求职,企业承担保险费、交通费用
  205. let seek = this.detail.employSeek
  206. if(!seek) return
  207. // console.log(this.$store.state.data.configList);
  208. let configList = this.$store.state.data.configList
  209. // if(seek.selectGo.includes('出租车')){
  210. // this.farePerKm = this.trafficPrice.taxi
  211. // }else if(seek.selectGo.includes('网约车')){
  212. // this.farePerKm = this.trafficPrice.online
  213. // }else if(seek.selectGo.includes('公交')){
  214. // this.farePerKm = this.trafficPrice.bus
  215. // }
  216. if(seek.selectGo.includes('出租车')){
  217. this.farePerKm = configList.taxi_price
  218. }else if(seek.selectGo.includes('网约车')){
  219. this.farePerKm = configList.online_price
  220. }else if(seek.selectGo.includes('公交')){
  221. this.farePerKm = configList.bus_price
  222. }
  223. fare = this.farePerKm * this.distance;
  224. }
  225. this.fare = fare;
  226. },
  227. onDetail() {
  228. uni.navigateTo({
  229. url: "/pages_subpack/order-detail/index"
  230. })
  231. },
  232. payOrderCompany() {
  233. let that = this
  234. if(that.checked.length==0){
  235. return uni.showToast({
  236. icon: "none",
  237. title: "请勾选隐私协议"
  238. })
  239. }
  240. let data = {
  241. orderId: this.orderId,
  242. payType: this.payRadio,
  243. fare : this.fare || 0,//出行费
  244. }
  245. payOrderCompany(data)
  246. .then(res => {
  247. if (res.code == 200) {
  248. if (data.payType == '2') {
  249. uni.requestPayment({
  250. provider: 'wxpay', // 服务提提供商
  251. timeStamp: res.result.timeStamp, // 时间戳
  252. nonceStr: res.result.nonceStr, // 随机字符串
  253. package: res.result.packageValue,
  254. signType: res.result.signType, // 签名算法
  255. paySign: res.result.paySign, // 签名
  256. success: function(res) {
  257. uni.navigateBack(-1)
  258. },
  259. fail: function(err) {
  260. uni.showToast({
  261. icon: 'none',
  262. title: "支付失败"
  263. })
  264. }
  265. });
  266. } else if (res.code == 200) {
  267. uni.navigateBack(-1)
  268. }
  269. }
  270. })
  271. },
  272. }
  273. }
  274. </script>
  275. <style>
  276. </style>