produceorder.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form','clipboard'],
  2. function ($, undefined, Backend, Table, Form,clipboard) {
  3. var Controller = {
  4. index: async function () {
  5. // 初始化表格参数配置
  6. Table.api.init({
  7. extend: {
  8. index_url: 'Produceorder/index' + location.search,
  9. add_url: 'Produceorder/add',
  10. edit_url: 'Produceorder/edit',
  11. del_url: 'Produceorder/del',
  12. multi_url: 'Produceorder/multi',
  13. import_url: 'Produceorder/import',
  14. show_open_data_url: 'Produceorder/show_open_data',
  15. detail_url: 'Produceorder/detail', // 详情
  16. table: 'Produceorder',
  17. multi_edit_url: 'produceorder/multi_edit',
  18. }
  19. });
  20. var table = $("#table");
  21. $('.btn-multi-edit').click(function (){
  22. let ids=[]
  23. $('#table').bootstrapTable('getSelections').forEach(item=>{
  24. ids.push(item.id)
  25. })
  26. if(!ids.length){
  27. layer.alert('请选择')
  28. return
  29. }
  30. Fast.api.open(`${$.fn.bootstrapTable.defaults.extend.multi_edit_url}/ids/${ids.join(',')}`,'批量编辑')
  31. })
  32. table.on('post-common-search.bs.table', function (event, table) {
  33. var form = $("form", table.$commonsearch);
  34. $("input[name='s_id']", form).addClass("selectpage").data("source", "auth/admin/index2").data("primaryKey", "id").data("params",{"custom[proxy]":"0","custom[sub]":"1"}).data("field", "nickname").data("orderBy", "id asc");
  35. Form.events.cxselect(form);
  36. Form.events.selectpage(form);
  37. });
  38. let is_proxy = Config.is_proxy;
  39. let is_proxy_operate = false;
  40. let is_proxy_operate_eq = false;
  41. if(is_proxy==0){
  42. is_proxy_operate = 'LIKE';
  43. is_proxy_operate_eq = '=';
  44. }
  45. let tableData=[]
  46. let url_clip=new clipboard('.btn-copy-obj',{
  47. text:function (a){
  48. let idx=$(a).data('row-index'),
  49. row=tableData[idx]
  50. return `${location.origin}/h5/#/?id=${row.id}`
  51. }
  52. })
  53. url_clip.on('success',function (){
  54. parent.layer.msg('复制成功')
  55. })
  56. let clip=new clipboard('.btn-pay_link',{
  57. text(a){
  58. let link=$(a).data('link')
  59. return link
  60. }
  61. })
  62. clip.on('success',function (){
  63. parent.layer.msg('复制成功')
  64. })
  65. //订单信息复制
  66. let order_clip=new clipboard('.btn-order_link',{
  67. text(a){
  68. // let link=$(a).data('link').replace(/<[^>]*>/g, '')
  69. let link=$(a).data('link');
  70. // console.log(JSON.stringify(link));
  71. return link + ''
  72. }
  73. })
  74. console.log(order_clip,'22222222')
  75. order_clip.on('success',function (){
  76. console.log(order_clip);
  77. parent.layer.msg('复制成功')
  78. })
  79. let status = await $.getJSON('Produceorder/status');
  80. let statusColor={};
  81. let colors=['label-daifukuan','label-info','label-danger','label-warning','label-primary','label-success','label-default','label-danger','label-info','label-warning','label-primary','label-success','label-default','label-danger','label-info','label-warning','label-primary','label-success','label-default','label-danger','label-info','label-warning','label-primary','label-success','label-default','label-danger','label-info','label-warning','label-primary','label-success'];
  82. Object.keys(status).forEach((item,idx)=>{
  83. statusColor[item]=colors[idx];
  84. });
  85. statusColor[50]='label-default';
  86. let payType = await $.getJSON('Produceorder/pay_type');
  87. let mobileRules = await $.getJSON('mobile/mobile_rules');
  88. table.on('load-success.bs.table', function (_, data) {
  89. let e=data.extend;
  90. $('#orderAmount').html(`收入:${e.total},支付宝:${e.alipay},微信:${e.wechat},抖音:${e.dy},快手:${e.ks},成本:${e.di},利润:${e.profit},退款:${e.refund}`)
  91. });
  92. $(document).on('click','.btn-click-show-open',function (){
  93. if($(this).data('open')!==1){
  94. parent.layer.msg('该用户未上传开卡资料')
  95. return
  96. }
  97. Fast.api.open($.fn.bootstrapTable.defaults.extend.show_open_data_url+'/id/'+$(this).data('id'),'查看资料',{
  98. shade:.3,
  99. shadeClose:false,
  100. })
  101. })
  102. $(document).on('click','.btn-sub-remark',function (){
  103. let id=$(this).data('id')
  104. let url="produceorder/sub_remark"+`/id/${id}`
  105. Fast.api.open(url,'备注')
  106. })
  107. let columns=[
  108. {checkbox: true},
  109. // {field: 'id', title: __('ID'),operate:false,},
  110. {field: 'order_no', title: __('订单号'),visible:false,operate: 'like'},
  111. {field: 'out_order_no', title: __('外部订单号'),visible:false,operate: 'like'},
  112. {field: 'produce_id', title: __('商品名称'),visible: false,operate: 'LIKE', addClass: 'selectpage', extend: "data-source='produce/index' data-field='local_code'"},
  113. {field: 'is_arrearage', title: __('是否欠费'), searchList: {"1":__('是'),"0":__('否')},visible: false},
  114. {field: 'produce_activation', title: __('是否激活'), searchList: {"1":__('是'),"0":__('否')},visible: false},
  115. {field: 'produce_is_recharge', title: __('是否首充'), searchList: {"1":__('是'),"0":__('否')},visible: false},
  116. {field: 'flag', title: __('旗帜'), searchList: {"#FF0000":'红色',"#FFFF00":'黄色',"#00FF33":'绿色',"#0033FF":'蓝色',"#9900FF":'紫色',"#00CCFF":'青色'},visible: false},
  117. {field: 'no', title: __('生产号码'),visible: false,operate: 'LIKE'},
  118. {field: 'phone', title: __('收货人手机'),visible: false,operate: 'LIKE'},
  119. {field: 'address_name', title: __('收货人'),visible: false,operate: 'LIKE'},
  120. {field: 'id_no', title: __('身份证'),visible: false,operate: "like"},
  121. {field: 'is_auto', title: __('是否首充'), searchList: {"1":__('是'),"0":__('否')},visible: false},
  122. {field: 'platform_source', title: __('订单来源'),visible: false,operate: 'LIKE'},
  123. {field: 'create_time', title: __('订单生成时间'),visible: false,operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime, type: 'datetime'},
  124. {field: 'state', title: __('订单状态'),visible: false, searchList: {'1':'激活','2':'退单(激活前)','3':'转套餐','4':'销户','6':'首充数据同步','C1':'开户完成','E0':'发货'},operate: 'LIKE'},
  125. // {field: 'no', title: __('订单更新时间'),visible: false,operate: 'LIKE'},
  126. {field: 'order_no', title: __('订单信息'),operate: false,formatter(_,order){
  127. let a=[]
  128. a.push(`<div>订单号:<b class="btn-order_link" data-link="${order.order_no}">${order.order_no}</b><span style='color: ${order.flag};font-size: 24px; '>&#127987;</span></div>`)
  129. a.push(`<div>外部订单号:<b class="btn-order_link" data-link="${order.out_order_no}">${order.out_order_no}</b></div>`)
  130. a.push(`<div>商品编码:<b class="btn-order_link" data-link="${order.produce ? order.produce.local_code : ''}">${order.produce ? order.produce.local_code : ''}</b></div>`)
  131. a.push(`<div>供应商:<b class="btn-order_link" data-link="${order.supplier}">${order.supplier}</b></div>`)
  132. // if(order.pay_no){
  133. // a.push(`<div>支付单号:<b class="btn-order_link" data-link="${order.pay_no}">${order.pay_no}</b></div>`)
  134. // }
  135. // a.push(`<div class="btn-order_link" data-link="${order.no}"><b>商品信息:${order.no}</b></div>`)
  136. // a.push(`<div>归属地:${order.info.mobile.province}/${order.info.mobile.city}</div>`)
  137. // if(adminInfo.is_manager){
  138. // a.push(`<div>供应商:${order.proxy?order.proxy.nickname:''}</div>`)
  139. // }
  140. // a.push(`<div>运营商:${order.info?order.info.mobile.network:''}</div>`)
  141. // a.push(`<div>卡品牌:${order.brand}</div>`)
  142. // if(showAmountDi && is_proxy==0) {
  143. // a.push(`<div class="btn-order_link" data-link="${order}">底价:${order.amount_di}</div>`)
  144. // }
  145. // a.push(`<div class="btn-order_link" data-link="${order.amount_charge}">预存:${order.amount_charge}</div>`)
  146. // if(is_proxy == 0 ) {
  147. // a.push(`<div class="btn-order_link" data-link="${order.info.mobile.is_activity?order.info.mobile.amount_kill:order.info.mobile.amount_base}"><b>售价:${order.info.mobile.is_activity?order.info.mobile.amount_kill:order.info.mobile.amount_base}</b></div>`)
  148. // a.push(`<div class="btn-order_link" data-link="${order.amount}">订单价格:${order.amount}</div>`)
  149. // }
  150. // a.push(`<div class='btn-order_link' data-link="${order.info.info.describe}">套餐:${order.info?order.info.info.describe:''}</div>`)
  151. // a.push(`<div>备注:${order.info?order.info.mobile.remark:''}</div>`)
  152. // a.push(`<a class="btn btn-success btn-sm btn-order_link" data-link="${a.join('')}">点击复制</a>`)
  153. return `<div style="max-width: 250px;word-wrap: break-word;word-break: break-all;white-space: normal;text-align: left;">${a.join('')}</div>`
  154. },width:'20%',valign:'top',align:'left'},
  155. {field: 'order_no', title: __('收货人'),operate: false,formatter(_,order){
  156. let a=[]
  157. a.push(`<div class="btn-order_link" data-link="${order.name}">收货人:${order.address_name}</div>`)
  158. a.push(`<div class="btn-order_link" data-link="${order.phone}">手机号:${order.phone}<span style="color: red;">(${order.phone_order_count})</span></div>`)
  159. a.push(`<div class="btn-order_link" data-link="${order.address}">地址:${order.address}</div>`)
  160. if(is_proxy == 0 ) {
  161. // a.push(`<div>支付方式:${payType[order.pay_type]}</div>`)
  162. // a.push(`<div>微信商户号:<span style="color: #00b578;">${order.pay_mid_wechat}</span></div>`)
  163. // a.push(`<div>支付宝商户号:<span style="color: #0d6aad;">${order.pay_mid_alipay}</span></div>`)
  164. // a.push(`<div>抖音商户号:<span style="color: #0d6aad;">${order.pay_mid_dy}</span></div>`)
  165. // a.push(`<div>快手商户号:<span style="color: #0d6aad;">${order.pay_mid_ks}</span></div>`)
  166. }
  167. a.push(`<div>备注:${order.remark}</div>`)
  168. // a.push(`<div>快递名称:${order.trans_name}</div>`)
  169. // a.push(`<div>快递单号:${order.trans_no}</div>`)
  170. a.push(`<a class="btn btn-link btn-click-show-open" style="color: #00a2ff;" data-id="${order.id}" data-open="${order.open_uploaded}">查看资料</a>`)
  171. return `<div style="max-width: 200px;text-align: left;" class="break-words">${a.join('')}</div>`
  172. },width:'20%',valign:'top',align:'left'},
  173. {field: 'create_time', title: __('订单状态'),operate: false,formatter(_,order){
  174. let a=[]
  175. a.push(`<div class="btn-order_link" data-link="${order.state_name}">订单状态:${order.state_name}</div>`)
  176. a.push(`<div class="btn-order_link" data-link="${order.produce_activation_name}">激活状态:${order.produce_activation_name}</div>`)
  177. a.push(`<div class="btn-order_link" data-link="${order.produce_is_recharge_name}">是否首充:${order.produce_is_recharge_name}</div>`)
  178. a.push(`<div>首充金额:${order.first_amount}</div>`)
  179. a.push(`<div>创建时间:${order.create_time}</div>`)
  180. a.push(`<div>更新时间:${order.update_time}</div>`)
  181. // a.push(`<a class="btn btn-link btn-click-show-open" style="color: #00a2ff;" data-id="${order.id}" data-open="${order.open_uploaded}">查看资料</a>`)
  182. return `<div style="max-width: 200px;text-align: left;" class="break-words">${a.join('')}</div>`
  183. },width:'15%',valign:'top',align:'left'},
  184. {field: 'create_time', title: __('生产信息'),operate: false,formatter(_,order){
  185. let a=[]
  186. a.push(`<div class="btn-order_link" data-link="${order.no}">生产号码:${order.no}</div>`)
  187. a.push(`<div class="btn-order_link" data-link="${order.platform_source}">订单来源:${order.platform_source}</div>`)
  188. a.push(`<div class="btn-order_link" data-link="${order.logistics_numbers}">物流名称:</div>`)
  189. a.push(`<div>物流单号:${order.logistics_numbers}</div>`)
  190. a.push(`<div>物流状态:</div>`)
  191. // a.push(`<a class="btn btn-link btn-click-show-open" style="color: #00a2ff;" data-id="${order.id}" data-open="${order.open_uploaded}">查看资料</a>`)
  192. return `<div style="max-width: 200px;text-align: left;" class="break-words">${a.join('')}</div>`
  193. },width:'15%',valign:'top',align:'left'},
  194. {field: 'remark', title: '备注',operate: 'false', formatter(_,order) {
  195. let a=[]
  196. a.push(`<div>${order.remark}</div>`)
  197. a.push(`<a class="btn btn-info btn-xs btn-sub-remark" data-id="${order.id}">备注</a>`)
  198. return `<div style="text-align: left;font-size: 10px;max-width: 200px;" class="break-words">${a.join('')}</div>`
  199. },width:'10%'},
  200. // {field: 'failure_reason', title: '失败原因',operate: 'false',width:'10%'},
  201. {field: 'failure_reason', title: __('失败原因'), operate: false,align:'left', class: 'autocontent', formatter: Table.api.formatter.content},
  202. // {field: 'title', title: __('Title'), operate: 'LIKE',align:'left', class: 'autocontent', formatter: Table.api.formatter.content},
  203. // {field: 'remark', title: '失败原因&备注',formatter: Table.api.formatter.datetime,addClass:'datetimerange',operate: 'range'},
  204. {field: 'logistics_numbers', title: __('物流单号'),visible: false,operate: "like"},
  205. {
  206. field: 'operate',
  207. title: __('Operate'),
  208. table: table,
  209. width: '5%',
  210. events: Table.api.events.buttons,
  211. formatter: Table.api.formatter.buttons,
  212. buttons:[
  213. {
  214. name: 'detail',
  215. text: '订单详情',
  216. title: '订单详情',
  217. classname: 'btn btn-xs btn-info btn-dialog',
  218. url: 'Produceorder/detail',
  219. extend:'data-area=\'["40%","90%"]\' data-toggle=\'tooltip\'',
  220. // icon:'fa fa-pencil',
  221. callback: function (data) {
  222. Layer.alert("接收到回传数据:" + JSON.stringify(data), {title: "回传数据"});
  223. // $('.btn-refresh').trigger('click')
  224. },
  225. visible: function (row) {
  226. //返回true时按钮显示,返回false隐藏
  227. return true;
  228. }
  229. },
  230. {
  231. name: 'edie',
  232. text: __('修改订单'),
  233. title: __('修改订单'),
  234. classname: 'btn btn-xs btn-info btn-dialog period',
  235. url: 'Produceorder/edit?a=1',
  236. callback: function (data) {
  237. },
  238. visible: function (row) {
  239. if(row['is_cancel'] == '0'){
  240. return true;
  241. }
  242. return false;
  243. }
  244. },
  245. // {
  246. // name:'detail',
  247. // title:'查看物流',
  248. // text: __('查看物流'),
  249. // classname: 'btn btn-xs btn-danger btn-dialog',
  250. // url: 'Produceorder/see_logistics?a=1',
  251. // visible:(row)=>{
  252. // return $('#table').data('see_logistics') && row.trans_id>0 && row.trans_no
  253. // }
  254. // },
  255. {
  256. name: 'copy',
  257. title: __('上传资料链接'),
  258. text: __('上传资料链接'),
  259. classname: 'btn btn-xs btn-info btn-copy-obj',
  260. click: function (data,row) {
  261. },
  262. visible: function (row) {
  263. if(row['is_cancel'] == '0'){
  264. return true;
  265. }
  266. return false;
  267. }
  268. },
  269. {
  270. name: 'resubmit',
  271. title: __('再次提交'),
  272. text: __('再次提交'),
  273. classname: 'btn btn-xs btn-success btn-magic btn-ajax',
  274. confirm: '确认再次提交吗?',
  275. url: 'produceorder/resubmit',
  276. success: function (data, ret) {
  277. Layer.alert('操作成功');
  278. //如果需要阻止成功提示,则必须使用return false;
  279. //return false;
  280. },
  281. error: function (data, ret) {
  282. console.log(data, ret);
  283. Layer.alert(ret.msg);
  284. return false;
  285. },
  286. visible: function (row) {
  287. if(row['is_cancel'] == '0'){
  288. return true;
  289. }
  290. return false;
  291. }
  292. },
  293. {
  294. name: 'cancel',
  295. title: __('取消订单'),
  296. text: __('取消订单'),
  297. classname: 'btn btn-xs btn-success btn-magic btn-ajax',
  298. confirm: '确定要取消订单吗?',
  299. url: 'produceorder/cancel',
  300. success: function (data, ret) {
  301. Layer.alert('取消成功');
  302. table.bootstrapTable('refresh');
  303. //如果需要阻止成功提示,则必须使用return false;
  304. //return false;
  305. },
  306. error: function (data, ret) {
  307. console.log(data, ret);
  308. Layer.alert(ret.msg);
  309. return false;
  310. },
  311. visible: function (row) {
  312. if(row['is_cancel'] == '0'){
  313. return true;
  314. }
  315. return false;
  316. }
  317. },
  318. ]
  319. }
  320. ]
  321. if(!adminInfo.is_manager){
  322. Table.api.removeColumn('operation_log',columns)
  323. Table.api.removeColumn('anchor.name',columns)
  324. Table.api.removeColumn('s_id',columns)
  325. Table.api.removeColumn('admin.admin_id',columns)
  326. }
  327. // 初始化表格
  328. table.bootstrapTable({
  329. url: $.fn.bootstrapTable.defaults.extend.index_url,
  330. pk: 'id',
  331. sortName: 'id',
  332. search:false,
  333. searchFormVisible:true,
  334. columns: [
  335. columns
  336. ],
  337. fixedColumns:true,
  338. fixedRightNumber:1,
  339. onLoadSuccess(a){
  340. tableData=a.rows
  341. $('.btn-export').attr('href',a.link).show()
  342. // 角标
  343. let arr1 = [];let status_all=0;
  344. a.status_list.forEach(function(item, index) {
  345. $(".nav li .nav_id_"+item.status).text(item.total);
  346. arr1.push(item.status);
  347. status_all = status_all+item.total;
  348. });
  349. // 全部
  350. $(".nav li .nav_id_all").text(status_all);
  351. // 无数据的置0
  352. let arr2 = [0,10,15,17,20,25,30,50,60,70,80,90];
  353. let diff=arr2.filter(item=>arr1.indexOf(item)==-1);
  354. diff.forEach(function (i,k){
  355. $(".nav li .nav_id_"+i).text(0);
  356. });
  357. $(".nav li .nav_id_10").text(a.status_10_count);
  358. /*table.find('thead').css('position','fixed').css('background','white').css('top','370px')
  359. table.css('margin-top',41)
  360. table.find('tbody>tr:first-child>td').each((a,b)=>{
  361. table.find('thead tr th').eq(a).css('width',b.offsetWidth).css('max-width',b.offsetWidth)
  362. })*/
  363. }
  364. });
  365. // 为表格绑定事件
  366. Table.api.bindevent(table);
  367. /* let innerHeight=window.innerHeight
  368. $('.fixed-table-container').css('height',`${innerHeight-420}px`)
  369. window.addEventListener('resize',function (){
  370. let innerHeight=window.innerHeight
  371. $('.fixed-table-container').css('height',`${innerHeight-420}px`)
  372. })*/
  373. },
  374. add: function () {
  375. Controller.api.bindevent();
  376. },
  377. multi_edit: function () {
  378. Controller.api.bindevent();
  379. },
  380. edit: function () {
  381. Controller.api.bindevent();
  382. $(document).on('input propertychange','#c-trans_no',function (){
  383. let no=$(this).val()
  384. if(!no){
  385. return
  386. }
  387. Form.api.guessLogistics(no,'#c-trans_id')
  388. })
  389. },
  390. add_operation(){
  391. Controller.api.bindevent();
  392. $('#c-no').focus()
  393. },
  394. sub_remark(){
  395. Controller.api.bindevent();
  396. $('#c-no').focus()
  397. },
  398. set_anchor(){
  399. Controller.api.bindevent();
  400. },
  401. refund(){
  402. Controller.api.bindevent();
  403. },
  404. mobile_up(){
  405. Controller.api.bindevent()
  406. if(!row){
  407. Fast.api.close({say:'此号码已被删除,无法上架'})
  408. }else if(row.status===0){
  409. //Fast.api.close({say:'此号码已是上架状态'})
  410. }
  411. },
  412. send(){
  413. Controller.api.bindevent();
  414. $(document).on('input propertychange','#c-trans_no',function (){
  415. let no=$(this).val()
  416. if(!no){
  417. return
  418. }
  419. Form.api.guessLogistics(no,'#c-trans_id')
  420. })
  421. },
  422. show_open_data(){
  423. Controller.api.bindevent()
  424. },
  425. api: {
  426. bindevent: function () {
  427. Form.api.bindevent($("form[role=form]"));
  428. }
  429. },
  430. refund_log(){
  431. Table.api.init();
  432. var table = $("#table");
  433. let columns=[
  434. //{field:'id',title:'ID',operate:false},
  435. {field:'od.mobile_id',title:'商品ID',operate:'='},
  436. {field:'od.s_id',title:'代理商ID',operate:'='},
  437. {field:'od.order_no',title:'订单号',operate:'='},
  438. {field:'od.no',title:'手机号',operate:'like'},
  439. {field:'pass',title:'审核状态',searchList:{1:'通过',0:'驳回'},formatter: Table.api.formatter.label},
  440. {field:'reason',title:'备注',formatter: Table.api.formatter.content,width:200},
  441. {field:'od.amount',title:'订单金额',operate:'between'},
  442. {field:'amount_backend',title:'退款金额',operate:'between'},
  443. {field:'create_time',title:'创建时间',operate:'range',addClass:'datetimerange',formatter:Table.api.formatter.datetime},
  444. {field:'admin.nickname',title:' 操作员',operate:'like'},
  445. ];
  446. if(!admin.is_manager){
  447. Table.api.removeColumn('od.s_id',columns)
  448. }
  449. table.bootstrapTable({
  450. url: 'Produceorder/refund_log',
  451. pk: 'id',
  452. sortName: 'id',
  453. search:false,
  454. searchFormVisible:true,
  455. columns: columns,
  456. onLoadSuccess(a){
  457. }
  458. });
  459. Table.api.bindevent(table);
  460. }
  461. };
  462. return Controller;
  463. });