From 71d7ff1d7b16abd300625360582305a6b1fce513 Mon Sep 17 00:00:00 2001 From: li Date: Wed, 11 Feb 2026 19:53:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=9B=E7=89=9B=E5=8D=95=E7=8B=AC?= =?UTF-8?q?=E9=99=90=E7=BA=A2=20-=20=E6=96=B0=E5=A2=9Elimit=5Flow=5Fnn/lim?= =?UTF-8?q?it=5Fhigh=5Fnn=E5=AD=97=E6=AE=B5=EF=BC=8C=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E6=B7=BB=E5=8A=A0/=E7=BC=96=E8=BE=91=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=92=8C=E4=BC=9A=E5=91=98=E6=94=AF=E6=8C=81=E7=89=9B?= =?UTF-8?q?=E7=89=9B=E9=99=90=E7=BA=A2=E8=AE=BE=E7=BD=AE=EF=BC=8C=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=8C=85=E4=B8=89=E8=AF=AD=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 6148 -> 6148 bytes application/.DS_Store | Bin 6148 -> 10244 bytes application/admin/.DS_Store | Bin 6148 -> 10244 bytes .../admin/controller/ChatQuickReply.php | 229 +++++++ application/admin/controller/Common.php | 4 + application/admin/controller/Login.php | 10 +- application/admin/controller/Report.php | 6 +- application/admin/view/.DS_Store | Bin 6148 -> 12292 bytes application/admin/view/agent/profit.html | 18 +- application/admin/view/chat/detail.html | 89 +++ application/admin/view/chat/record.html | 117 ++++ .../admin/view/chat_quick_reply/add.html | 70 +++ .../admin/view/chat_quick_reply/index.html | 134 +++++ application/admin/view/index/index.html | 11 + application/agent/.DS_Store | Bin 6148 -> 10244 bytes application/agent/controller/Agent.php | 36 ++ application/agent/controller/Player.php | 38 +- application/agent/controller/Report.php | 6 +- application/agent/lang/en-us.php | 8 + application/agent/lang/zh-cn.php | 8 + application/agent/lang/zh-tw.php | 8 + application/agent/view/.DS_Store | Bin 0 -> 10244 bytes application/agent/view/agent/add.html | 24 + application/agent/view/agent/edit.html | 26 + application/agent/view/player/add.html | 24 + application/agent/view/player/edit.html | 28 + application/agent/view/report/agent.html | 30 +- application/common.php | 5 + application/jk/.DS_Store | Bin 0 -> 6148 bytes application/onlinechip/.DS_Store | Bin 0 -> 6148 bytes .../archive/customer-service-module/design.md | 564 ++++++++++++++++++ .../customer-service-module/proposal.md | 396 ++++++++++++ .../archive/customer-service-module/specs.md | 248 ++++++++ .../archive/customer-service-module/tasks.md | 443 ++++++++++++++ runtime/log/202601/28_cli.log | 14 + runtime/log/202601/31_cli.log | 14 + 36 files changed, 2590 insertions(+), 18 deletions(-) create mode 100644 application/admin/controller/ChatQuickReply.php create mode 100644 application/admin/view/chat/detail.html create mode 100644 application/admin/view/chat/record.html create mode 100644 application/admin/view/chat_quick_reply/add.html create mode 100644 application/admin/view/chat_quick_reply/index.html create mode 100644 application/agent/view/.DS_Store create mode 100644 application/jk/.DS_Store create mode 100644 application/onlinechip/.DS_Store create mode 100644 openspec/archive/customer-service-module/design.md create mode 100644 openspec/archive/customer-service-module/proposal.md create mode 100644 openspec/archive/customer-service-module/specs.md create mode 100644 openspec/archive/customer-service-module/tasks.md create mode 100644 runtime/log/202601/28_cli.log create mode 100644 runtime/log/202601/31_cli.log diff --git a/.DS_Store b/.DS_Store index 8fa1f8984ea2fe49b2cca60faf7ee2dda6fde942..abdbdb3ff6c1f67fc04c40bd44cf88782ec273d2 100644 GIT binary patch delta 21 ccmZoMXffEZjETd@$XG`~*UWtLI;JpD07r-h6aWAK delta 21 ccmZoMXffEZjETe4z*I-U*uZS_I;JpD07tC`761SM diff --git a/application/.DS_Store b/application/.DS_Store index 14bbb88bb5c701537786a021d7f27053e8809d15..a4549a091f1c57154b92d6accfc5884aeb295e93 100644 GIT binary patch literal 10244 zcmeHMU2GIp6uxKL(mMl%DSz!Ci-Q$x=>khz3I&CwrKJd@NK5}Htg|}<9hse3c4oIA zAyz;Wf1)PFsEHEM_@*d6sL==Y4S!xVjmnEZnE0X(KJa9sc<$U;=q^9O2P`o&$=oyd z+v-Fuc00_{0{6(K4igyPMlJOhhsT&$hlS6xD&kx&BK6JjUF+)UDPl2`Q& z6(Is40wDq+0wDq+0=EYOxM#DAPUkW#Lj*zuLIf@&z`hSE-b}^=InJg3>A=E20-!8M zwSVC=o&$UvHIVT@j&tdo;yd~20RmG9ju^nrv0Y`|QN{x~&LuY|z|9E+BSUaP0e^I~ zQ~mA);#`Jhh(L(I)d;Y&dj-*mPSV6II=_FA%vh%D#bV!rP*z?st&&#K>2z=Js592< zXB(Y; zEH~f56B1?f3l4o>a7dJ9-42Tgn( z>o&J!+8~~pF)wo0(#F{8bsIanx9^;&nmJ3ZmgY#q2$AiX`%NP|q`4`>)=m4s?lDvM zMhEhyYbGtD&(_k0SPkpMiTO3PRmuWoVWEk4ykbb@Iy#t3nul_xcVt4IIjc%i)Wsr| zPmkz0!5xmyM$-KjMNyYfx`*jIvIdr1Eh!Dl&_L^R(GUI#X~jxWl-<6AxW3#}YHp#T ztnaq8q+tcBwQZ={HjwA|2Fm+3P@H*mFy*Av=%>roirP-;J~r}p&GmXRhJATXU0W!X z&kehyTGr?pLxKesUE3)2*9`T{s8csRC(8j*l^#lm*y}dwI=-o@rgr`VyA%ai$h7k& z(is<=vs(U!Qd$>Z#@B}vKgcB{=S-+YVlIVx zXn-gzM{=%(Hdqh$LMLp2Znz(*+6VnG07EbgDKL<_237+k)`A?iTeFHcs-W#8-hlL=H~!a%%SBmX@fxYV{4AyqSI2 zccsKVi8#277W=V*3z{OM_>`G)cbk~IH(Jx1arc_8mALOSBP>D$LIgqtLIgqtrVxQL zKDNs8|DD(W|9=W+7!DmG5F&7^5rFc|y_;DcppYXd9gyYPRlFa>n_aBmIG4T&7OV@? z`{{VBuylNVperO#SbIFsjdSUnquw`1$+P*l{Lg^Nsjl$+AD;g)rF~Nw>i^OC{~xdJ BF7p5Y delta 154 zcmZn(XfcprU|?W$DortDU=RQ@Ie-{MGjUEV6q~50$jGuWU^gQp%VZt_$;rpXN;ymo zOm!5D4a_Dl6p)@AFRn3pw%9^+LA%Y>k_s$~**Q1_nSo{jfdDsS51cDZd)WQ=2METF0*{yf& zR78{zp_$dpKj-q#ob%83o$s8pM1;OlZaYz&h*Um>HCFOvi9?i&bJ3xMIie8kPgEd} z^8B;;E;^zJL=lK05Je!0Koo&%F#@dF;!vBUjjmAyq6kD0s764H4{<()O@?+(+FLlhIUR`=}wUDgz(J> zS11VH&VKQrIw2`-bd4eqMPP9R1Z{N6^19un;==WNX4ap{pZz;>vb!KA&FameYz;_CVj6^ z><=nVIP5F(ri?Yh|Hw?y@mzn*F8FLU?dvPo#opDv<;ER*x|0LLhv%DDwHT|lR&A1l z;})HJ9J_El?PqN_=eQ?FXPsQ})OgwPolM>yansYbwi;d9d~?exWBmrxoG4|S`$|sn zexqGggJ)T0n|30{jlA8kWyP&p zr#5mge?86cWzIG&VUFh089T2TIr*NQ+Aedv9QMjMBs2GFt>#45o1W&b_?pbS#q2TP zCtiCv?H7;C*sf^OMOoI%Wt0A?biqC{%jgMPG|0KZhv0nSG?;UWUQo!rKGl~I!FnX+DKj0LkDP* zS>w_yJxb^3F*;9Qq6_paeV?AApU_X~57)Zbc7ys4f8B^O+tY^OfRK^oR`}7#jYc z(Bs9G0U_43u3fiDuw-}lZB;-?1Xe(|5Xu35Yrb!Q-+(Z6*qdkCY>a8wwN+SE&$dwp zzI|F1JTq2=wcmZc%D^|4g~^W1oIGSKm&sUXm&znFlpv|a65BPVlF<+*J9lvsGNJ9; zuQ92N#xQwZ4<{)|#A1E@{FsY|`pzNt33`&gK~K{U8L=8r~Y+#&P zXhR1!Gg5B|aJn0Nu#d4ifI%FqC4 zj*l^dKZ7shLLDv-*5VRBxEwCase+sL+>=}`Fx^OHa(JhC_Wwhvs@-`@ofkEs$Zd61)Q@iDQ9mHu0p}Z zDz?dr>ot6?s#v=fw-!=A)Qrv6R=rlmy7X;&t%_~ecUpBSwp-t8RR$EMv{a>Tz16A? zI-!c)X7yTiBS}@o2DogoiVbt_(kjN$I2^aE8Wl6wZ)mpev{F~5Vp>(k0@d2aE2&{R z!Hk)qhgh}F)92`G^i5W*AJfn1MS7WjMZcln(w|tZ{((j`qlHI;)vQ%=1n9)gNTL^g zI234<;QrkUbgG1Mpj8jz5$60kJcdu>3wQ!wWVLz*&*D4yE-Th0Jdb(StJm=c{*1pV zjmk1*xzeH-${M9r=}gm8&wekpFM5S9%lcmCky##Dwc=6Xq)E zmwrY1rPu10{&xDM*XoxZTcBUMUZY>SekJ<#Z(#KTJwxB4i!{$z{XM-#Z}6N-WrW5M z4^^rYH$rICUY=3i5@^&A4l-JWMvY;DXH{9`cvf{14hpPMMMkX9s1Nb%>S4y~C|G~@u|9|Z@JZe!CfhYp+ zSOm~GkQ(UY$5plp>YuD|Mx4+0^C=EdZ%*34g)gFt$Pc#TIU)8Hw}g4&W=c?=4D;rs n4cyr;aAzxb^Z)CA28jKuX#F3p|K+arHL+7&okCuv_5Z&BT?Z#( delta 191 zcmZn(XfcprU|?W$DortDU=RQ@Ie-{MGjUEV6q~50$jGuWU^gQp%j9`t5}K C^e3SJ diff --git a/application/admin/controller/ChatQuickReply.php b/application/admin/controller/ChatQuickReply.php new file mode 100644 index 0000000..109a67f --- /dev/null +++ b/application/admin/controller/ChatQuickReply.php @@ -0,0 +1,229 @@ +get(); + $this->assign('get', $get); + + $category = Request::instance()->get('category'); + $status = Request::instance()->get('status'); + + $where = []; + if ($category) { + $where['category'] = $category; + } + if ($status !== null && $status !== '') { + $where['status'] = (int)$status; + } + + $list = Db::name('chat_quick_reply') + ->where($where) + ->order('sort asc, id desc') + ->paginate(15, false, ['query' => $get]); + + // 获取分类列表 + $categories = Db::name('chat_quick_reply') + ->whereNotNull('category') + ->where('category', '<>', '') + ->group('category') + ->column('category'); + + $this->assign('list', $list); + $this->assign('categories', $categories); + + return $this->fetch(); + } + + /** + * 添加快捷回复 + */ + public function add() + { + if (Request::instance()->isPost()) { + $data = Request::instance()->post(); + + // 验证 + if (empty($data['title'])) { + $this->error('标题不能为空'); + } + if (empty($data['content'])) { + $this->error('内容不能为空'); + } + + $insertData = [ + 'category' => $data['category'] ?? null, + 'title' => $data['title'], + 'content' => $data['content'], + 'sort' => (int)($data['sort'] ?? 0), + 'status' => (int)($data['status'] ?? 1), + 'create_time' => time(), + 'update_time' => time(), + ]; + + $result = Db::name('chat_quick_reply')->insert($insertData); + + if ($result) { + insertAdminLog('添加快捷回复', '标题: ' . $data['title']); + $this->success('添加成功', '/chat_quick_reply/index'); + } else { + $this->error('添加失败'); + } + } + + // 获取分类列表 + $categories = Db::name('chat_quick_reply') + ->whereNotNull('category') + ->where('category', '<>', '') + ->group('category') + ->column('category'); + + $this->assign('categories', $categories); + $this->assign('info', []); + + return $this->fetch(); + } + + /** + * 编辑快捷回复 + */ + public function edit() + { + $id = Request::instance()->param('id'); + + if (Request::instance()->isPost()) { + $data = Request::instance()->post(); + + // 验证 + if (empty($data['title'])) { + $this->error('标题不能为空'); + } + if (empty($data['content'])) { + $this->error('内容不能为空'); + } + + $updateData = [ + 'category' => $data['category'] ?? null, + 'title' => $data['title'], + 'content' => $data['content'], + 'sort' => (int)($data['sort'] ?? 0), + 'status' => (int)($data['status'] ?? 1), + 'update_time' => time(), + ]; + + $result = Db::name('chat_quick_reply')->where('id', $id)->update($updateData); + + if ($result !== false) { + insertAdminLog('编辑快捷回复', 'ID: ' . $id); + $this->success('修改成功', '/chat_quick_reply/index'); + } else { + $this->error('修改失败'); + } + } + + $info = Db::name('chat_quick_reply')->where('id', $id)->find(); + if (!$info) { + $this->error('记录不存在'); + } + + // 获取分类列表 + $categories = Db::name('chat_quick_reply') + ->whereNotNull('category') + ->where('category', '<>', '') + ->group('category') + ->column('category'); + + $this->assign('info', $info); + $this->assign('categories', $categories); + + return $this->fetch('add'); + } + + /** + * 删除快捷回复 + */ + public function del() + { + $id = Request::instance()->param('id'); + + if (!$id) { + $this->error('参数错误'); + } + + $info = Db::name('chat_quick_reply')->where('id', $id)->find(); + if (!$info) { + $this->error('记录不存在'); + } + + $result = Db::name('chat_quick_reply')->where('id', $id)->delete(); + + if ($result) { + insertAdminLog('删除快捷回复', 'ID: ' . $id . ', 标题: ' . $info['title']); + $this->success('删除成功'); + } else { + $this->error('删除失败'); + } + } + + /** + * 修改状态 + */ + public function status() + { + $id = Request::instance()->post('id'); + $status = Request::instance()->post('status'); + + if (!$id) { + return json(['code' => 1, 'msg' => '参数错误']); + } + + $result = Db::name('chat_quick_reply')->where('id', $id)->update([ + 'status' => (int)$status, + 'update_time' => time(), + ]); + + if ($result !== false) { + return json(['code' => 0, 'msg' => '操作成功']); + } else { + return json(['code' => 1, 'msg' => '操作失败']); + } + } + + /** + * 修改排序 + */ + public function sort() + { + $id = Request::instance()->post('id'); + $sort = Request::instance()->post('sort'); + + if (!$id) { + return json(['code' => 1, 'msg' => '参数错误']); + } + + $result = Db::name('chat_quick_reply')->where('id', $id)->update([ + 'sort' => (int)$sort, + 'update_time' => time(), + ]); + + if ($result !== false) { + return json(['code' => 0, 'msg' => '操作成功']); + } else { + return json(['code' => 1, 'msg' => '操作失败']); + } + } +} diff --git a/application/admin/controller/Common.php b/application/admin/controller/Common.php index 17796c9..0967ff8 100644 --- a/application/admin/controller/Common.php +++ b/application/admin/controller/Common.php @@ -29,6 +29,8 @@ class Common extends Controller{ 'Info', 'Log', 'Login', + 'Chat', + 'ChatQuickReply', ); if($user_info['role'] == 1){ if(!in_array($curContrller, $jiankongController)){ @@ -40,6 +42,8 @@ class Common extends Controller{ 'Index', 'Agent', 'Login', + 'Chat', + 'ChatQuickReply', ); if($user_info['role'] == 2){ if(!in_array($curContrller, $dlController)){ diff --git a/application/admin/controller/Login.php b/application/admin/controller/Login.php index f3a30b4..79171fb 100644 --- a/application/admin/controller/Login.php +++ b/application/admin/controller/Login.php @@ -59,7 +59,15 @@ class Login extends Controller{ } $last_login_info = Db::name('admin')->where(array('id' => $admin_info['id']))->field(['last_login_time','last_login_ip'])->find(); Session::set('last_login_info',$last_login_info); - Db::name('admin')->where(array('id' => $admin_info['id']))->update(array('last_login_time' => time(), 'last_login_ip' => getIP())); + + // 生成login_token用于WebSocket连接验证 + $login_token = md5($admin_info['id'] . time() . uniqid()); + Db::name('admin')->where(array('id' => $admin_info['id']))->update(array( + 'last_login_time' => time(), + 'last_login_ip' => getIP(), + 'login_token' => $login_token + )); + $user_info = Db::name('admin')->where('id',$admin_info['id'])->find(); Session::set('user_info',$user_info); insertAdminLog('登录'); diff --git a/application/admin/controller/Report.php b/application/admin/controller/Report.php index 254e55a..4496f92 100644 --- a/application/admin/controller/Report.php +++ b/application/admin/controller/Report.php @@ -36,17 +36,17 @@ class Report extends Common{ } $agent_list = Db::name('user')->where($where)->select(); - // 时间条件 + // 时间条件(默认:今天07:00:00 ~ 明天06:59:59) if($startDate){ $startTime = strtotime($startDate); }else{ - $startTime = strtotime(date('Y-m-d')); + $startTime = strtotime(date('Y-m-d') . ' 07:00:00'); $get['startDate'] = date('Y-m-d H:i:s',$startTime); } if($endDate){ $endTime = strtotime($endDate); }else{ - $endTime = time(); + $endTime = strtotime(date('Y-m-d', strtotime('+1 day')) . ' 06:59:59'); $get['endDate'] = date('Y-m-d H:i:s',$endTime); } $this->assign('get',$get); diff --git a/application/admin/view/.DS_Store b/application/admin/view/.DS_Store index e0b13bd874db213b3ae36d4274f2ac97730a5857..0a3a7b657335f8511f4a87642703362762c97800 100644 GIT binary patch literal 12292 zcmeHNYiu0V6~1Tux-*I68|UGPryFnLBy}7o+1Oq?2~JqQl7=L862Fsx+4WB2A>&zR zXV*?}Q!IfHPXVfcwrVR?eZe2pQbAEwsgxh6Klnp%(iW=z0kwdtz63%@wCcI{&TeKG z8&qiHw9J)e&Yb(0x%cdOeD~ZXgg{p|xr>knLI}l+Q??wdkqIwD##eYdzdlq-umh6@2iCd1D76YuLiCs<)TTU`H)0N6P zNmq>Rmkm^<>KM~!XWN>0H-%fG(Th#t**(pXrf_RZ+r^72T~ojFh7)6F?MWwfpA;qV zx${yfN&bF6DZ`Z{$t1CeGu@wd?38l`TX}!pa)y}1$@dN(0to~X2qX|l;Ik$HFMiOX zc>h@wL$KaJ0)Ye;kO21&VZ1nvd2~)v;X3ffAvAC25Ly&`#(jXO3wt!?(K$)QP#hzM zB9%kI+hTwmj`d;Q9cj#?bCSy81mti6-k15tg%=QCM;b;33&aEoZh-^>2`nH19{Wp) zxA(Q(>2A4qSKiC*eSeeN`>NV9y?;O(8nMPxPQP`#ImW77-25Iw_E_4S#!c_=c*@RB zI_?--IUcvivvxdVcG@=Y?2cs2^BMkh(oLl^-J;_dV_DZcVPZdP+U&vJIJBC-sc$M{ zr5tz2OuIfve2wGy^D8h6J{Cuuon z24}2fX5u97uAPkaCCf~!DtltUiBFpItZGH&+8SLS$tJ9GSu1ma)l)jpR#a6QdPqB+ z#CaS|CHbHvW#3UnOIQ!-r+7T1 z58CmBX{#(Lztf^c_2Fr`IF%iimAkdQ`p9@{auR3ksw<&MR`0_v-@?CqB<^PVrc5XQ z@lL&4Kj}`y(`MfcrWq*vl^k&Z>&1_QEqqXK(#oXLe8#x&n?kxi%3s%+Oo}&ER;^%q zpMIROOB8<)%bB(?xq(ubISyJMYm~wl!c$ilDG_(v>&QmZN;=3fGKy)38S(&mlsrbh zPo5&rlIO{b+>o z@CW!Kya|7Uzr#E5u0j=6sa9$fUCv(dq6ir-T#d37dA~V$sVv1_$Q){W4`^RlQgit2 za&7=Ct5>aFvz}W;+YPb221%96X_;Slg~Ar7xlmZ~`xa^1Jle^+TJ3Y8#SCl^HQhW< zxw^6nulI(H6g8cddF+*tf?Y4RNE=S!%czemk{le`C*0EKGMVZG4Fde{s* zJgsbneXt*HM9u7mBXATo^BA0fQ*at?hB4I6+u$r}rvo!^9xlKvT!g#f9=I3ohX>$M zcnltgufsRsyYK`&S)_x93Uv^E=GVcZ^c~B&YBEO7kt`rWHPGd@MirD0WFa5eS z>B|;OS++!5KUMmYV@NL~Ew;`gxs>r#C;A?foL_1QM4O{1fk@k@lz?wVMQbe=zjT~j zz}2RGtNm%tM_sdYbUI%@gf?#37K!fN-+l0KpF|~R%~_)!QtO4WlQ!nYbmaqpa~Ercfm>C_n; zRQ3!l@ZI9;MxC*lQooazlWH&;RTihhNgA!HRq|xMY%BbXXcje#$Mw7!TnT3odbRA-q8}rKa zAH*t#7Lu4`F|%S7+ytor5p`iL#L7_lCA(=evgN4wlHJ-E3NZ!kO|m<7hBQ`!)+7N) zOCz%2G3~oGjg_KZ$+ivyS>iFVPJ9iw5+7Fir24urW+{i|sGsW*Mc2b7fmtMu=9q;e zmM(!=IAS?2FbhX4w+hU{@ifOQ9I<>kk6G@6uOeo79KPmZmLI{7i}bM=v%FBOk3}&n zr?>&V&LmKd^YNV)`{2Zqz{lurgpa%0+CKtMeEjKm!HS9$@#^`v|DOu~!_djMpa3|@ zBv1gH<^$m5`PqelQ=!QOu!*O50@%b;Jxc+beA?)bRsZe%zli(7NE-MVK=0!J|MM&< zAb|t|3H(1w07`rMd%AFCxl@tiMe?)uFkZLf#S8B@#~-lZvp9-JDvsijilca>-l3i7 m6Z87cNs6sluKk|?MB>EfaS<{H@jriR!|e1(}pt7PE732r`2-0o8K@30IJLK&kJ{llgTl b6@bP75d;7kAd?xGAXbB1!>~D?XAUy}a- +
+
+
会话信息
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + {if condition="$session.rating"} + + + + + {/if} +
会话ID:{$session.id}用户名:{$session.username}
用户余额:{$session.money}客服:{$session.admin_username|default='未分配'}
来源: + {switch name="session.source"} + {case value="1"}PC{/case} + {case value="2"}Game{/case} + {case value="3"}Portal{/case} + {/switch} + 状态: + {switch name="session.status"} + {case value="0"}待分配{/case} + {case value="1"}进行中{/case} + {case value="2"}已结束{/case} + {/switch} +
开始时间:{$session.create_time|date='Y-m-d H:i:s',###}结束时间:{if condition="$session.end_time"}{$session.end_time|date='Y-m-d H:i:s',###}{else/}-{/if}
评分: + {$session.rating}星 + {if condition="$session.rating_content"} +
{$session.rating_content} + {/if} +
+
+
+ +
+
聊天记录
+
+ {volist name="messages" id="msg"} +
+
+
+ {eq name="msg.sender_type" value="1"} + 用户 + {else/} + 客服 + {/eq} + · {$msg.create_time|date='Y-m-d H:i:s',###} +
+
+ {eq name="msg.msg_type" value="2"} + + {else/} + {$msg.content} + {/eq} +
+
+
+ {/volist} +
+
+
+ + diff --git a/application/admin/view/chat/record.html b/application/admin/view/chat/record.html new file mode 100644 index 0000000..b0ea1af --- /dev/null +++ b/application/admin/view/chat/record.html @@ -0,0 +1,117 @@ +{include file="public/header" /} + + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + {volist name="list" id="vo"} + + + + + + + + + + + + {/volist} + +
会话ID用户名客服来源状态评分开始时间结束时间操作
{$vo.id}{$vo.username}{$vo.admin_username|default='未分配'} + {switch name="vo.source"} + {case value="1"}PC{/case} + {case value="2"}Game{/case} + {case value="3"}Portal{/case} + {/switch} + + {switch name="vo.status"} + {case value="0"}待分配{/case} + {case value="1"}进行中{/case} + {case value="2"}已结束{/case} + {/switch} + + {if condition="$vo.rating"} + {$vo.rating}星 + {else/} + - + {/if} + {$vo.create_time|date='Y-m-d H:i:s',###}{if condition="$vo.end_time"}{$vo.end_time|date='Y-m-d H:i:s',###}{else/}-{/if} + + + +
+
+ {$list->render()} +
+
+ + + diff --git a/application/admin/view/chat_quick_reply/add.html b/application/admin/view/chat_quick_reply/add.html new file mode 100644 index 0000000..0bcb06c --- /dev/null +++ b/application/admin/view/chat_quick_reply/add.html @@ -0,0 +1,70 @@ +{include file="public/header" /} + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ + +
+
+
+ + + diff --git a/application/admin/view/chat_quick_reply/index.html b/application/admin/view/chat_quick_reply/index.html new file mode 100644 index 0000000..62f1359 --- /dev/null +++ b/application/admin/view/chat_quick_reply/index.html @@ -0,0 +1,134 @@ +{include file="public/header" /} + + +
+
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + {volist name="list" id="vo"} + + + + + + + + + + + {/volist} + +
ID分类标题内容排序状态创建时间操作
{$vo.id}{$vo.category|default='无'}{$vo.title}{$vo.content} + + + + {$vo.create_time|date='Y-m-d H:i:s',###} + + + + + + +
+
+ {$list->render()} +
+
+ + + diff --git a/application/admin/view/index/index.html b/application/admin/view/index/index.html index ce8eecc..a5b5367 100644 --- a/application/admin/view/index/index.html +++ b/application/admin/view/index/index.html @@ -122,6 +122,17 @@
  • 今日最佳记录
  • +
  • + + 客服管理 + + + +
  • +
    + +
    + +
    + +
    + +
    +
    @@ -242,6 +252,8 @@ query.limit_high_tie = $('#limit_high_tie').val(); query.limit_low_pair = $('#limit_low_pair').val(); query.limit_high_pair = $('#limit_high_pair').val(); + query.limit_low_nn = $('#limit_low_nn').val(); + query.limit_high_nn = $('#limit_high_nn').val(); query.type_xima = $('#xima_type').val(); query.agent_ximalv = $('#agent_ximalv').val() || 0; query.agent_ximalv_dt = $('#agent_ximalv_dt').val() || 0; @@ -320,6 +332,18 @@ }); return false; } + if(query.limit_low_nn.length == 0 || query.limit_low_nn == undefined){ + layer.alert(lang.empty_min_nn_limit,{ + title:lang.message, + }); + return false; + } + if(query.limit_high_nn.length == 0 || query.limit_high_nn == undefined){ + layer.alert(lang.empty_max_nn_limit,{ + title:lang.message, + }); + return false; + } if(query.type_xima == ''){ layer.alert(lang.empty_wash_type,{ title:lang.message, diff --git a/application/agent/view/agent/edit.html b/application/agent/view/agent/edit.html index adbd403..07b279d 100644 --- a/application/agent/view/agent/edit.html +++ b/application/agent/view/agent/edit.html @@ -81,6 +81,16 @@ +
    + +
    + +
    + +
    + +
    +
    @@ -152,6 +162,8 @@ query.limit_high_tie = $('#limit_high_tie').val(); query.limit_low_pair = $('#limit_low_pair').val(); query.limit_high_pair = $('#limit_high_pair').val(); + query.limit_low_nn = $('#limit_low_nn').val(); + query.limit_high_nn = $('#limit_high_nn').val(); query.agent_ximalv = $('#agent_ximalv').val() || 0; query.agent_ximalv_dt = $('#agent_ximalv_dt').val() || 0; query.agent_ximalv_nn = $('#agent_ximalv_nn').val() || 0; @@ -209,6 +221,20 @@ }); return false; } + if(query.limit_low_nn.length == 0 || query.limit_low_nn == undefined){ + layer.alert(lang.empty_min_nn_limit,{ + title:lang.message, + }); + return false; + } + if(query.limit_high_nn.length == 0 || query.limit_high_nn == undefined){ + layer.alert(lang.empty_max_nn_limit,{ + title:lang.message, + }); + return false; + } + return false; + } if(query.agent_ximalv.length == 0 || query.agent_ximalv == undefined){ ayer.alert(lang.empty_baccacat_rate,{ title:lang.message, diff --git a/application/agent/view/player/add.html b/application/agent/view/player/add.html index 8db047a..034f84c 100644 --- a/application/agent/view/player/add.html +++ b/application/agent/view/player/add.html @@ -547,6 +547,16 @@
    +
    + +
    + +
    + +
    + +
    +
    @@ -695,6 +705,8 @@ query.limit_high_tie = $('#limit_high_tie').val(); query.limit_low_pair = $('#limit_low_pair').val(); query.limit_high_pair = $('#limit_high_pair').val(); + query.limit_low_nn = $('#limit_low_nn').val(); + query.limit_high_nn = $('#limit_high_nn').val(); query.win_limit = $('#win_limit').val(); query.agent_commission = $('#agent_commission').val(); query.agent_commission_dt = $('#agent_commission_dt').val(); @@ -787,6 +799,18 @@ }); return false; } + if(query.limit_low_nn.length == 0 || query.limit_low_nn == undefined){ + layer.alert(lang.empty_min_nn_limit,{ + title:lang.message, + }); + return false; + } + if(query.limit_high_nn.length == 0 || query.limit_high_nn == undefined){ + layer.alert(lang.empty_max_nn_limit,{ + title:lang.message, + }); + return false; + } if(query.win_limit.length == 0 || query.win_limit == undefined){ layer.alert(lang.empty_day_win_limit,{ title:lang.message, diff --git a/application/agent/view/player/edit.html b/application/agent/view/player/edit.html index 831fe2a..64c06a6 100644 --- a/application/agent/view/player/edit.html +++ b/application/agent/view/player/edit.html @@ -134,6 +134,18 @@
    +
    + +
    + +
    +
    + +
    + +
    +
    +
    @@ -616,6 +628,8 @@ + +