cmdbformCtrl.js 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985
  1. var sysFormly = angular.module('formlySystem', [
  2. 'formly', 'formlyBootstrap', 'ui.bootstrap',
  3. 'ngSanitize', 'ui.select', 'ui.grid'
  4. ]);
  5. app.requires.push('formlySystem');
  6. // var appFormly = angular.module('formlyExample', [
  7. // 'formly', 'formlyBootstrap','ui.bootstrap',
  8. // 'ngSanitize','ui.select','ui.grid'],
  9. sysFormly.config(
  10. function config(formlyConfigProvider) {
  11. //格式转换方法 XXX-XXX转驼峰命名
  12. });
  13. sysFormly.controller('cmdbformCtrl', ['$rootScope', '$scope', '$parse', '$filter', '$injector', '$http', '$q', '$state', '$stateParams', '$modal', '$timeout', '$interval', 'SweetAlert', 'FileUploader', 'i18nService', 'moment', 'Restangular', 'UserRestangular', 'BpmRestangular', 'api_configure_form', 'api_bpm_domain', 'api_bpm_data', 'api_user_data', 'up_down_file',
  14. function($rootScope, $scope, $parse, $filter, $injector, $http, $q, $state, $stateParams, $modal, $timeout, $interval, SweetAlert, FileUploader, i18nService, moment, Restangular, UserRestangular, BpmRestangular, api_configure_form, api_bpm_domain, api_bpm_data, api_user_data, up_down_file) {
  15. $scope.width = { 'width': document.getElementById("form").offsetWidth };
  16. window.onresize = function() {
  17. if (document.getElementById("form")) {
  18. $scope.width = { 'width': document.getElementById("form").offsetWidth };
  19. }
  20. }
  21. //console.log($stateParams);
  22. var vm = this;
  23. vm.options = {};
  24. vm.exampleTitle = ['expressionProperties', 'model property'];
  25. vm.fields = [];
  26. vm.model = {};
  27. $scope.langs = i18nService.getAllLangs();
  28. $scope.lang = 'zh-cn';
  29. //alert($rootScope.user.id,null,2);
  30. // vm.model["loginUser"] = $rootScope.user;
  31. var that = $injector;
  32. var parse = $parse;
  33. $scope.langs = i18nService.getAllLangs();
  34. $scope.lang = 'zh-cn';
  35. i18nService.setCurrentLang($scope.lang);
  36. var formKey = "";
  37. var pdKey = "";
  38. if (angular.isDefined($state.current.pdKey) && $state.current.pdKey != "") {
  39. pdKey = $state.current.pdKey;
  40. //console.log("pdKey::"+$state.current.pdKey);
  41. }
  42. if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") {
  43. formKey = $stateParams.formKey;
  44. //console.log("formKey::"+$stateParams.formKey);
  45. }
  46. //用户测试数据,后续从header的auth中获取
  47. var userId = 2;
  48. userId = $rootScope.user.id;
  49. var modelWatch = "";
  50. var fieldsWatch = [];
  51. var serviceWatch = null;
  52. var formWatch = {};
  53. if (angular.isDefined($stateParams.model) && $stateParams.model != "") {
  54. modelWatch = JSON.parse($stateParams.model);
  55. // console.log("modelWatch:"+ JSON.stringify(modelWatch));
  56. }
  57. if (angular.isDefined($stateParams.fields) && $stateParams.fields != "") {
  58. fieldsWatch = JSON.parse($stateParams.fields);
  59. }
  60. if (angular.isDefined($stateParams.extjson) && $stateParams.extjson != "") {
  61. formWatch.extjson = JSON.parse($stateParams.extjson);
  62. }
  63. if (angular.isDefined($stateParams.cancelUrl) && $stateParams.cancelUrl != "") {
  64. formWatch.cancelUrl = $stateParams.cancelUrl;
  65. }
  66. if (angular.isDefined($stateParams.url) && $stateParams.url != "") {
  67. formWatch.url = $stateParams.url;
  68. }
  69. if (angular.isDefined($stateParams.service) && $stateParams.service != "") {
  70. if (that.has($stateParams.service)) {
  71. serviceWatch = that.get($stateParams.service);
  72. } else {
  73. serviceWatch = $stateParams.service;
  74. }
  75. }
  76. //用户测试数据,后续从header的auth中获取
  77. var userId = 2;
  78. userId = $rootScope.user.id;
  79. //==============处理表单设计数据 开始====================
  80. //处理组件加载后台数据选项的方法
  81. function refreshSelectOptions(searchVal, field) {
  82. //todo
  83. console.log(field);
  84. if (field.key == 'id' && field.templateOptions.pkey == 'change.source') {
  85. field.templateOptions.options = [{ "id": 1, "name": "事件", "code": 1 }, { "id": 2, "name": "问题", "code": 2 }, { "id": 3, "name": "配置", "code": 3 }, { "id": 4, "name": "服务级别", "code": 4 }, { "id": 5, "name": "内部需求", "code": 5 }];
  86. } else if (field.templateOptions.optionsUrl) {
  87. var process = BpmRestangular.all("");
  88. if (field.templateOptions.ApiService) {
  89. process = UserRestangular.all("");
  90. }
  91. process.customPOST({ "idx": 0, "sum": 1000 }, field.templateOptions.optionsUrl).then(function(result) {
  92. if (!field.templateOptions.options) {
  93. field.templateOptions.options = [];
  94. }
  95. if (field.templateOptions.optionsDataKey) {
  96. field.templateOptions.options = result[field.templateOptions.optionsDataKey];
  97. } else {
  98. field.templateOptions.options = result;
  99. }
  100. });
  101. }
  102. }
  103. //解析自定义表单设计数据
  104. function decodeVMForm(vmForm) {
  105. var result = { model: {}, fields: [] };
  106. //设置模型实体数据 begin
  107. // var mdata = vmForm.model;
  108. //解析数据实体
  109. var mdata = angular.fromJson(vmForm.model); //JSON.parse(field.extjson);
  110. angular.extend(result.model, mdata);
  111. if (modelWatch != null && modelWatch != '') {
  112. //angular.extend(result.model.incident,modelWatch.incident);
  113. //result.model.alarmType = modelWatch.alarmType;
  114. // vmForm.cancelUrl = modelWatch.cancelUrl;
  115. for (var index in modelWatch.model) {
  116. console.log(JSON.stringify(index + " " + JSON.stringify(modelWatch.model[index])));
  117. if (result.model[index] != null) {
  118. angular.extend(result.model[index], modelWatch.model[index]);
  119. } else {
  120. result.model[index] = modelWatch.model[index];
  121. }
  122. }
  123. }
  124. //设置模型实体数据 end
  125. //解析设计数据生成表单项 begin
  126. var fields = [];
  127. //处理修改设计数据中展示设置
  128. angular.forEach(vmForm.fields, function(field) {
  129. if (field.key == "") {
  130. delete field.key;
  131. }
  132. if (angular.isDefined(field.extjson)) {
  133. var extObj = angular.fromJson(field.extjson); //JSON.parse(field.extjson);
  134. angular.extend(field.templateOptions, extObj.templateOptions);
  135. delete extObj.templateOptions;
  136. for (var prop in extObj) {
  137. if (new RegExp("Expression").test(prop)) {
  138. //var obj = $scope.$eval(extObj[prop]);
  139. //extObj[prop] = $scope.$eval(extObj[prop]);
  140. if (extObj[prop] != null) {
  141. if (new RegExp("function").test(extObj[prop])) {
  142. var propValue = eval(extObj[prop]);
  143. extObj[prop] = propValue;
  144. } else {
  145. //console.log(extObj[prop]);
  146. var obj = $scope.$eval(extObj[prop]);
  147. extObj[prop] = obj;
  148. //console.log(obj);
  149. }
  150. }
  151. } else if (new RegExp("expressionProperties").test(prop)) {
  152. for (var p in extObj[prop]) {
  153. if (new RegExp("function").test(extObj[prop][p])) {
  154. var propValue = eval(extObj[prop][p]);
  155. extObj[prop][p] = propValue;
  156. } else {
  157. }
  158. }
  159. } else if ("watcher" == prop) {
  160. if (angular.isArray(extObj[prop])) {
  161. angular.forEach(extObj[prop], function(item, index) {
  162. for (var p in item) {
  163. if (new RegExp("function").test(item[p])) {
  164. var propValue = eval(item[p]);
  165. extObj[prop][index][p] = propValue;
  166. }
  167. }
  168. });
  169. } else if (angular.isObject(extObj[prop])) {
  170. for (var p in extObj[prop]) {
  171. if (new RegExp("function").test(extObj[prop][p])) {
  172. var propValue = eval(extObj[prop][p]);
  173. extObj[prop][p] = propValue;
  174. }
  175. }
  176. }
  177. }
  178. }
  179. angular.extend(field, extObj);
  180. delete field.extjson;
  181. }
  182. if (angular.isDefined(field.templateOptions)) {
  183. var templateOs = field.templateOptions;
  184. for (var property in templateOs) {
  185. //console.log(property);
  186. if (angular.isString(templateOs[property]) && !(new RegExp("[\u4e00-\u9fa5]").test(templateOs[property]))) {
  187. if (new RegExp("function").test(templateOs[property])) {
  188. var propValue = eval(templateOs[property]);
  189. field.templateOptions[property] = propValue;
  190. } else {
  191. if (that.has(templateOs[property])) {
  192. field.templateOptions[property] = that.get(templateOs[property]);
  193. } else {
  194. field.templateOptions[property] = templateOs[property];
  195. }
  196. }
  197. } else if (templateOs[property] == null) {
  198. //delete field.templateOptions[property];
  199. } else {}
  200. }
  201. }
  202. //console.log(field);
  203. if (angular.isDefined(field.templateOptions) && angular.isDefined(field.templateOptions.extjson)) {
  204. var extObj = angular.fromJson(field.templateOptions.extjson); //JSON.parse(field.extjson);
  205. angular.extend(field.templateOptions, extObj);
  206. delete field.templateOptions.extjson;
  207. }
  208. //...
  209. if (field.templateOptions) {
  210. //处理远程获取数据控件方法调用
  211. if (field.templateOptions.optionsUrl) {
  212. field.templateOptions.refresh = refreshSelectOptions;
  213. }
  214. //处理嵌套属性数据绑定/
  215. if (field.templateOptions.pkey) {
  216. var pmodel, i = 0;
  217. angular.forEach(field.templateOptions.pkey.split("."), function(p) {
  218. if (i == 0) {
  219. if (result.model[p] == null) {
  220. result.model[p] = {};
  221. }
  222. pmodel = result.model[p];
  223. i++;
  224. } else {
  225. if (pmodel[p] == null) {
  226. pmodel[p] = {};
  227. }
  228. pmodel = pmodel[p];
  229. }
  230. });
  231. if (pmodel != null) {
  232. field.model = pmodel;
  233. if (pmodel[field.key] == null) {
  234. pmodel[field.key] = null;
  235. }
  236. }
  237. } else {
  238. if (result.model[field.key] == null) {
  239. result.model[field.key] = null;
  240. }
  241. }
  242. //处理弹出框组件初始化
  243. if (field.type == "ui-input-selectmodal") {
  244. field.templateOptions.modal = $modal;
  245. //field.templateOptions.Restangular = Restangular;
  246. } else if (field.type == "ui-requesterselect") {
  247. //field.templateOptions.language = $scope.lang;
  248. field.templateOptions.modal = $modal;
  249. field.templateOptions.UserService = api_user_data;
  250. } else if (field.type == "ui-userselect") {
  251. field.templateOptions.modal = $modal;
  252. //field.templateOptions.Restangular = Restangular;
  253. } else if (field.type == "ui-multiuserselect") {
  254. field.templateOptions.modal = $modal;
  255. } else if (field.type == "ui-search") {
  256. field.templateOptions.modal = $modal;
  257. } else if (field.type == "ui-incidentmodelselect") {
  258. field.templateOptions.modal = $modal;
  259. //console.log("$rootScope.user:" + JSON.stringify($rootScope.user));
  260. field.templateOptions.loginUser = $rootScope.user;
  261. //field.templateOptions.Restangular = Restangular;
  262. } else if (field.type == "ui-gridlist") {
  263. field.templateOptions.modal = $modal;
  264. field.templateOptions.loginUser = $rootScope.user;
  265. } else if (field.type == "ui-modelselect") {
  266. field.templateOptions.modal = $modal;
  267. //console.log("$rootScope.user:" + JSON.stringify($rootScope.user));
  268. field.templateOptions.loginUser = $rootScope.user;
  269. //field.templateOptions.Restangular = Restangular;
  270. } else if (field.type == "ui-cmdbinformation") {
  271. field.templateOptions.modal = $modal;
  272. //console.log("$rootScope.user:" + JSON.stringify($rootScope.user));
  273. field.templateOptions.loginUser = $rootScope.user;
  274. //field.templateOptions.Restangular = Restangular;
  275. } else if (field.type == "ui-cmdbuplode") {
  276. $scope.fileUploader = field.templateOptions.fileUploader = new FileUploader({
  277. url: '/uploader',
  278. queueLimit: 1, //文件个数
  279. // removeAfterUpload: true
  280. // autoUpload: true
  281. });
  282. $scope.fileUploadermeans = field.templateOptions.fileUploadermeans = new FileUploader({
  283. url: '/uploadermeans'
  284. });
  285. field.templateOptions.modal = $modal;
  286. //console.log("$rootScope.user:" + JSON.stringify($rootScope.user));
  287. field.templateOptions.loginUser = $rootScope.user;
  288. //field.templateOptions.Restangular = Restangular;
  289. } else if (field.type == "ui-uplodchange") {
  290. $scope.fileUploader = field.templateOptions.fileUploader = new FileUploader({
  291. url: '/uploader'
  292. });
  293. field.templateOptions.modal = $modal;
  294. field.templateOptions.loginUser = $rootScope.user;
  295. } else if (field.type == "ui-cmdbtype") {
  296. field.templateOptions.modal = $modal;
  297. //console.log("$rootScope.user:" + JSON.stringify($rootScope.user));
  298. field.templateOptions.loginUser = $rootScope.user;
  299. //field.templateOptions.Restangular = Restangular;
  300. } else if (field.type == "ui-dropfile") {
  301. $scope.fileUploader = field.templateOptions.fileUploader = new FileUploader({
  302. url: '/uploader'
  303. });
  304. field.templateOptions.taskId = $stateParams.taskId;
  305. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  306. field.templateOptions.userId = $rootScope.user.id;
  307. //field.ApiService=api_bpm_domain;
  308. } else if (field.type == "ui-dropfiletable") {
  309. if (field.templateOptions.processInstanceId) {
  310. } else {
  311. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  312. }
  313. } else if (field.type == "ui-dropupload") {
  314. if (field.templateOptions.processInstanceId) {
  315. } else {
  316. field.templateOptions.processInstanceId = $stateParams.processInstanceId;
  317. }
  318. } else if (field.type == "ui-repeatSection") {
  319. var repeatForm = {
  320. model: {
  321. },
  322. fields: field.templateOptions.fields
  323. };
  324. repeatForm.model[field.key] = [];
  325. decodeVMForm(repeatForm);
  326. } else if (field.type == "ui-currentuser") {
  327. field.templateOptions.user = vm.model["loginUser"];
  328. }
  329. }
  330. // console.log(field);
  331. result.fields.push(field);
  332. });
  333. angular.extend($scope.vm.fields, result.fields);
  334. angular.extend($scope.vm.model, result.model);
  335. console.log($rootScope.user);
  336. // vm.model["loginUser"] = $rootScope.user;
  337. if (modelWatch != null && modelWatch != '' && modelWatch.cancelUrl != null && modelWatch.cancelUrl != '') {
  338. vmForm.cancelUrl = modelWatch.cancelUrl;
  339. }
  340. $scope.formData = vmForm;
  341. //console.log($scope.vm);
  342. //解析设计数据生成表单项 end
  343. return result;
  344. }
  345. //======================处理表单设计数据 结束========================
  346. $scope.ldloading = {};
  347. function filter(obj) {
  348. angular.forEach(obj, function(key, value) {
  349. if (value === "" || value === null) {
  350. delete obj[key];
  351. } else if (Object.prototype.toString.call(value) === '[object Object]') {
  352. filter(value);
  353. } else if (angular.isArray(value)) {
  354. angular.forEach(value, function(item) {
  355. filter(item);
  356. });
  357. }
  358. });
  359. }
  360. $scope.closeModel = function() {
  361. // if (angular.isDefined($stateParams.formKey) && $stateParams.formKey != "") {
  362. $state.go($scope.formData.cancelUrl);
  363. event.preventDefault();
  364. // }
  365. }
  366. $scope.vaild = false;
  367. $rootScope.loading = false;
  368. vm.submit = function(data, style) {
  369. if (vm.form.$valid) {
  370. $rootScope.loading = true;
  371. $scope.vaild = true;
  372. // $scope.ldloading[style.replace('-', '_')] = true;
  373. vm.options.updateInitialValue();
  374. var _ = window._;
  375. vm.model = (function filter(obj) {
  376. var dateTransKeys = [];
  377. var filtered = _.pick(obj, function(v, k, obj) {
  378. if (_.isDate(v)) {
  379. dateTransKeys.push(k);
  380. }
  381. return angular.isDefined(v) && v !== null && (angular.isArray(v) ? v.length > 0 : true) && (_.isPlainObject(v) ? (!_.isEmpty(v)) : true);
  382. });
  383. return _.cloneDeep(filtered, function(v, index, object) {
  384. if (angular.isArray(dateTransKeys) && dateTransKeys.length > 0) {
  385. angular.forEach(dateTransKeys, function(item) {
  386. v[item] = moment(v[item]).format('YYYY-MM-DD HH:mm:ss');
  387. })
  388. dateTransKey = [];
  389. return v;
  390. }
  391. return !(_.isEmpty(filtered)) && v !== filtered && _.isPlainObject(v) ? filter(v) : undefined;
  392. });
  393. })(vm.model);
  394. if (pdKey != "") {
  395. if ($scope.oprcode == "save") { //保存
  396. api_bpm_domain.save(taskId, vm.model).then(function(response) {
  397. if (response) {
  398. // if (response.status && response.status != 400) {
  399. var resData = Restangular.stripRestangular(response);
  400. SweetAlert.swal({
  401. title: "保存成功!",
  402. confirmButtonColor: "#007AFF"
  403. }, function() {
  404. $rootScope.loading = false;
  405. $state.go($scope.formData.cancelUri);
  406. });
  407. // if(resData.status){
  408. // resData
  409. // }
  410. } else {
  411. SweetAlert.swal({
  412. title: "系统错误",
  413. text: "系统错误,请稍后重试!",
  414. type: "error",
  415. confirmButtonColor: "#DD6B55"
  416. });
  417. $rootScope.loading = false;
  418. }
  419. $scope.vaild = false;
  420. $rootScope.loading = false;
  421. // $scope.ldloading[style.replace('-', '_')] = false;
  422. // }
  423. });
  424. } else {
  425. switch ($scope.formData.url) {
  426. case "start":
  427. vm.model["initUser"] = $rootScope.user.id;
  428. if (vm.model.applicationForm && vm.model.applicationForm.sourceId && vm.model.applicationForm.sourceId != "") {
  429. if (vm.model.applicationForm.sourceId.incidentsign) {
  430. vm.model.applicationForm.sourceId = vm.model.applicationForm.sourceId.incidentsign;
  431. } else if (vm.model.applicationForm.sourceId.changesign) {
  432. vm.model.applicationForm.sourceId = vm.model.applicationForm.sourceId.changesign;
  433. }
  434. }
  435. if ($scope.formData.name == "applicationForm_subtract_add" || $scope.formData.name == "applicationForm_add") {
  436. if (vm.model.applicationForm.assets || ($scope.fileUploader && $scope.fileUploader.queue && $scope.fileUploader.queue.length > 0)) {
  437. // if($scope.formData.name == "applicationForm_subtract_add"){
  438. // }
  439. api_bpm_domain.start(pdKey, vm.model).then(function(response) {
  440. // console.log("response="+JSON.stringify(response));
  441. if (response) {
  442. // if (response.status && response.status != 400) {
  443. var resData = Restangular.stripRestangular(response);
  444. if (resData && pdKey == "bpm_applicationForm") {
  445. // if ($scope.fileUploader != null && $scope.fileUploader.getNotUploadedItems().length > 0) {
  446. $scope.fileUploader.onBeforeUploadItem = function(item) {
  447. angular.extend(item.headers, {
  448. 'access-token': $rootScope.getSession()["access-token"]
  449. });
  450. // item.url = up_down_file.saveAttachments('common/common/uploadAttachment', $scope.formData.model.bindType, resData.id).getRequestedUrl();
  451. item.url = up_down_file.saveAttachments('common/common/uploadAttachment', "applicationForm", resData.id).getRequestedUrl();
  452. item.formData.push({
  453. 'filename': item.file.name
  454. });
  455. };
  456. if ($scope.fileUploader.queue[0]) {
  457. $scope.fileUploader.queue[0].isSuccess = false;
  458. $scope.fileUploader.queue[0].isUploaded = false;
  459. $scope.fileUploader.uploadAll();
  460. }
  461. }
  462. SweetAlert.swal({
  463. title: "提交成功!",
  464. type: "success",
  465. confirmButtonColor: "#007AFF"
  466. }, function() {
  467. $rootScope.loading = false;
  468. $state.go($scope.formData.cancelUrl);
  469. });
  470. // }
  471. } else {
  472. SweetAlert.swal({
  473. title: "系统错误",
  474. text: "系统错误,请稍后重试!",
  475. type: "error",
  476. confirmButtonColor: "#DD6B55"
  477. });
  478. $scope.vaild = false;
  479. $rootScope.loading = false;
  480. $scope.ldloading[style.replace('-', '_')] = false;
  481. }
  482. });
  483. } else {
  484. if ($scope.formData.name == "applicationForm_subtract_add" && vm.model.type.id == 1 && vm.model.applicationForm.consumables) {
  485. api_bpm_domain.start(pdKey, vm.model).then(function(response) {
  486. // console.log("response="+JSON.stringify(response));
  487. if (response) {
  488. // if (response.status && response.status != 400) {
  489. var resData = Restangular.stripRestangular(response);
  490. if (resData && pdKey == "bpm_applicationForm") {
  491. // if ($scope.fileUploader != null && $scope.fileUploader.getNotUploadedItems().length > 0) {
  492. $scope.fileUploader.onBeforeUploadItem = function(item) {
  493. angular.extend(item.headers, {
  494. 'access-token': $rootScope.getSession()["access-token"]
  495. });
  496. // item.url = up_down_file.saveAttachments('common/common/uploadAttachment', $scope.formData.model.bindType, resData.id).getRequestedUrl();
  497. item.url = up_down_file.saveAttachments('common/common/uploadAttachment', "applicationForm", resData.id).getRequestedUrl();
  498. item.formData.push({
  499. 'filename': item.file.name
  500. });
  501. };
  502. if ($scope.fileUploader.queue[0]) {
  503. $scope.fileUploader.queue[0].isSuccess = false;
  504. $scope.fileUploader.queue[0].isUploaded = false;
  505. $scope.fileUploader.uploadAll();
  506. }
  507. }
  508. SweetAlert.swal({
  509. title: "提交成功!",
  510. type: "success",
  511. confirmButtonColor: "#007AFF"
  512. }, function() {
  513. $state.go($scope.formData.cancelUrl);
  514. });
  515. // }
  516. } else {
  517. SweetAlert.swal({
  518. title: "系统错误",
  519. text: "系统错误,请稍后重试!",
  520. type: "error",
  521. confirmButtonColor: "#DD6B55"
  522. });
  523. }
  524. $scope.vaild = false;
  525. $rootScope.loading = false;
  526. $scope.ldloading[style.replace('-', '_')] = false;
  527. });
  528. } else {
  529. SweetAlert.swal({
  530. title: "资产未填写",
  531. text: "请填写资产信息后再提交!",
  532. type: "error",
  533. confirmButtonColor: "#DD6B55"
  534. });
  535. $scope.vaild = false;
  536. $rootScope.loading = false;
  537. $scope.ldloading[style.replace('-', '_')] = false;
  538. }
  539. }
  540. } else {
  541. api_bpm_domain.start(pdKey, vm.model).then(function(response) {
  542. // console.log("response="+JSON.stringify(response));
  543. if (response) {
  544. // if (response.status && response.status != 400) {
  545. var resData = Restangular.stripRestangular(response);
  546. if (resData && pdKey == "bpm_applicationForm") {
  547. // if ($scope.fileUploader != null && $scope.fileUploader.getNotUploadedItems().length > 0) {
  548. $scope.fileUploader.onBeforeUploadItem = function(item) {
  549. angular.extend(item.headers, {
  550. 'access-token': $rootScope.getSession()["access-token"]
  551. });
  552. // item.url = up_down_file.saveAttachments('common/common/uploadAttachment', $scope.formData.model.bindType, resData.id).getRequestedUrl();
  553. item.url = up_down_file.saveAttachments('common/common/uploadAttachment', "applicationForm", resData.id).getRequestedUrl();
  554. item.formData.push({
  555. 'filename': item.file.name
  556. });
  557. };
  558. if ($scope.fileUploader.queue[0]) {
  559. $scope.fileUploader.queue[0].isSuccess = false;
  560. $scope.fileUploader.queue[0].isUploaded = false;
  561. $scope.fileUploader.uploadAll();
  562. }
  563. }
  564. SweetAlert.swal({
  565. title: "提交成功!",
  566. type: "success",
  567. confirmButtonColor: "#007AFF"
  568. }, function() {
  569. $state.go($scope.formData.cancelUrl);
  570. });
  571. // }
  572. } else {
  573. SweetAlert.swal({
  574. title: "系统错误",
  575. text: "系统错误,请稍后重试!",
  576. type: "error",
  577. confirmButtonColor: "#DD6B55"
  578. });
  579. }
  580. $scope.vaild = false;
  581. $rootScope.loading = false;
  582. $scope.ldloading[style.replace('-', '_')] = false;
  583. });
  584. }
  585. break;
  586. case "complete":
  587. if ($scope.formData.name == "applicationForm_subtract_operation") {
  588. if ((vm.model.applicationForm.type == 4 && vm.model.applicationForm.oldAssets) || vm.model.applicationForm.type != 4) {
  589. // if (vm.model.applicationForm.type == 4 && vm.model.applicationForm.oldAssets) {
  590. // angular.forEach(vm.model.applicationForm.oldAssets, function(item, index) {
  591. // if (item) {
  592. // }
  593. // })
  594. // }
  595. if (vm.model.applicationForm.assets) {
  596. var oldaset = true;
  597. angular.forEach(vm.model.applicationForm.assets, function(item, index) {
  598. if (item.props && item.props.hwnw_area && item.props.hwnw_place && item.props.hwnw_room && item.props.hwnwswt_jiguihao && item.props.hwnwswt_Ushu && item.props.snnum) {
  599. } else {
  600. oldaset = false
  601. }
  602. })
  603. if (oldaset) {
  604. api_bpm_domain.complete($stateParams.taskId, userId, vm.model).then(function(response) {
  605. if (response) {
  606. var resData = Restangular.stripRestangular(response);
  607. SweetAlert.swal({
  608. title: "提交成功!",
  609. type: "success",
  610. confirmButtonColor: "#007AFF"
  611. }, function() {
  612. // if($scope.uploader.getNotUploadedItems().length>0&&response.data.processInstanceId){
  613. // // $scope.uploader.options.url();
  614. // $scope.uploader.onBeforeUploadItem = function(item) {
  615. // item.url = api_bpm_domain.saveAttachments($stateParams.processInstanceId,$stateParams.taskId,$scope.user.id).getRequestedUrl();
  616. // console.info('onBeforeUploadItem', item);
  617. // };
  618. // $scope.uploader.uploadAll();
  619. // }
  620. $state.go($scope.formData.cancelUrl);
  621. });
  622. } else {
  623. SweetAlert.swal({
  624. title: "系统错误",
  625. text: "系统错误,请稍后重试!",
  626. type: "error",
  627. confirmButtonColor: "#DD6B55"
  628. });
  629. }
  630. $scope.vaild = false;
  631. $rootScope.loading = false;
  632. $scope.ldloading[style.replace('-', '_')] = false;
  633. });
  634. } else {
  635. SweetAlert.swal({
  636. title: "设备信息未填完整",
  637. text: "请补充完整设备信息后再提交!",
  638. type: "error",
  639. confirmButtonColor: "#DD6B55"
  640. });
  641. $scope.ldloading[style.replace('-', '_')] = false;
  642. }
  643. } else if (vm.model.applicationForm.type != 4) {
  644. api_bpm_domain.complete($stateParams.taskId, userId, vm.model).then(function(response) {
  645. if (response) {
  646. var resData = Restangular.stripRestangular(response);
  647. SweetAlert.swal({
  648. title: "提交成功!",
  649. type: "success",
  650. confirmButtonColor: "#007AFF"
  651. }, function() {
  652. $state.go($scope.formData.cancelUrl);
  653. });
  654. } else {
  655. SweetAlert.swal({
  656. title: "系统错误",
  657. text: "系统错误,请稍后重试!",
  658. type: "error",
  659. confirmButtonColor: "#DD6B55"
  660. });
  661. $scope.vaild = false;
  662. $rootScope.loading = false;
  663. $scope.ldloading[style.replace('-', '_')] = false;
  664. }
  665. $scope.vaild = false;
  666. $scope.ldloading[style.replace('-', '_')] = false;
  667. });
  668. }
  669. // api_bpm_domain.complete($stateParams.taskId, userId, vm.model).then(function(response) {
  670. // if (response) {
  671. // var resData = Restangular.stripRestangular(response);
  672. // SweetAlert.swal({
  673. // title: "提交成功!",
  674. // type: "success",
  675. // confirmButtonColor: "#007AFF"
  676. // }, function() {
  677. // // if($scope.uploader.getNotUploadedItems().length>0&&response.data.processInstanceId){
  678. // // // $scope.uploader.options.url();
  679. // // $scope.uploader.onBeforeUploadItem = function(item) {
  680. // // item.url = api_bpm_domain.saveAttachments($stateParams.processInstanceId,$stateParams.taskId,$scope.user.id).getRequestedUrl();
  681. // // console.info('onBeforeUploadItem', item);
  682. // // };
  683. // // $scope.uploader.uploadAll();
  684. // // }
  685. // $state.go($scope.formData.cancelUrl);
  686. // });
  687. // } else {
  688. // SweetAlert.swal({
  689. // title: "系统错误",
  690. // text: "系统错误,请稍后重试!",
  691. // type: "error",
  692. // confirmButtonColor: "#DD6B55"
  693. // });
  694. // }
  695. // $scope.ldloading[style.replace('-', '_')] = false;
  696. // });
  697. } else {
  698. SweetAlert.swal({
  699. title: "旧设备信息未填",
  700. text: "请填写旧设备信息后再提交!",
  701. type: "error",
  702. confirmButtonColor: "#DD6B55"
  703. });
  704. $scope.vaild = false;
  705. $rootScope.loading = false;
  706. $scope.ldloading[style.replace('-', '_')] = false;
  707. }
  708. } else {
  709. api_bpm_domain.complete($stateParams.taskId, userId, vm.model).then(function(response) {
  710. if (response) {
  711. var resData = Restangular.stripRestangular(response);
  712. SweetAlert.swal({
  713. title: "提交成功!",
  714. type: "success",
  715. confirmButtonColor: "#007AFF"
  716. }, function() {
  717. // if($scope.uploader.getNotUploadedItems().length>0&&response.data.processInstanceId){
  718. // // $scope.uploader.options.url();
  719. // $scope.uploader.onBeforeUploadItem = function(item) {
  720. // item.url = api_bpm_domain.saveAttachments($stateParams.processInstanceId,$stateParams.taskId,$scope.user.id).getRequestedUrl();
  721. // console.info('onBeforeUploadItem', item);
  722. // };
  723. // $scope.uploader.uploadAll();
  724. // }
  725. $state.go($scope.formData.cancelUrl);
  726. });
  727. } else {
  728. SweetAlert.swal({
  729. title: "系统错误",
  730. text: "系统错误,请稍后重试!",
  731. type: "error",
  732. confirmButtonColor: "#DD6B55"
  733. });
  734. }
  735. $scope.vaild = false;
  736. $rootScope.loading = false;
  737. $scope.ldloading[style.replace('-', '_')] = false;
  738. });
  739. }
  740. break;
  741. case "back":
  742. $state.go($scope.formData.cancelUrl);
  743. break;
  744. default:
  745. $scope.vaild = false;
  746. $rootScope.loading = false;
  747. $scope.ldloading[style.replace('-', '_')] = false;
  748. break;
  749. }
  750. }
  751. // var submitFunc = api_bpm_domain[$scope.formData.url]
  752. // if(anuglar.isFunction(submitFunc)){
  753. // submitFunc.apply(null, pdKey)
  754. // }
  755. }
  756. } else {
  757. // console.log(data)
  758. // angular.forEach(vm.form.$error.required, function(item){
  759. // var i=(item.$name).substring(item.$name.length-2)
  760. var i = Number((vm.form.$error.required[0].$name).split("_")[4]);
  761. // for(var i=0;i<vm.fields.length;i++){
  762. if (vm.fields[i].name == vm.form.$error.required[0].$name) {
  763. SweetAlert.swal({
  764. title: vm.fields[i].templateOptions.label + '未填',
  765. text: "请填写此项!",
  766. type: "error",
  767. confirmButtonColor: "#DD6B55"
  768. });
  769. }
  770. // }
  771. // angular.forEach(vm.fields,function(f){
  772. // if(f.name == item.$name){
  773. // f.validation.show = true;
  774. // SweetAlert.swal({
  775. // title: f.templateOptions.label+'未填',
  776. // text: "请填写此项!",
  777. // type: "error",
  778. // confirmButtonColor: "#DD6B55"
  779. // });
  780. // }
  781. // });
  782. // })
  783. }
  784. };
  785. $scope.vm = vm;
  786. function renderform() {
  787. api_bpm_domain.startformkey(pdKey).then(function(response) {
  788. if (response) {
  789. var myData = Restangular.stripRestangular(response);
  790. //myData.data = "arrangeform";
  791. api_configure_form.renderForm(myData.data, userId).then(function(responseData) {
  792. if (responseData) {
  793. var vmForm = Restangular.stripRestangular(responseData);
  794. if (vmForm) {
  795. decodeVMForm(vmForm);
  796. //console.log($rootScope);
  797. }
  798. }
  799. });
  800. }
  801. });
  802. }
  803. if (angular.isDefined($stateParams.taskId) && $stateParams.taskId != "") {
  804. var processInstanceId = $stateParams.processInstanceId;
  805. api_bpm_domain.taskformkey($stateParams.taskId).then(function(response) {
  806. if (response) {
  807. var myData = Restangular.stripRestangular(response); //console.log("myData>>>");console.log(myData);
  808. api_configure_form.renderForm(myData.data, userId, processInstanceId).then(function(responseData) {
  809. if (responseData) { //console.log("responseData>>>");//console.log(responseData);
  810. var vmForm = Restangular.stripRestangular(responseData);
  811. if (vmForm) { //console.log("vmForm>>>");//console.log(vmForm);
  812. decodeVMForm(vmForm);
  813. //console.log($scope);
  814. }
  815. }
  816. });
  817. }
  818. })
  819. } else {
  820. if (pdKey != "") {
  821. renderform();
  822. } else {
  823. //
  824. if (angular.isDefined(fieldsWatch) && fieldsWatch.length > 0) {
  825. var vmForm = {
  826. fields: fieldsWatch,
  827. model: modelWatch
  828. }
  829. angular.extend(vmForm, formWatch);
  830. //$scope.formData = vmForm;
  831. if (vmForm) {
  832. decodeVMForm(vmForm);
  833. }
  834. } else { //for form
  835. //TODO
  836. //测试数据 开始
  837. var testJson = {
  838. fields: [{
  839. key: 'formtitle',
  840. type: 'ui-title',
  841. noFormControl: true,
  842. templateOptions: {
  843. label: 'title is ',
  844. placeholder: 'Formly is terrific!'
  845. }
  846. },
  847. {
  848. key: 'b',
  849. type: 'ui-cmdbtab',
  850. className: 'col-xs-12',
  851. templateOptions: {
  852. type: 'input',
  853. label: 'input a',
  854. placeholder: '12',
  855. rBtn: {
  856. icon: 'fa fa-phone',
  857. onClick: function(val, opt, el, ev, model) { alert(val); }
  858. },
  859. lAddon: '<i class="fa fa-phone"/>'
  860. }
  861. }, {
  862. key: 'b',
  863. type: 'ui-cmdbinformation',
  864. className: 'col-xs-4',
  865. templateOptions: {
  866. type: 'input',
  867. label: 'input a',
  868. placeholder: '12',
  869. rBtn: {
  870. icon: 'fa fa-phone',
  871. onClick: function(val, opt, el, ev, model) { alert(val); }
  872. },
  873. lAddon: '<i class="fa fa-phone"/>'
  874. }
  875. }, {
  876. key: 'b',
  877. type: 'ui-cmdbtype',
  878. className: 'col-xs-4',
  879. templateOptions: {
  880. type: 'input',
  881. label: 'input a',
  882. placeholder: '12',
  883. rBtn: {
  884. icon: 'fa fa-phone',
  885. onClick: function(val, opt, el, ev, model) { alert(val); }
  886. },
  887. lAddon: '<i class="fa fa-phone"/>'
  888. }
  889. }, {
  890. key: 'b',
  891. type: 'ui-form',
  892. className: 'col-xs-8',
  893. templateOptions: {
  894. type: 'input',
  895. label: 'input a',
  896. placeholder: '12',
  897. extjson: { "templateOptions": { "pkey": "cmdb", "isMultiSelect": false, "selLeafs": true, "refreshData": "(function(APIService){return APIService.fetchDataList('ciclassify',{'idx':0,'sum':1000});})", "APIService": "api_configure_data", "labelProp": "label", "optionsDataKey": "list", "refreshDelay": 1000, "onDataCallback": "(function(item,selectItems,options, field, model){var tempclassify = item.prefix.toLowerCase() + item.sign; $scope.cifilter_classic = tempclassify;$scope.templateitem = item;api_configure_form.renderTabForm(tempclassify).then(function(data) {var myData = Restangular.stripRestangular(data);$scope.propTypeOptions = myData;$scope.templateProps = myData;$scope.vm.tabs = myData;vm.model = {};}); })" }, "expressionProperties": { "templateOptions.required": "'(model.incident. category.id)'" } },
  898. rBtn: {
  899. icon: 'fa fa-phone',
  900. onClick: function(val, opt, el, ev, model) { alert(val); }
  901. },
  902. lAddon: '<i class="fa fa-phone"/>'
  903. }
  904. },
  905. ],
  906. model: {
  907. username: "robin lau",
  908. password: "123456",
  909. change: { source: { id: 5 } },
  910. chkme: false,
  911. start_code: 0,
  912. arrayData: [{ "id": 13, "dept": "村镇银行管理部" }, { "id": 14, "dept": "电子银行部" }],
  913. formtitle: "Hey!I am title value!",
  914. name: {
  915. first: "robin",
  916. last: "lau"
  917. },
  918. multiselectItem: []
  919. //date:"2015-09-15 00:00:00"
  920. }
  921. };
  922. setTimeout(function() {
  923. decodeVMForm(testJson);
  924. $scope.$apply();
  925. }, 500);
  926. //测试数据结束
  927. }
  928. }
  929. console.log("end decode");
  930. }
  931. }
  932. ]);