addCar.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <view class="padding margin" style="background: #fff; border-radius: 16rpx; width: calc(100% - 60rpx);">
  3. <u-form :model="form" ref="uForm" label-width="160rpx">
  4. <!-- 车品牌 -->
  5. <u-form-item label="车品牌" :required="true">
  6. <u-input v-model="form.carBrand" placeholder="请输入车品牌" />
  7. <view v-if="errors.carBrand" class="error-tip">车品牌为必填项</view>
  8. </u-form-item>
  9. <!-- 车牌号 -->
  10. <u-form-item label="车牌号" :required="true">
  11. <u-input v-model="form.carPlate" placeholder="请输入车牌号" />
  12. <view v-if="errors.carPlate" class="error-tip">车牌号为必填项</view>
  13. </u-form-item>
  14. <!-- 颜色 -->
  15. <u-form-item label="颜色" :required="true">
  16. <u-input v-model="form.carColor" placeholder="请输入颜色" />
  17. <view v-if="errors.carColor" class="error-tip">颜色为必填项</view>
  18. </u-form-item>
  19. <!-- 座位数 -->
  20. <u-form-item label="座位数" :required="true">
  21. <u-input v-model="form.seatNum" placeholder="请输入座位数" />
  22. <view v-if="errors.seatNum" class="error-tip">座位数为必填项</view>
  23. </u-form-item>
  24. <!-- 上传图片 -->
  25. <u-form-item label="上传图片" :required="true">
  26. <u-upload
  27. :action="uploadAction"
  28. :file-list="fileList"
  29. @on-success="handleUploadSuccess"
  30. @on-error="handleUploadError"
  31. :max-count="1"
  32. :multiple="false"
  33. ></u-upload>
  34. <view v-if="errors.carPhoto" class="error-tip">请上传车辆图片</view>
  35. </u-form-item>
  36. </u-form>
  37. <!-- 提交按钮 -->
  38. <view class="submit-button">
  39. <u-button type="primary" @click="submitForm">提交</u-button>
  40. </view>
  41. </view>
  42. </template>
  43. <script>
  44. export default {
  45. data() {
  46. return {
  47. // 表单数据
  48. form: {
  49. carId: '', // 车辆ID(用于区分新增和编辑)
  50. carBrand: '', // 车品牌
  51. carPlate: '', // 车牌号
  52. carColor: '', // 颜色
  53. seatNum: '', // 座位数
  54. carPhoto: '', // 车辆图片
  55. },
  56. // 上传组件配置
  57. uploadAction: 'http://192.168.50.122:8179/sqx_fast/alioss/upload', // 上传接口地址
  58. fileList: [], // 已上传的文件列表
  59. // 错误提示
  60. errors: {
  61. carBrand: false,
  62. carPlate: false,
  63. carColor: false,
  64. seatNum: false,
  65. carPhoto: false, // 新增图片必填错误提示
  66. },
  67. };
  68. },
  69. onLoad(options) {
  70. // 如果传入了 item,则进入编辑模式
  71. if (options.item) {
  72. const item = JSON.parse(decodeURIComponent(options.item)); // 解析 item
  73. this.form = { ...item }; // 填充表单数据
  74. this.fileList = item.carPhoto ? [{ url: item.carPhoto, status: 'success', name: 'carPhoto' }] : [];
  75. console.log(this.fileList, 'this.fileList');
  76. }
  77. },
  78. methods: {
  79. // 上传成功回调
  80. handleUploadSuccess(response) {
  81. console.log('上传成功', response.data);
  82. // 将上传成功的文件添加到 fileList
  83. this.form.carPhoto = response.data; // 保存图片 URL
  84. this.fileList = response.data
  85. },
  86. // 上传失败回调
  87. handleUploadError(error) {
  88. console.error('上传失败', error);
  89. uni.showToast({
  90. title: '上传失败,请重试',
  91. icon: 'none',
  92. });
  93. },
  94. // 表单验证
  95. validateForm() {
  96. let isValid = true;
  97. // 重置错误提示
  98. this.errors = {
  99. carBrand: false,
  100. carPlate: false,
  101. carColor: false,
  102. seatNum: false,
  103. carPhoto: false,
  104. };
  105. // 检查每个字段是否为空
  106. if (!this.form.carBrand) {
  107. this.errors.carBrand = true;
  108. isValid = false;
  109. }
  110. if (!this.form.carPlate) {
  111. this.errors.carPlate = true;
  112. isValid = false;
  113. }
  114. if (!this.form.carColor) {
  115. this.errors.carColor = true;
  116. isValid = false;
  117. }
  118. if (!this.form.seatNum) {
  119. this.errors.seatNum = true;
  120. isValid = false;
  121. }
  122. // 检查是否上传了图片
  123. if (this.fileList.length === 0) {
  124. this.errors.carPhoto = true;
  125. isValid = false;
  126. }
  127. return isValid;
  128. },
  129. // 提交表单
  130. submitForm() {
  131. // 表单验证
  132. if (!this.validateForm()) {
  133. uni.showToast({
  134. title: '请填写完整信息',
  135. icon: 'none',
  136. });
  137. return;
  138. }
  139. // 根据 id 调用不同的接口
  140. if (this.form.carId) {
  141. this.updateCar();
  142. } else {
  143. this.insertCar();
  144. }
  145. },
  146. // 新增车辆
  147. insertCar() {
  148. this.$Request.postT("/app/car/insertCar", this.form).then(res => {
  149. if (res.code === 0) {
  150. uni.showToast({
  151. title: '新增成功',
  152. icon: 'success',
  153. });
  154. uni.navigateBack(); // 返回上一页
  155. }
  156. });
  157. },
  158. // 编辑车辆
  159. updateCar() {
  160. this.$Request.postT("/app/car/updateCar", this.form).then(res => {
  161. if (res.code === 0) {
  162. uni.showToast({
  163. title: '编辑成功',
  164. icon: 'success',
  165. });
  166. uni.navigateBack(); // 返回上一页
  167. }
  168. });
  169. },
  170. },
  171. };
  172. </script>
  173. <style scoped>
  174. .error-tip {
  175. color: red;
  176. font-size: 12px;
  177. margin-top: 4px;
  178. }
  179. </style>