aa.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. appFormly.config(
  2. function config(formlyConfigProvider) {
  3. // formlyConfigProvider.setType({
  4. // name: 'custom',
  5. // templateUrl: 'custom.html'
  6. // });
  7. // formlyConfigProvider.setWrapper({
  8. // name: 'bootstrapLabel',
  9. // templateUrl: 'assets/views/customform/tpl/normal-label.html'
  10. // });
  11. // formlyConfigProvider.setType({
  12. // name: 'ui-panel',
  13. // templateUrl: 'assets/views/customform/tpl/ui-panel.html'
  14. // });
  15. formlyConfigProvider.setType({
  16. name: 'ui-input',
  17. extends: 'input',
  18. templateUrl: 'assets/views/customform/tpl/ui-input.html',
  19. defaultOptions: function(options) {
  20. return {
  21. templateOptions: {
  22. transform: function(value) {}
  23. }
  24. };
  25. },
  26. controller: ['$scope', function($scope) {
  27. console.log($scope);
  28. }]
  29. });
  30. }
  31. );
  32. app.controller('CustomformCtrl', ["$rootScope", "$scope", "$injector", "$parse", function($rootScope, $scope, $injector, $parse) {
  33. console.log('CustomformCtrl is load');
  34. //vm 配置数据
  35. var vm = this;
  36. $scope.vm = vm;
  37. vm.options = {};
  38. vm.exampleTitle = ['expressionProperties', 'model property'];
  39. // vm.fields = [];
  40. vm.fields = [{
  41. key: 'password',
  42. type: 'ui-input',
  43. className: 'col-xs-4',
  44. templateOptions: {
  45. type: 'password',
  46. label: 'Password',
  47. placeholder: 'Password',
  48. required: true
  49. },
  50. expressionProperties: {
  51. 'templateOptions.disabled': '!model.username'
  52. }
  53. }];
  54. vm.model = {};
  55. // 内部定义变量
  56. var that = $injector;
  57. var parse = $parse;
  58. var formKey = "";
  59. var pdKey = "";
  60. var modelWatch = "";
  61. //angular-formly代码渲染
  62. function decodeVMForm(vmForm) {
  63. var result = { model: {}, fields: [] };
  64. //设置模型实体数据 begin
  65. // var mdata = vmForm.model;
  66. //解析数据实体
  67. var mdata = angular.fromJson(vmForm.model); //JSON.parse(field.extjson);
  68. angular.extend(result.model, mdata);
  69. if (modelWatch != null && modelWatch != '') {
  70. //angular.extend(result.model.incident,modelWatch.incident);
  71. //result.model.alarmType = modelWatch.alarmType;
  72. // vmForm.cancelUrl = modelWatch.cancelUrl;
  73. // console.log(modelWatch.cancelUrl)
  74. for (var index in modelWatch.model) {
  75. //console.log(JSON.stringify(index+" " +JSON.stringify( modelWatch.model[index])));
  76. if (result.model[index] != null) {
  77. angular.extend(result.model[index], modelWatch.model[index]);
  78. } else {
  79. result.model[index] = modelWatch.model[index];
  80. }
  81. }
  82. }
  83. //设置模型实体数据 end
  84. //解析设计数据生成表单项 begin
  85. var fields = [];
  86. //处理修改设计数据中展示设置
  87. angular.forEach(vmForm.fields, function(field) {
  88. if (field.key == "") {
  89. delete field.key;
  90. }
  91. if (angular.isDefined(field.extjson)) {
  92. var extObj = angular.fromJson(field.extjson); //JSON.parse(field.extjson);
  93. angular.extend(field.templateOptions, extObj.templateOptions);
  94. delete extObj.templateOptions;
  95. for (var prop in extObj) {
  96. if (new RegExp("Expression").test(prop)) {
  97. //var obj = $scope.$eval(extObj[prop]);
  98. //extObj[prop] = $scope.$eval(extObj[prop]);
  99. if (extObj[prop] != null) {
  100. if (new RegExp("function").test(extObj[prop])) {
  101. var propValue = eval(extObj[prop]);
  102. extObj[prop] = propValue;
  103. } else {
  104. //console.log(extObj[prop]);
  105. var obj = $scope.$eval(extObj[prop]);
  106. extObj[prop] = obj;
  107. //console.log(obj);
  108. }
  109. }
  110. } else if (new RegExp("expressionProperties").test(prop)) {
  111. for (var p in extObj[prop]) {
  112. if (new RegExp("function").test(extObj[prop][p])) {
  113. var propValue = eval(extObj[prop][p]);
  114. extObj[prop][p] = propValue;
  115. } else {
  116. //if(p.indexOf("'")>=0){
  117. // var obj = $scope.$eval(extObj[prop][p]);
  118. // extObj[prop][$scope.$eval(p)]=obj;
  119. //}
  120. }
  121. }
  122. } else if ("watcher" == prop) {
  123. if (angular.isArray(extObj[prop])) {
  124. angular.forEach(extObj[prop], function(item, index) {
  125. for (var p in item) {
  126. if (new RegExp("function").test(item[p])) {
  127. var propValue = eval(item[p]);
  128. extObj[prop][index][p] = propValue;
  129. }
  130. }
  131. });
  132. } else if (angular.isObject(extObj[prop])) {
  133. for (var p in extObj[prop]) {
  134. if (new RegExp("function").test(extObj[prop][p])) {
  135. var propValue = eval(extObj[prop][p]);
  136. extObj[prop][p] = propValue;
  137. }
  138. }
  139. }
  140. }
  141. }
  142. angular.extend(field, extObj);
  143. delete field.extjson;
  144. }
  145. if (angular.isDefined(field.templateOptions)) {
  146. var templateOs = field.templateOptions;
  147. for (var property in templateOs) {
  148. //console.log(angular.isString(templateOs[property]) +" "+property + " " + (!(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))));
  149. if (angular.isString(templateOs[property])) { //&& !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))
  150. if (new RegExp("function").test(templateOs[property])) {
  151. var propValue = eval(templateOs[property]);
  152. field.templateOptions[property] = propValue;
  153. } else {
  154. if (that.has(templateOs[property])) {
  155. field.templateOptions[property] = that.get(templateOs[property]);
  156. } else {
  157. field.templateOptions[property] = templateOs[property];
  158. }
  159. }
  160. } else if (templateOs[property] == null) {
  161. //delete field.templateOptions[property];
  162. } else {}
  163. }
  164. }
  165. // if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") {
  166. // api_configure_form.renderForm($stateParams.formKey, '00000').then(function(responseData) {
  167. // if (responseData) {
  168. // //console.log("responseData>>>");console.log(responseData);
  169. // var vmForm = Restangular.stripRestangular(responseData);
  170. // if (vmForm) {
  171. // //console.log("vmForm>>>");console.log(vmForm);
  172. // var modelData = {};
  173. // //modelData=myData.data;
  174. // decodeVMForm(vmForm);
  175. // }
  176. // }
  177. // });
  178. // }
  179. // console.log(field);
  180. if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) {
  181. var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson);
  182. angular.extend(field.templateOptions, extObj);
  183. delete field.templateOptions.extjson;
  184. }
  185. // ...
  186. if (field.templateOptions) {
  187. //处理远程获取数据控件方法调用
  188. if (field.templateOptions.optionsUrl) {
  189. field.templateOptions.refresh = refreshSelectOptions;
  190. }
  191. //事件脚本处理
  192. // if(field.templateOptions.ngChangeScript){
  193. // if(!field.expressionProperties)field.expressionProperties={};
  194. // field.expressionProperties.ngChange = function(modelVal,viewVal,ev){
  195. //// console.log(ev);
  196. //// console.log("change>>"+ev.options.key);
  197. // eval(field.templateOptions.ngChangeScript);
  198. // }
  199. // }
  200. // if(field.templateOptions.ngClickScript){
  201. // if(!field.expressionProperties)field.expressionProperties={};
  202. // field.expressionProperties.ngClick = function(modelVal,viewVal,ev){
  203. //// console.log(ev);
  204. //// console.log("click>>"+ev.options.key);
  205. // eval(field.templateOptions.ngClickScript);
  206. // }
  207. // }
  208. //处理嵌套属性数据绑定/
  209. if (field.templateOptions.pkey) {
  210. var pmodel, i = 0;
  211. angular.forEach(field.templateOptions.pkey.split("."), function(p) {
  212. if (i == 0) {
  213. if (result.model[p] == null) {
  214. result.model[p] = {};
  215. }
  216. pmodel = result.model[p];
  217. i++;
  218. } else {
  219. if (pmodel[p] == null) {
  220. pmodel[p] = {};
  221. }
  222. pmodel = pmodel[p];
  223. }
  224. });
  225. if (pmodel != null) {
  226. field.model = pmodel;
  227. if (pmodel[field.key] == null) {
  228. pmodel[field.key] = null;
  229. }
  230. }
  231. } else {
  232. if (result.model[field.key] == null) {
  233. result.model[field.key] = null;
  234. }
  235. }
  236. }
  237. // console.log(field);
  238. result.fields.push(field);
  239. });
  240. angular.extend($scope.vm.fields, result.fields);
  241. angular.extend($scope.vm.model, result.model);
  242. // angular.extend(vm.fields, result.fields);
  243. // angular.extend(vm.model, result.model);
  244. // angular.extend($scope.vm, vm);
  245. // console.log("$scope.vm.model="+JSON.stringify($scope.vm.model));
  246. vm.model["loginUser"] = $rootScope.user;
  247. if (modelWatch != null && modelWatch != '' && modelWatch.cancelUrl != null && modelWatch.cancelUrl != '') {
  248. vmForm.cancelUrl = modelWatch.cancelUrl;
  249. }
  250. $scope.formData = vmForm;
  251. // console.log("$scope.formData="+JSON.stringify($scope.formData.url));
  252. if ($scope.formData.url == "start") {
  253. $scope.Reset = true;
  254. $scope.close = false;
  255. } else if ($scope.formData.url == "complete") {
  256. $scope.Reset = false;
  257. $scope.close = true;
  258. }
  259. //解析设计数据生成表单项 end
  260. return result;
  261. }
  262. function onSubmit() {
  263. alert(JSON.stringify(vm.model), null, 2);
  264. };
  265. }])