device-param-100239.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. function PowerRateComponent(option) {
  2. var _el = option.el;
  3. var _packages = option.packages;
  4. var app = this.app = new Vue({
  5. el: _el,
  6. template: `
  7. <div class="power-package-component">
  8. <div class="mui-input-group">
  9. <div class="mui-table-view-cell" v-for="(obj,index) in info.packages">
  10. <span>第{{index+1}}档:{{obj.max}}W,</span>
  11. <span >比例:{{obj.rate}}%</span>
  12. <span class="mui-pull-right">
  13. <em v-on:click="editPackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  14. <em v-on:click="deletePackageRule(obj,index)" class="padding-t-b-10" ><i
  15. class="iconfont icon-delete c-red"></i>删除</em></span>
  16. </div>
  17. <div class="mui-table-view-cell"
  18. v-on:click="addPackageRule()"><span><i class="iconfont icon-add c-success font-18"></i>添加</span></div>
  19. </div>
  20. <div class="edit-back packageDialog" v-bind:class="{ hidden: !info.dialogOpen }">
  21. <div class="edit-content">
  22. <div class="edit-box ">
  23. <div class="mui-input-row">
  24. <label>最大功率</label>
  25. <div class="mui-pull-right edit-row">
  26. <input type="number" maxlength="5" v-model="info.dialogData.max"/>
  27. <span>W</span>
  28. </div>
  29. </div>
  30. <div class="mui-input-row">
  31. <label>比例</label>
  32. <div class="mui-pull-right edit-row">
  33. <input type="number" maxlength="5" min="0" max="100" v-model="info.dialogData.rate"
  34. />
  35. <span>%</span>
  36. </div>
  37. </div>
  38. <div class="mui-input-row">
  39. <p class="c-red">“比例”:在此功率范围内扣时比例,比如配置为150%,在此功率挡位上充电1分钟,系统会算作为1.5分钟。</p>
  40. </div>
  41. </div>
  42. <div class="mui-popup-buttons ">
  43. <span class="mui-popup-button" v-on:click="closeRulePanel()">取消</span>
  44. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePackageRule()">确认</span>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. `
  50. ,
  51. data: {
  52. info: {
  53. dialogIndex: 0,
  54. dialogOpen: false,
  55. dialogData: {},
  56. packages: []
  57. },
  58. },
  59. mounted: function () {
  60. var that = this
  61. that.initPackages();
  62. },
  63. computed: {},
  64. filters: {},
  65. methods: {
  66. initPackages: function () {
  67. this.info.packages = _packages;
  68. },
  69. editPackageRule: function (obj, index) {
  70. this.info.dialogIndex = index;
  71. this.info.dialogOpen = true;
  72. this.info.dialogData = $.extend(true, {}, obj);
  73. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  74. },
  75. deletePackageRule: function (obj, index) {
  76. var that = this;
  77. var tnArray = ['取消', '确认'];
  78. // mui.confirm('确定要删除该配置?', '温馨提示', tnArray, function (e) {
  79. // if (e.index == 0) {
  80. // } else {
  81. //点击确认业务
  82. that.info.packages.splice(index, 1);
  83. // }
  84. // });
  85. },
  86. closeRulePanel: function () {
  87. this.info.dialogOpen = false;
  88. $("body").removeClass("over-hide");//恢复body滚动
  89. },
  90. savePackageRule: function () {
  91. var dialogData = this.info.dialogData;
  92. var packages = this.info.packages
  93. if ($.trim(dialogData.max) === '') {
  94. mui.toast("最大功率不能为空");
  95. return;
  96. }
  97. var dialogIndex = this.info.dialogIndex;
  98. if (dialogIndex >= 1) {
  99. var prvItem = packages[dialogIndex - 1];
  100. if (parseInt(dialogData.max) < parseInt(prvItem.max)) {
  101. mui.toast("最大功率必须大于上一个配置的最大功率");
  102. return;
  103. }
  104. }
  105. if (dialogIndex < (packages.length - 1)) {
  106. var lastItem = packages[dialogIndex + 1];
  107. if (parseInt(dialogData.max) > parseInt(lastItem.max)) {
  108. mui.toast("最大功率必须小于下一个配置的最大功率");
  109. return;
  110. }
  111. }
  112. if (dialogData.rate == '') {
  113. mui.toast("价格不能为空");
  114. return;
  115. }
  116. this.info.packages[this.info.dialogIndex] = $.extend(true, {}, this.info.dialogData);
  117. this.info.dialogOpen = false;
  118. $("body").removeClass("over-hide");//恢复body滚动
  119. },
  120. addPackageRule: function () {
  121. this.info.dialogIndex = this.info.packages.length;
  122. this.info.dialogOpen = true;
  123. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  124. this.info.dialogData = {};
  125. },
  126. }
  127. });
  128. }
  129. PowerRateComponent.prototype.getPackages = function () {
  130. return this.app.info.packages;
  131. };
  132. function PackageComponent(option) {
  133. var _el = option.el;
  134. var _package_elec = option.package_elec;
  135. var _package_time = option.package_time;
  136. var _chrmt = option.chrmt;
  137. var _chrmtEnum = option.chrmtEnum || {TIME: true, ELEC: true};
  138. var app = this.app = new Vue({
  139. el: _el,
  140. template: `
  141. <div>
  142. <h5 class="mui-content-padded">刷卡投币收费模式</h5>
  143. <div class="mui-input-group">
  144. <div class="mui-input-row mui-radio" v-if="info.chrmtEnum.TIME">
  145. <label for="chrmt1">按时间收费</label>
  146. <input id="chrmt1" v-model="info.chrmt" name="chrmt" value="TIME" type="radio">
  147. </div>
  148. <div class="mui-input-row mui-radio" v-if="info.chrmtEnum.ELEC">
  149. <label for="chrmt2">按电量收费</label>
  150. <input id="chrmt2" v-model="info.chrmt" name="chrmt" value="ELEC" type="radio">
  151. </div>
  152. <div class="mui-table-view-cell" v-for="(obj,index) in info['package_' + info.chrmt.toLowerCase()]">
  153. <span>{{obj.price}}元,</span>
  154. <span>{{obj.time}}{{info.chrmt=='TIME'?'分钟':'度'}}</span>
  155. <span class="mui-pull-right">
  156. <em v-on:click="editPackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  157. <em v-on:click="deletePackageRule(obj,index)" class="padding-t-b-10"><i
  158. class="iconfont icon-delete c-red"></i>删除</em></span>
  159. </div>
  160. <div class="mui-table-view-cell"
  161. v-on:click="addPackageRule()"><span><i class="iconfont icon-add c-success font-18"></i>添加</span></div>
  162. </div>
  163. <div class="edit-back packageDialog" v-bind:class="{ hidden: !info.dialogOpen }">
  164. <div class="edit-content">
  165. <div class="edit-box ">
  166. <div class="mui-input-row">
  167. <label>价格</label>
  168. <div class="mui-pull-right edit-row">
  169. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info.dialogData.price"
  170. />
  171. <span>元</span>
  172. </div>
  173. </div>
  174. <div class="mui-input-row ">
  175. <label>{{info.chrmt=='TIME'?'时间':'电量'}}</label>
  176. <div class="mui-pull-right edit-row">
  177. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info.dialogData.time"
  178. />
  179. <span>{{info.chrmt=='TIME'?'分钟':'度'}}</span>
  180. </div>
  181. </div>
  182. </div>
  183. <div class="mui-popup-buttons ">
  184. <span class="mui-popup-button" v-on:click="closeRulePanel()">取消</span>
  185. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePackageRule()">确认</span>
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. `
  191. ,
  192. data: {
  193. info: {
  194. chrmt: '',
  195. chrmtEnum: _chrmtEnum,
  196. dialogIndex: 0,
  197. dialogOpen: false,
  198. dialogData: {},
  199. package_time: [],
  200. package_elec: []
  201. },
  202. },
  203. mounted: function () {
  204. var that = this
  205. that.initPackages();
  206. },
  207. computed: {},
  208. filters: {},
  209. methods: {
  210. initPackages: function () {
  211. this.info.package_time = _package_time;
  212. this.info.package_elec = _package_elec;
  213. this.info.chrmt = _chrmt;
  214. },
  215. editPackageRule: function (obj, index) {
  216. this.info.dialogIndex = index;
  217. this.info.dialogOpen = true;
  218. this.info.dialogData = $.extend(true, {}, obj);
  219. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  220. },
  221. deletePackageRule: function (obj, index) {
  222. var that = this;
  223. var info = that.info
  224. info['package_' + info.chrmt.toLowerCase()].splice(index, 1);
  225. },
  226. closeRulePanel: function () {
  227. this.info.dialogOpen = false;
  228. $("body").removeClass("over-hide");//恢复body滚动
  229. },
  230. savePackageRule: function () {
  231. var that = this;
  232. var info = that.info
  233. var dialogData = info.dialogData;
  234. var packages = info['package_' + info.chrmt.toLowerCase()]
  235. if ($.trim(dialogData.price) == '') {
  236. mui.toast("价格不能为空");
  237. return;
  238. }
  239. if (!dialogData.time) {
  240. mui.toast("时间不能为空");
  241. return;
  242. }
  243. packages[info.dialogIndex] = $.extend(true, {}, info.dialogData);
  244. info.dialogOpen = false;
  245. $("body").removeClass("over-hide");//恢复body滚动
  246. },
  247. addPackageRule: function () {
  248. var that = this;
  249. var info = that.info
  250. var packages = info['package_' + info.chrmt.toLowerCase()]
  251. info.dialogIndex = packages.length;
  252. info.dialogOpen = true;
  253. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  254. info.dialogData = {
  255. price: "",
  256. time: "",
  257. };
  258. },
  259. }
  260. });
  261. }
  262. PackageComponent.prototype.getPackagesForTime = function () {
  263. return this.app.info.package_time;
  264. };
  265. PackageComponent.prototype.getPackagesForElec = function () {
  266. return this.app.info.package_elec;
  267. };
  268. PackageComponent.prototype.getChrmt = function () {
  269. return this.app.info.chrmt;
  270. };
  271. function VolumeComponent(option) {
  272. var _el = option.el;
  273. var _packages = option.packages;
  274. var _volume = option.volume;
  275. var app = this.app = new Vue({
  276. el: _el,
  277. template: `
  278. <div >
  279. <div class="mui-input-group">
  280. <div class="mui-input-row">
  281. <label class="">默认语音音量</label>
  282. <div class="mui-pull-right ">
  283. <input type="number" class="mui-text-right" maxlength="1" min=1 max=8 required placeholder="音量" v-model="info.volume"/>
  284. </div>
  285. </div>
  286. <div class="mui-table-view-cell" v-for="(obj,index) in info.packages">
  287. <span>时间{{obj.start}}-{{obj.end}},</span>
  288. <span>音量{{obj.volume}}</span>
  289. <span class="mui-pull-right">
  290. <em v-on:click="editPackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  291. <em v-on:click="deletePackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-delete c-red"></i>删除</em></span>
  292. </div>
  293. <div class="mui-table-view-cell"
  294. v-on:click="addPackageRule()"><span><i class="iconfont icon-add c-success font-18"></i>添加</span></div>
  295. </div>
  296. <div class="edit-back packageDialog" v-bind:class="{ hidden: !info.dialogOpen }">
  297. <div class="edit-content">
  298. <div class="edit-box ">
  299. <div class="mui-input-row">
  300. <label>开始时间</label>
  301. <div class="mui-pull-right edit-row">
  302. <input type="time" v-model="info.dialogData.start"
  303. />
  304. </div>
  305. </div>
  306. <div class="mui-input-row">
  307. <label>结束时间</label>
  308. <div class="mui-pull-right edit-row">
  309. <input type="time" v-model="info.dialogData.end"
  310. />
  311. </div>
  312. </div>
  313. <div class="mui-input-row ">
  314. <label>音量</label>
  315. <div class="mui-pull-right edit-row">
  316. <input type="number" maxlength="4" min=1 max=8 v-model="info.dialogData.volume"/>
  317. </div>
  318. </div>
  319. </div>
  320. <div class="mui-popup-buttons ">
  321. <span class="mui-popup-button" v-on:click="closeRulePanel()">取消</span>
  322. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePackageRule()">确认</span>
  323. </div>
  324. </div>
  325. </div>
  326. </div>
  327. `
  328. ,
  329. data: {
  330. info: {
  331. dialogIndex: 0,
  332. dialogOpen: false,
  333. dialogData: {},
  334. volume: 1,
  335. packages: []
  336. },
  337. },
  338. mounted: function () {
  339. var that = this
  340. that.initPackages();
  341. },
  342. computed: {},
  343. filters: {},
  344. methods: {
  345. initPackages: function () {
  346. this.info.packages = _packages;
  347. this.info.volume = _volume;
  348. },
  349. editPackageRule: function (obj, index) {
  350. this.info.dialogIndex = index;
  351. this.info.dialogOpen = true;
  352. this.info.dialogData = $.extend(true, {}, obj);
  353. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  354. },
  355. deletePackageRule: function (obj, index) {
  356. var that = this;
  357. that.info.packages.splice(index, 1);
  358. },
  359. closeRulePanel: function () {
  360. this.info.dialogOpen = false;
  361. $("body").removeClass("over-hide");//恢复body滚动
  362. },
  363. savePackageRule: function () {
  364. var dialogData = this.info.dialogData;
  365. if ($.trim(dialogData.start) == '') {
  366. mui.toast("开始时间不能为空");
  367. return;
  368. }
  369. if ($.trim(dialogData.end) == '') {
  370. mui.toast("结束时间不能为空");
  371. return;
  372. }
  373. if (!dialogData.volume) {
  374. mui.toast("音量不能为空");
  375. return;
  376. }
  377. this.info.packages[this.info.dialogIndex] = $.extend(true, {}, this.info.dialogData);
  378. this.info.dialogOpen = false;
  379. $("body").removeClass("over-hide");//恢复body滚动
  380. },
  381. addPackageRule: function () {
  382. this.info.dialogIndex = this.info.packages.length;
  383. this.info.dialogOpen = true;
  384. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  385. this.info.dialogData = {
  386. start: "",
  387. end: "",
  388. volume: "",
  389. };
  390. },
  391. }
  392. });
  393. }
  394. VolumeComponent.prototype.getVolumeList = function () {
  395. return this.app.info.packages;
  396. };
  397. VolumeComponent.prototype.getDefaultVolume = function () {
  398. return this.app.info.volume;
  399. };