回访单

This commit is contained in:
孟凡懂 2022-06-05 14:30:14 +08:00
parent 5b724e6c41
commit 8da31ba095
24 changed files with 894 additions and 77 deletions

View File

@ -124,9 +124,14 @@ class User extends Backend
$this->model->validateFailException(true)->validate($validate);
}
$result = $this->model->allowField(true)->save($params);
var_dump($params['need_visit']);
//新加用户期初等级
if($result && $this->model->id){
$log_res = $this->model->afterlog($this->auth->id,$this->model,$this->model->id);
if($params['need_visit'] == 1){
$log_res = $this->model->afterlog($this->auth->id,$this->model,$this->model->id,'',true);
}else{
$log_res = $this->model->afterlog($this->auth->id,$this->model,$this->model->id,'',false);
}
if(!$log_res){
$this->model->rollback();
$this->error('新增失败');
@ -317,69 +322,42 @@ class User extends Backend
$this->error(__('You have no permission'));
}
}
$all_level = $this->level_model->where('status', 1)->column('id,name');
//$all_level = $this->level_model->where('status', 1)->column('id,name');
if ($this->request->isPost()) {
$params = $this->request->post("row/a");
//var_dump($params);
$user_data = array(
'id' => $row->id
);
//记录用户充值、积分、等级记录
//记录用户续保记录
if (!empty($params['inscom']) && !empty($params['insdate'])) {
$log_data = array(
'user4s_id' => $row->id,
'admin_id'=>$this->auth->id
'admin_id'=>$this->auth->id,
'inscom'=>$params['inscom'],
'insdate'=>$params['insdate'],
'star'=>$params['star'],
'description'=>$params['description']
);
$this->Inslog_model = new \app\common\model\user4s\Inslog();
$this->Inslog_model->isUpdate(false)->save($log_data);
$user_data = array(
'inscom'=>$params['inscom'],
'insdate'=>$params['insdate'],
);
//余额充值
if ($params['balance'] > 0) {
$now = round($params['balance'], 2);
$end = round($row->balance + $now, 2);
$log_data['start'] = $row->balance;
$log_data['end'] = $end;
$log_data['state'] = 0;
$log_data['description'] = $params['description'];
$this->log_model->isUpdate(false)->save($log_data);
$user_data['balance'] = $end;
}
//积分记录
if ($params['integral'] > 0) {
$now = intval($params['integral']);
$end = intval($row->integral + $now);
$log_data['start'] = $row->integral;
$log_data['end'] = $end;
$log_data['state'] = 1;
if($now > 0){
$log_data['description'] = $params['description'].' 赠送积分:'.$now;
}else{
$log_data['description'] = $params['description'].' 系统后台扣除积分'.$now;
}
$this->log_model = new \app\common\model\user4s\Log();
$this->log_model->isUpdate(false)->save($log_data);
$user_data['integral'] = $end;
//var_dump($log_data, $user_data);
}
//等级记录
if ($params['level_id'] != $row->level_id && $params['level_id'] > 0) {
$end = intval($params['level_id']);
$log_data['start'] = $row->level_id;
$log_data['end'] = $end;
$log_data['description'] = '会员等级变动,由 '.$all_level[$row->level_id].' 更改为:'.$all_level[$end];
//var_dump($log_data);
$this->levellog_model->isUpdate(false)->save($log_data);
$user_data['level_id'] = $end;
}
if(isset($user_data['balance']) || isset($user_data['integral']) || isset($user_data['level_id'])){
//var_dump($user_data);
//$this->model->get($row->id);
$this->model->save($user_data, ['id' => $row->id]);
}else{
$this->error('请填写续保信息',url('user4s/user/expireins',['user4s_id'=>$row->id]));
}
$this->success();
$this->success('续保成功!',url('user4s/user/expireins',['user4s_id'=>$row->id]));
}
//var_dump($col);
$this->view->assign("all_level", $all_level);
$all_star = array(
1=>'★',
2=>'★★',
3=>'★★★',
4=>'★★★★',
5=>'★★★★★',
);
$this->view->assign("now", date('Y-m-d'));
$this->view->assign("all_star", $all_star);
$this->view->assign('row', $row);
return $this->view->fetch();
}

