chargeStandard.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <template>
  2. <!-- 收费标准 -->
  3. <view class="charge">
  4. <view class="charge-rules-container" v-for="(item, index) in chargeRulesInfo" :key="index">
  5. <view class="charge-rules-list" v-if="item.list.length">
  6. <view class="charge-rule-list-header">
  7. <view class="charge-type">
  8. <text v-if="item.feePeriod == 1">节假日规则</text>
  9. <text v-else>非节假日规则</text>
  10. </view>
  11. <view class="charge-time">
  12. <view
  13. >免费时长<text>{{ item.freeTime || 0 }}分钟内</text></view
  14. >
  15. <view v-if="item.topAmt"
  16. >封顶金额<text>{{ item.topAmt || 0 }}元</text></view
  17. >
  18. <view v-else>无封顶金额</view>
  19. </view>
  20. </view>
  21. <view class="charge-rules" v-for="(type, tIndex) in item.list" :key="tIndex">
  22. <view v-if="type.list[0].amt || type.list[1].amt" class="charge-rules-box">
  23. <view v-if="type.vehicleType == 0">小车</view>
  24. <view v-if="type.vehicleType == 1">大车</view>
  25. <view v-if="type.vehicleType == 2">超大型车</view>
  26. <view v-if="type.vehicleType == 3">摩托车</view>
  27. <view v-if="type.vehicleType == 4">非机动车</view>
  28. <view v-if="type.vehicleType == 5">其他</view>
  29. <view v-if="type.vehicleType == 6">小车(新能源)</view>
  30. <view class="charge-rules-right">
  31. <view v-for="(time, tIndex) in type.list" :key="tIndex">
  32. <text>{{ time.beginTime.substring(0, 5) }}-{{ time.beginTime > time.endTime ? '次日' : '' }}{{ time.endTime.substring(0, 5) }}</text>
  33. <text>{{ time.amt }}元/小时</text>
  34. </view>
  35. </view>
  36. </view>
  37. </view>
  38. </view>
  39. </view>
  40. <view class="charge-instructions ql-editor">
  41. <u-parse :html="chargeContent" />
  42. </view>
  43. </view>
  44. </template>
  45. <script>
  46. export default {
  47. data() {
  48. return {
  49. roadNo: '',
  50. parkNo: '',
  51. info: {
  52. freeTime: '',
  53. topAmt: ''
  54. },
  55. chargeRulesInfo: [],
  56. // 收费标准说明
  57. chargeContent: ''
  58. };
  59. },
  60. onLoad(page) {
  61. const { roadNo, parkNo } = page;
  62. if (roadNo) {
  63. this.roadNo = roadNo;
  64. this.getSystems(3);
  65. this.getChargeRulesInfo(roadNo);
  66. } else if (parkNo) {
  67. this.parkNo = parkNo;
  68. this.getSystems(3);
  69. this.getParkingChargeRulesInfo(parkNo);
  70. } else {
  71. uni.showToast({
  72. title: '参数丢失,返回上一个页面',
  73. duration: 2000,
  74. icon: 'none',
  75. mask: true
  76. });
  77. }
  78. },
  79. methods: {
  80. /**
  81. * 获取收费标准
  82. * {roadNo} 路段
  83. * */
  84. async getChargeRulesInfo(roadNo) {
  85. const { code, data } = await this.$u.api.roadChargeRule({ roadNo });
  86. if (code === 200) {
  87. let chargeRulesArr = [];
  88. for (let i = 0; i < data.length; i++) {
  89. let item = data[i];
  90. this.info.freeTime = data[0].freeTime;
  91. this.info.topAmt = data[0].topAmt;
  92. const obj = {
  93. feeName: item.feeName,
  94. feeNo: item.feeNo,
  95. feePeriod: item.feePeriod,
  96. feeStep: item.feeStep,
  97. feeType: item.feeType,
  98. freeTime: item.freeTime,
  99. topAmt: item.topAmt,
  100. id: item.id,
  101. list: [],
  102. repeatList: [] // 用来检验已存在
  103. };
  104. for (let j = 0; j < item.vehicleRules.length; j++) {
  105. let jItem = item.vehicleRules[j];
  106. const obj1 = {
  107. amt: jItem.amt,
  108. beginTime: jItem.beginTime,
  109. endTime: jItem.endTime,
  110. vehicleFeeNo: jItem.vehicleFeeNo,
  111. vehicleType: jItem.vehicleType,
  112. list: []
  113. };
  114. if (obj.repeatList.indexOf(jItem.vehicleType) === -1) {
  115. obj.repeatList.push(jItem.vehicleType);
  116. obj1.list.push(jItem);
  117. } else {
  118. for (let k = 0; k < item.vehicleRules.length; k++) {
  119. if (obj1.vehicleType === item.vehicleRules[k].vehicleType) {
  120. obj1.list.push(item.vehicleRules[k]);
  121. obj.list.push(obj1);
  122. }
  123. }
  124. }
  125. }
  126. // 存在重复,去除重复操作
  127. obj.list = obj.list.reduce((cur, next) => {
  128. obj[next.vehicleType] ? '' : (obj[next.vehicleType] = true && cur.push(next));
  129. return cur;
  130. }, []);
  131. chargeRulesArr.push(obj);
  132. }
  133. this.chargeRulesInfo = chargeRulesArr;
  134. }
  135. },
  136. /**
  137. * 获取收费标准
  138. * {roadNo} 路段
  139. * */
  140. async getParkingChargeRulesInfo(parkNo) {
  141. const { code, data } = await this.$u.api.parkingLotChargeRule({ parkNo });
  142. if (code === 200) {
  143. // 数据整合后
  144. let chargeRulesArr = [];
  145. for (let i = 0; i < data.length; i++) {
  146. let item = data[i];
  147. this.info.freeTime = data[0].freeTime;
  148. this.info.topAmt = data[0].topAmt;
  149. const obj = {
  150. feeName: item.feeName,
  151. feeNo: item.feeNo,
  152. feePeriod: item.feePeriod,
  153. feeStep: item.feeStep,
  154. feeType: item.feeType,
  155. freeTime: item.freeTime,
  156. topAmt: item.topAmt,
  157. id: item.id,
  158. list: [],
  159. repeatList: [] // 用来检验已存在
  160. };
  161. for (let j = 0; j < item.vehicleRules.length; j++) {
  162. let jItem = item.vehicleRules[j];
  163. const obj1 = {
  164. amt: jItem.amt,
  165. beginTime: jItem.beginTime,
  166. endTime: jItem.endTime,
  167. vehicleFeeNo: jItem.vehicleFeeNo,
  168. vehicleType: jItem.vehicleType,
  169. list: []
  170. };
  171. if (obj.repeatList.indexOf(jItem.vehicleType) === -1) {
  172. obj.repeatList.push(jItem.vehicleType);
  173. obj1.list.push(jItem);
  174. } else {
  175. for (let k = 0; k < item.vehicleRules.length; k++) {
  176. if (obj1.vehicleType === item.vehicleRules[k].vehicleType) {
  177. obj1.list.push(item.vehicleRules[k]);
  178. obj.list.push(obj1);
  179. }
  180. }
  181. }
  182. }
  183. // 存在重复,去除重复操作
  184. obj.list = obj.list.reduce((cur, next) => {
  185. obj[next.vehicleType] ? '' : (obj[next.vehicleType] = true && cur.push(next));
  186. return cur;
  187. }, []);
  188. chargeRulesArr.push(obj);
  189. }
  190. this.chargeRulesInfo = chargeRulesArr;
  191. }
  192. },
  193. /**
  194. * @description: 获取收费标准
  195. * @param {*} termsType
  196. * @return {*}
  197. */
  198. async getSystems(termsType) {
  199. const { code, data } = await this.$u.api.getSystems({ termsType: Number(termsType) });
  200. if (code === 200) {
  201. this.chargeContent = data?.content;
  202. }
  203. }
  204. }
  205. };
  206. </script>
  207. <style lang="scss" scoped>
  208. @import './chargeStandard.scss';
  209. </style>