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

311 lines
9.3 KiB

3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
3 months ago
  1. <template>
  2. <view class="se-m-10">
  3. <u-sticky>
  4. <view class="se-px-20 se-pt-10 se-zi-s se-bgc-white">
  5. <u-search height="40" placeholder="搜索" :showAction="true" v-model="keyword" @search="onSearch()" @clickIcon="onSearch()" @custom="onSearch()"></u-search>
  6. </view>
  7. <u-tabs
  8. class="se-bgc-white se-pb-20"
  9. :current="current"
  10. lineWidth="30"
  11. lineColor="#FF7A31"
  12. :activeStyle="{
  13. color: '#303133',
  14. fontWeight: 'bold',
  15. transform: 'scale(1.05)'
  16. }"
  17. :inactiveStyle="{
  18. color: '#606266',
  19. transform: 'scale(1)'
  20. }"
  21. itemStyle="padding-left: 15px; padding-right: 15px; height: 34px;"
  22. :list="navList"
  23. @click="navClick($event)">
  24. </u-tabs>
  25. </u-sticky>
  26. <template v-if="current==1">
  27. <view class="se-m-20 se-br-20 se-bs-b se-bgc-white se-py-20 se-px-30" v-for="(items,indexs) in tList" :key="indexs" @click="onTaskDetail(items)">
  28. <view class="se-flex se-flex-h-sb">
  29. <view class="se-flex">
  30. <text class="se-fw-6 se-c-black se-fs-30">{{items.title}}</text>
  31. </view>
  32. <view class="se-c-orange se-fs-32 se-fw-6">
  33. {{items.salaryMin}}-{{items.salaryMax}}k
  34. </view>
  35. </view>
  36. <view class="se-py-10">
  37. <text class="se-c-text-sub se-fs-22 se-mr-10 se-py-5 se-px-20 se-br-5 se-bgc-f5" v-if="items.categoryOne_dictText">{{items.categoryOne_dictText}}</text>
  38. <text class="se-c-text-sub se-fs-22 se-mr-10 se-py-5 se-px-20 se-br-5 se-bgc-f5" v-if="items.categoryTwo_dictText">{{items.categoryTwo_dictText}}</text>
  39. <text class="se-c-text-sub se-fs-22 se-mr-10 se-py-5 se-px-20 se-br-5 se-bgc-f5" v-if="items.payType_dictText">{{items.payType_dictText}}</text>
  40. </view>
  41. <view class="se-flex se-flex-h-sb">
  42. <view class="se-flex se-flex-h-c">
  43. <u-icon name="map"></u-icon>
  44. <text class="se-c-text-sub se-fs-24 se-pr-10">{{items.latitude,items.longitude | getDistance}}km</text>
  45. <text class="se-c-text-sub se-fs-24 se-pl-10 se-b-l se-toe-3" style="max-width: 220rpx;">{{items.address}}</text>
  46. </view>
  47. <view class="se-c-text se-c-text-sub se-fs-24">
  48. {{items.createTime | formatTime}}
  49. </view>
  50. <view class="se-flex se-flex-h-c se-py-10 se-px-20 se-br-12 se-fs-22 se-c-orange se-bgc-ffd se-fw-6">
  51. <text class="se-ml-5">立即接单</text>
  52. </view>
  53. </view>
  54. </view>
  55. <u-empty v-if="tList && tList.length==0" mode="list"></u-empty>
  56. </template>
  57. <template v-if="current==0">
  58. <view class="se-m-20 se-br-20 se-bs-b se-bgc-white se-py-20 se-px-30" v-for="(items,indexs) in rlist" :key="indexs">
  59. <view class="se-flex se-flex-h-sb" @click.capture="onRoleDetail(items)">
  60. <view class="se-flex">
  61. <view class="se-a-80">
  62. <image class="se-a-80 se-br-p-50 se-bgc-f5" :src="items.employResume.headImage" mode=""></image>
  63. </view>
  64. <view class="se-ml-20 se-flex se-flex-v-c se-flex-ai-fs">
  65. <text class="se-fw-6 se-c-black se-fs-30">{{items.employResume.name?items.employResume.name:items.hanHaiMember.nickName}}</text>
  66. <text class="se-fs-24 se-c-text-third">{{items.employResume.sex==1?"男":"女"}}-{{items.employResume.nation?items.employResume.nation:"未知"}}-{{items.employResume.age}}</text>
  67. </view>
  68. <view class="se-flex se-flex-h-c">
  69. <view class="se-py-10 se-px-20 se-br-12 se-fs-22 se-c-orange se-bgc-ffd se-ml-20 se-fw-6 se-toe-1" style="max-width: 100rpx;">
  70. {{items.categoryOne_dictText}}
  71. </view>
  72. </view>
  73. </view>
  74. <view class="se-c-orange se-fs-32 se-fw-6">
  75. {{items.salaryMin}}-{{items.salaryMax}}
  76. </view>
  77. </view>
  78. <view>
  79. <text class="se-c-text-third se-fs-22 se-mt-10">{{items.createTime}}</text>
  80. </view>
  81. <view class="se-flex se-flex-h-sb">
  82. <text class="se-c-text-sub se-fs-24 se-toe-5">
  83. {{items.categoryTwo_dictText}}
  84. <!-- <u-parse v-if="items.brief" :content="items.brief"></u-parse> -->
  85. </text>
  86. <text class="se-c-text-sub se-fs-24 se-toe-5">
  87. {{items.address}}
  88. <!-- <u-parse v-if="items.brief" :content="items.brief"></u-parse> -->
  89. </text>
  90. <view @click.capture="onCustomerService(items.employAuthenticationPerson.phone)" class="se-flex se-flex-h-c se-py-10 se-px-20 se-br-12 se-fs-22 se-c-orange se-bgc-ffd se-fw-6">
  91. <u-icon color="#FF7A31" name="phone-fill"></u-icon>
  92. <text class="se-ml-5">联系他</text>
  93. </view>
  94. </view>
  95. </view>
  96. <u-empty v-if="rlist && rlist.length==0" mode="list"></u-empty>
  97. </template>
  98. </view>
  99. </template>
  100. <script>
  101. import {
  102. bannerList,
  103. taskList,
  104. rolelist,
  105. industryList,
  106. querySeekList,
  107. getSysText
  108. } from "@/common/api.js"
  109. export default{
  110. data(){
  111. return{
  112. tpageNo:1,
  113. tpageSize:20,
  114. tList:[],
  115. rpageNo:1,
  116. rpageSize:20,
  117. rlist:[],
  118. id:null,
  119. keyword:"",
  120. current:0,
  121. navList:[
  122. {
  123. name: '求职大厅',
  124. },
  125. {
  126. name: '招聘大厅',
  127. }
  128. ],
  129. }
  130. },
  131. onLoad(options) {
  132. this.id=options.id
  133. // this.onTaskList()
  134. this.onRolelist()
  135. },
  136. onReachBottom() {
  137. let that = this
  138. if(that.current==0){
  139. that.rpageNo = that.rpageNo + 1
  140. that.onRolelist()
  141. }else if(that.current==1){
  142. that.tpageNo = that.tpageNo + 1
  143. this.onTaskList()
  144. }
  145. },
  146. onPullDownRefresh() {
  147. let that = this
  148. if(that.current==0){
  149. that.rpageNo = 1
  150. that.rlist=[]
  151. that.onRolelist()
  152. }else if(that.current==1){
  153. that.tpageNo = 1
  154. that.tList = []
  155. this.onTaskList()
  156. }
  157. },
  158. filters:{
  159. formatTime(time) {
  160. const timestamp = new Date(time).getTime();
  161. const currentTime = new Date().getTime();
  162. console.info("currentTime",currentTime)
  163. const diff = (currentTime - timestamp) / 1000; // 时间差,单位:秒
  164. // 计算月差,判断是否超过一个月
  165. const oneMonthInSeconds = 30 * 24 * 60 * 60;
  166. if (diff > oneMonthInSeconds) {
  167. let date = new Date(timestamp);
  168. let year = date.getFullYear();
  169. let month = date.getMonth() + 1;
  170. let day = date.getDate();
  171. if (month < 10) month = "0" + month;
  172. if (day < 10) day = "0" + day;
  173. return `${year}-${month}-${day}`;
  174. } else {
  175. // 计算秒、分钟、小时的差值
  176. if (diff < 60) {
  177. return `${Math.floor(diff)}秒钟前`;
  178. } else if (diff < 60 * 60) {
  179. return `${Math.floor(diff / 60)}分钟前`;
  180. } else if (diff < 60 * 60 * 24) {
  181. return `${Math.floor(diff / 60 / 60)}小时前`;
  182. } else {
  183. // 显示天数
  184. return `${Math.floor(diff / 60 / 60 / 24)}天前`;
  185. }
  186. }
  187. },
  188. formDate(date){
  189. return dayjs(date).format("YYYY-MM-DD").fromNow();
  190. },
  191. getDistance(lat1, lng1) {
  192. let lng2 = uni.getStorageSync("longitude")
  193. let lat2 = uni.getStorageSync("latitude")
  194. if(!lng2 && !lat2){
  195. return "请授权"
  196. }
  197. const R = 6371; // 地球半径,单位:km
  198. const radLat1 = (lat1 * Math.PI) / 180;
  199. const radLat2 = (lat2 * Math.PI) / 180;
  200. const deltaLat = radLat2 - radLat1;
  201. const deltaLng = ((lng2 - lng1) * Math.PI) / 180;
  202. const a =
  203. Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
  204. Math.cos(radLat1) *
  205. Math.cos(radLat2) *
  206. Math.sin(deltaLng / 2) *
  207. Math.sin(deltaLng / 2);
  208. const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  209. return (R * c).toFixed(2); // 返回保留两位小数的公里数
  210. }
  211. },
  212. methods:{
  213. navClick(event){
  214. this.current=event.index
  215. this.keyword = ""
  216. if(event.index==0){
  217. this.rpageNo=1
  218. this.onRolelist()
  219. }else if(event.index==1){
  220. this.tpageNo=1
  221. this.onTaskList()
  222. }
  223. },
  224. onSearch(){
  225. let that = this
  226. if(that.current==0){
  227. that.rpageNo = 1
  228. that.onRolelist()
  229. }else if(that.current==1){
  230. that.tpageNo = 1
  231. this.onTaskList()
  232. }
  233. },
  234. onRolelist(){
  235. querySeekList({
  236. pageNo:this.rpageNo,
  237. pageSize:this.rpageSize,
  238. title:this.keyword,
  239. categoryOne:this.id,
  240. }).then(response=>{
  241. console.info("response",response)
  242. if(this.rpageNo==1){
  243. this.rlist = response.result.records
  244. }else{
  245. this.rlist = this.rlist.concat(response.result.records)
  246. }
  247. }).catch(error=>{
  248. })
  249. },
  250. onTaskList(){
  251. taskList({
  252. latitude:uni.getStorageSync("latitude"),
  253. longitude:uni.getStorageSync("longitude"),
  254. pageNo:this.tpageNo,
  255. title:this.keyword,
  256. categoryOne:this.id,
  257. pageSize:this.tpageSize
  258. }).then(response=>{
  259. if(this.tpageNo==1){
  260. this.tList = response.result.records
  261. }else{
  262. this.tList = this.tList.concat(response.result.records)
  263. }
  264. }).catch(error=>{
  265. })
  266. },
  267. onTaskDetail(event){
  268. console.info(event)
  269. uni.navigateTo({
  270. url:"/pages_subpack/work-detail/index?id="+event.id
  271. })
  272. },
  273. onRoleDetail(event){
  274. console.info("event",event)
  275. uni.navigateTo({
  276. url:"/pages_subpack/master-detail/index?id="+event.id
  277. })
  278. },
  279. onCustomerService(phome){
  280. let that = this
  281. // let obj = that.$utils.getkeyContent('phone')
  282. if (uni.canIUse('makePhoneCall')) {
  283. uni.makePhoneCall({
  284. phoneNumber: String(phome),
  285. success: function () {
  286. console.log('拨打电话成功');
  287. },
  288. fail: function () {
  289. console.log('拨打电话失败');
  290. }
  291. });
  292. } else {
  293. console.log('你的设备不支持拨打电话功能');
  294. }
  295. },
  296. }
  297. }
  298. </script>
  299. <style>
  300. </style>