View File

@ -0,0 +1,71 @@
<?php
namespace app\admin\controller\user4s;
use app\common\controller\Backend;
/**
* 回访单
*
* @icon fa fa-circle-o
*/
class Visit extends Backend
{
/**
* Visit模型对象
* @var \app\common\model\user4s\Visit
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\common\model\user4s\Visit;
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
/**
* 查看
*/
public function index()
{
//当前是否为关联查询
$this->relationSearch = true;
//设置过滤方法
$this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
//如果发送的来源是Selectpage则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list = $this->model
->with(['visittype','user','admin'])
->where($where)
->order($sort, $order)
->paginate($limit);
foreach ($list as $row) {
}
$result = array("total" => $list->total(), "rows" => $list->items());
return json($result);
}
return $this->view->fetch();
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace app\admin\controller\user4s;
use app\common\controller\Backend;
/**
* 续保记录
*
* @icon fa fa-circle-o
*/
class Visittype extends Backend
{
/**
* Visittype模型对象
* @var \app\common\model\user4s\Visittype
*/
protected $model = null;
public function _initialize()
{
parent::_initialize();
$this->model = new \app\common\model\user4s\Visittype;
}
/**
* 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
* 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
* 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
*/
}

View File

@ -0,0 +1,58 @@
<?php
return [
'Id' => 'ID',
'User4s_id' => '会员',
'Admin_id' => '操作员',
'Type_id' => '回访类型',
'Visittime' => '回访时间',
'Description' => '备注',
'Createtime' => '创建时间',
'Deletetime' => '删除时间',
'Visittype.id' => 'ID',
'Visittype.name' => '名称',
'Visittype.tip_time' => '提醒时间',
'Visittype.description' => '备注',
'Visittype.createtime' => '创建时间',
'Visittype.deletetime' => '删除时间',
'User.id' => 'ID',
'User.category_id' => '用户分组',
'User.level_id' => '用户等级',
'User.name' => '姓名',
'User.tel' => '联系方式',
'User.balance' => '余额',
'User.integral' => '积分',
'User.genderdata' => '性别',
'User.genderdata male' => '男',
'User.genderdata female' => '女',
'User.city' => '省市',
'User.buydate' => '购车日期',
'User.carno' => '车牌号码',
'User.model' => '车型',
'User.color' => '颜色',
'User.inscom' => '保险类型',
'User.insdate' => '保险日期',
'User.tags' => '标签',
'User.description' => '备注',
'User.admin_id' => '销售顾问',
'User.createtime' => '创建时间',
'User.updatetime' => '更新时间',
'User.deletetime' => '删除时间',
'User.status' => '状态值',
'User.status 0' => '禁用',
'User.status 1' => '正常',
'Admin.id' => 'ID',
'Admin.username' => '用户名',
'Admin.nickname' => '昵称',
'Admin.password' => '密码',
'Admin.salt' => '密码盐',
'Admin.avatar' => '头像',
'Admin.email' => '电子邮箱',
'Admin.loginfailure' => '失败次数',
'Admin.logintime' => '登录时间',
'Admin.loginip' => '登录IP',
'Admin.createtime' => '创建时间',
'Admin.updatetime' => '更新时间',
'Admin.token' => 'Session标识',
'Admin.status' => '状态'
];

View File

@ -0,0 +1,10 @@
<?php
return [
'Id' => 'ID',
'Name' => '名称',
'Tip_time' => '提醒时间',
'Description' => '备注',
'Createtime' => '创建时间',
'Deletetime' => '删除时间'
];

View File

@ -92,6 +92,17 @@
<input id="c-insdate" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[insdate]" type="text" value="{:date('Y-m-d')}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('是否需要回访')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-need_visit" name="row[need_visit]" type="hidden" value="1">
<a href="javascript:;" data-toggle="switcher" class="btn-switcher" data-input-id="c-need_visit" data-yes="1" data-no="0" >
<i class="fa fa-toggle-on text-success fa-2x"></i>
</a>
<span id="helpBlock" class="help-block">新用户开启后可以直接创建回访单。</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>

View File

@ -1,4 +1,4 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<form id="renewal-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
{:token()}
<div class="panel panel-warning" >
<div class="panel-heading"><b>用户保险信息</div>
@ -20,7 +20,6 @@
<label class="control-label col-xs-4 col-sm-2">保险类型:</label>
<div class="col-xs-6 col-sm-8">
<label class="control-label">{$row.inscom|htmlentities}</label>
<input id="start-balance" type="hidden" value="{$row.inscom|htmlentities}">
</div>
</div>
<div class="form-group">
@ -36,8 +35,8 @@
<label class="control-label col-xs-12 col-sm-2">{:__('用户满意度')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[star]">
{foreach name="all_star" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
@ -45,36 +44,30 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('类型')}:</label>
<label class="control-label col-xs-12 col-sm-2">{:__('续保保险类型')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-type" data-rule="required" class="form-control selectpicker" name="row[type]">
{foreach name="typeList" item="vo"}
<option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
{/foreach}
</select>
<input id="c-inscom" class="form-control" name="row[inscom]" type="text" value="{$row.inscom|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Level_id')}:</label>
<label class="control-label col-xs-12 col-sm-2">{:__('续保保险时间')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-level_id" data-rule="required" data-source="user4s/level/selectpage" data-field="name" data-format-item="{name} ({price}元)" class="form-control selectpage" name="row[level_id]" type="text" value="{$row.level_id>0? htmlentities($row.level_id) : 1}">
<span id="helpBlock" class="help-block">如果需要更改用户会员等级请选择此处,如果不需要更改可以不选择</span>
<input id="c-insdate" class="form-control datetimepicker" data-date-format="YYYY-MM-DD" data-use-current="true" name="row[insdate]" type="text" value="{$now}">
<span id="helpBlock" class="help-block">本次续保的保险开始时间,方便下次提醒</span>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-description" class="form-control" name="row[description]" type="text" value="">
<span id="helpBlock" class="help-block">建议输入备注信息,方便后期对账查询。</span>
<span id="helpBlock" class="help-block">建议输入备注信息,方便后期查询。</span>
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
<button type="submit" class="btn btn-primary btn-embossed">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>

View File

@ -0,0 +1,34 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User4s_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user4s_id" data-rule="required" data-source="user4s/user/index" class="form-control selectpage" name="row[user4s_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Type_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-type_id" data-rule="required" data-source="user4s/visittype/index" class="form-control selectpage" name="row[type_id]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Visittime')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-visittime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[visittime]" type="text" value="{:date('Y-m-d H:i:s')}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-description" class="form-control" name="row[description]" type="text" value="">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -0,0 +1,34 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User4s_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user4s_id" data-rule="required" data-source="user4s/index" class="form-control selectpage" name="row[user4s_id]" type="text" value="{$row.user4s_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Type_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-type_id" data-rule="required" data-source="type/index" class="form-control selectpage" name="row[type_id]" type="text" value="{$row.type_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Visittime')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-visittime" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[visittime]" type="text" value="{:$row.visittime?datetime($row.visittime):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-description" class="form-control" name="row[description]" type="text" value="{$row.description|htmlentities}">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -0,0 +1,35 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('user4s/visit/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('user4s/visit/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<!-- <a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('user4s/visit/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a> -->
<!-- <div class="dropdown btn-group {:$auth->check('user4s/visit/multi')?'':'hide'}">
<a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
<ul class="dropdown-menu text-left" role="menu">
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
</ul>
</div> -->
<!-- <a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('user4s/visit/recyclebin')?'':'hide'}" href="user4s/visit/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a> -->
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('user4s/visit/edit')}"
data-operate-del="{:$auth->check('user4s/visit/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('user4s/visit/restore')?'':'hide'}" href="javascript:;" data-url="user4s/visit/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('user4s/visit/destroy')?'':'hide'}" href="javascript:;" data-url="user4s/visit/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('user4s/visit/restore')?'':'hide'}" href="javascript:;" data-url="user4s/visit/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('user4s/visit/destroy')?'':'hide'}" href="javascript:;" data-url="user4s/visit/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('user4s/visit/restore')}"
data-operate-destroy="{:$auth->check('user4s/visit/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,28 @@
<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Tip_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-tip_time" data-rule="required" class="form-control" name="row[tip_time]" type="text" value="7">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-description" class="form-control" name="row[description]" type="text" value="">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -0,0 +1,28 @@
<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-name" data-rule="required" class="form-control" name="row[name]" type="text" value="{$row.name|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Tip_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-tip_time" data-rule="required" class="form-control" name="row[tip_time]" type="text" value="{:$row.tip_time|intval}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Description')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-description" class="form-control" name="row[description]" type="text" value="{$row.description|htmlentities}">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
</div>
</div>
</form>

View File

@ -0,0 +1,27 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
<a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}" ><i class="fa fa-refresh"></i> </a>
<a href="javascript:;" class="btn btn-success btn-add {:$auth->check('user4s/visittype/add')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
<a href="javascript:;" class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('user4s/visittype/edit')?'':'hide'}" title="{:__('Edit')}" ><i class="fa fa-pencil"></i> {:__('Edit')}</a>
<a href="javascript:;" class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('user4s/visittype/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
<a class="btn btn-success btn-recyclebin btn-dialog {:$auth->check('user4s/visittype/recyclebin')?'':'hide'}" href="user4s/visittype/recyclebin" title="{:__('Recycle bin')}"><i class="fa fa-recycle"></i> {:__('Recycle bin')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
data-operate-edit="{:$auth->check('user4s/visittype/edit')}"
data-operate-del="{:$auth->check('user4s/visittype/del')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,25 @@
<div class="panel panel-default panel-intro">
{:build_heading()}
<div class="panel-body">
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade active in" id="one">
<div class="widget-body no-padding">
<div id="toolbar" class="toolbar">
{:build_toolbar('refresh')}
<a class="btn btn-info btn-multi btn-disabled disabled {:$auth->check('user4s/visittype/restore')?'':'hide'}" href="javascript:;" data-url="user4s/visittype/restore" data-action="restore"><i class="fa fa-rotate-left"></i> {:__('Restore')}</a>
<a class="btn btn-danger btn-multi btn-disabled disabled {:$auth->check('user4s/visittype/destroy')?'':'hide'}" href="javascript:;" data-url="user4s/visittype/destroy" data-action="destroy"><i class="fa fa-times"></i> {:__('Destroy')}</a>
<a class="btn btn-success btn-restoreall {:$auth->check('user4s/visittype/restore')?'':'hide'}" href="javascript:;" data-url="user4s/visittype/restore" title="{:__('Restore all')}"><i class="fa fa-rotate-left"></i> {:__('Restore all')}</a>
<a class="btn btn-danger btn-destroyall {:$auth->check('user4s/visittype/destroy')?'':'hide'}" href="javascript:;" data-url="user4s/visittype/destroy" title="{:__('Destroy all')}"><i class="fa fa-times"></i> {:__('Destroy all')}</a>
</div>
<table id="table" class="table table-striped table-bordered table-hover"
data-operate-restore="{:$auth->check('user4s/visittype/restore')}"
data-operate-destroy="{:$auth->check('user4s/visittype/destroy')}"
width="100%">
</table>
</div>
</div>
</div>
</div>
</div>

View File

@ -41,7 +41,7 @@ class User extends Model
// });
}
//新建用户事件 加入会员余额、积分、等级等期初
public function afterlog($admin_id,$model=null,$id=null,$description='')
public function afterlog($admin_id,$model=null,$id=null,$description='',$need_visit=false)
{
if(isset($model)){
@ -96,6 +96,22 @@ class User extends Model
$this->levellog_model = new \app\common\model\user4s\Levellog();
$this->levellog_model->isUpdate(false)->save($log_data);
}
//新加入用户添加回访单
if ($need_visit) {
$visit_type = new \app\common\model\user4s\Visittype();
$all_type = $visit_type->get(1);
//var_dump($all_type);
$visit_data = array(
'user4s_id' => $row->id,
'admin_id'=>$admin_id,
'type_id'=>1,
'visittime'=>strtotime('+'.$all_type->tip_time.' days'),
'description'=>'新用户回访'
);
//var_dump($visit_data);
$visit = new \app\common\model\user4s\Visit();
$visit->isUpdate(false)->save($visit_data);
}
return true;
}else{
// if($del_error){

View File

@ -0,0 +1,64 @@
<?php
namespace app\common\model\user4s;
use think\Model;
use traits\model\SoftDelete;
class Visit extends Model
{
use SoftDelete;
// 表名
protected $name = 'user4s_visit';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = false;
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
'visittime_text'
];
public function getVisittimeTextAttr($value, $data)
{
$value = $value ? $value : (isset($data['visittime']) ? $data['visittime'] : '');
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
}
protected function setVisittimeAttr($value)
{
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
}
public function visittype()
{
return $this->belongsTo('Visittype', 'type_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
public function user()
{
return $this->belongsTo('User', 'user4s_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
public function admin()
{
return $this->belongsTo('app\common\model\Admin', 'admin_id', 'id', [], 'LEFT')->setEagerlyType(0);
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace app\common\model\user4s;
use think\Model;
use traits\model\SoftDelete;
class Visittype extends Model
{
use SoftDelete;
// 表名
protected $name = 'user4s_visittype';
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = false;
protected $deleteTime = 'deletetime';
// 追加属性
protected $append = [
//'tip_time_text'
];
}

View File

@ -0,0 +1,27 @@
<?php
namespace app\common\validate\user4s;
use think\Validate;
class Visit extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -0,0 +1,27 @@
<?php
namespace app\common\validate\user4s;
use think\Validate;
class Visittype extends Validate
{
/**
* 验证规则
*/
protected $rule = [
];
/**
* 提示消息
*/
protected $message = [
];
/**
* 验证场景
*/
protected $scene = [
'add' => [],
'edit' => [],
];
}

View File

@ -53,6 +53,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
//这里可以动态赋值比如从URL中获取admin_id的值filter.admin_id=Fast.api.query('admin_id');
filter.user4s_id = Fast.api.query('user4s_id');
op.user4s_id = "=";
if (filter.user4s_id == null || filter.user4s_id == "") {
delete filter.user4s_id;
delete op.user4s_id;
}
params.filter = JSON.stringify(filter);
params.op = JSON.stringify(op);
console.log(params);

View File

@ -322,7 +322,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate,
buttons: [
{
name: 'push',
name: 'renewal',
text: __('续保'),
title: __('续保'),
classname: 'btn btn-xs btn-danger btn-dialog',
@ -338,7 +338,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
}
},
{
name: 'push',
name: 'inslog',
text: __('续保记录'),
title: __('续保记录'),
classname: 'btn btn-xs btn-warning btn-dialog',
@ -356,6 +356,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
// 为表格绑定事件
Table.api.bindevent(table);
},
renewal: function () {
Controller.api.bindevent();
},
api: {
bindevent: function (table) {
Form.api.bindevent($("form[role=form]"));

View File

@ -0,0 +1,130 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'user4s/visit/index' + location.search,
add_url: 'user4s/visit/add',
edit_url: 'user4s/visit/edit',
del_url: 'user4s/visit/del',
multi_url: 'user4s/visit/multi',
import_url: 'user4s/visit/import',
table: 'user4s_visit',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
fixedColumns: true,
fixedRightNumber: 1,
showToggle: false,
maintainSelected: true,
columns: [
[
{checkbox: true},
//{ field: 'id', title: __('Id') },
//{ field: 'type_id', title: __('Type_id') },
{field: 'visittype.name', title: __('Type_id'), operate: 'LIKE'},
//{ field: 'user4s_id', title: __('User4s_id') },
{ field: 'user.name', title: __('会员姓名'), operate: 'LIKE' },
{field: 'user.carno', title: __('User.carno'), operate: 'LIKE'},
//{ field: 'user.buydate', title: __('User.buydate'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false },
{field: 'user.model', title: __('User.model'), operate: false},
//{field: 'user.color', title: __('User.color'), operate: 'LIKE'},
//{field: 'user.inscom', title: __('User.inscom'), operate: 'LIKE'},
//{ field: 'user.insdate', title: __('User.insdate'), operate: 'RANGE', addclass: 'datetimerange', autocomplete: false },
//{ field: 'user.description', title: __('User.description'), operate: 'LIKE' },
{field: 'visittime', title: __('Visittime'), operate:'BETWEEN', addclass:'datetimepicker',data:'data-date-format="YYYY-MM-DD",data-date-use-current="true"', autocomplete:false, formatter: Table.api.formatter.datetime},
//{field: 'admin.nickname', title: __('操作员'), operate: 'LIKE'},
{ field: 'createtime', title: __('Createtime'), operate: 'BETWEEN', addclass: 'datetimepicker',data: 'data-date-format="YYYY-MM-DD",data-date-use-current="true"', autocomplete: false, formatter: Table.api.formatter.datetime },
{field: 'description', title: __('Description'), operate: 'LIKE'},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
recyclebin: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
'dragsort_url': ''
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: 'user4s/visit/recyclebin' + location.search,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{
field: 'deletetime',
title: __('Deletetime'),
operate: 'RANGE',
addclass: 'datetimerange',
formatter: Table.api.formatter.datetime
},
{
field: 'operate',
width: '130px',
title: __('Operate'),
table: table,
events: Table.api.events.operate,
buttons: [
{
name: 'Restore',
text: __('Restore'),
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
icon: 'fa fa-rotate-left',
url: 'user4s/visit/restore',
refresh: true
},
{
name: 'Destroy',
text: __('Destroy'),
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
icon: 'fa fa-times',
url: 'user4s/visit/destroy',
refresh: true
}
],
formatter: Table.api.formatter.operate
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});

View File

@ -0,0 +1,119 @@
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'user4s/visittype/index' + location.search,
add_url: 'user4s/visittype/add',
edit_url: 'user4s/visittype/edit',
del_url: 'user4s/visittype/del',
multi_url: 'user4s/visittype/multi',
import_url: 'user4s/visittype/import',
table: 'user4s_visittype',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
fixedColumns: true,
fixedRightNumber: 1,
showToggle: false,
maintainSelected: true,
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id'),operate:false},
{field: 'name', title: __('Name'), operate: 'LIKE'},
{field: 'tip_time', title: __('Tip_time'), operate:'RANGE', autocomplete:false},
{field: 'description', title: __('Description'), operate: 'LIKE'},
{field: 'createtime', title: __('Createtime'), operate:false, addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
recyclebin: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
'dragsort_url': ''
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: 'user4s/visittype/recyclebin' + location.search,
pk: 'id',
sortName: 'id',
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'name', title: __('Name'), align: 'left'},
{
field: 'deletetime',
title: __('Deletetime'),
operate: 'RANGE',
addclass: 'datetimerange',
formatter: Table.api.formatter.datetime
},
{
field: 'operate',
width: '130px',
title: __('Operate'),
table: table,
events: Table.api.events.operate,
buttons: [
{
name: 'Restore',
text: __('Restore'),
classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
icon: 'fa fa-rotate-left',
url: 'user4s/visittype/restore',
refresh: true
},
{
name: 'Destroy',
text: __('Destroy'),
classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
icon: 'fa fa-times',
url: 'user4s/visittype/destroy',
refresh: true
}
],
formatter: Table.api.formatter.operate
}
]
]
});
// 为表格绑定事件
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});