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

332 lines
9.4 KiB

7 months ago
  1. <template>
  2. <view>
  3. <u--form labelPosition="left" :model="form" :rules="rules" ref="uForm" labelWidth="80">
  4. <view class="se-p-20">
  5. <view class="se-px-20 se-bgc-white se-br-10 se-fs-20">
  6. <u-form-item label="请选择地址" prop="area" @click="showPicker=true">
  7. <u--input readonly v-model="form.area" placeholder="请选择地址"
  8. border="none"></u--input>
  9. <u-icon slot="right" name="arrow-right"></u-icon>
  10. </u-form-item>
  11. <u-form-item label="详细地址" prop="address">
  12. <u--textarea v-model="form.address" count placeholder="请输入详细地址"></u--textarea>
  13. </u-form-item>
  14. <!-- <u-form-item label="所属行业" prop="industry" @click="handleindustryChange">
  15. <u--input @click="handleindustryChange" readonly v-model="form.industry" placeholder="请选择行业"
  16. border="none"></u--input>
  17. <u-icon @click="handleindustryChange" slot="right" name="arrow-right"></u-icon>
  18. </u-form-item> -->
  19. <u-form-item label="所属工种" prop="type" @click="handleTypeChange">
  20. <u--input @click="handleTypeChange" v-model="form.type" readonly placeholder="请选择工种"
  21. border="none"></u--input>
  22. <u-icon @click="handleTypeChange" slot="right" name="arrow-right"></u-icon>
  23. </u-form-item>
  24. <u-form-item label="预约时间" prop="date" @click="show=true">
  25. <u--input v-model="form.date" readonly placeholder="请选择预约时间"
  26. border="none"></u--input>
  27. <u-icon slot="right" name="arrow-right"></u-icon>
  28. </u-form-item>
  29. <u-form-item label="出行方式" labelPosition="top" prop="travel">
  30. <view class="se-flex se-flex-ai-c se-flex-ff-rw se-pt-10">
  31. <view class="se-py-10 se-px-30 se-fs-22 se-br-10 se-mr-15 se-mt-10" :class="item.select ? 'se-bgc-orange se-c-white se-b-orange' : 'se-b se-c-text'" @click="handleIntellect(index)" v-for="(item,index) in travelList" :key="index">
  32. {{item.text}}
  33. </view>
  34. </view>
  35. </u-form-item>
  36. <u-form-item label="结算方式" prop="settlement">
  37. <u-radio-group v-model="form.settlement" placement="row">
  38. <u-radio activeColor="#FF7A31" name="1" label="直接支付日薪"></u-radio>
  39. <u-radio activeColor="#FF7A31" class="se-ml-20" name="2" label="试用以后支付"></u-radio>
  40. </u-radio-group>
  41. </u-form-item>
  42. <u-form-item label="薪资区间" prop="salary">
  43. <view class="se-flex se-flex-h-c">
  44. <u--input v-model="form.salaryMin" type="number" class="se-w-200" placeholder="最小值"></u--input>
  45. <text class="se-mx-10">~</text>
  46. <u--input v-model="form.salaryMax" type="number" class="se-w-200" placeholder="最大值"></u--input>
  47. </view>
  48. </u-form-item>
  49. <u-form-item label="日薪" prop="dailywage">
  50. <view class="se-flex se-flex-h-c">
  51. <u--input v-model="form.dailywage" type="number" class="se-w-200" placeholder="固定值"></u--input>
  52. </view>
  53. </u-form-item>
  54. <!-- <u-form-item label="时间" prop="date">
  55. <view class="se-flex se-flex-h-c">
  56. <u--input v-model="form.dateMin" class="se-w-200" placeholder="0:00"></u--input>
  57. <text class="se-mx-10">~</text>
  58. <u--input v-model="form.dateMax" class="se-w-200" placeholder="0:00"></u--input>
  59. </view>
  60. </u-form-item>
  61. <u-form-item label="联系电话" prop="mobile">
  62. <u--input v-model="form.mobile" placeholder="请输入联系方式"></u--input>
  63. </u-form-item> -->
  64. <u-form-item label="工作内容" prop="introduce">
  65. <u--textarea v-model="form.introduce" count
  66. placeholder="请选择工作内容"></u--textarea>
  67. </u-form-item>
  68. </view>
  69. </view>
  70. <view class="se-px-20 se-pt-20">
  71. <view class="se-px-20 se-pb-80 se-fs-20 se-flex">
  72. <view @click="submit"
  73. class="se-mx-10 se-flex-1 se-br-40 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-orange">
  74. <text>发布订单</text>
  75. </view>
  76. </view>
  77. </view>
  78. </u--form>
  79. <!-- 性别 -->
  80. <u-action-sheet :show="showIndustry" :actions="industryList" title="请选择行业" @close="showIndustry = false" @select="industrySelect">
  81. </u-action-sheet>
  82. <!-- 种类 -->
  83. <u-action-sheet :show="showType" :actions="typeList" title="请选择种类" @close="showType = false"
  84. @select="typeSelect">
  85. </u-action-sheet>
  86. <!-- 地址 -->
  87. <citySelect v-model="showPicker" @city-change="handleCityChange"></citySelect>
  88. <u-picker :show="show" ref="uPicker" :columns="dates" @cancel="show=false" @confirm="dateConfirm"></u-picker>
  89. </view>
  90. </template>
  91. <script>
  92. import citySelect from '@/components/cityselect/index.vue'
  93. export default {
  94. components:{
  95. citySelect
  96. },
  97. data() {
  98. return {
  99. show:false,
  100. showPicker: false,
  101. showIndustry: false,
  102. industryList: [
  103. {
  104. name: '打铁',
  105. },
  106. {
  107. name: '打牌',
  108. }
  109. ],
  110. showType: false,
  111. typeList: [{
  112. name: '铁匠',
  113. },
  114. {
  115. name: '水泥搬运',
  116. }
  117. ],
  118. travelList:[
  119. {
  120. text:"出租车",
  121. value:"all",
  122. select:true
  123. },
  124. {
  125. text:"网约车",
  126. value:"all",
  127. select:false
  128. },
  129. {
  130. text:"公交/地铁",
  131. value:"all",
  132. select:false
  133. },
  134. {
  135. text:"无",
  136. value:"all",
  137. select:false
  138. }
  139. ],
  140. dates:[
  141. ['2024','2025','2026','2027','2028'],
  142. ['01','02','03','04','05','06','07','08','09','10','11','12'],
  143. ['01','02','03','04','05','06','07','08','09','10','11','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30'],
  144. ],
  145. form: {
  146. title:"",
  147. area:'',
  148. address:'',
  149. industry:"",
  150. settlement:1,
  151. date:"",
  152. dateMin:"",
  153. dateMax:"",
  154. mobile: '',
  155. type: '',
  156. salary:'',
  157. salaryMin: '',
  158. salaryMax: '',
  159. dailywage:'',
  160. introduce: '',
  161. },
  162. rules: {
  163. title:[
  164. {
  165. type: 'string',
  166. required: true,
  167. message: '请在此输入标题',
  168. trigger: ['blur', 'change']
  169. }
  170. ],
  171. area:[
  172. {
  173. type: 'string',
  174. required: true,
  175. message: '请选择地址',
  176. trigger: ['blur', 'change']
  177. }
  178. ],
  179. address:[
  180. {
  181. type: 'string',
  182. required: true,
  183. message: '请填写详细地址',
  184. trigger: ['blur', 'change']
  185. }
  186. ],
  187. industry:[
  188. {
  189. type: 'string',
  190. required: true,
  191. message: '请选择行业',
  192. trigger: ['blur', 'change']
  193. }
  194. ],
  195. settlement:[
  196. {
  197. type: 'string',
  198. required: true,
  199. message: '请选择结算方式',
  200. trigger: ['blur', 'change']
  201. }
  202. ],
  203. mobile: [
  204. {
  205. required: true,
  206. message: '请输入手机号',
  207. trigger: ['change','blur'],
  208. },
  209. {
  210. validator: (rule, value, callback) => {
  211. return uni.$u.test.mobile(value);
  212. },
  213. message: '手机号码不正确',
  214. trigger: ['change','blur'],
  215. },
  216. ],
  217. date: [{
  218. type: 'string',
  219. max: 1,
  220. required: true,
  221. message: '请填写时间',
  222. trigger: ['blur', 'change']
  223. }],
  224. salary: [{
  225. type: 'string',
  226. required: true,
  227. message: '请输入试用日薪',
  228. trigger: ['blur', 'change']
  229. }],
  230. introduce: [{
  231. type: 'string',
  232. required: true,
  233. message: '请输入工作内容',
  234. trigger: ['blur', 'change']
  235. }],
  236. },
  237. }
  238. },
  239. watch: {
  240. 'form.salaryMin': {
  241. handler(newVal, oldVal) {
  242. if (!uni.$u.test.isEmpty(newVal) && !uni.$u.test.isEmpty(this.form.salaryMax)) {
  243. this.form.salary = '有'
  244. } else {
  245. this.form.salary = ''
  246. }
  247. },
  248. immediate: true
  249. },
  250. 'form.salaryMax': {
  251. handler(newVal, oldVal) {
  252. if (!uni.$u.test.isEmpty(newVal) && !uni.$u.test.isEmpty(this.form.salaryMin)) {
  253. this.form.salary = '有'
  254. } else {
  255. this.form.salary = ''
  256. }
  257. },
  258. immediate: true
  259. },
  260. 'form.dateMin': {
  261. handler(newVal, oldVal) {
  262. if (!uni.$u.test.isEmpty(newVal) && !uni.$u.test.isEmpty(this.form.dateMax)) {
  263. this.form.date = '有'
  264. } else {
  265. this.form.date = ''
  266. }
  267. },
  268. immediate: true
  269. },
  270. 'form.dateMax': {
  271. handler(newVal, oldVal) {
  272. if (!uni.$u.test.isEmpty(newVal) && !uni.$u.test.isEmpty(this.form.dateMin)) {
  273. this.form.date = '有'
  274. } else {
  275. this.form.date = ''
  276. }
  277. },
  278. immediate: true
  279. },
  280. },
  281. methods: {
  282. dateConfirm(event){
  283. this.form.date = event.value[0]+"-"+event.value[1]+"-"+event.value[2]
  284. console.info(event.value)
  285. this.show = false
  286. },
  287. handleIntellect(index){
  288. this.travelList[index].select = !this.travelList[index].select
  289. },
  290. handleAreaChange(){
  291. this.showPicker = true
  292. },
  293. handleCityChange(e) {
  294. console.info(e)
  295. this.form.area = e.province.label + '-' + e.city.label + '-' + e.area.label;
  296. },
  297. handleindustryChange() {
  298. this.showIndustry = true
  299. },
  300. industrySelect(e) {
  301. this.form.industry = e.name
  302. this.$refs.uForm.validateField('industry')
  303. },
  304. handleTypeChange() {
  305. this.showType = true
  306. },
  307. typeSelect(e) {
  308. this.form.type = e.name
  309. this.$refs.uForm.validateField('type')
  310. },
  311. submit() {
  312. console.info(this.form)
  313. this.$refs.uForm.validate().then(res => {
  314. uni.$u.toast('校验通过')
  315. }).catch(errors => {
  316. // uni.$u.toast('校验失败')
  317. })
  318. }
  319. },
  320. onReady() {
  321. this.$refs.uForm.setRules(this.rules)
  322. },
  323. }
  324. </script>
  325. <style>
  326. </style>