|
@@ -9,20 +9,76 @@ namespace app\admin\controller;
|
|
|
class Settings extends Base
|
|
class Settings extends Base
|
|
|
{
|
|
{
|
|
|
// 访客端入口列表
|
|
// 访客端入口列表
|
|
|
|
|
+ public function entranceList()
|
|
|
|
|
+ {
|
|
|
|
|
+ if(request()->isAjax()){
|
|
|
|
|
+ // 查询目录下所有文件
|
|
|
|
|
+ $files = $this->allFile(ROOT_PATH.'entranceJs/new');
|
|
|
|
|
+ $filesInfo = [];
|
|
|
|
|
+ foreach ($files as $v) {
|
|
|
|
|
+ $addTime = filemtime(ROOT_PATH."entranceJs/new/$v");
|
|
|
|
|
+ $lastLoad = fileatime(ROOT_PATH."entranceJs/new/$v");
|
|
|
|
|
+ $filesInfo[] = (object)[
|
|
|
|
|
+ 'fileName' => $v,
|
|
|
|
|
+ 'addTime' => date("Y-m-d H:i:s",$addTime),
|
|
|
|
|
+ 'lastLoad' => date("Y-m-d H:i:s",$lastLoad),
|
|
|
|
|
+ 'operate' => $this->fileBtn($v),
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ $return = (object)[
|
|
|
|
|
+ 'total' => count($filesInfo),
|
|
|
|
|
+ 'rows' => $filesInfo,
|
|
|
|
|
+ ];
|
|
|
|
|
+ return json($return);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return $this->fetch('entrancelist');
|
|
|
|
|
+ }
|
|
|
|
|
+ // 访客端入口新增
|
|
|
public function index()
|
|
public function index()
|
|
|
{
|
|
{
|
|
|
|
|
+ if(request()->isPost()){
|
|
|
|
|
+ $param = input('post.');
|
|
|
|
|
+ $name = $param['name'];
|
|
|
|
|
+ // 查询目录下所有文件
|
|
|
|
|
+ $files = $this->allFile(ROOT_PATH.'entranceJs/new');
|
|
|
|
|
+ $have = 0;
|
|
|
|
|
+ // 判断是否存在该文件.
|
|
|
|
|
+ foreach ($files as $v) {
|
|
|
|
|
+ $fileName = substr($v,0,strpos($v, '.'));
|
|
|
|
|
+ if ($fileName == $name) {
|
|
|
|
|
+ $have = 1;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if ($have) {
|
|
|
|
|
+ return json(['code' => -2, 'data' => '', 'msg' => '文件名已存在']);
|
|
|
|
|
+ }
|
|
|
|
|
+ $result = db('guestenter')->order('sort','asc')->select();
|
|
|
|
|
+ $copy = $this->file2dir(ROOT_PATH.'entranceJs/FloatingButton.js',ROOT_PATH.'entranceJs/new/', $name.'.js');
|
|
|
|
|
+ $result[] = (object)[
|
|
|
|
|
+ "margin_top" => $param['marginTop'],
|
|
|
|
|
+ "stop_time" => $param['overtime'],
|
|
|
|
|
+ "copywriting" => $param['overtimeInfo'],
|
|
|
|
|
+ ];
|
|
|
|
|
+ $data = json_encode($result);
|
|
|
|
|
+ if ($copy) {
|
|
|
|
|
+ $dataArr = ["data = $data;"];
|
|
|
|
|
+ $result = $this->UpdataFile(ROOT_PATH.'entranceJs/new/'.$name.'.js', $dataArr, 24, 24, false);
|
|
|
|
|
+ if ($result) {
|
|
|
|
|
+ return json(['code' => 1, 'data' => 'settings/index', 'msg' => '入口添加成功']);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return json(['code' => -2, 'data' => '', 'msg' => '操作失败']);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return json(['code' => -2, 'data' => '', 'msg' => '操作失败']);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
if(request()->isAjax()){
|
|
if(request()->isAjax()){
|
|
|
$param = input('param.');
|
|
$param = input('param.');
|
|
|
$limit = $param['pageSize'];
|
|
$limit = $param['pageSize'];
|
|
|
$offset = (($param['pageNumber'] - 1) * $limit);
|
|
$offset = (($param['pageNumber'] - 1) * $limit);
|
|
|
$where = [];
|
|
$where = [];
|
|
|
-// if (empty($param['searchText']) === false || intval($param['searchText']) == 0) {
|
|
|
|
|
-// $where['user_account|user_name|user_job_number|fullname'] = ['like', '%' . $param['searchText'] . '%'];
|
|
|
|
|
-// }
|
|
|
|
|
- //客服组
|
|
|
|
|
-// if ($param['group_id'] != '' && $param['group_id'] != 0) {
|
|
|
|
|
-// $where['group_id'] = $param['group_id'];
|
|
|
|
|
-// }
|
|
|
|
|
$result = db('guestenter')->where($where)->limit($offset, $limit)->order('sort', 'asc')->select();
|
|
$result = db('guestenter')->where($where)->limit($offset, $limit)->order('sort', 'asc')->select();
|
|
|
//客服组
|
|
//客服组
|
|
|
$group = db('groups')->select();
|
|
$group = db('groups')->select();
|
|
@@ -58,53 +114,48 @@ class Settings extends Base
|
|
|
|
|
|
|
|
return $this->fetch();
|
|
return $this->fetch();
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 添加访客端入口
|
|
|
|
|
|
|
+ // 访客端入口列表
|
|
|
public function add()
|
|
public function add()
|
|
|
{
|
|
{
|
|
|
- if(request()->isPost()){
|
|
|
|
|
|
|
+ if(request()->isAjax()){
|
|
|
|
|
+ $param = input('param.');
|
|
|
|
|
+ $limit = $param['pageSize'];
|
|
|
|
|
+ $offset = (($param['pageNumber'] - 1) * $limit);
|
|
|
|
|
+ $where = [];
|
|
|
|
|
+ $result = db('guestenter')->where($where)->limit($offset, $limit)->order('sort', 'asc')->select();
|
|
|
|
|
+ //客服组
|
|
|
|
|
+ $group = db('groups')->select();
|
|
|
|
|
+ foreach($result as $key=>$vo){
|
|
|
|
|
+ // 优化显示头像
|
|
|
|
|
+ $result[$key]['image'] = '<img src="' . $vo['image'] . '" height="40px">';
|
|
|
|
|
|
|
|
- $param = input('post.');
|
|
|
|
|
- unset($param['file']); // 删除layui头像上传隐藏字段
|
|
|
|
|
- // 检测账号
|
|
|
|
|
- if(!empty($param['name'])){
|
|
|
|
|
- $user = db('guestenter')->where('name', $param['name'])->find();
|
|
|
|
|
- if(!empty($user)){
|
|
|
|
|
- return json(['code' => -1, 'data' => '', 'msg' => '该名称已存在']);
|
|
|
|
|
|
|
+ if($vo['group_id'] == 'all'){
|
|
|
|
|
+ $result[$key]['user_group'] = '所有客服组';
|
|
|
|
|
+ }
|
|
|
|
|
+ for($i=0;$i<count($group);$i++){
|
|
|
|
|
+ if($vo['group_id'] == $group[$i]['id']){
|
|
|
|
|
+ $result[$key]['user_group'] = $group[$i]['name'];
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if(strlen($param['name'])>12) {
|
|
|
|
|
- return json(['code' => -8, 'data' => '', 'msg' => '名称字数超过限制']);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- if(!is_numeric($param['sort'])) {
|
|
|
|
|
- return json(['code' => -6, 'data' => '', 'msg' => '排序未输入整数']);
|
|
|
|
|
|
|
+ // 生成操作按钮
|
|
|
|
|
+ $result[$key]['operate'] = $this->makeBtn($vo['id']);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if(empty($param['group_id'])){
|
|
|
|
|
- return json(['code' => -3, 'data' => '', 'msg' => '请选择分组']);
|
|
|
|
|
- }
|
|
|
|
|
- //检测头像
|
|
|
|
|
- if(empty($param['image'])){
|
|
|
|
|
- return json(['code' => -4, 'data' => '', 'msg' => '请上传图片']);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ $return['total'] = db('guestenter')->where($where)->count(); //总数据
|
|
|
|
|
+ $return['rows'] = $result;
|
|
|
|
|
|
|
|
- try{
|
|
|
|
|
- db('guestenter')->insert($param);
|
|
|
|
|
- }catch(\Exception $e){
|
|
|
|
|
- return json(['code' => -5, 'data' => '', 'msg' => $e->getMessage()]);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return json($return);
|
|
|
|
|
|
|
|
- return json(['code' => 1, 'data' => 'settings/index', 'msg' => '添加功能菜单成功']);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ $settings = db('settings')->where('id',1)->find();
|
|
|
|
|
|
|
|
$this->assign([
|
|
$this->assign([
|
|
|
- 'groups' => db('groups')->select(),
|
|
|
|
|
|
|
+ 'settings' => $settings,
|
|
|
'status' => config('kf_status')
|
|
'status' => config('kf_status')
|
|
|
]);
|
|
]);
|
|
|
|
|
|
|
|
- return $this->fetch('add');
|
|
|
|
|
|
|
+ return $this->fetch();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 编辑访客端入口
|
|
// 编辑访客端入口
|
|
@@ -172,6 +223,30 @@ class Settings extends Base
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ // 删除访客端入口文件
|
|
|
|
|
+ public function delFile()
|
|
|
|
|
+ {
|
|
|
|
|
+ if(request()->isAjax()){
|
|
|
|
|
+ $fileName = input('param.fileName');
|
|
|
|
|
+
|
|
|
|
|
+ try{
|
|
|
|
|
+ unlink(ROOT_PATH."entranceJs/new/$fileName");
|
|
|
|
|
+ }catch(\Exception $e){
|
|
|
|
|
+ return json(['code' => -1, 'data' => '', 'msg' => $e->getMessage()]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return json(['code' => 1, 'data' => '', 'msg' => '删除成功']);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 效果预览
|
|
|
|
|
+ */
|
|
|
|
|
+ function demo()
|
|
|
|
|
+ {
|
|
|
|
|
+ return $this->fetch();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 上传客服头像
|
|
// 上传客服头像
|
|
|
public function upAvatar()
|
|
public function upAvatar()
|
|
|
{
|
|
{
|
|
@@ -204,38 +279,107 @@ class Settings extends Base
|
|
|
return $operate;
|
|
return $operate;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //自动邀请设置
|
|
|
|
|
- public function update(){
|
|
|
|
|
- if(request()->isPost()){
|
|
|
|
|
-
|
|
|
|
|
- $param = input('post.');
|
|
|
|
|
|
|
+ // 生成按钮
|
|
|
|
|
+ private function fileBtn($fileName)
|
|
|
|
|
+ {
|
|
|
|
|
|
|
|
- $info['stop_time'] = $param['overtime'];
|
|
|
|
|
- $info['copywriting'] = $param['overtimeInfo'];
|
|
|
|
|
|
|
+ $operate = '<a style="margin-left:5px;" href="javascript:DelFile(`' . $fileName . '`)"><button type="button" class="btn btn-danger btn-sm">';
|
|
|
|
|
+ $operate .= '<i class="fa fa-trash-o"></i> 删除</button></a> ';
|
|
|
|
|
|
|
|
- try{
|
|
|
|
|
- db('settings')->where('id', $param['id'])->update($info);
|
|
|
|
|
- }catch(\Exception $e){
|
|
|
|
|
- return json(['code' => -5, 'data' => 'settings/index', 'msg' => $e->getMessage()]);
|
|
|
|
|
|
|
+ return $operate;
|
|
|
|
|
+ }
|
|
|
|
|
+ //复制文件
|
|
|
|
|
+ function file2dir($sourcefile, $dir,$filename){
|
|
|
|
|
+ if( ! file_exists($sourcefile)){
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ //$filename = basename($sourcefile);
|
|
|
|
|
+ return copy($sourcefile, $dir .''. $filename);
|
|
|
|
|
+ }
|
|
|
|
|
+ // 获取文件夹下的文件.
|
|
|
|
|
+ function allFile($dir) {
|
|
|
|
|
+ $handle=opendir($dir);
|
|
|
|
|
+ $i=0;
|
|
|
|
|
+ $list = [];
|
|
|
|
|
+ while(!!$file = readdir($handle)) {
|
|
|
|
|
+ if (($file!=".")and($file!="..")) {
|
|
|
|
|
+ $list[$i]=$file;
|
|
|
|
|
+ $i=$i+1;
|
|
|
}
|
|
}
|
|
|
- return json(['code' => 1, 'data' => $this->redirect('settings/index'), 'msg' => '自动邀请设置成功']);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ closedir($handle);
|
|
|
|
|
+ return $list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //访客端入口上边距设置
|
|
|
|
|
- public function margin(){
|
|
|
|
|
- if(request()->isPost()){
|
|
|
|
|
-
|
|
|
|
|
- $param = input('post.');
|
|
|
|
|
-
|
|
|
|
|
- $info['margin_top'] = $param['margin-top'];
|
|
|
|
|
-
|
|
|
|
|
- try{
|
|
|
|
|
- db('settings')->where('id', $param['id'])->update($info);
|
|
|
|
|
- }catch(\Exception $e){
|
|
|
|
|
- return json(['code' => -6, 'data' => 'settings/index', 'msg' => $e->getMessage()]);
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 修改文件
|
|
|
|
|
+ * @author GRACE
|
|
|
|
|
+ * @param $file 文件路径
|
|
|
|
|
+ * @param $arr 修改值数组
|
|
|
|
|
+ * @param $len 开始索引位置
|
|
|
|
|
+ * @param $end 结束索引位置 或 匹配 索引值
|
|
|
|
|
+ * @param bool $loke 文件为空时,是否添加 <?php 头
|
|
|
|
|
+ */
|
|
|
|
|
+ function UpdataFile ($file, $arr, $len, $end, $loke = true)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (is_dir($file)) {
|
|
|
|
|
+ exit($file. '请传入正确的文件路径');
|
|
|
|
|
+ }
|
|
|
|
|
+ if (is_file($file)) {
|
|
|
|
|
+ // 判断是否是常规文件
|
|
|
|
|
+ if (is_readable($file)) {
|
|
|
|
|
+ // 文件是否可读
|
|
|
|
|
+ if (is_writable($file)) {
|
|
|
|
|
+ // 文件是否可写
|
|
|
|
|
+ $fp = file($file);
|
|
|
|
|
+ // 以数据的方式读取文件
|
|
|
|
|
+ if (!empty($fp)) {
|
|
|
|
|
+ $lokes = true;
|
|
|
|
|
+ $arr1 = [];
|
|
|
|
|
+ // 接收前半部分
|
|
|
|
|
+ $arr2 = [];
|
|
|
|
|
+ // 接收后半部分
|
|
|
|
|
+ foreach ($fp as $k => $v) {
|
|
|
|
|
+ if ($k >= $len && $lokes) {
|
|
|
|
|
+ if (is_int($end)) {
|
|
|
|
|
+ if ($k == $end) {
|
|
|
|
|
+ $lokes = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if (trim($v) == $end) {
|
|
|
|
|
+ $arr2[] = $v; $lokes = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if ($lokes) {
|
|
|
|
|
+ $arr1[] = $v;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $arr2[] = $v;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ $arr3 = join('', $arr1).join(PHP_EOL, $arr).PHP_EOL.join('', $arr2);
|
|
|
|
|
+ if (file_put_contents($file, $arr3)) {
|
|
|
|
|
+ return '修改成功';
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return '修改失败';
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ if ($loke) {
|
|
|
|
|
+ $a = '<?php'.PHP_EOL; $a.= join(PHP_EOL, $arr).PHP_EOL; file_put_contents($file, $a, FILE_APPEND);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $a = join(PHP_EOL, $arr).PHP_EOL; file_put_contents($file, $a, FILE_APPEND);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ exit($file. 'The file is not writable');
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ exit($file. ' is not a regular file');
|
|
|
}
|
|
}
|
|
|
- return json(['code' => 1, 'data' => $this->redirect('settings/index'), 'msg' => '自动邀请设置成功']);
|
|
|
|
|
|
|
+ } else {
|
|
|
|
|
+ exit($file. ' is not a regular file');
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
}
|
|
}
|