oaEdit.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. mbui.define(['tool','layer','picker','userPicker'],function(exports){
  2. let layer = mbui.layer,tool=mbui.tool,picker = mbui.picker,adminpicker = mbui.userPicker;
  3. const opts={
  4. "box":'editBox',//编辑容器id
  5. "id":0,//编辑容器id
  6. "url": '',
  7. "radio":{},
  8. "checbox":{},
  9. "menu":{},
  10. "callback":function(e){
  11. layer.msg(e.msg);
  12. if(e.code==0){
  13. setTimeout(function(){
  14. location.reload();
  15. },1000)
  16. }
  17. }
  18. };
  19. const obj = {
  20. //短文本
  21. text: function (that) {
  22. let me = this;
  23. let field = that.data('field');
  24. let text = that.data('text');
  25. text = typeof(text) == "undefined" ? that.text():text;
  26. layer.open({
  27. type: 1,
  28. title: '请输入内容',
  29. area: ['360px', '158px'],
  30. content: '<div><input class="mbui-input" id="oaEditText" value="' + text + '"/></div>',
  31. btnAlign: 'c',
  32. btn: ['保存','取消'],
  33. yes: function () {
  34. let val = $("#oaEditText").val();
  35. if (val != '') {
  36. let postData = {'id':me.sets.id,'scene':'oaedit'};
  37. postData[field] = val;
  38. tool.post(me.sets.url,postData,me.sets.callback);
  39. } else {
  40. layer.msg('请输入内容');
  41. }
  42. }
  43. })
  44. },
  45. //长文本
  46. textarea: function (that) {
  47. let me = this;
  48. let field = that.data('field');
  49. let target = that.data('target');
  50. let textarea='';
  51. if (typeof(target) == "undefined") {
  52. textarea = that.text();
  53. }
  54. else{
  55. textarea = $('#'+target).text();
  56. }
  57. layer.open({
  58. type: 1,
  59. title: '请输入内容',
  60. area: ['600px', '320px'],
  61. content: '<div style="padding:5px;"><textarea class="mbui-textarea" id="oaEditTextarea" style="width: 100%; height: 200px;">' + textarea + '</textarea></div>',
  62. btnAlign: 'c',
  63. btn: ['保存','取消'],
  64. yes: function () {
  65. let val = $("#oaEditTextarea").val();
  66. if (val != '') {
  67. let postData = {'id':me.sets.id,'scene':'oaedit'};
  68. postData[field] = val;
  69. tool.post(me.sets.url,postData,me.sets.callback);
  70. } else {
  71. layer.msg('请输入内容');
  72. }
  73. }
  74. })
  75. },
  76. //数字
  77. num: function (that) {
  78. let me = this;
  79. let field = that.data('field');
  80. let text = that.data('text');
  81. text = typeof(text) == "undefined" ? that.text():text;
  82. let min = that.data('min');
  83. min = typeof(min) == "undefined" ? 0:min;
  84. let max = that.data('max');
  85. max = typeof(max) == "undefined" ? 100:max;
  86. layer.open({
  87. type: 1,
  88. title: '请输入数字',
  89. area: ['200px', '158px'],
  90. content: '<div style="padding:5px;"><input class="mbui-input" oninput="this.value = this.value.replace(/[^0-9]/g,\'\')" id="oaEditNum" value="' + text + '"/></div>',
  91. btnAlign: 'c',
  92. btn: ['保存','取消'],
  93. yes: function () {
  94. let val = $("#oaEditNum").val();
  95. if (val != '') {
  96. if(min !='' && val<min){
  97. layer.msg('输入数字不能小于'+min);
  98. return false;
  99. }
  100. if(max !='' && val>max){
  101. layer.msg('输入数字不能大于'+max);
  102. return false;
  103. }
  104. let postData = {'id':me.sets.id,'scene':'oaedit'};
  105. postData[field] = val;
  106. tool.post(me.sets.url,postData,me.sets.callback);
  107. } else {
  108. layer.msg('请输入内容');
  109. }
  110. }
  111. })
  112. },
  113. oadate: function (that) {
  114. let me = this;
  115. let type = that.data('type');
  116. let min = that.data('min');
  117. let max = that.data('max');
  118. if (typeof(type) == "undefined" || type === '') {
  119. type = 'date';
  120. }
  121. if (typeof(min) == "undefined" || min === '' || min === 1) {
  122. min = '1970-01-01 00:00:00';
  123. }
  124. if (typeof(max) == "undefined" || max === '' || max === 100) {
  125. max = '2099-12-31 23:59:59';
  126. }
  127. let field = that.data('field');
  128. let text = that.data('text');
  129. text = typeof(text) == "undefined" ? that.text():text;
  130. picker.init({
  131. elem: that, // 绑定元素
  132. options: type, // 设置为日期选择器(日期选择器可设置:year、month、date、time、timesecond、datetime、datetimesecond)
  133. onSuccess: function(index, elem){ // 渲染成功回调
  134. picker.show(index);
  135. },
  136. onClear: function(index){ // 停止滚动触发:index是当前对象的标识, i 是当前滑动的对象,result是前面的值集
  137. let postData = {'id':me.sets.id,'scene':'oaedit'};
  138. postData[field] = 0;
  139. tool.post(me.sets.url,postData,me.sets.callback);
  140. picker.remove(index);
  141. },
  142. onConfirm: function(index, val, result){ // 点击确认回调
  143. let postData = {'id':me.sets.id,'scene':'oaedit'};
  144. postData[field] = val;
  145. tool.post(me.sets.url,postData,me.sets.callback);
  146. picker.remove(index);
  147. },
  148. onCancel: function(index){ // 点击取消回调
  149. picker.remove(index);
  150. },
  151. onShade: function(index){ // 点击遮罩回调
  152. picker.remove(index);
  153. },
  154. minDate:min,
  155. maxDate:max
  156. })
  157. },
  158. adminpicker: function (that){
  159. let me = this;
  160. let field = that.data('field');
  161. let ids = that.data('ids');
  162. let names = that.data('names');
  163. let min = that.data('min');
  164. min = typeof(min) == "undefined" ? 1:min;
  165. adminpicker({
  166. type:min,
  167. callback:function(ids,names,dids,departments){
  168. let postData = {'id':me.sets.id,'scene':'oaedit'};
  169. postData[field] = ids.join(',');
  170. tool.post(me.sets.url,postData,me.sets.callback);
  171. }
  172. });
  173. },
  174. picker:function(that){
  175. let me = this;
  176. let field = that.data('field');
  177. let api = that.data('api');
  178. if(typeof(api) == "undefined"){
  179. layer.msg('相关API参数未完善');
  180. return false;
  181. }
  182. let min = that.data('min');
  183. min = typeof(min) == "undefined" ? 1:min;
  184. let loading;
  185. $.ajax({
  186. url: api,
  187. type: 'get',
  188. beforeSend:function(){
  189. loading = layer.loading('加载中...');
  190. },
  191. success: function (e) {
  192. if (e.code == 0) {
  193. data = e.data;
  194. if(min==1){
  195. me.radio(that,data);
  196. }
  197. else{
  198. me.checkbox(that,data);
  199. }
  200. }
  201. },
  202. complete:function(){
  203. layer.close(loading);
  204. }
  205. })
  206. },
  207. radio:function(that,data){
  208. let me = this;
  209. let field = that.data('field');
  210. let text = that.data('text');
  211. text = typeof(text) == "undefined" ? that.text():text;
  212. let arrayidx = that.data('array');
  213. if(typeof(arrayidx) != "undefined" && arrayidx!=''){
  214. data = me.sets.radio[arrayidx];
  215. }
  216. if (data.length == 0) {
  217. layer.msg('无可选择的内容');
  218. return false;
  219. }
  220. let len = data.length;
  221. let editHtml = '<div class="mbui-layer-radio">'
  222. while (len--) {
  223. if (data[len].id == text) {
  224. editHtml+='<div class="mbui-radio-checkbox"><label for="list_radio_'+data[len].id+'">'+data[len].title+'<input class="mbui-radio" type="radio" name="layer_radio" checked value="'+data[len].id+'" id="list_radio_'+data[len].id+'" /></label></div>';
  225. }
  226. else{
  227. editHtml+='<div class="mbui-radio-checkbox"><label for="list_radio_'+data[len].id+'">'+data[len].title+'<input class="mbui-radio" type="radio" name="layer_radio" value="'+data[len].id+'" id="list_radio_'+data[len].id+'" /></label></div>';
  228. }
  229. }
  230. editHtml+='</div>';
  231. layer.open({
  232. type:5,
  233. content:editHtml,
  234. btn:['确定','取消'],
  235. yes:function(index){
  236. let val = $('input[name="layer_radio"]:checked').val();
  237. let postData = {'id':me.sets.id,'scene':'oaedit'};
  238. postData[field] = val;
  239. tool.post(me.sets.url,postData,me.sets.callback);
  240. }
  241. });
  242. },
  243. checkbox:function(that){
  244. let me = this;
  245. let field = that.data('field');
  246. let text = that.data('text');
  247. text = typeof(text) == "undefined" ? that.text():text;
  248. let selected_array = text+''.split(',');
  249. let arrayidx = that.data('array');
  250. let data = me.sets.checkbox[arrayidx];
  251. if (data.length == 0) {
  252. layer.msg('无可选择的内容');
  253. return false;
  254. }
  255. let len = data.length;
  256. let editHtml = '<div class="mbui-layer-checkbox">'
  257. while (len--) {
  258. if (selected_array.includes(data[len].id)) {
  259. editHtml+='<div class="mbui-radio-checkbox"><label for="list_checkbox_'+data[len].id+'">'+data[len].title+'<input class="mbui-checkbox" type="checkbox" name="layer_checkbox" checked value="'+data[len].id+'" id="list_radio_'+data[len].id+'" /></label></div>';
  260. }
  261. else{
  262. editHtml+='<div class="mbui-radio-checkbox"><label for="list_checkbox_'+data[len].id+'">'+data[len].title+'<input class="mbui-checkbox" type="checkbox" name="layer_checkbox" value="'+data[len].id+'" id="list_checkbox_'+data[len].id+'" /></label></div>';
  263. }
  264. }
  265. editHtml+='</div>';
  266. layer.open({
  267. type:5,
  268. content:editHtml,
  269. btn:['确定','取消'],
  270. yes:function(index){
  271. let checkedValues = $('input[name="layer_checkbox"]:checked').map(function(){
  272. return $(this).val();
  273. }).get();
  274. let postData = {'id':me.sets.id,'scene':'oaedit'};
  275. postData[field] = checkedValues.join(',');
  276. tool.post(me.sets.url,postData,me.sets.callback);
  277. }
  278. });
  279. },
  280. menu: function (that) {
  281. let me = this;
  282. let arrayidx = that.data('array');
  283. let data = me.sets.menu[arrayidx];
  284. if (data.length == 0) {
  285. layer.msg('无可选择的内容');
  286. return false;
  287. }
  288. let len = data.length;
  289. let editHtml = ''
  290. while (len--) {
  291. let item = $('#edit_'+data[len].field);
  292. let types = item.data('types');
  293. let text = item.data('text');
  294. text = typeof(text) == "undefined" ? item.text():text;
  295. let arrays = item.data('array');
  296. arrays = typeof(arrays) == "undefined" ? '':arrays;
  297. let api = item.data('api');
  298. api = typeof(api) == "undefined" ? '':api;
  299. let min = item.data('min');
  300. min = typeof(min) == "undefined" ? 1:min;
  301. let max = item.data('max');
  302. max = typeof(max) == "undefined" ? 100:max;
  303. editHtml+='<a href="javascript:void(0);" class="actionsheet-btn" data-field="'+data[len].field+'" data-types="'+types+'" data-array="'+arrays+'" data-text="'+text+'" data-min="'+min+'" data-max="'+max+'" data-api="'+api+'">'+data[len].title+'</a>';
  304. }
  305. layer.open({
  306. type:4,
  307. content: editHtml,
  308. btn:['取消'],
  309. success:function(elem,index){
  310. $(elem).on('click','.actionsheet-btn',function(){
  311. let thatmenu = $(this);
  312. let types = thatmenu.data('types');
  313. layer.close(index);
  314. switch (types) {
  315. case "num":
  316. me.num(thatmenu);
  317. break;
  318. case "oadate":
  319. me.oadate(thatmenu);
  320. break;
  321. case "textarea":
  322. me.textarea(thatmenu);
  323. break;
  324. case "adminpicker":
  325. me.adminpicker(thatmenu);
  326. break;
  327. case "picker":
  328. me.picker(thatmenu);
  329. break;
  330. case "radio":
  331. me.radio(thatmenu,[]);
  332. break;
  333. case "checkbox":
  334. me.checkbox(thatmenu,[]);
  335. break;
  336. default:
  337. me.text(thatmenu);
  338. }
  339. })
  340. }
  341. });
  342. },
  343. init: function (options) {
  344. this.sets = $.extend({}, opts, options);
  345. let me = this;
  346. let editBox = $('#'+me.sets.box);
  347. editBox.on('click','.click-edit',function(){
  348. let that = $(this);
  349. let types = that.data('types');
  350. let role = that.data('role');
  351. role = typeof(role) == "undefined" ? 1:role;
  352. if(role==0){
  353. layer.msg('你无权限操作');
  354. return false;
  355. }
  356. switch (types) {
  357. case "num":
  358. me.num(that);
  359. break;
  360. case "oadate":
  361. me.oadate(that);
  362. break;
  363. case "textarea":
  364. me.textarea(that);
  365. break;
  366. case "adminpicker":
  367. me.adminpicker(that);
  368. break;
  369. case "picker":
  370. me.picker(that);
  371. break;
  372. case "radio":
  373. me.radio(that,[]);
  374. break;
  375. case "checkbox":
  376. me.checkbox(that,[]);
  377. break;
  378. case "menu":
  379. me.menu(that);
  380. break;
  381. default:
  382. me.text(that);
  383. }
  384. })
  385. }
  386. }
  387. //输出接口
  388. exports('oaEdit', obj);
  389. });