device-param-100269.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. function PackageComponent(option) {
  2. var _el = option.el;
  3. var _package_elec = option.package_elec;
  4. var _package_time = option.package_time;
  5. var _chrmt = option.chrmt;
  6. var app = this.app = new Vue({
  7. el: _el,
  8. template: `
  9. <div>
  10. <h5 class="mui-content-padded">计费参数设置</h5>
  11. <div class="mui-input-group">
  12. <div class="mui-input-row mui-radio">
  13. <label for="chrmt1">按时间收费</label>
  14. <input id="chrmt1" v-model="info.chrmt" name="chrmt" value="TIME" type="radio">
  15. </div>
  16. <div class="mui-input-row mui-radio">
  17. <label for="chrmt2">按电量收费</label>
  18. <input id="chrmt2" v-model="info.chrmt" name="chrmt" value="ELEC" type="radio">
  19. </div>
  20. <div class="mui-table-view-cell" v-for="(obj,index) in info['package_' + info.chrmt.toLowerCase()]">
  21. <template v-if="info.chrmt=='TIME'"><span>1元,{{obj.power}}W,</span>
  22. <span>{{obj.time}}分钟</span></template>
  23. <template v-if="info.chrmt=='ELEC'"><span>1元,</span>
  24. <span>{{obj.elec}}度</span></template>
  25. <span class="mui-pull-right">
  26. <em v-on:click="editPackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  27. <em v-on:click="deletePackageRule(obj,index)" class="padding-t-b-10"><i
  28. class="iconfont icon-delete c-red"></i>删除</em></span>
  29. </div>
  30. <div class="mui-table-view-cell"
  31. v-on:click="addPackageRule()"><span><i class="iconfont icon-add c-success font-18"></i>添加</span></div>
  32. </div>
  33. <div class="edit-back packageDialog" v-if="info.dialogOpen">
  34. <div class="edit-content">
  35. <div class="edit-box ">
  36. <template v-if="info.chrmt=='TIME'">
  37. <div class="mui-input-row">
  38. <label>功率</label>
  39. <div class="mui-pull-right edit-row">
  40. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info.dialogData.power"
  41. />
  42. <span>瓦</span>
  43. </div>
  44. </div>
  45. <div class="mui-input-row ">
  46. <label>时间</label>
  47. <div class="mui-pull-right edit-row">
  48. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info.dialogData.time"
  49. />
  50. <span>分钟</span>
  51. </div>
  52. </div>
  53. </template>
  54. <template v-if="info.chrmt=='ELEC'">
  55. <div class="mui-input-row">
  56. <label>价格</label>
  57. <div class="mui-pull-right edit-row">
  58. <input type="number" min="0.00" step="0.01" maxlength="9" disabled value="1"
  59. />
  60. <span>元</span>
  61. </div>
  62. </div>
  63. <div class="mui-input-row ">
  64. <label>电量</label>
  65. <div class="mui-pull-right edit-row">
  66. <input type="number" min="0.00" step="0.01" maxlength="9" v-model="info.dialogData.elec"
  67. />
  68. <span>度</span>
  69. </div>
  70. </div>
  71. </template>
  72. </div>
  73. <div class="mui-popup-buttons ">
  74. <span class="mui-popup-button" v-on:click="closeRulePanel()">取消</span>
  75. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePackageRule()">确认</span>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. `
  81. ,
  82. data: {
  83. info: {
  84. chrmt: 'time',
  85. dialogIndex: 0,
  86. dialogOpen: false,
  87. dialogData: {},
  88. package_time: [],
  89. package_elec: []
  90. },
  91. },
  92. mounted: function () {
  93. var that = this
  94. that.initPackages();
  95. },
  96. computed: {},
  97. filters: {},
  98. methods: {
  99. initPackages: function () {
  100. this.info.package_time = _package_time;
  101. this.info.package_elec = _package_elec;
  102. this.info.chrmt = _chrmt;
  103. },
  104. editPackageRule: function (obj, index) {
  105. this.info.dialogIndex = index;
  106. this.info.dialogOpen = true;
  107. this.info.dialogData = $.extend(true, {}, obj);
  108. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  109. },
  110. deletePackageRule: function (obj, index) {
  111. var that = this;
  112. var info = that.info
  113. var key = 'package_' + info.chrmt.toLowerCase()
  114. var packages = info[key]
  115. if (key === 'package_elec') {
  116. if (packages.length <= 1) {
  117. mui.toast("必须有一条配置");
  118. return
  119. }
  120. }
  121. info['package_' + info.chrmt.toLowerCase()].splice(index, 1);
  122. },
  123. closeRulePanel: function () {
  124. this.info.dialogOpen = false;
  125. $("body").removeClass("over-hide");//恢复body滚动
  126. },
  127. savePackageRule: function () {
  128. var that = this;
  129. var info = that.info
  130. var dialogData = info.dialogData;
  131. var packages = info['package_' + info.chrmt.toLowerCase()]
  132. if (info.chrmt === 'TIME') {
  133. if ($.trim(dialogData.power) == '') {
  134. mui.toast("功率不能为空");
  135. return;
  136. }
  137. if (!dialogData.time) {
  138. mui.toast("时间不能为空");
  139. return;
  140. }
  141. }
  142. if (info.chrmt === 'ELEC') {
  143. if (!dialogData.elec) {
  144. mui.toast("电量不能为空");
  145. return;
  146. }
  147. }
  148. packages[info.dialogIndex] = $.extend(true, {}, info.dialogData);
  149. info.dialogOpen = false;
  150. $("body").removeClass("over-hide");//恢复body滚动
  151. },
  152. addPackageRule: function () {
  153. var that = this;
  154. var info = that.info
  155. var key = 'package_' + info.chrmt.toLowerCase()
  156. var packages = info[key]
  157. if (key === 'package_elec') {
  158. if (packages.length >= 1) {
  159. mui.toast("只能有一条配置");
  160. return
  161. }
  162. }
  163. info.dialogIndex = packages.length;
  164. info.dialogOpen = true;
  165. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  166. if (info.chrmt === 'TIME') {
  167. info.dialogData = {
  168. power: "",
  169. time: "",
  170. };
  171. }
  172. if (info.chrmt === 'ELEC') {
  173. info.dialogData = {
  174. price: "1",
  175. elec: "",
  176. };
  177. }
  178. },
  179. }
  180. });
  181. }
  182. PackageComponent.prototype.getPackagesForTime = function () {
  183. return this.app.info.package_time;
  184. };
  185. PackageComponent.prototype.getPackagesForElec = function () {
  186. return this.app.info.package_elec;
  187. };
  188. PackageComponent.prototype.getChrmt = function () {
  189. return this.app.info.chrmt;
  190. };
  191. function VolumeComponent(option) {
  192. var _el = option.el;
  193. var _packages = option.packages;
  194. var _volume = option.volume;
  195. var app = this.app = new Vue({
  196. el: _el,
  197. template: `
  198. <div >
  199. <div class="mui-input-group">
  200. <div class="mui-input-row">
  201. <label class="">默认语音音量</label>
  202. <div class="mui-pull-right ">
  203. <input type="number" class="mui-text-right" maxlength="1" min=1 max=8 required placeholder="音量" v-model="info.volume"/>
  204. </div>
  205. </div>
  206. <div class="mui-table-view-cell" v-for="(obj,index) in info.packages">
  207. <span>时间{{obj.start}}-{{obj.end}},</span>
  208. <span>音量{{obj.volume}}</span>
  209. <span class="mui-pull-right">
  210. <em v-on:click="editPackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-edit c-primary"></i>编辑</em>
  211. <em v-on:click="deletePackageRule(obj,index)" class="padding-t-b-10"><i class="iconfont icon-delete c-red"></i>删除</em></span>
  212. </div>
  213. <div class="mui-table-view-cell"
  214. v-on:click="addPackageRule()"><span><i class="iconfont icon-add c-success font-18"></i>添加</span></div>
  215. </div>
  216. <div class="edit-back packageDialog" v-if="info.dialogOpen">
  217. <div class="edit-content">
  218. <div class="edit-box ">
  219. <div class="mui-input-row">
  220. <label>开始时间</label>
  221. <div class="mui-pull-right edit-row">
  222. <input type="time" v-model="info.dialogData.start"
  223. />
  224. </div>
  225. </div>
  226. <div class="mui-input-row">
  227. <label>结束时间</label>
  228. <div class="mui-pull-right edit-row">
  229. <input type="time" v-model="info.dialogData.end"
  230. />
  231. </div>
  232. </div>
  233. <div class="mui-input-row ">
  234. <label>音量</label>
  235. <div class="mui-pull-right edit-row">
  236. <input type="number" maxlength="4" min=1 max=8 v-model="info.dialogData.volume"/>
  237. </div>
  238. </div>
  239. </div>
  240. <div class="mui-popup-buttons ">
  241. <span class="mui-popup-button" v-on:click="closeRulePanel()">取消</span>
  242. <span class="mui-popup-button mui-popup-button-bold" v-on:click="savePackageRule()">确认</span>
  243. </div>
  244. </div>
  245. </div>
  246. </div>
  247. `
  248. ,
  249. data: {
  250. info: {
  251. dialogIndex: 0,
  252. dialogOpen: false,
  253. dialogData: {},
  254. volume: 1,
  255. packages: []
  256. },
  257. },
  258. mounted: function () {
  259. var that = this
  260. that.initPackages();
  261. },
  262. computed: {},
  263. filters: {},
  264. methods: {
  265. initPackages: function () {
  266. this.info.packages = _packages;
  267. this.info.volume = _volume;
  268. },
  269. editPackageRule: function (obj, index) {
  270. this.info.dialogIndex = index;
  271. this.info.dialogOpen = true;
  272. this.info.dialogData = $.extend(true, {}, obj);
  273. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  274. },
  275. deletePackageRule: function (obj, index) {
  276. var that = this;
  277. that.info.packages.splice(index, 1);
  278. },
  279. closeRulePanel: function () {
  280. this.info.dialogOpen = false;
  281. $("body").removeClass("over-hide");//恢复body滚动
  282. },
  283. savePackageRule: function () {
  284. var dialogData = this.info.dialogData;
  285. if ($.trim(dialogData.start) == '') {
  286. mui.toast("开始时间不能为空");
  287. return;
  288. }
  289. if ($.trim(dialogData.end) == '') {
  290. mui.toast("结束时间不能为空");
  291. return;
  292. }
  293. if (!dialogData.volume) {
  294. mui.toast("音量不能为空");
  295. return;
  296. }
  297. this.info.packages[this.info.dialogIndex] = $.extend(true, {}, this.info.dialogData);
  298. this.info.dialogOpen = false;
  299. $("body").removeClass("over-hide");//恢复body滚动
  300. },
  301. addPackageRule: function () {
  302. this.info.dialogIndex = this.info.packages.length;
  303. this.info.dialogOpen = true;
  304. $("body").addClass("over-hide");//避免滚动穿透,直接禁止body滚动
  305. this.info.dialogData = {
  306. start: "",
  307. end: "",
  308. volume: "",
  309. };
  310. },
  311. }
  312. });
  313. }
  314. VolumeComponent.prototype.getVolumeList = function () {
  315. return this.app.info.packages;
  316. };
  317. VolumeComponent.prototype.getDefaultVolume = function () {
  318. return this.app.info.volume;
  319. };