device-param-101249.js 17 KB

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