myCars.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. <template>
  2. <view>
  3. <u-navbar
  4. title-color="#fff"
  5. :custom-back="customBack"
  6. :border-bottom="false"
  7. back-icon-color="#CCE8FF"
  8. :background="{ background: '#008CFF' }"
  9. title="车辆管理"
  10. ></u-navbar>
  11. <view class="header">
  12. <view class="header-title">我的车辆</view>
  13. </view>
  14. <view class="wrap">
  15. <view class="statistics">
  16. <view class="statistics-title">车辆</view>
  17. <view class="statistics-center"></view>
  18. <view class="statistics-number-wrap"
  19. ><span class="number">{{ mycarsTotal }}</span
  20. >辆</view
  21. >
  22. </view>
  23. <view class="new-plate-number">
  24. <view class="message-input-wrap" @click="messageInputClick">
  25. <u-message-input :maxlength="8" width="70" font-size="50" :disabled-keyboard="true" v-model="newPlateNumber"></u-message-input>
  26. </view>
  27. <u-keyboard
  28. ref="uKeyboard"
  29. mode="car"
  30. @change="keyboardChange"
  31. @confirm="keyboardConfirm"
  32. @backspace="backspace"
  33. v-model="keyboardshow"
  34. ></u-keyboard>
  35. </view>
  36. <view class="add-car-btn" @click="handleAddCar">添加车辆</view>
  37. <view class="mycars">
  38. <view class="mycars-item" v-for="(item, index) in mycars" :key="index">
  39. <view class="mycars-item-name">{{ item.vehicleNo }}</view>
  40. <view class="mycars-item-type">{{ item.energyTpye | energyTpye }}</view>
  41. <view class="mycars-item-sign" v-if="item.contractStatus == 1">已签约</view>
  42. <view class="mycars-item-sign1" v-if="item.contractStatus == 0">未签约</view>
  43. <view class="mycars-item-tool">
  44. <span class="default" v-if="item.isDefault == 1" :class="{ isDefault: item.isDefault == 1 }" @click="handlesetDefault(item.id)"
  45. >默认</span
  46. >
  47. <span class="default" v-else @click="handlesetDefault(item.id)">设为默认</span>
  48. <span @click="handleDelCar(item.id, item.vehicleNo)">删除</span>
  49. </view>
  50. </view>
  51. </view>
  52. </view>
  53. <u-toast ref="uToast" />
  54. <u-modal v-model="delCarshow" :show-cancel-button="true" @confirm="confirmDelCar" :content="delCarContent"></u-modal>
  55. <u-action-sheet :list="colorList" @click="confirmColor" v-model="colorShow"></u-action-sheet>
  56. </view>
  57. </template>
  58. <script>
  59. export default {
  60. data() {
  61. return {
  62. keyboardshow: false,
  63. delCarshow: false,
  64. delCarId: null,
  65. delCarContent: '',
  66. newPlateNumber: '',
  67. vehicleColor: 0,
  68. mycars: [],
  69. mycarsTotal: 0,
  70. colorShow: false,
  71. colorList: [
  72. { text: '蓝色', colorCode: 0 },
  73. { text: '黄色', colorCode: 1 },
  74. { text: '黑色', colorCode: 2 },
  75. { text: '白色', colorCode: 3 },
  76. { text: '绿色', colorCode: 4 },
  77. { text: '其他', colorCode: 99 }
  78. ]
  79. };
  80. },
  81. onLoad() {
  82. this.handlegetMycars();
  83. },
  84. methods: {
  85. customBack() {
  86. uni.getStorage({
  87. key: 'messageBack',
  88. success: (res) => {
  89. this.$u.route({
  90. type: 'switchTab',
  91. url: res.data
  92. });
  93. },
  94. fail: () => {
  95. this.$u.route({
  96. type: 'switchTab',
  97. url: 'pages/index/index'
  98. });
  99. }
  100. });
  101. },
  102. // 获取车辆列表
  103. handlegetMycars() {
  104. this.$u.api
  105. .getMycars()
  106. .then((res) => {
  107. if (res.code === 200) {
  108. this.mycars = res.data.rows;
  109. this.mycarsTotal = res.data.total;
  110. } else {
  111. this.$refs.uToast.show({
  112. title: res.msg,
  113. type: 'error'
  114. });
  115. }
  116. })
  117. .catch((err) => {
  118. this.$refs.uToast.show({
  119. title: '操作失败!',
  120. type: 'error'
  121. });
  122. });
  123. },
  124. // 添加车辆
  125. handleAddCar() {
  126. if (!this.$u.test.carNo(this.newPlateNumber)) {
  127. this.$refs.uToast.show({
  128. title: '请正确填写车牌号',
  129. type: 'error'
  130. });
  131. return;
  132. }
  133. let param = {
  134. vehicleNo: this.newPlateNumber,
  135. vehicleColor: this.vehicleColor
  136. };
  137. this.$u.api
  138. .addCar(param)
  139. .then((res) => {
  140. if (res.code === 200) {
  141. this.$refs.uToast.show({
  142. title: res.msg,
  143. type: 'success'
  144. });
  145. this.handlegetMycars();
  146. } else {
  147. this.$refs.uToast.show({
  148. title: res.msg,
  149. type: 'error'
  150. });
  151. }
  152. })
  153. .catch((err) => {
  154. this.$refs.uToast.show({
  155. title: '操作失败!',
  156. type: 'error'
  157. });
  158. });
  159. },
  160. // 删除车辆
  161. handleDelCar(id, content) {
  162. this.delCarContent = `是否删除${content}`;
  163. this.delCarId = id;
  164. this.delCarshow = true;
  165. },
  166. // 确认删除
  167. confirmDelCar() {
  168. this.$u.api
  169. .delCar(this.delCarId)
  170. .then((res) => {
  171. if (res.code === 200) {
  172. this.$refs.uToast.show({
  173. title: res.msg,
  174. type: 'success'
  175. });
  176. this.handlegetMycars();
  177. } else {
  178. this.$refs.uToast.show({
  179. title: res.msg,
  180. type: 'error'
  181. });
  182. }
  183. })
  184. .catch((err) => {
  185. this.$refs.uToast.show({
  186. title: '操作失败!',
  187. type: 'error'
  188. });
  189. });
  190. },
  191. // 点击输入框
  192. messageInputClick() {
  193. this.keyboardshow = true;
  194. },
  195. // 按键被点击(点击退格键不会触发此事件)
  196. keyboardChange(val) {
  197. // 将每次按键的值拼接到value变量中,注意+=写法
  198. this.newPlateNumber += val;
  199. },
  200. // 退格键被点击
  201. backspace() {
  202. // 删除value的最后一个字符
  203. if (this.newPlateNumber.length) this.newPlateNumber = this.newPlateNumber.substr(0, this.newPlateNumber.length - 1);
  204. },
  205. // 键盘输入完成后确认
  206. keyboardConfirm() {
  207. this.colorShow = true;
  208. },
  209. // 确认颜色
  210. confirmColor(e) {
  211. this.vehicleColor = this.colorList[e].colorCode;
  212. },
  213. // 设置默认车辆操作
  214. handlesetDefault(id) {
  215. this.$u.api
  216. .setDefaultCar({ id: id })
  217. .then((res) => {
  218. if (res.code === 200) {
  219. this.$refs.uToast.show({
  220. title: res.msg,
  221. type: 'success'
  222. });
  223. this.handlegetMycars();
  224. } else {
  225. this.$refs.uToast.show({
  226. title: res.msg,
  227. type: 'error'
  228. });
  229. }
  230. })
  231. .catch((err) => {
  232. this.$refs.uToast.show({
  233. title: '操作失败!',
  234. type: 'error'
  235. });
  236. });
  237. }
  238. }
  239. };
  240. </script>
  241. <style lang="scss" scoped>
  242. @import url('./myCars.scss');
  243. </style>