preOrder.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <view style="padding: 20rpx;">
  3. <view class="box" style="margin-bottom: 10rpx;">
  4. <uni-section title="取货地址" type="line"></uni-section>
  5. <view style="color: #888;">请选择取货地址</view>
  6. </view>
  7. <view class="box" style="margin-bottom: 10rpx;">
  8. <uni-section title="收货地址" type="line"></uni-section>
  9. <view style="color: #888;">请选择收货地址</view>
  10. </view>
  11. <view class="box">
  12. <uni-forms :modelValue="form" :rules="rules" ref="formRef" label-width="160rpx" label-align="right">
  13. <uni-forms-item label="物品名称" name="name" required>
  14. <uni-easyinput type="text" v-model="form.name" placeholder="请输入" />
  15. </uni-forms-item>
  16. <uni-forms-item label="描述信息" name="descr">
  17. <uni-easyinput type="text" v-model="form.descr" placeholder="请输入描述信息" />
  18. </uni-forms-item>
  19. <uni-forms-item label="重量(kg)" name="weight">
  20. <uni-easyinput type="text" v-model="form.weight" placeholder="请输入物品重量" />
  21. </uni-forms-item>
  22. <uni-forms-item label="小费(元)" name="price" required>
  23. <uni-number-box v-model="form.price" :min="1" style="position: relative; top: 10rpx;"></uni-number-box>
  24. </uni-forms-item>
  25. <uni-forms-item label="订单类型" name="type" required>
  26. <uni-data-select v-model="form.type" :localdata="orderTypes"></uni-data-select>
  27. </uni-forms-item>
  28. <uni-forms-item label="物品图片" name="img">
  29. <uni-file-picker limit="1" :image-styles="imageStyles" :del-icon="false" :disable-preview="true"
  30. fileMediatype="image" v-model="imgs" @select="handleImgUploadSuccess"></uni-file-picker>
  31. </uni-forms-item>
  32. <uni-forms-item label="备注" name="comment">
  33. <uni-easyinput type="text" v-model="form.comment" placeholder="请输入备注信息" />
  34. </uni-forms-item>
  35. </uni-forms>
  36. <view>
  37. <button type="primary" @click="addOrder" class="my-button-primary">提交订单</button>
  38. </view>
  39. </view>
  40. </view>
  41. </template>
  42. <script>
  43. export default {
  44. data() {
  45. return {
  46. form: { name: '', descr: '', weight: '', price: 1, type: '', img: '', comment: '' }, // 表单绑定的对象
  47. rules: {
  48. name: {
  49. rules: [{
  50. required: true,
  51. errorMessage: '请填写物品名称',
  52. }]
  53. },
  54. price: {
  55. rules: [{
  56. required: true,
  57. errorMessage: '请设置小费',
  58. }]
  59. },
  60. type: {
  61. rules: [{
  62. required: true,
  63. errorMessage: '请设置订单类型',
  64. }]
  65. }
  66. },
  67. imgs: [],
  68. imageStyles: {
  69. "height": 80, // 边框高度
  70. "width": 80, // 边框宽度
  71. "border":{ // 如果为 Boolean 值,可以控制边框显示与否
  72. "color":"#eee", // 边框颜色
  73. "width":"1px", // 边框宽度
  74. "style":"solid", // 边框样式
  75. "radius":"50%" // 边框圆角,支持百分比
  76. }
  77. },
  78. orderTypes: [
  79. { value: '代拿快递', text: "代拿快递" },
  80. { value: '代取餐品', text: "代取餐品" },
  81. { value: '代买零食', text: "代买零食" },
  82. { value: '代送鲜花', text: "代送鲜花" },
  83. ]
  84. }
  85. },
  86. onShow() {
  87. let orderStore = uni.getStorageSync('orderStore')
  88. this.form.type = orderStore?.type || ''
  89. },
  90. methods: {
  91. addOrder() {
  92. this.$refs.formRef.validate().then(res => {
  93. console.log('Validation passed:', res);
  94. console.log('Form data:', this.form);
  95. this.$request.post('/orders/addOrder', this.form).then(res => {
  96. if (res.code === '200') {
  97. uni.showToast({
  98. icon: 'success',
  99. title: '下单成功'
  100. });
  101. setTimeout(() =>{
  102. uni.switchTab({
  103. url: '/pages/index/index'
  104. });
  105. },500)
  106. } else {
  107. uni.showToast({
  108. icon: 'none',
  109. title: res.msg
  110. });
  111. }
  112. }).catch(error => {
  113. console.error('API request failed:', error);
  114. });
  115. }).catch(error => {
  116. console.error('Validation failed:', error);
  117. });
  118. },
  119. handleImgUploadSuccess(e) {
  120. let _this = this
  121. const filePath = e.tempFilePaths[0]
  122. uni.uploadFile({
  123. url: _this.$baseUrl + '/files/upload', //自己的后端接口(默认发送post请求) 注意 _this.$baseUrl需要在全局变量定义
  124. filePath: filePath,
  125. name: "file", //这里应为自己后端文件形参的名字
  126. success(res) {
  127. let url = JSON.parse(res.data || '{}').data // 获取返回的图像链接
  128. _this.form.img = url // 给表单图像属性赋值
  129. }
  130. })
  131. }
  132. }
  133. }
  134. </script>
  135. <style>
  136. </style>