No Description

addOrEditOrder.js 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. /**
  2. * 工单增加或编辑
  3. * */
  4. var EnclosureList = []; //保存附件的数组
  5. var uploader; //上传实例
  6. var limitNum = 6; //限制数量
  7. $(function() {
  8. var pro_Id = helper.request.queryString("edit_id");
  9. autosize($('textarea'));
  10. if(pro_Id) { //修改
  11. $.when(helper.getDropList.getlistDropByDic($('#order_source'), 'GDLY'),
  12. helper.getDropList.getlistDropByDic($('#order_type'), 'GDLX'),
  13. helper.getDropList.getProLocation($('#order_province'), $('#order_city')))
  14. .then(function() {
  15. getProject(pro_Id);
  16. });
  17. } else {
  18. uploaderImages(); //附件上传
  19. //获取工单来源
  20. helper.getDropList.getlistDropByDic($('#order_source'), 'GDLY').then(function() {
  21. $('#order_source').selectpicker('val', '5b9f254a94eefd1bcb989b41').trigger('change');
  22. });
  23. //获取工单类型
  24. helper.getDropList.getlistDropByDic($('#order_type'), 'GDLX');
  25. //省市二级联动
  26. helper.getDropList.getProLocation($('#order_province'), $('#order_city'));
  27. }
  28. //添加编辑保存按钮点击
  29. $('#pro_save').on('click', saveProject);
  30. });
  31. //获取详情
  32. function getProject(ids) {
  33. $.getJSON(huayi.config.callcenter_url + "callcenterapi/api/BusOrder/getsingle", {
  34. ordercode: ids,//是 string 工单编号
  35. }, function(data) {
  36. if(data.state == "success") {
  37. var res = data.data.model;
  38. $('#order_source').selectpicker('val', res.sourceid).trigger('change'); //来源
  39. $('#order_type').selectpicker('val', res.typeid).trigger('change');//类型
  40. $('#order_name').val(res.name); //姓名
  41. $('#order_tel').val(res.phone); //电话
  42. $('#order_sex').find('input[type="radio"][value="'+ res.sex +'"]').prop('checked', true); //性别
  43. $('#order_province').selectpicker('val', res.province).trigger('change'); //所在省
  44. $('#order_city').selectpicker('val', res.city).trigger('change'); //所在市
  45. $('#order_address').val(res.address); //具体地址
  46. $('#order_content').val(helper.filter.content(res.content)); //内容
  47. EnclosureList = res.files;
  48. EnclosureList = EnclosureList == null ? [] : EnclosureList;
  49. limitNum -= EnclosureList.length;
  50. uploaderImages(); //附件上传
  51. if(EnclosureList.length > 0) {
  52. $('#fileNum').text(EnclosureList.length);
  53. var $list = $("#fileList");
  54. $.each(EnclosureList, function(i, v) {
  55. if(v.filesmallurl) {
  56. //原来的图片
  57. var $li = $(
  58. '<li><span class="img_mask"><i class="img_del"></i></span>' +
  59. '<img src="' + v.filesmallurl + '" title="原来的图片"/>' +
  60. '<span class="file_name">' + v.filename + '</span>' +
  61. '</li>'
  62. );
  63. $list.append($li);
  64. } else {
  65. var $liFile = $(
  66. '<li><span class="img_mask"><i class="img_del"></i></span>' +
  67. '<div class="noThumb" title="原来的文件"><i class="glyphicon glyphicon-paperclip"></i><p>无法预览</p></div>' +
  68. '<span class="file_name">' + v.filename + '</span>' +
  69. '</li>'
  70. );
  71. $list.append($liFile);
  72. }
  73. });
  74. $list.find('li').off('click');
  75. $list.find('li').on('click', '.img_del', function() {
  76. $(this).parent().parent().remove();
  77. var itemFileName = $(this).parent().parent().find('.file_name').text();
  78. $.each(EnclosureList, function(i, v) {
  79. if(v && v.filename == itemFileName) {
  80. EnclosureList.splice(i, 1);
  81. }
  82. });
  83. $('#fileNum').text(EnclosureList.length);
  84. limitNum = 6 - EnclosureList.length;
  85. uploaderImages();
  86. });
  87. }
  88. }
  89. });
  90. }
  91. //保存
  92. function saveProject() {
  93. var pro_Id = helper.request.queryString("edit_id");
  94. var wUrl, loadIndex;
  95. if(!regexs.userNameReg.test($.trim($('#order_name').val()))) {
  96. layer.confirm('请输入有效的客户姓名(2-20位汉字可以包含·•)!', {
  97. icon: 2,
  98. btn: ['确定']
  99. });
  100. return;
  101. }
  102. if(!regexs.phone.test($.trim($('#order_tel').val()))) {
  103. layer.confirm('请输入正确的电话!', {
  104. icon: 2,
  105. btn: ['确定']
  106. });
  107. return;
  108. }
  109. if(pro_Id) {
  110. wURL = "callcenterapi/api/BusOrder/update";
  111. } else {
  112. wURL = "callcenterapi/api/BusOrder/add";
  113. }
  114. $.ajax({
  115. type: 'post',
  116. url: huayi.config.callcenter_url + wURL,
  117. dataType: 'json',
  118. async: true,
  119. beforeSend: function() { //触发ajax请求开始时执行
  120. $('#pro_save').attr("disabled", true);
  121. $('#pro_save').text('保存中...');
  122. loadIndex = layer.load();
  123. },
  124. data: {
  125. //unique_id: CallID, // 否 string callid
  126. //leaverecordid 否 string 语音留言id
  127. //callrecordid: , // 否 string 通话记录id
  128. ordercode: pro_Id,
  129. sourceid: $('#order_source').val(), // 否 string 来源id
  130. typeid: $('#order_type').val(), // 否 string 类型id
  131. name: $('#order_name').val(), // 否 string 姓名
  132. phone: $('#order_tel').val(), // 是 string 号码
  133. sex: $('#order_sex').find('input[type="radio"]:checked').val(), // 否 string 性别
  134. province: $('#order_province').val(), // 否 string 省code
  135. city: $('#order_city').val(), // 否 string 市code
  136. address: $('#order_address').val(), // 否 string 地址
  137. // deptid: $('#order_dept').attr('data-id'), // 否 string 部门id
  138. content: helper.filter.delHtmlTag($('#order_content').val()), // 是 string 工单内容
  139. files: EnclosureList, //否 list 附件json
  140. //title 是 string 标题
  141. },
  142. success: function(data) {
  143. layer.close(loadIndex);
  144. if(data.state == "success") {
  145. var index = parent.layer.getFrameIndex(window.name);
  146. parent.layer.close(index);
  147. parent.$('#table_all').bootstrapTable('refresh');
  148. parent.layer.msg("保存成功");
  149. } else {
  150. $('#pro_save').attr("disabled", false);
  151. $('#pro_save').text('保存');
  152. }
  153. },
  154. error: function(textStatus) {
  155. layer.close(loadIndex);
  156. layer.confirm('网络繁忙,请稍后再试...', {
  157. icon: 7,
  158. closeBtn: 0,
  159. btn: ['确定'] //按钮
  160. });
  161. $('#pro_save').attr("disabled", false);
  162. $('#pro_save').text('保存');
  163. },
  164. complete: function(XMLHttpRequest, textStatus) {
  165. layer.close(loadIndex);
  166. if(textStatus == 'timeout') {
  167. var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");
  168. xmlhttp.abort();
  169. layer.confirm('网络超时,请稍后再试...', {
  170. icon: 7,
  171. closeBtn: 0,
  172. btn: ['确定'] //按钮
  173. });    
  174. }
  175. $('#pro_save').attr("disabled", false);
  176. $('#pro_save').text('保存');
  177. },
  178. });
  179. }
  180. //上传图片
  181. function uploaderImages() {
  182. if(uploader) {
  183. uploader.destroy();
  184. }
  185. uploader = WebUploader.create({
  186. auto: true, // 选完文件后,是否自动上传
  187. swf: '../plugins/webuploader/Uploader.swf', // swf文件路径
  188. server: huayi.config.callcenter_url + "fileserverapi/Api/Upload", // 文件接收服务端
  189. //server: "http://192.168.1.21:28270/api/upload", // 本地测试
  190. pick: '#imgPicker', // 选择文件的按钮。可选
  191. formData: {
  192. uploadtype: 'equipRunPlan'
  193. },
  194. // 只允许选择图片文件。
  195. accept: {
  196. // title: 'Images',
  197. // extensions: 'gif,jpg,jpeg,bmp,png',
  198. // mimeTypes: 'image/*'
  199. },
  200. compress: false, //webuploader默认压缩图片,设置compress:false,可以按照原始比例上传图片
  201. //fileVal: "upFile",//设置文件上传域的name。
  202. threads: limitNum, //上传并发数。允许同时最大上传进程数,为了保证文件上传顺序
  203. fileNumLimit: limitNum,
  204. fileSizeLimit: 30 * 1024 * 1024, // 30 M
  205. fileSingleSizeLimit: 5 * 1024 * 1024 // 5 M
  206. });
  207. uploader.on('fileQueued', function(file) {
  208. var $list = $("#fileList"),
  209. $li = $(
  210. '<li id="' + file.id + '"><span class="img_mask"><i class="img_del"></i></span>' +
  211. '<img/>' +
  212. '<span class="img_state"><i></i></span>' +
  213. '<span class="file_name">' + file.name + '</span>' +
  214. '</li>'
  215. ),
  216. $img = $li.find('img');
  217. // $list为容器jQuery实例
  218. $list.append($li);
  219. // 创建缩略图
  220. uploader.makeThumb(file, function(error, src) {
  221. if(error) {
  222. $img.replaceWith('<div class="noThumb"><i class="glyphicon glyphicon-paperclip"></i><p>无法预览</p></div>');
  223. return;
  224. }
  225. $img.attr('src', src);
  226. }, 109, 109); //109*109为缩略图尺寸
  227. //绑定删除
  228. $('#' + file.id).on('click', '.img_del', function() {
  229. uploader.removeFile(file);
  230. var $fileLi = $('#' + file.id);
  231. $fileLi.off().find('.img_del').off().end().remove();
  232. var itemFileName = $(this).parent().parent().find('.file_name').text();
  233. $.each(EnclosureList, function(i, v) {
  234. if(v && v.filename == itemFileName) {
  235. EnclosureList.splice(i, 1);
  236. helper.methods.delImgs(v.filesmallurl, v.fileurl);
  237. }
  238. });
  239. // var indexDel = $.inArray(itemFileName, EnclosureList);
  240. // if(indexDel > -1) {
  241. // EnclosureList.splice(indexDel, 1);
  242. // }
  243. $('#fileNum').text(EnclosureList.length);
  244. });
  245. });
  246. // 文件上传过程中创建进度条实时显示。
  247. uploader.on('uploadProgress', function(file, percentage) {
  248. var $li = $('#' + file.id),
  249. $percent = $li.find('.progress span');
  250. // 避免重复创建
  251. if(!$percent.length) {
  252. $percent = $('<div class="progress" style="">' +
  253. '<span class="text">0%</span>' +
  254. '<span class="percentage"></span>' +
  255. '</div>')
  256. .appendTo($li)
  257. .find('span');
  258. }
  259. $percent.eq(0).text(Math.round(percentage * 100) + '%');
  260. $percent.eq(1).css('width', Math.round(percentage * 100) + '%');
  261. });
  262. // 文件上传成功,给item添加成功class, 用样式标记上传成功。
  263. uploader.on('uploadSuccess', function(file, res) {
  264. EnclosureList.push(res.data[0]);
  265. $('#fileNum').text(EnclosureList.length);
  266. $('#' + file.id).addClass('upload-state-done');
  267. });
  268. // 文件上传失败,显示上传出错。
  269. uploader.on('uploadError', function(file) {
  270. var $li = $('#' + file.id),
  271. $error = $li.find('div.error');
  272. // 避免重复创建
  273. if(!$error.length) {
  274. $error = $('<div class="error"></div>').appendTo($li);
  275. }
  276. $error.text('上传失败');
  277. });
  278. // 完成上传完了,成功或者失败,先删除进度条。
  279. uploader.on('uploadComplete', function(file) {
  280. $('#' + file.id).find('.progress').remove();
  281. });
  282. uploader.onError = function(code) {
  283. //console.log('Error:' + code);
  284. switch(code) {
  285. case "Q_EXCEED_NUM_LIMIT":
  286. layer.msg('只能上传六个文件。');
  287. break;
  288. case "Q_TYPE_DENIED":
  289. layer.msg('图片类型不正确。');
  290. break;
  291. case "F_DUPLICATE":
  292. layer.msg('该文件已上传,请选择其它文件。');
  293. break;
  294. case "F_EXCEED_SIZE":
  295. layer.msg('单文件大小不能超过5M。');
  296. break;
  297. case "Q_EXCEED_SIZE_LIMIT":
  298. layer.msg('总文件大小不能超过30M。');
  299. break;
  300. default:
  301. break;
  302. }
  303. };
  304. }
  305. //巡检频率 执行间隔的change
  306. function planintervalChange() {
  307. //每天,每2天,每3天,每4天,每5天,每6天,每7天,
  308. var checkedVal = $(this).val();
  309. if(!checkedVal) {
  310. $('#SStimes').hide();
  311. $('#plantimesCoont').hide();
  312. $('#msg_tips').hide(); //提示信息
  313. }
  314. if(Number(checkedVal) > 1) {
  315. $('#plantimes').selectpicker('val', '1').trigger('change');
  316. $('#plantimes').prop('disabled', true);
  317. $('#plantimes').selectpicker('refresh');
  318. } else {
  319. $('#plantimes').selectpicker('val', '1').trigger('change');
  320. $('#plantimes').prop('disabled', false);
  321. $('#plantimes').selectpicker('refresh');
  322. }
  323. }
  324. //巡检频率 执行频率的change
  325. function plantimesChange() {
  326. //1-12次
  327. if(!$(this).val()) {
  328. $('#SStimes').hide();
  329. $('#plantimesCoont').hide();
  330. $('#msg_tips').hide(); //提示信息
  331. }
  332. if(Number($('#planinterval').val()) === 1) {
  333. $('#SStimes').hide();
  334. if($(this).val()) {
  335. $('#plantimesCoont').show();
  336. getExecutionTime($(this).val());
  337. $('#msg_tips').show(); //提示信息
  338. $('#msg_tips').find('.text-warning').text('提示:每天执行' + $(this).val() + '次,明日00:00:00开始执行计划!');
  339. }
  340. }
  341. if(Number($('#planinterval').val()) > 1) {
  342. $('#plantimesCoont').hide();
  343. $('#SStimes').show();
  344. getDaySelect(Number($('#planinterval').val()), $('#sstart_select')); //开始时间
  345. getDaySelect(Number($('#planinterval').val()), $('#sstop_select')); //结束时间
  346. $('#sstop_select').selectpicker('val', $('#sstop_select').find('option').length).trigger('change');
  347. $('#msg_tips').show(); //提示信息
  348. getMsgTips();
  349. }
  350. }
  351. //添加自定义字段
  352. function btn_add() {
  353. var html = '<div class="custom_item col-md-5" data-ide="identifier_' + indexNum + '">' +
  354. '<div class="form-group">' +
  355. '<input type="text" id="fieldname_' + indexNum + '" class="form-control" placeholder="请输入字段名" />' +
  356. '</div>' +
  357. // '<div class="form-group">' +
  358. // '<input type="text" id="fieldvalue_' + indexNum + '" class="form-control" placeholder="请输入字段值" />' +
  359. // '</div>' +
  360. '<button class="form-control btn btn-default" onclick="btn_delete($(this))">删除</button>' +
  361. '</div>';
  362. $('#custom').prepend(html);
  363. indexNum++;
  364. }
  365. //删除自定义字段
  366. function btn_delete(el) {
  367. el.parent().remove();
  368. }
  369. //获取所添加字段的值
  370. function getFields() {
  371. var extensionlist = []; //自定义字段的数组[{“name”:”字段名”,”value”:”字段值”}]
  372. var custom_items = $('#custom').find('.custom_item');
  373. $.each(custom_items, function(i, v) {
  374. var obj = {};
  375. var fieldname = $(v).find('input[id*="fieldname_"]').val();
  376. if($.trim(fieldname)) {
  377. obj.name = fieldname;
  378. obj.value = '';
  379. extensionlist.push(obj);
  380. }
  381. });
  382. return extensionlist;
  383. }
  384. /**
  385. * 获取执行时间
  386. * t 执行的次数
  387. */
  388. function getExecutionTime(t) {
  389. $('#plantimesCoont').empty();
  390. var timeArrs = setDefaultTime(Number(t));
  391. for(var i = 0; i < t; i++) {
  392. var m = i + 1;
  393. $('#plantimesCoont').append('<li class="form-group">' +
  394. '<label for="executionTime_' + m + '" class="col-md-2 text-right"><b class="text_require">*</b>执行时间(' + m + ')</label>' +
  395. '<div class="col-md-10">' +
  396. '<input id="executionTime_' + m + '" class="form-control" type="text" placeholder="请选择执行时间(' + m + ')" />' +
  397. '</div>' +
  398. '</li>');
  399. laydate.render({
  400. elem: '#executionTime_' + m,
  401. range: '~',
  402. type: 'time',
  403. btns: ['now', 'confirm'],
  404. theme: '#249fea',
  405. });
  406. $('#executionTime_' + m).val(timeArrs[i]);
  407. }
  408. }
  409. /**
  410. * 设置默认的执行时间
  411. * t 执行的次数
  412. * 返回一个 时间的数组如["00:00:00 ~ 11:59:59", "12:00:00 ~ 23:59:59"]
  413. */
  414. function setDefaultTime(t) {
  415. var timesArr = [];
  416. var m0, m1, m2;
  417. for(var i = 0; i < t; i++) {
  418. m0 = parseInt(24 / t) - 1;
  419. m1 = parseInt(24 / t) * i;
  420. m2 = parseInt(24 / t) * (i + 1) - 1;
  421. m0 = m0 < 10 ? '0' + m0 : m0;
  422. m1 = m1 < 10 ? '0' + m1 : m1;
  423. m2 = m2 < 10 ? '0' + m2 : m2;
  424. if(i === 0) {
  425. timesArr.push('00:00:00 ~ ' + m0 + ':59:59');
  426. } else if(i < (t - 1)) {
  427. timesArr.push(m1 + ':00:00 ~ ' + m2 + ':59:59');
  428. } else if(i === (t - 1)) {
  429. if(24 % t != 0) {
  430. timesArr.push(m1 + ':00:00 ~ 23:59:59');
  431. } else {
  432. timesArr.push(m1 + ':00:00 ~ ' + m2 + ':59:59');
  433. }
  434. }
  435. }
  436. return timesArr;
  437. }
  438. /**
  439. * 获取 第几天的下拉;
  440. * t 执行的间隔
  441. * el 元素
  442. */
  443. function getDaySelect(t, el) {
  444. var weekArrs = ['一', '二', '三', '四', '五', '六', '七'];
  445. el.empty();
  446. for(var i = 0; i < t; i++) {
  447. el.append('<option value="' + (i + 1) + '">第' + weekArrs[i] + '天</option>');
  448. }
  449. el.selectpicker('refresh');
  450. }
  451. /**
  452. * 获取提示信息
  453. * v1 开始时间
  454. * v2 结束时间
  455. */
  456. function getMsgTips(v1, v2) {
  457. if(v1 && v1.type === "change") {
  458. v1 = $('#sstart_time').val();
  459. }
  460. v1 = (v1 === '' || v1 === undefined) ? $('#sstart_time').val() : v1;
  461. v2 = (v2 === '' || v2 === undefined) ? $('#sstop_time').val() : v2;
  462. $('#msg_tips').find('.text-warning').text('提示:' + $('#planinterval').find('option:selected').text() +
  463. '一次,执行时间' + $('#sstart_select').find('option:selected').text() +
  464. v1 + '至' +
  465. $('#sstop_select').find('option:selected').text() +
  466. v2 + ',明日00:00:00开始执行计划!');
  467. }
  468. /**
  469. *获取自定义时间段
  470. */
  471. function getExtensiontime() {
  472. var arr = [];
  473. if(Number($('#planinterval').val()) === 1) {
  474. var timeEls = $('#plantimesCoont').find('input[id*="executionTime_"]');
  475. for(var i = 0, len = timeEls.length; i < len; i++) {
  476. arr.push({
  477. "startdate": "1",
  478. "starttime": $(timeEls[i]).val() && $(timeEls[i]).val().split(' ~ ')[0],
  479. "enddate": "1",
  480. "endtime": $(timeEls[i]).val() && $(timeEls[i]).val().split(' ~ ')[1]
  481. });
  482. }
  483. } else if(Number($('#planinterval').val()) > 1) {
  484. arr.push({
  485. "startdate": $('#sstart_select').val(),
  486. "starttime": $('#sstart_time').val(),
  487. "enddate": $('#sstop_select').val(),
  488. "endtime": $('#sstop_time').val()
  489. });
  490. }
  491. return arr;
  492. }