device-param-100279.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. function ChargeTypeComponent(option) {
  2. var _el = option.el;
  3. var _chargeType = option.chargeType;
  4. var _powerPackage = option.powerPackage;
  5. var _powerPrice = option.powerDefaultPrice;
  6. var _elecPrice = option.elecPrice;
  7. var app = this.app = new Vue({
  8. el: _el,
  9. template: `
  10. <div>
  11. <h5 class="mui-content-padded">
  12. 计费模式设置
  13. </h5>
  14. <div class="mui-input-group">
  15. <div class="mui-input-row mui-radio">
  16. <label for="chargeType1" class="tips-event font-b-14">
  17. 按电量收费
  18. <i class="tips" title="设备不断收集充电电量,并根据每度电价以及最终的充电电量计算最终的费用">?</i>
  19. </label>
  20. <input id="chargeType1" v-model="info.chargeType" name="chargeType" value="elec" type="radio">
  21. </div>
  22. <div class="mui-input-row mui-radio">
  23. <label for="chargeType2" class="tips-event font-b-14">
  24. 按功率收费
  25. <i class="tips" title="
  26. 设备不断收集充电功率,并根据此功率以及功率分档的设置计算该阶段的费用,最终的费用为累加和。
  27. 默认功率价格为:当设备运行功率不在设置功率范围内时候使用的价格
  28. ">?</i>
  29. </label>
  30. <input id="chargeType2" v-model="info.chargeType" name="chargeType" value="power" type="radio">
  31. </div>
  32. <div class="mui-table-view-cell">
  33. <template v-if="info.chargeType=='power'">
  34. <span>默认</span>
  35. <span>{{info.powerPrice}} 元</span>
  36. <span>1 小时</span>
  37. </template>
  38. <template v-if="info.chargeType=='elec'">
  39. <span>{{info.elecPrice}} 元</span>
  40. <span>1 度电</span>
  41. </template>
  42. <span class="mui-pull-right">
  43. <em v-on:click="editPrice()" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  44. </span>
  45. </div>
  46. <div class="mui-table-view-cell" v-if="info.chargeType=='power'" v-for="(obj,index) in info[info.chargeType + 'Package']">
  47. <template>
  48. <span>{{obj.min}} W --</span>
  49. <span>{{obj.max}} W</span>
  50. <span>{{obj.price}} 元</span>
  51. <span>1 小时</span>
  52. </template>
  53. <span class="mui-pull-right">
  54. <em v-on:click="editPackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  55. <em v-on:click="deletePackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-delete c-red"></i>删除</em>
  56. </span>
  57. </div>
  58. <div class="mui-table-view-cell" v-on:click="addPackageRule()" v-if="info.chargeType=='power'">
  59. <span><i class="iconfont icon-add c-success font-18"></i>添加</span>
  60. </div>
  61. </div>
  62. <div class="edit-back mui-hidden" id="editPrice">
  63. <div class="edit-content">
  64. <div class="edit-box ">
  65. <template v-if="info.chargeType=='power'">
  66. <div class="mui-input-row">
  67. <label>价格</label>
  68. <div class="mui-pull-right edit-row">
  69. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info._tempValue"/>
  70. <span>元</span>
  71. </div>
  72. </div>
  73. <div class="mui-input-row ">
  74. <label>时间</label>
  75. <div class="mui-pull-right edit-row">
  76. <input type="number" min="0.00" step="0.01" maxlength="9" value="1" disabled/>
  77. <span>小时</span>
  78. </div>
  79. </div>
  80. </template>
  81. <template v-if="info.chargeType=='elec'">
  82. <div class="mui-input-row">
  83. <label>价格</label>
  84. <div class="mui-pull-right edit-row">
  85. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info._tempValue"/>
  86. <span>元</span>
  87. </div>
  88. </div>
  89. <div class="mui-input-row ">
  90. <label>电量</label>
  91. <div class="mui-pull-right edit-row">
  92. <input type="number" min="0.00" step="0.01" maxlength="9" value="1" disabled/>
  93. <span>度</span>
  94. </div>
  95. </div>
  96. </template>
  97. </div>
  98. <div class="mui-popup-buttons ">
  99. <span class="mui-popup-button" v-on:click="closePrice()">取消</span>
  100. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePrice()">确认</span>
  101. </div>
  102. </div>
  103. </div>
  104. <div class="edit-back packageDialog" v-bind:class="{ hidden: !info.dialogOpen }">
  105. <div class="edit-content">
  106. <div class="edit-box ">
  107. <template v-if="info.chargeType=='power'">
  108. <div class="mui-input-row">
  109. <label>范围下限</label>
  110. <div class="mui-pull-right edit-row">
  111. <input type="number" min="0" max="9999" v-model="info.dialogData.min"/>
  112. <span>W</span>
  113. </div>
  114. </div>
  115. <div class="mui-input-row">
  116. <label>范围上限</label>
  117. <div class="mui-pull-right edit-row">
  118. <input type="number" min="0" max="9999" v-model="info.dialogData.max"/>
  119. <span>W</span>
  120. </div>
  121. </div>
  122. <div class="mui-input-row ">
  123. <label>价格</label>
  124. <div class="mui-pull-right edit-row">
  125. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info.dialogData.price"/>
  126. <span>元</span>
  127. </div>
  128. </div>
  129. <div class="mui-input-row ">
  130. <label>时间</label>
  131. <div class="mui-pull-right edit-row">
  132. <input type="number" value="1" disabled/>
  133. <span>小时</span>
  134. </div>
  135. </div>
  136. </template>
  137. </div>
  138. <div class="mui-popup-buttons ">
  139. <span class="mui-popup-button" v-on:click="closeRulePanel()">取消</span>
  140. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePackageRule()">确认</span>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. `
  146. ,
  147. data: {
  148. info: {
  149. chargeType: 'power',
  150. dialogIndex: 0,
  151. dialogOpen: false,
  152. dialogData: {},
  153. powerPackage: [],
  154. powerPrice: 0,
  155. elecPrice: 0,
  156. _tempValue: 0
  157. },
  158. },
  159. mounted: function () {
  160. var that = this;
  161. that.initPackages();
  162. },
  163. computed: {},
  164. filters: {},
  165. methods: {
  166. initPackages: function () {
  167. this.info.chargeType = _chargeType;
  168. this.info.powerPackage = _powerPackage;
  169. this.info.powerPrice = _powerPrice;
  170. this.info.elecPrice = _elecPrice;
  171. },
  172. editPrice: function() {
  173. var key = this.info.chargeType + "Price";
  174. this.info._tempValue = this.info[key];
  175. $("#editPrice").removeClass("mui-hidden")
  176. },
  177. closePrice: function() {
  178. $("#editPrice").addClass("mui-hidden")
  179. },
  180. savePrice: function() {
  181. var key = this.info.chargeType + "Price";
  182. this.info[key] = this.info._tempValue;
  183. $("#editPrice").addClass("mui-hidden")
  184. },
  185. editPackageRule: function (obj, index) {
  186. this.info.dialogIndex = index;
  187. this.info.dialogOpen = true;
  188. this.info.dialogData = $.extend(true, {}, obj);
  189. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  190. },
  191. deletePackageRule: function (obj, index) {
  192. var that = this;
  193. var info = that.info;
  194. var key = info.chargeType + 'Package';
  195. info[key].splice(index, 1);
  196. },
  197. closeRulePanel: function () {
  198. this.info.dialogOpen = false;
  199. $("body").removeClass("over-hide");//恢复body滚动
  200. },
  201. savePackageRule: function () {
  202. var that = this;
  203. var info = that.info;
  204. var dialogData = info.dialogData;
  205. var packages = info[info.chargeType + 'Package'];
  206. if (info.chargeType === 'elec') {
  207. if (!dialogData.price) {
  208. mui.toast("电量计费价格不能为空");
  209. return;
  210. }
  211. }
  212. if (info.chargeType === 'power') {
  213. if (dialogData.min === "") {
  214. mui.toast("功率范围下限不能为空");
  215. return;
  216. }
  217. if (dialogData.max === "") {
  218. mui.toast("功率范围上限不能为空");
  219. return;
  220. }
  221. if (!dialogData.price) {
  222. mui.toast("价格不能为空");
  223. return;
  224. }
  225. if (dialogData.min * 1 > dialogData.max * 1) {
  226. mui.toast("功率范围上限不得小于功率范围下限");
  227. return;
  228. }
  229. }
  230. packages[info.dialogIndex] = $.extend(true, {}, info.dialogData);
  231. info.dialogOpen = false;
  232. $("body").removeClass("over-hide");//恢复body滚动
  233. },
  234. addPackageRule: function () {
  235. var that = this;
  236. var info = that.info;
  237. var key = info.chargeType + 'Package';
  238. var packages = info[key];
  239. info.dialogIndex = packages.length;
  240. info.dialogOpen = true;
  241. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  242. // 只有功率的会存在多档的情况 其余的暂时不考虑
  243. if (info.chargeType === "power") {
  244. info.dialogData = {max: "", min: "", price: ""}
  245. }
  246. },
  247. }
  248. });
  249. }
  250. // 获取获取功率计费
  251. ChargeTypeComponent.prototype.getPowerPackage = function () {
  252. return this.app.info.powerPackage;
  253. };
  254. // 获取功率计费默认价格
  255. ChargeTypeComponent.prototype.getPowerDefaultPrice = function() {
  256. return this.app.info.powerPrice;
  257. };
  258. // 获取电量单价
  259. ChargeTypeComponent.prototype.getElecPrice = function () {
  260. return this.app.info.elecPrice;
  261. };
  262. // 获取计费方式
  263. ChargeTypeComponent.prototype.getChargeType = function () {
  264. return this.app.info.chargeType;
  265. };