devCommand.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. app.controller('devCommandCtrl', ['$scope', '$http', '$timeout', 'toaster', function ($scope, $http, $timeout, toaster) {
  2. $scope.gridOptions = {
  3. data: 'myData',
  4. showGridFooter: true, //是否显示grid footer
  5. //-------- 分页属性 ----------------
  6. paginationPageSizes: [10, 20, 50, 100], //每页显示个数可选项
  7. paginationCurrentPage: 1, //当前页码
  8. paginationPageSize: 10, //每页显示个数
  9. totalItems: 0,// 总数量
  10. columnDefs: [],
  11. //---------------api---------------------
  12. onRegisterApi: function (gridApi) {
  13. $scope.gridApi = gridApi;
  14. gridApi.pagination.on.paginationChanged($scope, function (newPage, pageSize) {
  15. if ($scope.setPagingData) {
  16. $scope.getPagedDataAsync(newPage, pageSize);
  17. }
  18. });
  19. }
  20. };
  21. //编辑弹窗需要的数据
  22. $scope.dialogName = "编辑";
  23. $scope.dialogData = {};
  24. //查询条件
  25. var condition = $scope.condition = {
  26. searchKey: "",
  27. searchType: {value: "*", text: "命令信息"},
  28. searchTypeList: [
  29. {value: "*", text: "命令信息"},
  30. {value: "devTypeCode", text: "驱动编码"},
  31. ],
  32. };
  33. //事件
  34. $scope.event = {
  35. search: function () {
  36. $scope.getPagedDataAsync(1, $scope.gridOptions.paginationPageSize);
  37. }
  38. };
  39. $scope.config = {
  40. driverCodeList: []
  41. };
  42. function setColumnDefs() {
  43. $scope.gridOptions.columnDefs = [
  44. {field: 'devTypeCode', displayName: '驱动编码', minWidth: 120},
  45. {field: 'cmd', displayName: '功能码', minWidth: 120},
  46. {field: 'description', displayName: '描述', minWidth: 120},
  47. {field: 'common', displayName: '是否通用', minWidth: 100},
  48. {field: 'active', displayName: '是否启用', minWidth: 100},
  49. {
  50. field: 'params', displayName: '参数', minWidth: 380,
  51. enableFiltering: false,
  52. enableSorting: false,
  53. enableHiding: false,//禁止在列选择器中隐藏
  54. enableColumnMenu: false,// 是否显示列头部菜单按钮
  55. cellTemplate: '<span class="grid-button" ng-repeat=" item in row.entity.params" ><button class="btn btn-rounded btn-sm btn-info ">{{item.description}}</button></span>'
  56. }
  57. ];
  58. var fields = $scope.gridOptions.columnDefs;
  59. for (var index in fields) {
  60. var item = fields[index];
  61. if (item && item['minWidth'] == null) {
  62. item['minWidth'] = 80;
  63. }
  64. }
  65. }
  66. $scope.setPagingData = function (data, curPage, pageSize) {
  67. var pagedData = data.data.dataList;
  68. $scope.myData = pagedData;
  69. $scope.gridOptions.totalItems = data.data.total;
  70. };
  71. $scope.getPagedDataAsync = function (curPage, pageSize) {
  72. var params = {
  73. pageSize: pageSize,
  74. pageIndex: curPage
  75. };
  76. // 查询关键字
  77. if (condition.searchKey != "") {
  78. params.searchKey = condition.searchKey
  79. }
  80. // 查询类型
  81. if (condition.searchType.value != "") {
  82. params.field = condition.searchType.value;
  83. }
  84. $http.get('/superadmin/getDeviceCommands', {
  85. params: params
  86. }).then(function (data) {
  87. data = data.data
  88. $scope.setPagingData(data, curPage, pageSize);
  89. }).catch(function (data) {
  90. toaster.pop("error", "提示", "获取列表失败");
  91. });
  92. };
  93. function initDataGrid() {
  94. //首次加载表格
  95. $scope.getPagedDataAsync($scope.gridOptions.paginationCurrentPage, $scope.gridOptions.paginationPageSize);
  96. }
  97. setColumnDefs();
  98. initDataGrid();
  99. //添加
  100. $scope.addDevCommand = function () {
  101. //重置表单状态
  102. $scope.devCommandForm.$setPristine();
  103. $scope.devCommandForm.$setUntouched();
  104. $scope.dialogName = "添加";
  105. $scope.dialogData = {
  106. common:true,
  107. active:true,
  108. "topic_pre":"smartBox",
  109. "role":"supermanager",
  110. };
  111. $("#devCommandForm").modal();
  112. };
  113. //编辑
  114. $scope.editDevCommand = function () {
  115. //重置表单状态
  116. $scope.devCommandForm.$setPristine();
  117. $scope.devCommandForm.$setUntouched();
  118. $scope.dialogName = "编辑";
  119. var rows = $scope.gridApi.selection.getSelectedRows();
  120. if (rows.length == 0) {
  121. toaster.pop("info", "提示", "请选择数据!");
  122. return;
  123. }
  124. if (rows.length > 1) {
  125. toaster.pop("info", "提示", "只能选中编辑一条数据");
  126. return;
  127. }
  128. //选中的第一条为准
  129. var item = rows[0];
  130. $scope.dialogData = $.extend(true, {}, item);//需要深度克隆
  131. //设备驱动编码转换
  132. var driverCodeSelect = {};
  133. for (var index2 in $scope.config.driverCodeList) {
  134. var item2 = $scope.config.driverCodeList[index2];
  135. var value2 = item2.code;
  136. if ($scope.dialogData.devTypeCode == value2) {
  137. driverCodeSelect = item2;
  138. break;
  139. }
  140. }
  141. $scope.dialogData.driverCodeSelect = driverCodeSelect;
  142. $("#devCommandForm").modal();
  143. };
  144. //删除编码
  145. $scope.deleteDevCommand = function () {
  146. var rows = $scope.gridApi.selection.getSelectedRows();
  147. if (rows.length == 0) {
  148. toaster.pop("info", "提示", "请选择数据!");
  149. return;
  150. }
  151. var ids = [];
  152. for (var i = 0; i < rows.length; i++) {
  153. ids.push(rows[i].id);
  154. }
  155. $.confirm({
  156. content: '确定删除?',
  157. buttons: {
  158. ok: {
  159. btnClass: 'btn-red',
  160. action: function () {
  161. $http({
  162. method: 'POST',
  163. url: '/superadmin/deleteDeviceCommand',
  164. data: {ids: ids}
  165. }).then(function (response) {
  166. initDataGrid();
  167. }, function (response) {
  168. toaster.pop("error", "提示", "删除失败!");
  169. });
  170. }
  171. },
  172. }
  173. });
  174. };
  175. //提交表单保存
  176. $scope.saveDevTypeData = function () {
  177. if ($scope.devCommandForm.$invalid) {
  178. return
  179. }
  180. var saveData = $.extend(true,{},$scope.dialogData)
  181. var url = "";
  182. if (saveData.id == null) {
  183. url = "/superadmin/addDeviceCommand";
  184. } else {
  185. url = "/superadmin/editDeviceCommand";
  186. }
  187. if (!saveData.common) {
  188. if (!saveData.driverCodeSelect || !saveData.driverCodeSelect.code) {
  189. toaster.pop("info", "提示", "请填写驱动编码");
  190. return
  191. }
  192. // 转换驱动编码格式
  193. saveData.devTypeCode = saveData.driverCodeSelect.code;
  194. delete saveData.driverCodeSelect;
  195. }
  196. $http({
  197. method: 'POST',
  198. url: url,
  199. data: saveData
  200. }).then(function (response) {
  201. //保存成功 弹窗消失
  202. $('#devCommandForm').modal('hide');
  203. $scope.getPagedDataAsync($scope.gridOptions.paginationCurrentPage, $scope.gridOptions.paginationPageSize);
  204. }, function (response) {
  205. toaster.pop("error", "提示", "保存失败!");
  206. });
  207. };
  208. //获取驱动编码列表
  209. $http.get('/device/driver/code/list', {
  210. params: {
  211. pageSize: 1000,//暂时可以获取1000个设备类型
  212. pageIndex: 1
  213. }
  214. }).then(function (data) {
  215. data = data.data
  216. var list = data.payload.dataList;
  217. // 精简数据结构
  218. for (var index in list) {
  219. var item = list[index];
  220. $scope.config.driverCodeList.push(item);
  221. }
  222. }).catch(function (data) {
  223. toaster.pop("error", "提示", "获取列表失败");
  224. });
  225. $scope.deleteParam = function (index) {
  226. var params = $scope.dialogData.params;
  227. if (params[index]) {
  228. params.splice(index, 1);
  229. }
  230. };
  231. $scope.addParam = function () {
  232. var params = $scope.dialogData.params;
  233. if (!$.isArray(params)) {
  234. params = $scope.dialogData.params = [];
  235. }
  236. var length = params.length;
  237. var packageItem = {
  238. "description": "",
  239. "key": "",
  240. "allow_change": false,
  241. "default": ""
  242. };
  243. params.push(packageItem);
  244. };
  245. }]);