oaEdit.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. layui.define(['tool','oaPicker','tinymce'],function(exports){
  2. let layer = layui.layer,tool=layui.tool,laydate = layui.laydate,dropdown = layui.dropdown,oaPicker = layui.oaPicker,tinymce = layui.tinymce;
  3. const opts={
  4. "box":'editBox',//编辑容器id
  5. "id":0,//编辑容器id
  6. "url": '',
  7. "dropdown":{},
  8. "callback":function(e){
  9. layer.msg(e.msg);
  10. if(e.code==0){
  11. setTimeout(function(){
  12. location.reload();
  13. },1000)
  14. }
  15. }
  16. };
  17. const obj = {
  18. log: function (box,name,action_id) {
  19. let page=1;
  20. let callback = function (res) {
  21. if (res.code == 0 && res.data.length > 0) {
  22. let itemLog = '',logTime='';
  23. $.each(res.data, function (index, item) {
  24. let detail = "";
  25. if(logTime != item.create_time){
  26. if(logTime==''){
  27. itemLog+='<dl><dt><span class="date-second-point"></span>'+item.create_time+'</dt>'
  28. }
  29. else{
  30. itemLog+='</dl><dl><dt><span class="date-second-point"></span>'+item.create_time+'</dt>'
  31. }
  32. logTime = item.create_time;
  33. }
  34. detail= `
  35. <span class="log-content gray">将<strong>${item.field_name}</strong>从 <span class="green">${item.old_content}</span> ${item.action}为 <span class="blue">${item.new_content}</span><span class="ml-4 gray" title="${item.create_time}">${item.times}</span></span>
  36. `;
  37. if(item.field=='new'){
  38. detail= `
  39. <span class="log-content gray">创建了该数据记录<span class="ml-4 gray" title="${item.create_time}">${item.times}</span></span>
  40. `;
  41. }
  42. itemLog+= `
  43. <dd><img src="${item.thumb}" class="log-thumb" /><span class="log-name">${item.admin_name}</span>${detail}</dd>
  44. `;
  45. });
  46. itemLog+='</dl>';
  47. if(res.data.length>19){
  48. itemLog+='<div class="py-3 log-more"><button class="layui-btn layui-btn-normal layui-btn-sm" type="button">查看更多</button></div>';
  49. }
  50. $("#"+box).html(itemLog);
  51. $('#'+box+'Total').html(res.action.total);
  52. }
  53. else{
  54. if(page ==1){
  55. $("#"+box).html('<div class="layui-data-none">暂无记录</div>');
  56. }
  57. }
  58. }
  59. tool.get("/api/index/load_log", {name:name,action_id:action_id,page:page}, callback);
  60. $("#"+box).on('click','.log-more',function(){
  61. page++;
  62. tool.get("/api/index/load_log", {name:name,action_id:action_id,page:page}, callback);
  63. });
  64. },
  65. //短文本
  66. text: function (that) {
  67. let me = this;
  68. let field = that.data('field');
  69. let text = that.data('text');
  70. if (typeof(text) == "undefined") {
  71. text = that.text();
  72. }
  73. $(parent.$('.express-close')).addClass('parent-colse');
  74. layer.open({
  75. type: 1,
  76. title: '请输入内容',
  77. area: ['360px', '158px'],
  78. content: '<div style="padding:5px;"><input class="layui-input" id="oaEditText" value="' + text + '"/></div>',
  79. end: function(){
  80. $(parent.$('.express-close')).removeClass('parent-colse');
  81. },
  82. btnAlign: 'c',
  83. btn: ['提交保存'],
  84. yes: function () {
  85. let val = $("#oaEditText").val();
  86. if (val != '') {
  87. let postData = {'id':me.sets.id,'scene':'oaedit'};
  88. postData[field] = val;
  89. tool.post(me.sets.url,postData,me.sets.callback);
  90. } else {
  91. layer.msg('请输入内容');
  92. }
  93. }
  94. })
  95. },
  96. //长文本
  97. textarea: function (that) {
  98. let me = this;
  99. let field = that.data('field');
  100. let target = that.data('target');
  101. let textarea='';
  102. if (typeof(target) == "undefined") {
  103. textarea = that.text();
  104. }
  105. else{
  106. textarea = $('#'+target).text();
  107. }
  108. $(parent.$('.express-close')).addClass('parent-colse');
  109. layer.open({
  110. type: 1,
  111. title: '请输入内容',
  112. area: ['600px', '320px'],
  113. content: '<div style="padding:5px;"><textarea class="layui-textarea" id="oaEditTextarea" style="width: 100%; height: 200px;">' + textarea + '</textarea></div>',
  114. btnAlign: 'c',
  115. end: function(){
  116. $(parent.$('.express-close')).removeClass('parent-colse');
  117. },
  118. btn: ['提交保存'],
  119. yes: function () {
  120. let val = $("#oaEditTextarea").val();
  121. if (val != '') {
  122. let postData = {'id':me.sets.id,'scene':'oaedit'};
  123. postData[field] = val;
  124. tool.post(me.sets.url,postData,me.sets.callback);
  125. } else {
  126. layer.msg('请输入内容');
  127. }
  128. }
  129. })
  130. },
  131. //数字
  132. num: function (that) {
  133. let me = this;
  134. let field = that.data('field');
  135. let text = that.data('text');
  136. let min = that.data('min');
  137. let max = that.data('max');
  138. if (typeof(min) == "undefined") {
  139. min = '';
  140. }
  141. if (typeof(max) == "undefined") {
  142. max = '';
  143. }
  144. if (typeof(text) == "undefined") {
  145. text = that.text();
  146. }
  147. $(parent.$('.express-close')).addClass('parent-colse');
  148. layer.open({
  149. type: 1,
  150. title: '请输入数字',
  151. area: ['200px', '158px'],
  152. content: '<div style="padding:5px;"><input class="layui-input" oninput="this.value = this.value.replace(/[^0-9]/g,\'\')" id="oaEditNum" value="' + text + '"/></div>',
  153. end: function(){
  154. $(parent.$('.express-close')).removeClass('parent-colse');
  155. },
  156. btnAlign: 'c',
  157. btn: ['提交保存'],
  158. yes: function () {
  159. let val = $("#oaEditNum").val();
  160. if (val != '') {
  161. if(min !='' && val<min){
  162. layer.msg('输入数字不能小于'+min);
  163. return false;
  164. }
  165. if(max !='' && val>max){
  166. layer.msg('输入数字不能大于'+max);
  167. return false;
  168. }
  169. let postData = {'id':me.sets.id,'scene':'oaedit'};
  170. postData[field] = val;
  171. tool.post(me.sets.url,postData,me.sets.callback);
  172. } else {
  173. layer.msg('请输入内容');
  174. }
  175. }
  176. })
  177. },
  178. dropdown: function (that) {
  179. let me = this;
  180. let field = that.data('field');
  181. let text = that.data('text');
  182. let cancel = that.data('cancel');
  183. let arrayidx = that.data('array');
  184. if (typeof(text) == "undefined") {
  185. text = that.text();
  186. }
  187. if (typeof(cancel) == "undefined") {
  188. cancel = 0;
  189. }
  190. let data = me.sets.dropdown[arrayidx];
  191. let len = data.length;
  192. while (len--) {
  193. if (data[len].id == text) {
  194. data.splice(len, 1);
  195. }
  196. }
  197. if (data.length == 0) {
  198. layer.msg('无可关联的内容');
  199. return false;
  200. }
  201. if (cancel==1) {
  202. data.push({ id: 0, title: '<span style="color:#FF5722">取消关联</span>' });
  203. }
  204. dropdown.render({
  205. elem: that,
  206. show: true,
  207. data: data,
  208. click: function (data, othis) {
  209. let postData = {'id':me.sets.id,'scene':'oaedit'};
  210. postData[field] = data.id;
  211. tool.post(me.sets.url,postData,me.sets.callback);
  212. }
  213. });
  214. },
  215. oadate: function (that) {
  216. let me = this;
  217. let type = that.data('type');
  218. let range = that.data('range');
  219. let min = that.data('min');
  220. let max = that.data('max');
  221. if (typeof(type) == "undefined" || type === '') {
  222. type = 'date';
  223. }
  224. if (typeof(range) == "undefined" || type === '') {
  225. range = false;
  226. }
  227. if (typeof(min) == "undefined" || min === '') {
  228. min = '1900-1-1';
  229. }
  230. if (typeof(max) == "undefined" || max === '') {
  231. max = '2099-1-1';
  232. }
  233. let field = that.data('field');
  234. let text = that.data('text');
  235. if (typeof(text) == "undefined") {
  236. text = that.text();
  237. }
  238. layui.laydate.render({
  239. elem: that,
  240. show: true,
  241. type: type,
  242. range: range,
  243. min: min,
  244. max: max,
  245. fullPanel: true,
  246. done: function (val, date) {
  247. let postData = {'id':me.sets.id,'scene':'oaedit'};
  248. postData[field] = val;
  249. tool.post(me.sets.url,postData,me.sets.callback);
  250. }
  251. });
  252. },
  253. adminpicker: function (that){
  254. let me = this;
  255. let field = that.data('field');
  256. let ids = that.data('ids');
  257. let names = that.data('names');
  258. let type = that.data('type');
  259. if (typeof(type) == "undefined") {
  260. type = 1;
  261. }
  262. oaPicker.employeeInit({
  263. ids:ids.toString(),
  264. names:names.toString(),
  265. type:type,
  266. callback:function(seleted){
  267. let select_id=[],select_name=[];
  268. for(var a=0; a<seleted.length;a++){
  269. select_id.push(seleted[a].id);
  270. select_name.push(seleted[a].name);
  271. }
  272. let postData = {'id':me.sets.id,'scene':'oaedit'};
  273. postData[field] = select_id.join(',');
  274. tool.post(me.sets.url,postData,me.sets.callback);
  275. }
  276. });
  277. },
  278. picker:function(that){
  279. let me = this;
  280. let field = that.data('field');
  281. let types = that.data('picker');
  282. let type = that.data('type');
  283. let where = that.data('where');
  284. let map = {}
  285. if (typeof(type) == "undefined") {
  286. type = 1;
  287. }
  288. if (typeof(where) == "undefined" || where == '') {
  289. map = {};
  290. }
  291. else{
  292. const jsonStr = where.replace(/(\w+):/g, '"$1":').replace(/'/g, '"');
  293. map = JSON.parse(jsonStr);
  294. }
  295. let callback = function(data){
  296. let ids = [],titles=[];
  297. for ( var i = 0; i <data.length; i++){
  298. ids.push(data[i].id);
  299. titles.push(data[i].title);
  300. }
  301. let postData = {'id':me.sets.id,'scene':'oaedit'};
  302. postData[field] = ids.join(',');
  303. tool.post(me.sets.url,postData,me.sets.callback);
  304. }
  305. oaPicker.picker(types,type,callback,map);
  306. },
  307. editor:function(that){
  308. let me = this,index = Date.now();
  309. let field = that.data('field');
  310. let target = that.data('target');
  311. let content='';
  312. if (typeof(target) == "undefined") {
  313. content = that.html();
  314. }
  315. else{
  316. content = $('#'+target).html();
  317. }
  318. $(parent.$('.express-close')).addClass('parent-colse');
  319. layer.open({
  320. type: 1,
  321. title: '请输入内容',
  322. zIndex:20,
  323. area: ['900px', '600px'],
  324. content: '<div style="padding:5px;"><textarea class="layui-textarea" id="oaEditEditor'+index+'" style="width: 100%;">' + content + '</textarea></div>',
  325. btnAlign: 'c',
  326. btn: ['提交保存'],
  327. end: function(){
  328. $(parent.$('.express-close')).removeClass('parent-colse');
  329. },
  330. success:function(){
  331. var edit = tinymce.render({
  332. selector: "#oaEditEditor"+index,
  333. images_upload_url: '/api/index/upload/sourse/tinymce',//图片上传接口
  334. height: 480
  335. });
  336. },
  337. yes: function () {
  338. let val = tinyMCE.editors['oaEditEditor'+index].getContent();
  339. if (val != '') {
  340. let postData = {'id':me.sets.id,'scene':'oaedit'};
  341. postData[field] = val;
  342. tool.post(me.sets.url,postData,me.sets.callback);
  343. } else {
  344. layer.msg('请输入内容');
  345. }
  346. }
  347. })
  348. },
  349. init: function (options) {
  350. this.sets = $.extend({}, opts, options);
  351. let me = this;
  352. let editBox = $('#'+me.sets.box);
  353. editBox.find('.click-edit').addClass('on');
  354. editBox.on('click','.click-edit',function(){
  355. let that = $(this);
  356. let types = that.data('types');
  357. switch (types) {
  358. case "num":
  359. me.num(that);
  360. break;
  361. case "oadate":
  362. me.oadate(that);
  363. break;
  364. case "textarea":
  365. me.textarea(that);
  366. break;
  367. case "dropdown":
  368. me.dropdown(that);
  369. break;
  370. case "adminpicker":
  371. me.adminpicker(that);
  372. break;
  373. case "picker":
  374. me.picker(that);
  375. break;
  376. case "editor":
  377. me.editor(that);
  378. break;
  379. default:
  380. me.text(that);
  381. }
  382. })
  383. }
  384. }
  385. //输出接口
  386. exports('oaEdit', obj);
  387. });