mobile_order_flow.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var Controller = {
  3. index: async function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'mobile_order_flow/index' + location.search,
  8. add_url: 'mobile_order_flow/add',
  9. edit_url: 'mobile_order_flow/edit',
  10. del_url: 'mobile_order_flow/del',
  11. multi_url: 'mobile_order_flow/multi',
  12. import_url: 'mobile_order_flow/import',
  13. table: 'mobile_order',
  14. show_open_data_url: 'mobile_order_flow/show_open_data',
  15. }
  16. });
  17. var table = $("#table");
  18. let status = await $.getJSON('mobile_order_flow/status')
  19. let statusColor={};
  20. let colors=['label-default','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'];
  21. Object.keys(status).forEach((item,idx)=>{
  22. statusColor[item]=colors[idx];
  23. });
  24. statusColor[50]='label-default';
  25. let payType = await $.getJSON('mobile_order/pay_type')
  26. table.on('load-success.bs.table', function (_, data) {
  27. let e=data.extend;
  28. });
  29. $(document).on('click','.btn-sub-remark',function (){
  30. let id=$(this).data('id')
  31. let url=table.data('url-sub-remark')+`/id/${id}`
  32. Fast.api.open(url,'备注')
  33. })
  34. $(document).on('click','.btn-click-show-open',function (){
  35. if(!$(this).data('open')){
  36. parent.layer.msg('该用户未上传开卡资料')
  37. return
  38. }
  39. Fast.api.open($.fn.bootstrapTable.defaults.extend.show_open_data_url+'/id/'+$(this).data('id'),'查看资料',{
  40. shade:.3,
  41. shadeClose:false,
  42. })
  43. })
  44. let columns=[
  45. //{checkbox: true},
  46. {field: 'id', title: __('ID'),operate:false,},
  47. {field: 'order_no', title: __('订单号'),visible:false,operate: 'like'},
  48. {field: 'pay_no', title: __('支付单号'),visible: false,operate: '='},
  49. {field: 'mobile.name', title: __('商品信息'),visible:false,operate: 'like'},
  50. {field: 'mobile.product_no', title: __('产品编码'),visible:false,operate: '='},
  51. {field: 's_id', title: __('来源渠道'),formatter(_, order) {
  52. let a=[]
  53. a.push(`<div>${order.s_id}</div>`);
  54. a.push(`<div>${order.s_name}</div>`);
  55. return a.join('')
  56. },searchList: subs,width: 100},
  57. {field: 'pay_type', title: __('支付方式'),searchList: payType,visible: false},
  58. {field: 'pay_mid_wechat', title: __('微信商户号'),visible: false,operate: 'LIKE'},
  59. {field: 'pay_mid_alipay', title: __('支付宝商户号'),visible: false,operate: 'LIKE'},
  60. {field: 'pay_mid_dy', title: __('抖音商户号'),visible: false,operate: 'LIKE'},
  61. {field: 'pay_mid_ks', title: __('快手商户号'),visible: false,operate: 'LIKE'},
  62. {field: 'name', title: __('收货人'),visible: false,operate: 'LIKE'},
  63. {field: 'phone', title: __('收货人手机'),visible: false,operate: 'LIKE'},
  64. {field: 'id_no', title: __('收货人身份证'),visible: false,operate: "like"},
  65. {field: 'order_no', title: __('订单信息'),operate: false,formatter(_,order){
  66. let a=[], product_no = '', product_brand = brands[order.brand];
  67. if(order.info.mobile.product_no && order.info.mobile.product_no != undefined){
  68. product_no = order.info.mobile.product_no;
  69. }
  70. if(order.info.mobile.logo){
  71. a.push(`<div><img src="${order.info.mobile.logo}" style="width: 50px;height: 50px;object-fit: cover;" alt="${order.name}"></div>`)
  72. }
  73. a.push(`<div>订单号:<b>${order.order_no}</b></div>`)
  74. if(order.pay_no){
  75. a.push(`<div>支付单号:<b>${order.pay_no}</b></div>`)
  76. }
  77. if(product_brand == undefined){
  78. product_brand = order.brand;
  79. }
  80. a.push(`<div>产品编码:<b>${product_no}</b></div>`)
  81. a.push(`<div>商品信息:<b>${order.info.mobile.name}</b></div>`)
  82. a.push(`<div>运营商:${product_brand}</div>`)
  83. a.push(`<div>商品名称:${order.info.mobile.name}</div>`)
  84. a.push(`<div>套餐:${order.info?order.info.mobile.summary:''}</div>`)
  85. return `<div class="break-words" style="width: inherit;">${a.join('')}</div>`
  86. },width:300,align:'left',valign:'top'},
  87. {
  88. field:'amount',
  89. title:'支付信息',
  90. operate: false,
  91. align:'left',
  92. valign: 'top',
  93. width: 125,
  94. formatter(_, order) {
  95. let a=[]
  96. a.push(`<div><b>支付金额:${order.amount}</b></div>`)
  97. a.push(`<div>支付方式:${payType[order.pay_type]}</div>`)
  98. return a.join('')
  99. }
  100. },
  101. {field: 'order_no', title: __('收货人'),operate: false,formatter(_,order){
  102. let a=[]
  103. a.push(`<div>收货人:${order.name}</div>`)
  104. a.push(`<div>手机号:${order.phone}<span style="color: red;">(${order.phone_order_flow_count})</span></div>`)
  105. a.push(`<div>地址:${order.address}</div>`)
  106. a.push(`<div>备注:${order.remark}</div>`)
  107. a.push(`<div>快递名称:${order.trans_name||''}</div>`)
  108. a.push(`<div>快递单号:${order.trans_no||''}</div>`)
  109. a.push(`<a class="btn btn-link btn-click-show-open" style="color: #00a2ff;" data-id="${order.id}" data-open="${order.open_idcard_face_img}">查看资料</a>`)
  110. // if(order.open_idcard_face_img){
  111. // a.push(`<img src="${order.open_idcard_face_img}" style="width: 50px;height: 50px;object-fit: cover;" alt="${order.name}">`)
  112. // }
  113. // if(order.open_idcard_back_img){
  114. // a.push(`<img src="${order.open_idcard_back_img}" style="width: 50px;height: 50px;object-fit: cover;" alt="${order.name}">`)
  115. // }
  116. // if(order.open_face_img){
  117. // a.push(`<img src="${order.open_face_img}" style="width: 50px;height: 50px;object-fit: cover;" alt="${order.name}">`)
  118. // }
  119. return `<div style="width: 200px;" class="break-words">${a.join('')}</div>`
  120. },width:200,align:'left',valign:'top'},
  121. {field: 'order_no', title: __('生产信息'),operate: false,formatter(_,order){
  122. let a=[], product_no = '';
  123. a.push(`<div>生产号码:${order.gantanhao_data_notify?order.gantanhao_data_notify.plan_mobile_produced:''}</div>`)
  124. return `<div class="break-words" style="width: inherit;">${a.join('')}</div>`
  125. },width:140,align:'left',valign:'top'},
  126. {field: 'status', title: __('Status'),formatter(a,order){
  127. if(a===30) {
  128. return `<span class="label label-primary">${status[order.status_bak]||''}-${status[a]}</span>`;
  129. }
  130. return `<span class="label ${statusColor[a]}">${status[a]}</span>`
  131. },searchList:status},
  132. {field: 'gantanhao_status', title: __('运营商结果'),formatter(a,order){
  133. var str = '';
  134. if(order.gantanhao_data_notify && order.status == '110' && order.gantanhao_data_notify.reason != undefined){
  135. str = `<div style="width: 200px;" class="break-words">${order.gantanhao_data_notify.reason}</div>`;
  136. }
  137. return str;
  138. },searchable:false},
  139. {field: 'anchor.name', title:__('主播名称') ,searchList(){return Template('anchor-search',{});},width:100,formatter:Table.api.formatter.width},
  140. {field: 'sub_anchor.mobile_anchor.name', title: __(adminInfo.is_sub?'主播名称':'分站主播'),searchList(){return Template('anchor-sub-search',{});},width:100,formatter:Table.api.formatter.width},
  141. {field: 'sub_log', title: __(adminInfo.is_manager?'分站备注':'备注'),formatter(_,order){
  142. let a=[]
  143. order.sub_remark.forEach(item=>{
  144. a.push(`<div><span style="color: #0000ff;">${item.create_time_format}</span> <span style="color: #00caff">${item.admin?item.admin.nickname:'-'}</span> ${item.content}</div>`)
  145. })
  146. if(table.data('auth-url-sub-remark')) {
  147. a.push(`<a class="btn btn-info btn-xs btn-sub-remark" data-id="${order.id}">备注</a>`)
  148. }
  149. return `<div style="text-align: left;font-size: 10px;width: 200px;" class="break-words">${a.join('')}</div>`
  150. },operate:false,valign:'top',align:'left',width:200},
  151. {field: 'operation_log', title: __('客服记录'),formatter(_,order){
  152. let a=[]
  153. order.operation.forEach(item=>{
  154. a.push(`<div><span style="color: #0000ff;">${item.create_time_format}</span> <span style="color: #00caff">${item.admin?item.admin.nickname:'-'}-${item.admin?item.admin.job:'-'}</span> ${item.content}</div>`)
  155. })
  156. return `<div style="text-align: left;font-size: 10px;width: 200px;white-space: break-spaces;">${a.join('')}</div>`
  157. },operate:false,align:'left',valign:'top',width: 200},
  158. {field: 'admin.admin_id', title: __('操作员'),formatter(_,order){
  159. let a=[]
  160. order.admin.forEach(item=>{
  161. a.push(`<div>${item.admin.nickname}</div>`)
  162. })
  163. return `<div style="text-align: left;font-size: 10px;width: 100px;">${a.join('')}</div>`
  164. },operate:"=",searchList: admins,align:'left',valign:'top',width: 100},
  165. {field: 'create_time', title: __('创建时间'),formatter: Table.api.formatter.datetime,addClass:'datetimerange',operate: 'range'},
  166. {field: 'update_time', title: __('更新时间'),formatter: Table.api.formatter.datetime,addClass:'datetimerange',operate: 'range'},
  167. {field: 'trans_no', title: __('快递单号'),visible: false},
  168. {
  169. field: 'operate',
  170. title: __('Operate'),
  171. table: table,
  172. events: Table.api.events.buttons,
  173. formatter: Table.api.formatter.buttons,
  174. buttons:[
  175. {
  176. name: 'detail',
  177. text: __('设置主播'),
  178. title: __('设置主播'),
  179. classname: 'btn btn-xs btn-info btn-dialog period',
  180. url: table.data('url-set_anchor'),
  181. callback: function (data) {
  182. },
  183. visible: function (row) {
  184. return $('#table').data('auth-set_anchor');
  185. }
  186. },
  187. {
  188. name: 'detail',
  189. text: __('添加备注'),
  190. title: __('添加备注'),
  191. classname: 'btn btn-xs btn-info btn-dialog',
  192. url: 'mobile_order_flow/add_operation?a=1',
  193. callback: function (data) {
  194. },
  195. visible: function (row) {
  196. return $('#table').data('add_operation');
  197. }
  198. },
  199. {
  200. name: 'detail',
  201. text: __('编辑'),
  202. title: __('编辑'),
  203. classname: 'btn btn-xs btn-info btn-dialog',
  204. url: 'mobile_order_flow/edit?a=1',
  205. callback: function (data) {
  206. },
  207. visible: function (row) {
  208. return $('#table').data('operate-edit');
  209. }
  210. },
  211. {
  212. name: 'detail',
  213. text: __('发货'),
  214. title: __('发货'),
  215. classname: 'btn btn-xs btn-info btn-dialog period',
  216. url: 'mobile_order_flow/send?a=1',
  217. callback: function (data) {
  218. },
  219. visible: function (row) {
  220. return $('#table').data('mobile_order_send') && row.status>0;
  221. }
  222. },
  223. {
  224. name: '重新提交',
  225. text: __('重新提交'),
  226. title: __('重新提交'),
  227. classname: 'btn btn-xs btn-info btn-ajax',
  228. url: 'mobile_order_flow/reSubmit?a=1',
  229. refresh: true,
  230. callback: function (data) {
  231. },
  232. visible: function (row) {
  233. return row.status==10;
  234. }
  235. },
  236. {
  237. name:'detail',
  238. title:'查看物流',
  239. text: __('查看物流'),
  240. classname: 'btn btn-xs btn-danger btn-dialog',
  241. url: 'mobile_order/see_logistics?a=1',
  242. visible:(row)=>{
  243. return $('#table').data('see_logistics') && row.trans_id>0 && row.trans_no
  244. }
  245. },
  246. {
  247. name: 'detail',
  248. text: __('抖音结算'),
  249. title: __('抖音结算'),
  250. classname: 'btn btn-xs btn-success btn-ajax',
  251. url: 'mobile_order/dy_settle',
  252. confirm:'确认结算吗?',
  253. callback: function (data) {
  254. },
  255. visible: function (row) {
  256. return $('#table').data('auth-dy_settle') && row.pay_type===4 && row.pay_time>0 && row.payment && row.payment.settle_status===0;
  257. },
  258. disable(row){
  259. }
  260. },
  261. {
  262. name: 'detail',
  263. text: __('退款'),
  264. title: __('退款'),
  265. classname: 'btn btn-xs btn-danger btn-dialog period',
  266. url: 'mobile_order/refund?a=1',
  267. callback: function (data) {
  268. },
  269. visible: function (row) {
  270. return $('#table').data('mobile_order_refund') && row.status>0 && row.status==10 && row.amount>0;
  271. }
  272. },
  273. ]
  274. }
  275. ]
  276. if(adminInfo.is_sub){
  277. Table.api.removeColumn('operation_log',columns)
  278. Table.api.removeColumn('anchor.name',columns)
  279. Table.api.removeColumn('sub',columns)
  280. Table.api.removeColumn('admin.admin_id',columns)
  281. Table.api.removeColumn('s_id',columns)
  282. }
  283. // 初始化表格
  284. table.bootstrapTable({
  285. url: $.fn.bootstrapTable.defaults.extend.index_url,
  286. pk: 'id',
  287. sortName: 'id',
  288. searchFormVisible:true,
  289. search:false,
  290. fixedColumns:true,
  291. fixedRightNumber:1,
  292. columns: [
  293. columns
  294. ],
  295. onLoadSuccess(a){
  296. $('.btn-export').attr('href',a.link).show();
  297. let arr1 = [];let status_all=0;
  298. a.status_list.forEach(function(item, index) {
  299. $(".nav li .nav_id_"+item.status).text(item.total);
  300. arr1.push(item.status);
  301. status_all = status_all+item.total;
  302. });
  303. // 全部
  304. $(".nav li .nav_id_all").text(status_all);
  305. // 无数据的置0
  306. let arr2 = [0,10,15,20,23,25,30,50,90,110];
  307. let diff=arr2.filter(item=>arr1.indexOf(item)==-1);
  308. diff.forEach(function (i,k){
  309. $(".nav li .nav_id_"+i).text(0);
  310. });
  311. /*table.find('thead').css('position','fixed').css('background','white').css('top','365px')
  312. table.css('margin-top',41)
  313. table.find('tbody>tr:first-child>td').each((a,b)=>{
  314. table.find('thead tr th').eq(a).css('width',b.offsetWidth).css('max-width',b.offsetWidth)
  315. table.find('thead tr th .th-inner').eq(a).css('width',b.offsetWidth)
  316. })*/
  317. }
  318. });
  319. // 为表格绑定事件
  320. Table.api.bindevent(table);
  321. /*let innerHeight=window.innerHeight
  322. $('.fixed-table-container').css('height',`${innerHeight-420}px`)
  323. window.addEventListener('resize',function (){
  324. let innerHeight=window.innerHeight
  325. $('.fixed-table-container').css('height',`${innerHeight-420}px`)
  326. })*/
  327. },
  328. edit: function () {
  329. Controller.api.bindevent();
  330. $(document).on('input propertychange','#c-trans_no',function (){
  331. let no=$(this).val()
  332. if(!no){
  333. return
  334. }
  335. Form.api.guessLogistics(no,'#c-trans_id')
  336. })
  337. },
  338. add_operation(){
  339. Controller.api.bindevent();
  340. },
  341. sub_remark(){
  342. Controller.api.bindevent();
  343. $('#c-no').focus()
  344. },
  345. send(){
  346. Controller.api.bindevent();
  347. $(document).on('input propertychange','#c-trans_no',function (){
  348. let no=$(this).val()
  349. if(!no){
  350. return
  351. }
  352. Form.api.guessLogistics(no,'#c-trans_id')
  353. })
  354. },
  355. api: {
  356. bindevent: function () {
  357. Form.api.bindevent($("form[role=form]"));
  358. }
  359. }
  360. };
  361. return Controller;
  362. });