multipleVehicle.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <view class="enterprise-list">
  3. <view class="list-wrap">
  4. <u-sticky bgColor="#fff" class="main-sticky">
  5. <view class="search-wrap">
  6. <view class="input-wrap">
  7. <u-search bgColor='#fff' :showAction='false' :placeholder="$t('base.common.inputPlaceholder')"
  8. @search="searchList" @clear='searchList' v-model="keyword">
  9. </u-search>
  10. <view class="sx-btn" @click="searchList">{{ $t("customer_meter.search") }}</view>
  11. </view>
  12. </view>
  13. </u-sticky>
  14. <template v-if="driverList.length">
  15. <view class="business-card" v-for="(item, index) in driverList" :key="index">
  16. <view class="business-card-info" @click="onChangeVehicle(item)">
  17. <span class="tag-angle" v-if="item.isSelect==1">{{$t("mine.selected")}}</span>
  18. <view class="info-line" v-if="item.vehicleType != 1">
  19. <text class="lebel">{{ item.driver }} {{ item.vehicle || '' }}</text>
  20. </view>
  21. <view class="info-line" v-if="item.vehicleType == 1">
  22. <text class="lebel">{{ item.vehicle }} {{ item.driver || '' }}</text>
  23. <text class="info">{{ $t("driver.fleet") }} {{ item.fleetName || '' }}</text>
  24. </view>
  25. </view>
  26. </view>
  27. <view class="submit-button">
  28. <button class="bind-btn" @click="onSubmitClick()">{{ $t('base.common.submit') }}
  29. </button>
  30. </view>
  31. </template>
  32. <template v-else>
  33. <u-empty mode="list" icon="https://cdn.uviewui.com/uview/empty/list.png">
  34. </u-empty>
  35. </template>
  36. </view>
  37. <uni-fab v-if="!isAdjust||isAdjust=='1'&&vehicleType!='101'" ref="fab" buttonColor="#3c9cff" @trigger="trigger"
  38. @fabClick="onClickRight" />
  39. </view>
  40. </template>
  41. <script>
  42. import {
  43. getDealerVehicleList,
  44. } from '../../api/dealer'
  45. import {
  46. updatePlanVehicle
  47. } from '../../api/order'
  48. export default {
  49. data() {
  50. return {
  51. driverList: [],
  52. selectDriverList: [],
  53. keyword: '',
  54. status: undefined,
  55. vehicles: "",
  56. isAdjust: "",
  57. orderId: "",
  58. vehicleType: '',
  59. tenantId: '',
  60. phones: "",
  61. }
  62. },
  63. onShow() {
  64. this.bindDriver();
  65. },
  66. onLoad(option) {
  67. this.vehicles = option.vehicles;
  68. this.phones = option.phones
  69. this.vehicleType = option.vehicleType;
  70. console.log("多选择车号的当前参数信息、", option);
  71. if (this.vehicles) {
  72. let phoneMap = {};
  73. if(this.phones){
  74. let pairs = this.phones.split(",");
  75. for (let pair of pairs) {
  76. let keyValue = pair.split(":");
  77. if (keyValue.length == 2) { // 确保键和值都存在
  78. phoneMap[keyValue[0]] = keyValue[1];
  79. } else if (keyValue.length == 1) { // 只有键没有值
  80. phoneMap[keyValue[0]] = "";
  81. }
  82. }
  83. }
  84. console.log(phoneMap)
  85. this.vehicles.split(',').forEach(vehicle => {
  86. this.selectDriverList.push({
  87. vehicle: vehicle,
  88. isSelect: 1,
  89. phone: vehicle+":"+phoneMap[vehicle]
  90. })
  91. })
  92. }
  93. this.tenantId = option.tenantId;
  94. this.isAdjust = option.isAdjust;
  95. this.orderId = option.orderId;
  96. this.bindDriver()
  97. this.status = option.status;
  98. },
  99. methods: {
  100. onSubmitClick() {
  101. console.log("this.isAdjust",)
  102. if (this.isAdjust == "1") {
  103. uni.navigateBack({
  104. url: '/subpages/order/dealerList'
  105. })
  106. } else {
  107. let selectedList = this.selectDriverList.map(item => {
  108. return item.vehicle
  109. })
  110. let phoneList = this.selectDriverList.map(item => {
  111. return item.phone
  112. })
  113. let axleList = this.selectDriverList.map(item =>{
  114. return item.axle
  115. })
  116. this.selectDriverList = []
  117. if (selectedList && selectedList.length > 0) {
  118. let pages = getCurrentPages();
  119. let prevPage = pages[pages.length - 2]; //上一个页面
  120. if (this.status == 1) {
  121. prevPage.$vm.orderForm.batchOrderList[prevPage.$vm.index].vehicle = selectedList.join(
  122. ','); //重点$vm
  123. prevPage.$vm.orderForm.batchOrderList[prevPage.$vm.index].phone = phoneList.join(','); //重点$vm
  124. prevPage.$vm.orderForm.batchOrderList[prevPage.$vm.index].axle = axleList.join(','); //重点$vm
  125. } else {
  126. prevPage.$vm.orderForm.vehicle = selectedList.join(','); //重点$vm
  127. prevPage.$vm.orderForm.phone = phoneList.join(','); //重点$vm
  128. prevPage.$vm.orderForm.axle = axleList.join(','); //重点$vm
  129. }
  130. uni.navigateBack();
  131. }
  132. }
  133. },
  134. onChangeVehicle(vehicleInfo) {
  135. if (this.isAdjust == "1") {
  136. let json = {
  137. orderId: this.orderId,
  138. vehicle: vehicleInfo.vehicle,
  139. deleteFlag: vehicleInfo.isSelect,
  140. tenantId: this.tenantId,
  141. };
  142. uni.showLoading({
  143. mask: true
  144. });
  145. updatePlanVehicle(json).then(res => {
  146. if (res.statusCode == 200 && res.data.code == 0) {
  147. this.selectVehicle(vehicleInfo)
  148. }
  149. uni.hideLoading()
  150. })
  151. } else {
  152. this.selectVehicle(vehicleInfo)
  153. }
  154. console.log("选择的司机信息、", this.selectDriverList);
  155. },
  156. selectVehicle(vehicleInfo) {
  157. let index = this.driverList.findIndex(function(item) {
  158. return vehicleInfo.vehicle === item.vehicle;
  159. });
  160. let selectedIndex = this.selectDriverList.findIndex(function(item) {
  161. return vehicleInfo.vehicle === item.vehicle;
  162. });
  163. let isSelect = 0
  164. if (vehicleInfo.isSelect != 1) {
  165. isSelect = 1
  166. } else {
  167. isSelect = 0
  168. }
  169. if (index > -1) {
  170. if (selectedIndex > -1) {
  171. this.selectDriverList.splice(selectedIndex, 1)
  172. } else {
  173. let phone = vehicleInfo.phone?vehicleInfo.phone:""
  174. let axle = vehicleInfo.axle?vehicleInfo.axle:""
  175. this.selectDriverList.push({
  176. vehicle: vehicleInfo.vehicle,
  177. isSelect: 1,
  178. phone: vehicleInfo.vehicle + ":" + phone,
  179. axle:vehicleInfo.vehicle+ ":" + axle
  180. })
  181. }
  182. this.driverList[index].isSelect = isSelect
  183. }
  184. },
  185. //获取车辆选项列表
  186. bindDriver() {
  187. let that = this;
  188. let json = {
  189. vehicleType: "0",
  190. keyword: this.keyword,
  191. appUserType: 3
  192. };
  193. getDealerVehicleList(json).then(res => {
  194. if (res.statusCode == 200) {
  195. that.driverList = res.data.data
  196. that.driverList.forEach(item => {
  197. let selectedIndex = this.selectDriverList.findIndex(function(driverInfo) {
  198. return driverInfo.vehicle === item.vehicle;
  199. });
  200. let isSelect = 0
  201. if (selectedIndex > -1) {
  202. isSelect = this.selectDriverList[selectedIndex].isSelect
  203. }
  204. this.$set(item, "isSelect", isSelect);
  205. });
  206. console.log("获取到司机列表", that.driverList);
  207. }
  208. })
  209. },
  210. //搜索列表
  211. searchList() {
  212. this.bindDriver()
  213. },
  214. //跳转添加司机表单
  215. onClickRight() {
  216. uni.navigateTo({
  217. url: '/subpages/driver/dealerAddVehicle?vehicleType=0'
  218. })
  219. }
  220. },
  221. }
  222. </script>
  223. <style>
  224. /* #ifndef H5 */
  225. page {
  226. /* height: 100%; */
  227. background-color: #f2f2f2;
  228. }
  229. /* #endif */
  230. </style>
  231. <style lang="scss" scoped>
  232. @import '../../common/css/public.scss';
  233. .submit-button {
  234. box-sizing: border-box;
  235. position: fixed;
  236. bottom: 0;
  237. width: 100%;
  238. padding: 24rpx 24rpx 32rpx;
  239. z-index: 50;
  240. background: #fff;
  241. }
  242. .list-wrap {
  243. padding-bottom: 186rpx;
  244. }
  245. </style>