课程反馈接口
This commit is contained in:
parent
4ca1a1b348
commit
b11bf14f00
|
@ -33,7 +33,7 @@ class ClassesLib extends Backend
|
|||
protected $model = null;
|
||||
|
||||
//不用审核允许修改的字段
|
||||
protected $no_auth_fields = ['headimage','images','notice','content',"virtual_num","virtual_collect","underline_price"];
|
||||
protected $no_auth_fields = ["user_id","teacher_id","classes_type","classes_cate_ids","classes_label_ids","self_label_tag",'headimage','images','notice','content',"virtual_num","virtual_collect","underline_price"];
|
||||
|
||||
//更新数据是否需要触发审核开关
|
||||
protected $need_auth = false;
|
||||
|
@ -57,7 +57,8 @@ class ClassesLib extends Backend
|
|||
$this->view->assign("newList", $this->model->getNewList());
|
||||
$this->view->assign("selfhotList", $this->model->getSelfhotList());
|
||||
|
||||
|
||||
$this->view->assign("classesTypeList", $this->model->getClassesTypeList());
|
||||
$this->view->assign("classesTypeListJson", json_encode($this->model->getClassesTypeList(), JSON_UNESCAPED_UNICODE));
|
||||
|
||||
|
||||
$this->view->assign("specStatusList", (new \app\admin\model\school\classes\ClassesSpec)->getStatusList());
|
||||
|
@ -102,8 +103,14 @@ class ClassesLib extends Backend
|
|||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('admin')->visible(['nickname']);
|
||||
}
|
||||
$rows = $list->items();
|
||||
$types = \app\admin\model\school\classes\Type::column("name", 'id');
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $list->items());
|
||||
foreach ($rows as $k=>&$v){
|
||||
$v["classes_type_name"] = $types[$v["classes_type"]] ?? "无" ;
|
||||
}
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $rows);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
|
@ -473,18 +480,23 @@ class ClassesLib extends Backend
|
|||
if(isset($v["id"]) && $v["id"]){
|
||||
\app\common\model\school\classes\ClassesSpec::update((new \app\common\model\school\classes\ClassesSpec)->checkAssemblyParameters($v));
|
||||
}else{
|
||||
|
||||
\app\common\model\school\classes\ClassesSpec::create((new \app\common\model\school\classes\ClassesSpec)->checkAssemblyParameters($v));
|
||||
}
|
||||
|
||||
}
|
||||
//删除规格
|
||||
foreach ($delete_spec_ids as $k=>$delete_spec){
|
||||
|
||||
(new \app\common\model\school\classes\ClassesSpec)->updateCheck($delete_spec["id"]);
|
||||
|
||||
$delete_spec->delete();
|
||||
}
|
||||
|
||||
//因为是批量添加,所有规格重新进行检测,防止出现时间重叠
|
||||
$specss = \app\common\model\school\classes\ClassesSpec::where("classes_lib_id",$row["id"])->select();
|
||||
foreach ($specss as $k=>$specs){
|
||||
|
||||
$params =$specs;
|
||||
(new \app\common\model\school\classes\ClassesSpec)->specCheck($params,null,$specs);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\controller\school\classes;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
|
||||
/**
|
||||
* 课程反馈管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Evaluate extends Backend
|
||||
{
|
||||
|
||||
/**
|
||||
* Evaluate模型对象
|
||||
* @var \app\admin\model\school\classes\Evaluate
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
protected $qSwitch = true;
|
||||
protected $qFields = ["user_id","classes_lib_id","classes_order_id","manystore_id","shop_id","teacher_id"];
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
$this->model = new \app\admin\model\school\classes\Evaluate;
|
||||
parent::_initialize();
|
||||
|
||||
$this->view->assign("statusList", $this->model->getStatusList());
|
||||
$this->view->assign("topList", $this->model->getTopList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 默认生成的控制器所继承的父类中有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(['user','lib','classesorder','manystore','shop','teacher'])
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->paginate($limit);
|
||||
|
||||
foreach ($list as $row) {
|
||||
|
||||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('lib')->visible(['title','headimage']);
|
||||
$row->getRelation('classesorder')->visible(['order_no']);
|
||||
$row->getRelation('manystore')->visible(['nickname']);
|
||||
$row->getRelation('shop')->visible(['name','logo']);
|
||||
$row->getRelation('teacher')->visible(['name','head_image']);
|
||||
}
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $list->items());
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
|
@ -78,7 +78,7 @@ class Teacher extends Backend
|
|||
|
||||
foreach ($list as $row) {
|
||||
|
||||
$row->getRelation('user')->visible(['nickname','realname','avatar']);
|
||||
$row->getRelation('user')->visible(['nickname','realname','avatar','mobile']);
|
||||
$row->getRelation('manystore')->visible(['nickname']);
|
||||
$row->getRelation('shop')->visible(['name','logo','image','address_city','province','city','district','address','address_detail']);
|
||||
}
|
||||
|
@ -256,6 +256,14 @@ class Teacher extends Backend
|
|||
}
|
||||
|
||||
|
||||
//添加用户机构认证
|
||||
try {
|
||||
\app\common\model\manystore\UserAuth::auth(0,$params["shop_id"],$params["user_id"],0,'admin',$this->auth->id);
|
||||
}catch (\Exception $e){
|
||||
|
||||
}
|
||||
|
||||
|
||||
//如果开启了检测用户授权,则检测用户是否授权
|
||||
if(config("site.shop_auth_user_check")){
|
||||
if(!UserAuth::authcheck($shop_id,$user["id"])) $this->error("用户未授权当前机构!请先让用户授权同意您再操作!");
|
||||
|
@ -309,6 +317,13 @@ class Teacher extends Backend
|
|||
if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
|
||||
$params[$this->dataLimitField] = $this->auth->id;
|
||||
}
|
||||
try {
|
||||
$this->update_check($params,$row=null);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
try {
|
||||
|
@ -358,6 +373,14 @@ class Teacher extends Backend
|
|||
$this->error(__('Parameter %s can not be empty', ''));
|
||||
}
|
||||
$params = $this->preExcludeFields($params);
|
||||
|
||||
try {
|
||||
$this->update_check($params,$row);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
try {
|
||||
|
|
|
@ -107,6 +107,14 @@ class Verification extends Backend
|
|||
$this->error("用户不存在");
|
||||
}
|
||||
|
||||
|
||||
//添加用户机构认证
|
||||
try {
|
||||
\app\common\model\manystore\UserAuth::auth(0,$shop_id,$user["id"],0,'admin',$this->auth->id);
|
||||
}catch (\Exception $e){
|
||||
// $this->error($e->getMessage());
|
||||
}
|
||||
|
||||
if(config("site.shop_auth_user_check")){
|
||||
if(!UserAuth::authcheck($shop_id,$user["id"])) $this->error("用户未授权当前机构!请先让用户授权同意您再操作!");
|
||||
}
|
||||
|
@ -158,6 +166,13 @@ class Verification extends Backend
|
|||
$params[$this->dataLimitField] = $this->auth->id;
|
||||
}
|
||||
$result = false;
|
||||
try {
|
||||
$this->update_check($params,$row=null);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
//是否采用模型验证
|
||||
|
@ -206,6 +221,13 @@ class Verification extends Backend
|
|||
$this->error(__('Parameter %s can not be empty', ''));
|
||||
}
|
||||
$params = $this->preExcludeFields($params);
|
||||
|
||||
try {
|
||||
$this->update_check($params,$row);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
try {
|
||||
|
|
|
@ -72,7 +72,7 @@ class Order extends Backend
|
|||
$row->getRelation('classesorder')->visible(['order_no']);
|
||||
$row->getRelation('spec')->visible(['name']);
|
||||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('detail')->visible(['title','headimage']);
|
||||
$row->getRelation('detail')->visible(['title','headimage','feel']);
|
||||
$row->getRelation('lib')->visible(['title']);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ class Order extends Backend
|
|||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('shop')->visible(['name','image','address_city','province','city','district','address','address_detail']);
|
||||
$row->getRelation('lib')->visible(['title','headimage']);
|
||||
$row->getRelation('detail')->visible(['title','headimage']);
|
||||
$row->getRelation('detail')->visible(['title','headimage',"feel"]);
|
||||
$row->getRelation('admin')->visible(['nickname','avatar']);
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,7 @@ class Order extends Backend
|
|||
if(isset($param['ids']))$ids = $param['ids'];
|
||||
//设置模拟资格
|
||||
$model = (new \app\common\model\school\classes\order\Order);
|
||||
$model->cancel($ids,0,true,'admin',$this->auth->id,true);;
|
||||
$model->cancel($ids,0,true,'admin',$this->auth->id,true);
|
||||
|
||||
|
||||
}catch (\Exception $e){
|
||||
|
|
|
@ -23,7 +23,7 @@ return [
|
|||
'Address_detail' => '详细地址',
|
||||
'Longitude' => '经度',
|
||||
'Latitude' => '纬度',
|
||||
'Yyzzdm' => '营业执照号(个人认证不需要)',
|
||||
'Yyzzdm' => '企业统一信用代码(个人认证不需要)',
|
||||
'Yyzz_images' => '营业执照照片(个人认证不需要)',
|
||||
'hidden' => '禁用',
|
||||
|
||||
|
|
|
@ -4,8 +4,12 @@ return [
|
|||
'Manystore_id' => '机构账号id',
|
||||
'Shop_id' => '机构店铺id',
|
||||
'User_id' => '主讲师用户id',
|
||||
'Classes_cate_ids' => '平台课程分类',
|
||||
'Classes_label_ids' => '平台课程热门标签',
|
||||
'Classes_cate_ids' => '标签',
|
||||
'Classes_label_ids' => '热门',
|
||||
|
||||
'Start_time' => '开始时间',
|
||||
'End_time' => '结束时间',
|
||||
|
||||
'Self_label_tag' => '机构特色标签',
|
||||
'Add_type' => '添加人类型',
|
||||
'Add_type 1' => '机构',
|
||||
|
@ -17,7 +21,7 @@ return [
|
|||
'Type' => '地点类型',
|
||||
'Type out' => '户外',
|
||||
'Type in' => '室内',
|
||||
'Classes_num' => '多少节课',
|
||||
'Classes_num' => '核销次数',
|
||||
'Address_type' => '地址类型',
|
||||
'Address_type 1' => '按机构',
|
||||
'Address_type 2' => '独立位置',
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'User_id' => '评价用户id',
|
||||
'Classes_lib_id' => '课程id',
|
||||
'Classes_order_id' => '课程订单id',
|
||||
'Manystore_id' => '机构账号id',
|
||||
'Shop_id' => '机构店铺id',
|
||||
'Teacher_id' => '老师id',
|
||||
'Image' => '评价人头像',
|
||||
'Nickname' => '评价人昵称',
|
||||
'Classes_star' => '课程评分',
|
||||
'Teacher_star' => '讲师评分',
|
||||
'Shop_star' => '教师环境',
|
||||
'Message_text' => '评价内容',
|
||||
'Evaluate_time' => '评价时间',
|
||||
'Status' => '状态',
|
||||
'Status 1' => '上架',
|
||||
'Set status to 1' => '设为上架',
|
||||
'Status 2' => '下架',
|
||||
'Set status to 2' => '设为下架',
|
||||
'Top' => '是否置顶',
|
||||
'Top 0' => '否',
|
||||
'Top 1' => '是',
|
||||
'Weigh' => '权重',
|
||||
'Createtime' => '创建时间',
|
||||
'Updatetime' => '修改时间',
|
||||
'User.nickname' => '昵称',
|
||||
'User.realname' => '真实姓名',
|
||||
'User.mobile' => '手机号',
|
||||
'User.avatar' => '头像',
|
||||
'Lib.title' => '标题',
|
||||
'Lib.headimage' => '头图',
|
||||
'Order.order_no' => '订单号',
|
||||
'Manystore.nickname' => '昵称',
|
||||
'Shop.name' => '店铺名称',
|
||||
'Shop.logo' => '品牌LOGO',
|
||||
'Teacher.name' => '教师名',
|
||||
'Teacher.head_image' => '教师头像'
|
||||
];
|
|
@ -5,8 +5,8 @@ return [
|
|||
'Manystore_id' => '机构账号id',
|
||||
'Shop_id' => '机构店铺id',
|
||||
'User_id' => '主讲师用户id',
|
||||
'Classes_cate_ids' => '平台课程分类ids',
|
||||
'Classes_label_ids' => '平台课程类型ids',
|
||||
'Classes_cate_ids' => '标签',
|
||||
'Classes_label_ids' => '热门',
|
||||
'Self_label_tag' => '机构特色标签',
|
||||
'Add_type' => '添加人类型',
|
||||
'Add_type 1' => '机构',
|
||||
|
|
|
@ -71,6 +71,10 @@ class ClassesLib extends Model
|
|||
});
|
||||
}
|
||||
|
||||
public function getClassesTypeList(){
|
||||
return \app\admin\model\school\classes\Type::column("name", 'id');
|
||||
}
|
||||
|
||||
|
||||
public function getAddTypeList()
|
||||
{
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\model\school\classes;
|
||||
|
||||
use app\common\model\dyqc\ManystoreShop;
|
||||
use app\manystore\model\Manystore;
|
||||
use think\Model;
|
||||
|
||||
|
||||
class Evaluate extends Model
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'school_classes_evaluate';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'evaluate_time_text',
|
||||
'status_text',
|
||||
'top_text'
|
||||
];
|
||||
|
||||
|
||||
protected static function init()
|
||||
{
|
||||
self::afterInsert(function ($row) {
|
||||
if (!$row['weigh']) {
|
||||
$pk = $row->getPk();
|
||||
$row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public function getStatusList()
|
||||
{
|
||||
return ['1' => __('Status 1'), '2' => __('Status 2')];
|
||||
}
|
||||
|
||||
public function getTopList()
|
||||
{
|
||||
return ['0' => __('Top 0'), '1' => __('Top 1')];
|
||||
}
|
||||
|
||||
|
||||
public function getEvaluateTimeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['evaluate_time']) ? $data['evaluate_time'] : '');
|
||||
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
|
||||
}
|
||||
|
||||
|
||||
public function getStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
|
||||
$list = $this->getStatusList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
|
||||
public function getTopTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['top']) ? $data['top'] : '');
|
||||
$list = $this->getTopList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
protected function setEvaluateTimeAttr($value)
|
||||
{
|
||||
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
|
||||
}
|
||||
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo('app\common\model\User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function lib()
|
||||
{
|
||||
return $this->belongsTo(ClassesLib::class, 'classes_lib_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function classesorder()
|
||||
{
|
||||
return $this->belongsTo(\app\common\model\school\classes\order\Order::class, 'classes_order_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function manystore()
|
||||
{
|
||||
return $this->belongsTo(Manystore::class, 'manystore_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function shop()
|
||||
{
|
||||
return $this->belongsTo(ManystoreShop::class, 'shop_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function teacher()
|
||||
{
|
||||
return $this->belongsTo(Teacher::class, 'teacher_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace app\admin\validate\school\classes;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Evaluate extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected $rule = [
|
||||
];
|
||||
/**
|
||||
* 提示消息
|
||||
*/
|
||||
protected $message = [
|
||||
];
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected $scene = [
|
||||
'add' => [],
|
||||
'edit' => [],
|
||||
];
|
||||
|
||||
}
|
|
@ -26,7 +26,7 @@
|
|||
<div class="form-group">
|
||||
<label for="nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]" autocomplete="off" value="" data-rule="required;length(~10)" placeholder="请输入{:__('Nickname')}" />
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]" autocomplete="off" value="" data-rule="required;" placeholder="请输入{:__('Nickname')}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<div class="form-group">
|
||||
<label for="nickname" class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]" autocomplete="off" value="{$row.nickname|htmlentities}" data-rule="required;length(~10)" placeholder="请输入{:__('Nickname')}" />
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]" autocomplete="off" value="{$row.nickname|htmlentities}" data-rule="required;" placeholder="请输入{:__('Nickname')}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -40,39 +40,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_cate_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到分类则点击按钮创建分类后重新下拉框选分类)
|
||||
<a href="javascript:;" data-url="school/classes/cate/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/cate/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_label_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_label_ids" data-rule="required" data-source="school/classes/label/index" data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到标签则点击按钮创建标签后重新下拉框选标签)
|
||||
<a href="javascript:;" data-url="school/classes/label/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/label/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
|
||||
</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-classes_type" data-rule="required" data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="">
|
||||
<input id="c-classes_type" data-rule="required" data-source="school/classes/type/index" data-params='{"custom[status]":"1"}' class="form-control selectpage" name="row[classes_type]" type="text" value="">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到类型则点击按钮创建类型后重新下拉框选类型)
|
||||
|
@ -84,11 +57,42 @@
|
|||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_cate_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-max-select-limit="3" data-source="school/classes/cate/index" data-params='{"custom[status]":"1"}' data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到{:__('Classes_cate_ids')}则点击按钮创建{:__('Classes_cate_ids')}后重新下拉框选{:__('Classes_cate_ids')})
|
||||
<a href="javascript:;" data-url="school/classes/cate/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/cate/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_label_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_label_ids" data-source="school/classes/label/index" data-max-select-limit="3" data-multiple="true" data-params='{"custom[status]":"1"}' class="form-control selectpage" name="row[classes_label_ids]" type="text" value="">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到{:__('Classes_label_ids')}则点击按钮创建{:__('Classes_label_ids')}后重新下拉框选{:__('Classes_label_ids')})
|
||||
<a href="javascript:;" data-url="school/classes/label/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/label/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Self_label_tag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-self_label_tag" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text">
|
||||
<input id="c-self_label_tag" class="form-control" data-role="tagsinput" data-max-select-limit="3" name="row[self_label_tag]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
|
@ -185,7 +189,7 @@
|
|||
</tr>
|
||||
<textarea name="row[spec]" id="spec" class="form-control hide" cols="30" rows="5">[{"name":"{:date('m-d号')} 上午课(名师巡讲!)","time":"{:date('Y/m/d 0:01')} - {:date('Y/m/d H:i')}","limit_num":"30","weigh":"0","status":"1"}]</textarea>
|
||||
</table>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,后续有变更将触发审核机制!)</span>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,单节课开始结束时间必须在同一天,后续有变更将触发审核机制!)</span>
|
||||
<!--定义模板-->
|
||||
<script type="text/html" id="testtpl">
|
||||
<tr class="form-inline">
|
||||
|
|
|
@ -79,37 +79,11 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_cate_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="{$row.classes_cate_ids|htmlentities}">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到分类则点击按钮创建分类后重新下拉框选分类)
|
||||
<a href="javascript:;" data-url="school/classes/cate/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/cate/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_label_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_label_ids" data-rule="required" data-source="school/classes/label/index" data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="{$row.classes_label_ids|htmlentities}">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到标签则点击按钮创建标签后重新下拉框选标签)
|
||||
<a href="javascript:;" data-url="school/classes/label/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/label/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
</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-classes_type" data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="{$row.classes_type|htmlentities}">
|
||||
<input id="c-classes_type" data-rule="required" data-params='{"custom[status]":"1"}' data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="{$row.classes_type|htmlentities}">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到类型则点击按钮创建类型后重新下拉框选类型)
|
||||
|
@ -122,10 +96,41 @@
|
|||
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_cate_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-max-select-limit="3" data-params='{"custom[status]":"1"}' data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="{$row.classes_cate_ids|htmlentities}">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到{:__('Classes_cate_ids')}则点击按钮创建{:__('Classes_cate_ids')}后重新下拉框选{:__('Classes_cate_ids')})
|
||||
<a href="javascript:;" data-url="school/classes/cate/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/cate/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_label_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_label_ids" data-max-select-limit="3" data-source="school/classes/label/index" data-params='{"custom[status]":"1"}' data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="{$row.classes_label_ids|htmlentities}">
|
||||
|
||||
<span style="color: red">
|
||||
(没找到{:__('Classes_label_ids')}则点击按钮创建{:__('Classes_label_ids')}后重新下拉框选{:__('Classes_label_ids')})
|
||||
<a href="javascript:;" data-url="school/classes/label/index" class="btn btn-success btn-changeuser {:$auth->check('school/classes/label/index')?'':'hide'}" title="{:__('Add')}" ><i class="fa fa-plus"></i> {:__('Add')}</a>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Self_label_tag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-self_label_tag" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text" value="{$row.self_label_tag|htmlentities}">
|
||||
<input id="c-self_label_tag" data-max-select-limit="3" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text" value="{$row.self_label_tag|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
|
@ -226,7 +231,7 @@
|
|||
</textarea>
|
||||
|
||||
</table>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,后续有变更将触发审核机制!)</span>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,单节课开始结束时间必须在同一天,后续有变更将触发审核机制!)</span>
|
||||
<!--定义模板-->
|
||||
<script type="text/html" id="testtpl">
|
||||
<tr class="form-inline">
|
||||
|
|
|
@ -51,3 +51,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
var classesTypeListJson = {$classesTypeListJson};
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
<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">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_lib_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_lib_id" data-rule="required" data-source="school/classes/lib/index" class="form-control selectpage" name="row[classes_lib_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_order_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_order_id" data-rule="required" data-source="school/classes/order/index" class="form-control selectpage" name="row[classes_order_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Manystore_id')}:</label>-->
|
||||
<!-- <div class="col-xs-12 col-sm-8">-->
|
||||
<!-- <input id="c-manystore_id" data-rule="required" data-source="manystore/index" class="form-control selectpage" name="row[manystore_id]" type="text" value="">-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Shop_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-shop_id" data-rule="required" data-source="manystore/shop/index" class="form-control selectpage" name="row[shop_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_id" data-rule="required" data-source="school/teacher/index" class="form-control selectpage" name="row[teacher_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" data-rule="required" class="form-control" size="50" name="row[image]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-image" class="btn btn-danger faupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_star" data-rule="required" class="form-control" step="0.1" name="row[classes_star]" type="number" value="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_star" data-rule="required" class="form-control" step="0.1" name="row[teacher_star]" type="number" value="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Shop_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-shop_star" data-rule="required" class="form-control" step="0.1" name="row[shop_star]" type="number" value="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Message_text')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-message_text" data-rule="required" class="form-control " rows="5" name="row[message_text]" cols="50"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Evaluate_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-evaluate_time" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[evaluate_time]" 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">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="1"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Top')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-top" class="form-control selectpicker" name="row[top]">
|
||||
{foreach name="topList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1,125 @@
|
|||
<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">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_lib_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_lib_id" data-rule="required" data-source="school/classes/lib/index" class="form-control selectpage" name="row[classes_lib_id]" type="text" value="{$row.classes_lib_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_order_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_order_id" data-rule="required" data-source="school/classes/order/index" class="form-control selectpage" name="row[classes_order_id]" type="text" value="{$row.classes_order_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Manystore_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-manystore_id" data-rule="required" data-source="manystore/index" class="form-control selectpage" name="row[manystore_id]" type="text" value="{$row.manystore_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Shop_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-shop_id" data-rule="required" data-source="manystore/shop/index" class="form-control selectpage" name="row[shop_id]" type="text" value="{$row.shop_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_id" data-rule="required" data-source="school/teacher/index" class="form-control selectpage" name="row[teacher_id]" type="text" value="{$row.teacher_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" data-rule="required" class="form-control" size="50" name="row[image]" type="text" value="{$row.image|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-image" class="btn btn-danger faupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="{$row.nickname|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_star" data-rule="required" class="form-control" step="0.1" name="row[classes_star]" type="number" value="{$row.classes_star|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_star" data-rule="required" class="form-control" step="0.1" name="row[teacher_star]" type="number" value="{$row.teacher_star|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Shop_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-shop_star" data-rule="required" class="form-control" step="0.1" name="row[shop_star]" type="number" value="{$row.shop_star|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Message_text')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-message_text" data-rule="required" class="form-control " rows="5" name="row[message_text]" cols="50">{$row.message_text|htmlentities}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Evaluate_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-evaluate_time" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[evaluate_time]" type="text" value="{:$row.evaluate_time?datetime($row.evaluate_time):''}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Top')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-top" class="form-control selectpicker" name="row[top]">
|
||||
{foreach name="topList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.top"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh|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>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1,46 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
|
||||
<div class="panel-heading">
|
||||
{:build_heading(null,FALSE)}
|
||||
<ul class="nav nav-tabs" data-field="status">
|
||||
<li class="{:$Think.get.status === null ? 'active' : ''}"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
|
||||
{foreach name="statusList" item="vo"}
|
||||
<li class="{:$Think.get.status === (string)$key ? 'active' : ''}"><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<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('school/classes/evaluate/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('school/classes/evaluate/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('school/classes/evaluate/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
|
||||
|
||||
|
||||
<div class="dropdown btn-group {:$auth->check('school/classes/evaluate/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">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:" data-params="status={$key}">{:__('Set status to ' . $key)}</a></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
|
||||
data-operate-edit="{:$auth->check('school/classes/evaluate/edit')}"
|
||||
data-operate-del="{:$auth->check('school/classes/evaluate/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -48,7 +48,7 @@
|
|||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content|htmlentities}</textarea>
|
||||
<textarea id="c-content" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -3,8 +3,12 @@
|
|||
namespace app\api\controller;
|
||||
|
||||
use app\common\controller\Api;
|
||||
use app\common\library\Sqlscript;
|
||||
use app\common\library\Virtual;
|
||||
use app\common\model\school\Area;
|
||||
use app\common\model\style\HomeImages;
|
||||
use think\Db;
|
||||
use think\exception\PDOException;
|
||||
|
||||
/**
|
||||
* 首页接口
|
||||
|
@ -15,11 +19,19 @@ class Index extends Api
|
|||
protected $noNeedRight = ['*'];
|
||||
|
||||
/**
|
||||
* 首页
|
||||
* 执行sql脚本
|
||||
*
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
Db::startTrans();
|
||||
try {
|
||||
Sqlscript::importClasses(1,1000);
|
||||
Db::commit();
|
||||
} catch (PDOException|\Exception $e) {
|
||||
Db::rollback();
|
||||
$this->error($e->getMessage().$e->getFile().$e->getLine());
|
||||
}
|
||||
$this->success('请求成功');
|
||||
}
|
||||
|
||||
|
@ -69,7 +81,7 @@ class Index extends Api
|
|||
// "site_logo"=>cdnurl(config('site.logo'), true),
|
||||
"site_beian"=>config('site.beian'),
|
||||
"site_version"=>''.config('site.version'),
|
||||
"site_city"=>config('site.the_city'),
|
||||
"site_city"=> Virtual::getNowCity(),
|
||||
"site_timezone"=>config('site.timezone'),
|
||||
];
|
||||
$upload_config = config('upload');
|
||||
|
|
|
@ -297,7 +297,7 @@ class User extends Api
|
|||
* @ApiParams (name="username", type="string", required=true, description="用户名")
|
||||
* @ApiParams (name="nickname", type="string", required=true, description="昵称")
|
||||
* @ApiParams (name="realname", type="string", required=true, description="姓名")
|
||||
* @ApiParams (name="gender", type="string", required=true, description="性别:0女 1男")
|
||||
* @ApiParams (name="gender", type="int", required=true, description="性别:0女 1男")
|
||||
* @ApiParams (name="birthday", type="string", required=true, description="出生日期:日期字符串 比如”1995-9-20")
|
||||
* @ApiParams (name="work", type="string", required=true, description="职业")
|
||||
* @ApiParams (name="bio", type="string", required=true, description="个人简介")
|
||||
|
@ -337,7 +337,7 @@ class User extends Api
|
|||
if($avatar!==null && in_array('avatar', $update_fields))$user->avatar = $avatar;
|
||||
if(in_array('realname', $update_fields))$user->realname = $realname;
|
||||
if(in_array('gender', $update_fields)){
|
||||
if(!in_array($gender, [1,2]))$this->error(__('请输入正确的性别!'));
|
||||
if(!in_array($gender, [1,0]))$this->error(__('请输入正确的性别!'));
|
||||
$user->gender = $gender;
|
||||
}
|
||||
if(in_array('birthday', $update_fields))$user->birthday = $birthday;
|
||||
|
|
|
@ -302,7 +302,10 @@ class Classes extends Base
|
|||
* @ApiParams(name = "keywords", type = "string",required=false,description = "搜索关键字")
|
||||
* @ApiParams(name = "page", type = "string",required=true,description = "页数")
|
||||
* @ApiParams(name = "limit", type = "string",required=true,description = "条数")
|
||||
* @ApiParams(name = "start_time", type = "int",required=false,description = "开始时间10位秒级时间戳")
|
||||
* @ApiParams(name = "end_time", type = "int",required=false,description = "结束时间10位秒级时间戳")
|
||||
* @ApiParams(name = "has_shop", type = "int",required=false,description = "是否查机构")
|
||||
* @ApiParams(name = "is_expire", type = "int",required=false,description = "是否查过期:1只查过期,2只查不过期,0全查")
|
||||
* @ApiParams(name = "user_id", type = "int",required=false,description = "主讲师用户id")
|
||||
* @ApiParams(name = "shop_id", type = "int",required=false,description = "机构店铺id")
|
||||
* @ApiParams(name = "teacher_id", type = "int",required=false,description = "老师id")
|
||||
|
@ -364,6 +367,9 @@ class Classes extends Base
|
|||
$params["selfhot"] = $this->request->get('selfhot/s', ''); //机构店铺id
|
||||
$params["feel"] = $this->request->get('feel/s', ''); //机构店铺id
|
||||
|
||||
$params["is_expire"] = $this->request->get('is_expire/d', 0); //机构店铺id
|
||||
|
||||
|
||||
$params["order"] = $this->request->get('order/s', ''); //机构店铺id
|
||||
$params["nearby"] = $this->request->get('nearby/s', ''); //机构店铺id
|
||||
$params["has_shop"] = $this->request->get('has_shop/d', ''); //主讲师用户id
|
||||
|
@ -371,6 +377,11 @@ class Classes extends Base
|
|||
$params["latitude"] = $this->request->get('latitude/s', ''); //机构店铺id
|
||||
$params["longitude"] = $this->request->get('longitude/s', ''); //机构店铺id
|
||||
|
||||
|
||||
$params["start_time"] = $this->request->get('start_time/d', ''); //主讲师用户id
|
||||
$params["end_time"] = $this->request->get('end_time/d', ''); //机构店铺id
|
||||
|
||||
|
||||
// $type = $this->request->get('type/s', ''); //筛选学员和教练单
|
||||
|
||||
try{
|
||||
|
|
|
@ -0,0 +1,200 @@
|
|||
<?php
|
||||
|
||||
namespace app\api\controller\school;
|
||||
|
||||
use app\common\model\school\classes\order\Order as OrderModel;
|
||||
use app\common\model\school\classes\Teacher as Teachermodel;
|
||||
|
||||
/**
|
||||
* 用户端:评价接口
|
||||
*/
|
||||
class Evaluate extends Base
|
||||
{
|
||||
protected $noNeedLogin = ['evaluate_list',"detail"];
|
||||
protected $noNeedRight = '*';
|
||||
|
||||
protected $model = null;
|
||||
|
||||
/**
|
||||
* 初始化操作
|
||||
* @access protected
|
||||
*/
|
||||
protected function _initialize()
|
||||
{
|
||||
|
||||
$this->model = new \app\common\model\school\classes\Evaluate;
|
||||
parent::_initialize();
|
||||
|
||||
//判断登录用户是否是员工
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @ApiTitle( 评价列表接口)
|
||||
* @ApiSummary(我的评价列表接口)
|
||||
* @ApiMethod(GET)
|
||||
* @ApiParams(name = "keywords", type = "string",required=false,description = "搜索关键字")
|
||||
* @ApiParams(name = "page", type = "string",required=true,description = "页数")
|
||||
* @ApiParams(name = "limit", type = "string",required=true,description = "条数")
|
||||
* @ApiParams(name = "my", type = "string",required=false,description = "是否查我的评价(需登录)")
|
||||
* @ApiParams(name = "classes_lib_id", type = "string",required=false,description = "课程id")
|
||||
* @ApiParams(name = "classes_order_id", type = "string",required=false,description = "课程订单id")
|
||||
* @ApiParams(name = "shop_id", type = "string",required=false,description = "机构店铺id")
|
||||
* @ApiParams(name = "teacher_id", type = "string",required=false,description = "老师id")
|
||||
* @ApiParams(name = "time", type = "string",required=false,description = "复合时间查询:today今天,week本周,month本月,year本年,yesterday昨天,last year上一年,last week上周,last month上個月,lately7最近7天 , lately30最近30天,按开始时间区间查传值格式:Y/m/d H:M:S-Y/m/d H:M:S")
|
||||
*
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
*/
|
||||
public function evaluate_list()
|
||||
{
|
||||
$user_id = 0;
|
||||
$user = $this->auth->getUser();//登录用户
|
||||
if($user)$user_id = $user['id'];
|
||||
|
||||
$params = [];
|
||||
$my = $this->request->get('my/d', 0); //我的评价
|
||||
if($my && $user_id){
|
||||
$params['user_id'] = $user_id;
|
||||
}
|
||||
$page = $this->request->get('page/d', 0); //页数
|
||||
$limit = $this->request->get('limit/d', 0); //条数
|
||||
$params["keywords"] = $this->request->get('keywords/s', ''); //搜索关键字
|
||||
$params["classes_lib_id"] = $this->request->get('classes_lib_id/d', ''); //搜索关键字
|
||||
$params["classes_order_id"] = $this->request->get('classes_order_id/d', ''); //搜索关键字
|
||||
$params["shop_id"] = $this->request->get('shop_id/d', ''); //时间
|
||||
$params["teacher_id"] = $this->request->get('teacher_id/d', ''); //时间
|
||||
$params["time"] = $this->request->get('time/s', ''); //时间
|
||||
|
||||
try{
|
||||
//当前申请状态
|
||||
$res = $this->model::evaluateList($page, $limit,$params);
|
||||
// if($user_id =='670153'){
|
||||
// file_put_contents("ceshi66.txt",(new AppointmentOrder())->getLastSql());
|
||||
// }
|
||||
}catch (\Exception $e){
|
||||
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
$this->success('查询成功', $res);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @ApiTitle( 评价详情)
|
||||
* @ApiSummary(评价详情)
|
||||
* @ApiMethod(GET)
|
||||
* @ApiParams(name = "id", type = "int",required=true,description = "评价id")
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
*/
|
||||
public function detail(){
|
||||
$id = $this->request->get('id/d','');
|
||||
|
||||
if(empty($id)){
|
||||
$this->error(__('缺少必要参数'));
|
||||
}
|
||||
|
||||
try {
|
||||
$res = $this->model::detail($id);
|
||||
} catch (\Exception $e){
|
||||
// Log::log($e->getMessage());
|
||||
$this->error($e->getMessage(),['errcode'=>$e->getCode()]);
|
||||
}
|
||||
$this->success('获取成功', ['detail' => $res]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @ApiTitle( 发起课程反馈)
|
||||
* @ApiSummary(发起课程反馈)
|
||||
* @ApiMethod(POST)
|
||||
* @ApiParams(name = "order_no", type = "string",required=false,description = "课程订单id")
|
||||
* @ApiParams(name = "message_text", type = "string",required=true,description = "评价内容")
|
||||
* @ApiParams(name = "classes_star", type = "float",required=true,description = "课程评分:只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5")
|
||||
* @ApiParams(name = "teacher_star", type = "float",required=false,description = "讲师评分:只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5")
|
||||
* @ApiParams(name = "shop_star", type = "float",required=false,description = "教师环境:只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5")
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
*/
|
||||
public function evaluate()
|
||||
{
|
||||
$user_id = 0;
|
||||
$user = $this->auth->getUser();//登录用户
|
||||
if($user)$user_id = $user['id'];
|
||||
|
||||
|
||||
$order_no = $this->request->post('order_no/s', 0); //页数
|
||||
$message_text = $this->request->post('message_text/s', 0); //
|
||||
$classes_star = $this->request->post('classes_star/f', 5);
|
||||
$teacher_star = $this->request->post('teacher_star/f', 5);
|
||||
$shop_star = $this->request->post('shop_star/f', 5);
|
||||
|
||||
try{
|
||||
//当前申请状态
|
||||
$res = $this->model::evaluate($order_no,$message_text,$classes_star,$teacher_star,$shop_star,$user_id,true,'user',$user_id,true);
|
||||
// if($user_id =='670153'){
|
||||
// file_put_contents("ceshi66.txt",(new AppointmentOrder())->getLastSql());
|
||||
// }
|
||||
}catch (\Exception $e){
|
||||
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
$this->success('反馈成功', $res);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @ApiTitle( 课程反馈更新)
|
||||
* @ApiSummary(课程反馈更新)
|
||||
* @ApiMethod(POST)
|
||||
* @ApiParams(name = "order_no", type = "string",required=false,description = "课程订单id")
|
||||
* @ApiParams(name = "message_text", type = "string",required=true,description = "评价内容")
|
||||
* @ApiParams(name = "classes_star", type = "float",required=true,description = "课程评分:只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5")
|
||||
* @ApiParams(name = "teacher_star", type = "float",required=false,description = "讲师评分:只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5")
|
||||
* @ApiParams(name = "shop_star", type = "float",required=false,description = "教师环境:只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5")
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
*/
|
||||
public function evaluate_update()
|
||||
{
|
||||
$user_id = 0;
|
||||
$user = $this->auth->getUser();//登录用户
|
||||
if($user)$user_id = $user['id'];
|
||||
|
||||
|
||||
$order_no = $this->request->post('order_no/s', 0); //页数
|
||||
$message_text = $this->request->post('message_text/s', 0); //
|
||||
$classes_star = $this->request->post('classes_star/f', 5);
|
||||
$teacher_star = $this->request->post('teacher_star/f', 5);
|
||||
$shop_star = $this->request->post('shop_star/f', 5);
|
||||
|
||||
try{
|
||||
//当前申请状态
|
||||
$res = $this->model::evaluateUpdate($order_no,$message_text,$classes_star,$teacher_star,$shop_star,$user_id,true,'user',$user_id,true);
|
||||
// if($user_id =='670153'){
|
||||
// file_put_contents("ceshi66.txt",(new AppointmentOrder())->getLastSql());
|
||||
// }
|
||||
}catch (\Exception $e){
|
||||
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
$this->success('反馈成功', $res);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -66,6 +66,7 @@ class Order extends Base
|
|||
* @ApiMethod(POST)
|
||||
* @ApiParams(name = "classes_lib_id", type = "int",required=true,description = "课程id")
|
||||
* @ApiParams(name = "order_no", type = "string",required=false,description = "缓存key")
|
||||
* @ApiParams(name = "classes_lib_spec_id", type = "int",required=true,description = "想同时约的课时id")
|
||||
* @ApiParams(name = "is_compute", type = "int",required=false,description = "是否重新计算并更新缓存 默认传1")
|
||||
* @ApiReturn({
|
||||
*
|
||||
|
@ -76,8 +77,15 @@ class Order extends Base
|
|||
$user = $this->auth->getUser();//登录用户
|
||||
if($user)$user_id = $user['id'];
|
||||
$classes_lib_id = $this->request->post('classes_lib_id/d', 0); //课程id
|
||||
$classes_lib_spec_id = $this->request->post('classes_lib_spec_id/d', 0); //想同时约的课时id
|
||||
// $param = urldecode($this->request->post('param/s', "{}")); //参数
|
||||
$param = []; //参数
|
||||
$param = [];
|
||||
if($classes_lib_spec_id){
|
||||
$param = [
|
||||
"classes_lib_spec_id"=>$classes_lib_spec_id
|
||||
];
|
||||
}
|
||||
//参数
|
||||
$order_no = $this->request->post('order_no/s', ''); //订单号
|
||||
$is_compute = $this->request->post('is_compute/d', 1); //是否重新计算并更新缓存
|
||||
try{
|
||||
|
@ -157,6 +165,7 @@ class Order extends Base
|
|||
* @ApiParams(name = "limit", type = "string",required=true,description = "条数")
|
||||
* @ApiParams(name = "status", type = "string",required=false,description = "状态搜索条件:-3=已取消,0=待支付,3=使用中,6=已退款,9=已完成")
|
||||
* @ApiParams(name = "classes_lib_id", type = "int",required=false,description = "课程id")
|
||||
* @ApiParams(name = "has_evaluate", type = "int",required=false,description = "是否评价:默认0全部 ,1查已评价 2查未评价")
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
|
@ -171,11 +180,13 @@ class Order extends Base
|
|||
$keywords = $this->request->get('keywords/s', ''); //搜索关键字
|
||||
$status = $this->request->get('status/s', ''); //搜索关键字
|
||||
$classes_lib_id = $this->request->get('classes_lib_id/s', ''); //搜索关键字
|
||||
|
||||
$has_evaluate = $this->request->get('has_evaluate/d', 0); //搜索关键字
|
||||
// $type = $this->request->get('type/s', ''); //筛选学员和教练单
|
||||
|
||||
try{
|
||||
//当前申请状态
|
||||
$res = $this->model::allList($user_id,$page, $limit,$keywords,$status,$classes_lib_id);
|
||||
$res = $this->model::allList($user_id,$page, $limit,$keywords,$status,$classes_lib_id,$has_evaluate);
|
||||
// if($user_id =='670153'){
|
||||
// file_put_contents("ceshi66.txt",(new AppointmentOrder())->getLastSql());
|
||||
// }
|
||||
|
|
|
@ -70,11 +70,30 @@ class Shop extends Base
|
|||
* @ApiParams(name = "front_idcard_image", type = "string",required=true,description = "法人身份证正面")
|
||||
* @ApiParams(name = "reverse_idcard_image", type = "string",required=true,description = "法人身份证反面")
|
||||
* @ApiParams(name = "images", type = "string",required=true,description = "机构环境照片(多个逗号拼接)")
|
||||
* @ApiParams(name = "yyzzdm", type = "string",required=true,description = "社会统一信用代码")
|
||||
* @ApiParams(name = "yyzz_images", type = "string",required=true,description = "营业执照照片(多个逗号拼接)")
|
||||
* @ApiParams(name = "address", type = "string",required=true,description = "店铺地址")
|
||||
* @ApiParams(name = "address_detail", type = "string",required=true,description = "店铺详细地址")
|
||||
* @ApiParams(name = "longitude", type = "string",required=true,description = "经度")
|
||||
* @ApiParams(name = "latitude", type = "string",required=true,description = "纬度")
|
||||
* @ApiParams(name = "province", type = "int",required=true,description = "省编号")
|
||||
* @ApiParams(name = "city", type = "int",required=true,description = "市编号")
|
||||
* @ApiParams(name = "district", type = "int",required=true,description = "县区编号")
|
||||
*
|
||||
* @ApiParams(name = "establish_time", type = "int",required=true,description = "成立时间10位秒级时间戳")
|
||||
* @ApiParams(name = "people", type = "int",required=true,description = "员工人数")
|
||||
* @ApiParams(name = "legal_entity", type = "string",required=true,description = "法人姓名")
|
||||
* @ApiParams(name = "gender", type = "int",required=true,description = "法人性别:0=女,1=男")
|
||||
* @ApiParams(name = "nation", type = "string",required=true,description = "法人民族")
|
||||
* @ApiParams(name = "out_look", type = "string",required=true,description = "法人政治面貌")
|
||||
* @ApiParams(name = "birthtime", type = "int",required=true,description = "法人出生日期10位秒级时间戳")
|
||||
* @ApiParams(name = "native_place", type = "string",required=true,description = "法人籍贯")
|
||||
* @ApiParams(name = "card_number", type = "string",required=true,description = "法人身份证号码")
|
||||
* @ApiParams(name = "diploma", type = "string",required=true,description = "法人学历")
|
||||
* @ApiParams(name = "post", type = "string",required=true,description = "法人职务")
|
||||
* @ApiParams(name = "social_position", type = "string",required=true,description = "法人社会职务")
|
||||
*
|
||||
*
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
|
@ -89,6 +108,8 @@ class Shop extends Base
|
|||
|
||||
$params["images"] = $this->request->post('images/s','');
|
||||
$params["yyzz_images"] = $this->request->post('yyzz_images/s','');
|
||||
$params["yyzzdm"] = $this->request->post('yyzzdm/s','');
|
||||
|
||||
|
||||
$params["address"] = $this->request->post('address/s','');
|
||||
$params["address_detail"] = $this->request->post('address_detail/s','');
|
||||
|
@ -97,6 +118,29 @@ class Shop extends Base
|
|||
|
||||
|
||||
|
||||
|
||||
$params["province"] = $this->request->post('province/d','');
|
||||
$params["city"] = $this->request->post('city/d','');
|
||||
$params["district"] = $this->request->post('district/d','');
|
||||
|
||||
|
||||
|
||||
$params["establish_time"] = $this->request->post('establish_time/d','');
|
||||
$params["people"] = $this->request->post('people/d','');
|
||||
$params["legal_entity"] = $this->request->post('legal_entity/s','');
|
||||
$params["gender"] = $this->request->post('gender/d','');
|
||||
$params["nation"] = $this->request->post('nation/s','');
|
||||
$params["out_look"] = $this->request->post('out_look/s','');
|
||||
$params["birthtime"] = $this->request->post('birthtime/d','');
|
||||
$params["native_place"] = $this->request->post('native_place/s','');
|
||||
$params["card_number"] = $this->request->post('card_number/s','');
|
||||
$params["diploma"] = $this->request->post('diploma/s','');
|
||||
$params["post"] = $this->request->post('post/s','');
|
||||
$params["social_position"] = $this->request->post('social_position/s','');
|
||||
|
||||
|
||||
|
||||
|
||||
// if(empty($id)){
|
||||
// $this->error(__('缺少必要参数'));
|
||||
// }
|
||||
|
@ -125,6 +169,22 @@ class Shop extends Base
|
|||
* @ApiParams(name = "desc", type = "string",required=false,description = "申请备注(非必填)")
|
||||
* @ApiParams(name = "front_idcard_image", type = "string",required=true,description = "身份证正面")
|
||||
* @ApiParams(name = "reverse_idcard_image", type = "string",required=true,description = "身份证反面")
|
||||
* @ApiParams(name = "address", type = "string",required=true,description = "地址")
|
||||
* @ApiParams(name = "address_detail", type = "string",required=true,description = "详细地址")
|
||||
* @ApiParams(name = "longitude", type = "string",required=true,description = "经度")
|
||||
* @ApiParams(name = "latitude", type = "string",required=true,description = "纬度")
|
||||
* @ApiParams(name = "province", type = "int",required=true,description = "省编号")
|
||||
* @ApiParams(name = "city", type = "int",required=true,description = "市编号")
|
||||
* @ApiParams(name = "district", type = "int",required=true,description = "县区编号")
|
||||
* @ApiParams(name = "gender", type = "int",required=true,description = "个人性别:0=女,1=男")
|
||||
* @ApiParams(name = "nation", type = "string",required=true,description = "个人民族")
|
||||
* @ApiParams(name = "out_look", type = "string",required=true,description = "个人政治面貌")
|
||||
* @ApiParams(name = "birthtime", type = "int",required=true,description = "个人出生日期10位秒级时间戳")
|
||||
* @ApiParams(name = "native_place", type = "string",required=true,description = "个人籍贯")
|
||||
* @ApiParams(name = "card_number", type = "string",required=true,description = "个人身份证号码")
|
||||
* @ApiParams(name = "diploma", type = "string",required=true,description = "个人学历")
|
||||
* @ApiParams(name = "post", type = "string",required=true,description = "个人职务")
|
||||
* @ApiParams(name = "social_position", type = "string",required=true,description = "个人社会职务")
|
||||
* @ApiReturn({
|
||||
*
|
||||
*})
|
||||
|
@ -137,6 +197,33 @@ class Shop extends Base
|
|||
$params["front_idcard_image"] = $this->request->post('front_idcard_image/s','');
|
||||
$params["reverse_idcard_image"] = $this->request->post('reverse_idcard_image/s','');
|
||||
|
||||
|
||||
$params["address"] = $this->request->post('address/s','');
|
||||
$params["address_detail"] = $this->request->post('address_detail/s','');
|
||||
$params["longitude"] = $this->request->post('longitude/s','');
|
||||
$params["latitude"] = $this->request->post('latitude/s','');
|
||||
|
||||
|
||||
$params["province"] = $this->request->post('province/d','');
|
||||
$params["city"] = $this->request->post('city/d','');
|
||||
$params["district"] = $this->request->post('district/d','');
|
||||
|
||||
|
||||
|
||||
$params["establish_time"] = $this->request->post('establish_time/d','');
|
||||
$params["people"] = $this->request->post('people/d','');
|
||||
$params["legal_entity"] = $this->request->post('legal_entity/s','');
|
||||
$params["gender"] = $this->request->post('gender/d','');
|
||||
$params["nation"] = $this->request->post('nation/s','');
|
||||
$params["out_look"] = $this->request->post('out_look/s','');
|
||||
$params["birthtime"] = $this->request->post('birthtime/d','');
|
||||
$params["native_place"] = $this->request->post('native_place/s','');
|
||||
$params["card_number"] = $this->request->post('card_number/s','');
|
||||
$params["diploma"] = $this->request->post('diploma/s','');
|
||||
$params["post"] = $this->request->post('post/s','');
|
||||
$params["social_position"] = $this->request->post('social_position/s','');
|
||||
|
||||
|
||||
// if(empty($id)){
|
||||
// $this->error(__('缺少必要参数'));
|
||||
// }
|
||||
|
|
|
@ -19,6 +19,14 @@ $defaultHooks = [
|
|||
'app\\common\\listener\\classesorder\\OrderHook'
|
||||
],
|
||||
|
||||
'classes_order_evaluate_after'=> [ // 订单评价后
|
||||
'app\\common\\listener\\classesorder\\OrderHook'
|
||||
],
|
||||
|
||||
'classes_order_evaluate_update_after'=> [ // 订单评价修改后
|
||||
'app\\common\\listener\\classesorder\\OrderHook'
|
||||
],
|
||||
|
||||
//
|
||||
// app\common\listener\classesorder
|
||||
|
||||
|
|
|
@ -0,0 +1,124 @@
|
|||
<?php
|
||||
|
||||
namespace app\common\library;
|
||||
|
||||
use app\common\model\school\Area;
|
||||
use app\common\model\school\classes\Cate;
|
||||
use app\common\model\school\classes\ClassesLib;
|
||||
use app\common\model\school\classes\ClassesSpec;
|
||||
use app\common\model\school\classes\Type;
|
||||
use app\common\model\school\classes\VirtualHead;
|
||||
use app\common\model\school\classes\VirtualUser;
|
||||
use think\Db;
|
||||
|
||||
/**
|
||||
* Sql脚本类
|
||||
*/
|
||||
class Sqlscript
|
||||
{
|
||||
|
||||
public static function importClasses($page=1,$limit=1000){
|
||||
$kechengs = Db::table("kecheng")
|
||||
->page($page,$limit)->select();
|
||||
|
||||
//默认机构id
|
||||
$manystore_id = 2;
|
||||
$shop_id = 2;
|
||||
$user_id = 25;
|
||||
$teacher_id = 8;
|
||||
|
||||
foreach ($kechengs as $k=>$v){
|
||||
$classes_cate_ids = Cate::where( "name",$v["gongyi"])->value("id");
|
||||
if(!$classes_cate_ids)$classes_cate_ids="";
|
||||
$classes_label_ids = "";
|
||||
$classes_type = Type::where( "name",$v["kecheng_type"])->value("id");
|
||||
$add_type = "2";
|
||||
$add_id = 0;
|
||||
$title = $v["name"];
|
||||
$headimage = $v["img"];
|
||||
if(!$headimage)continue;
|
||||
$images = Db::table("kecheng_img")->where("ke_id",$v["id"])->column("path");
|
||||
$images = implode(",",$images);
|
||||
$type = "in";
|
||||
$classes_num = 1;
|
||||
$address_type = "2";
|
||||
// "address_city": "河南省/洛阳市",
|
||||
// "province": "河南省",
|
||||
// "city": "洛阳市",
|
||||
// "area": null,
|
||||
// "province_code": 410000,
|
||||
// "city_code": 410300,
|
||||
// "area_code": 0
|
||||
$address_city = "河南省/洛阳市"."/".$v["district"];
|
||||
$address = $v["district"];
|
||||
$address_detail = $v["shangkedidian"];
|
||||
$province = 410000;
|
||||
$city = 410300;
|
||||
$district = Area::where( "name","like","%".$v["district"]."%")
|
||||
->where("level",3)
|
||||
->where("pid",$city)
|
||||
->value("id");
|
||||
$longitude = $v["longitude"];
|
||||
$latitude = $v["latitude"];
|
||||
//html解码
|
||||
$content = html_entity_decode($v["blurb"]);
|
||||
$notice = html_entity_decode($v["experience"]);
|
||||
$price = 0;
|
||||
$status = "1";
|
||||
$weigh = 0;
|
||||
$recommend = ''.($v["por"] ?:0);
|
||||
$hot = ''.($v["hot"] ?:0);
|
||||
$new = ''.($v["top"] ?:0);
|
||||
$auth_status = 1;
|
||||
$feel = "1";
|
||||
//如果不存在开始和结束时间
|
||||
//随机生成个至少过去一个月的开始和结束时间, 结束时间至少过去一个月
|
||||
if(!$v["start_time"]||!$v["end_time"]){
|
||||
$v["start_time"] = time()-rand(2592000,2592000*10);
|
||||
$v["end_time"] = rand($v["start_time"]+24536,$v["start_time"] + time()-$v["start_time"]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//开始时间和结束时间如果是毫秒级时间戳,截取成秒级
|
||||
$v["start_time"] = substr($v["start_time"],0,10);
|
||||
$v["end_time"] = substr($v["end_time"],0,10);
|
||||
|
||||
$spec = [
|
||||
"classes_lib_id"=>0,
|
||||
"name"=>"单课时默认课时",
|
||||
"start_time"=>$v["start_time"],
|
||||
"end_time"=>$v["end_time"],
|
||||
"limit_num"=>100,
|
||||
"status"=>"1",
|
||||
"weigh"=>0
|
||||
];
|
||||
$classes_lib = ClassesLib::where("title",$title)->find();
|
||||
if(!$classes_lib){
|
||||
$classes_lib = ClassesLib::create(compact("feel","auth_status","manystore_id", "shop_id", "user_id", "teacher_id", "classes_cate_ids","classes_label_ids","classes_type","add_type","add_id","title","headimage","images","type","classes_num","address_type","address_city","address","address_detail","province","city","district","longitude","latitude","content","notice","price","status","weigh","recommend","hot","new"));
|
||||
$spec["classes_lib_id"] = $classes_lib->id;
|
||||
$spec = ClassesSpec::create($spec);
|
||||
// \app\common\model\school\classes\ClassesLib::add_virtual_init($classes_lib->id);
|
||||
\app\common\model\school\classes\ClassesLib::update_classes($classes_lib->id);
|
||||
}else{
|
||||
$classes_lib->save(compact("feel","auth_status","manystore_id", "shop_id", "user_id", "teacher_id", "classes_cate_ids","classes_label_ids","classes_type","add_type","add_id","title","headimage","images","type","classes_num","address_type","address_city","address","address_detail","province","city","district","longitude","latitude","content","notice","price","status","weigh","recommend","hot","new"));
|
||||
$spec["classes_lib_id"] = $classes_lib->id;
|
||||
$ClassesSpec = ClassesSpec::where("classes_lib_id",$classes_lib->id)->find();
|
||||
if($ClassesSpec){
|
||||
ClassesSpec::where("classes_lib_id",$classes_lib->id)->update($spec);
|
||||
}else{
|
||||
ClassesSpec::create($spec);
|
||||
}
|
||||
|
||||
|
||||
// \app\common\model\school\classes\ClassesLib::add_virtual_init($classes_lib->id);
|
||||
\app\common\model\school\classes\ClassesLib::update_classes($classes_lib->id);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
<?php
|
||||
namespace app\common\listener\classesorder;
|
||||
use app\common\model\school\classes\Evaluate;
|
||||
use app\common\model\school\Message;
|
||||
|
||||
class OrderHook
|
||||
|
@ -132,4 +133,74 @@ class OrderHook
|
|||
}
|
||||
|
||||
|
||||
|
||||
// 订单评价成功后
|
||||
public function classesOrderEvaluateAfter(&$params)
|
||||
{
|
||||
['order' => $order,"classes_evaluate"=>$classes_evaluate,"user_id"=>$user_id,"oper_type"=>$oper_type,"oper_id"=>$oper_id] = $params;
|
||||
|
||||
$detail = $order->detail;
|
||||
if(!$user_id ||$order["user_id"] !=$user_id ){
|
||||
$desc = "[系统操作]课程{$detail["title"]}订单反馈成功";
|
||||
}else{
|
||||
$desc = "课程{$detail["title"]}订单反馈成功";
|
||||
}
|
||||
|
||||
$title = "课程订单已反馈";
|
||||
$mini_type = "order_notice";
|
||||
$to_type="user";
|
||||
$to_id = $order["user_id"];
|
||||
$status ="classes";
|
||||
$platform="user";
|
||||
$oper_id=0;
|
||||
$oper_type="system";
|
||||
$params=[
|
||||
"event"=>"classes_order_evaluate_after",
|
||||
"order_id"=>$order["id"],
|
||||
"order_no"=>$order["order_no"],
|
||||
];
|
||||
Message::$event_name = $params["event"];
|
||||
Message::send($title,$desc,$mini_type,$to_id,$to_type,$status,$platform,$params,$oper_id,$oper_type);
|
||||
|
||||
Evaluate::evaluateStatistics($classes_evaluate->id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 订单评价更新后
|
||||
public function classesOrderEvaluateUpdateAfter(&$params)
|
||||
{
|
||||
['order' => $order,"classes_evaluate"=>$classes_evaluate,"user_id"=>$user_id,"oper_type"=>$oper_type,"oper_id"=>$oper_id] = $params;
|
||||
|
||||
$detail = $order->detail;
|
||||
if(!$user_id ||$order["user_id"] !=$user_id ){
|
||||
$desc = "[系统操作]课程{$detail["title"]}订单反馈更新成功";
|
||||
}else{
|
||||
$desc = "课程{$detail["title"]}订单反馈更新成功";
|
||||
}
|
||||
|
||||
$title = "课程订单已修改反馈";
|
||||
$mini_type = "order_notice";
|
||||
$to_type="user";
|
||||
$to_id = $order["user_id"];
|
||||
$status ="classes";
|
||||
$platform="user";
|
||||
$oper_id=0;
|
||||
$oper_type="system";
|
||||
$params=[
|
||||
"event"=>"classes_order_evaluate_update_after",
|
||||
"order_id"=>$order["id"],
|
||||
"order_no"=>$order["order_no"],
|
||||
];
|
||||
Message::$event_name = $params["event"];
|
||||
Message::send($title,$desc,$mini_type,$to_id,$to_type,$status,$platform,$params,$oper_id,$oper_type);
|
||||
Evaluate::evaluateStatistics($classes_evaluate->id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -88,7 +88,7 @@ class BaseModel extends Model
|
|||
if($row[$k]!=$params[$k]){
|
||||
//当修改参数不在允许修改的字段中
|
||||
if(!in_array($k,$this->no_auth_fields)){
|
||||
// var_dump($row[$k],$params[$k]);
|
||||
// var_dump($k,$row[$k],$params[$k]);
|
||||
$this->have_auth = true;break;
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
namespace app\common\model\dyqc;
|
||||
|
||||
use app\common\model\BaseModel;
|
||||
use app\common\model\school\Area;
|
||||
use app\common\model\school\classes\ClassesLib;
|
||||
use app\common\model\school\classes\Teacher;
|
||||
use app\common\model\User;
|
||||
|
@ -262,6 +263,11 @@ class ManystoreShop extends BaseModel
|
|||
//验证参数
|
||||
//$type 1=个人,2=机构
|
||||
if(!in_array($type,['1','2']))throw new \Exception("类型参数错误");
|
||||
|
||||
if(!in_array($params['gender'],[0,1]))throw new \Exception("年龄参数错误");
|
||||
|
||||
|
||||
|
||||
//switch不同类型type做不同验证
|
||||
//未传手机号则默认用户手机号
|
||||
if(empty($params['tel'])) $params['tel'] = $user['mobile'];
|
||||
|
@ -274,6 +280,26 @@ class ManystoreShop extends BaseModel
|
|||
// 'desc' => 'require',
|
||||
'front_idcard_image' => 'require',
|
||||
'reverse_idcard_image' => 'require',
|
||||
|
||||
'address' => 'require',
|
||||
// 'address_detail' => 'require',
|
||||
'longitude' => 'require',
|
||||
'latitude' => 'require',
|
||||
'province' => 'require',
|
||||
'city' => 'require',
|
||||
'district' => 'require',
|
||||
|
||||
'gender'=> 'require',
|
||||
'nation'=> 'require',
|
||||
'out_look'=> 'require',
|
||||
'birthtime'=> 'require',
|
||||
'native_place'=> 'require',
|
||||
'card_number'=> 'require',
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
];
|
||||
$rule_msg = [
|
||||
'name.require' => '姓名必须填写',
|
||||
|
@ -282,6 +308,22 @@ class ManystoreShop extends BaseModel
|
|||
// 'desc.require' => '申请备注必须填写',
|
||||
'front_idcard_image.require' => '身份证正面必须上传',
|
||||
'reverse_idcard_image.require' => '身份证反面必须上传',
|
||||
'address.require' => '地址必填',
|
||||
// 'address_detail.require' => '详细地址必填',
|
||||
'longitude.require' => '经度必填',
|
||||
'latitude.require' => '纬度必填',
|
||||
'province.require' => '省编号必填',
|
||||
'city.require' => '市编号必填',
|
||||
'district.require' => '县区编号必填',
|
||||
|
||||
|
||||
'gender.require'=> '个人性别必填',
|
||||
'nation.require'=> '个人民族必填',
|
||||
'out_look.require'=> '个人政治面貌必填',
|
||||
'birthtime.require'=> '个人出生日期必填',
|
||||
'native_place.require'=> '个人籍贯必填',
|
||||
'card_number.require'=> '个人身份证号码必填',
|
||||
|
||||
];
|
||||
break;
|
||||
case '2': //机构
|
||||
|
@ -294,20 +336,38 @@ class ManystoreShop extends BaseModel
|
|||
'reverse_idcard_image' => 'require',
|
||||
'images' => 'require',
|
||||
'yyzz_images' => 'require',
|
||||
'yyzzdm' => 'require',
|
||||
|
||||
|
||||
'address' => 'require',
|
||||
'address_detail' => 'require',
|
||||
// 'address_detail' => 'require',
|
||||
'longitude' => 'require',
|
||||
'latitude' => 'require',
|
||||
'province' => 'require',
|
||||
'city' => 'require',
|
||||
'district' => 'require',
|
||||
|
||||
// 'establish_time' => 'require',
|
||||
// 'people' => 'require',
|
||||
|
||||
|
||||
'gender'=> 'require',
|
||||
'nation'=> 'require',
|
||||
'out_look'=> 'require',
|
||||
'birthtime'=> 'require',
|
||||
'native_place'=> 'require',
|
||||
'card_number'=> 'require',
|
||||
|
||||
];
|
||||
|
||||
$rule_msg = [
|
||||
'address.require' => '机构地址必填',
|
||||
'address_detail.require' => '机构详细地址必填',
|
||||
'address.require' => '地址必填',
|
||||
// 'address_detail.require' => '详细地址必填',
|
||||
'longitude.require' => '经度必填',
|
||||
'latitude.require' => '纬度必填',
|
||||
'province.require' => '省编号必填',
|
||||
'city.require' => '市编号必填',
|
||||
'district.require' => '县区编号必填',
|
||||
'name.require' => '机构名称必须填写',
|
||||
'tel.require' => '服务电话必须填写',
|
||||
'tel.number' => '服务电话必须是数字',
|
||||
|
@ -316,12 +376,33 @@ class ManystoreShop extends BaseModel
|
|||
'reverse_idcard_image.require' => '法人身份证反面必须上传',
|
||||
'images.require' => '机构环境照片必须上传',
|
||||
'yyzz_images.require' => '营业执照照片必须上传',
|
||||
'yyzzdm.require' => '企业统一信用代码必填',
|
||||
// 'establish_time.require' => '成立时间必填',
|
||||
// 'people.require' => '员工人数必填',
|
||||
|
||||
|
||||
'gender.require'=> '法人性别必填',
|
||||
'nation.require'=> '法人民族必填',
|
||||
'out_look.require'=> '法人政治面貌必填',
|
||||
'birthtime.require'=> '法人出生日期必填',
|
||||
'native_place.require'=> '法人籍贯必填',
|
||||
'card_number.require'=> '法人身份证号码必填',
|
||||
|
||||
];
|
||||
|
||||
break;
|
||||
}
|
||||
self::check($params,$rule,$rule_msg);
|
||||
|
||||
}
|
||||
$province_name = Area::where("id" ,$params['province'])->value("name");
|
||||
if(!$province_name) throw new \Exception("省份不存在");
|
||||
$city_name = Area::where("id" ,$params['city'])->value("name");
|
||||
if(!$city_name) throw new \Exception("市不存在");
|
||||
$district_name = Area::where("id" ,$params['district'])->value("name");
|
||||
if(!$district_name) throw new \Exception("区县不存在");
|
||||
$params['address_city'] = $province_name."/".$city_name."/".$district_name;
|
||||
|
||||
$params["type"] = $type;
|
||||
|
||||
|
||||
|
|
|
@ -326,7 +326,7 @@ class ClassesLib extends BaseModel
|
|||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public function detail($id,$user_id=0,$oper_type='user',$trans=false){
|
||||
$self = $this->get($id,['shop','teacher']);
|
||||
$self = $this->get($id,['shop','teacher','user']);
|
||||
|
||||
//是否收藏
|
||||
$self['is_collect'] = 0;
|
||||
|
@ -334,7 +334,7 @@ class ClassesLib extends BaseModel
|
|||
$self['have_buy'] = 0;
|
||||
if($user_id){
|
||||
//判断是否收藏
|
||||
$self['is_collect'] = Collect::where("user_id",$user_id)->where("classes_lib_id",$id)->count();
|
||||
$self['is_collect'] = Collect::where("user_id",$user_id)->where("classes_lib_id",$id)->count() ? 1:0 ;
|
||||
|
||||
//判断用户是否已报名
|
||||
$self['have_buy'] = \app\common\model\school\classes\order\Order::where("classes_lib_id",$id)
|
||||
|
@ -369,7 +369,7 @@ class ClassesLib extends BaseModel
|
|||
//
|
||||
$this->setViews($id,$user_id,$oper_type,$user_id,$trans);
|
||||
|
||||
|
||||
$self->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
//参与人数 = 虚拟人数 + 平台人数
|
||||
return $self;
|
||||
}
|
||||
|
@ -651,6 +651,29 @@ $user_unpaid_order = $user_paid_order =null;
|
|||
$selfetch = $selfetch->where("{$a}title|{$a}address|{$a}address_detail|{$a}address_city", 'like', '%' . $keywords . '%');
|
||||
}
|
||||
|
||||
|
||||
if(isset($start_time) && isset($end_time) && ($end_time || $start_time)) {
|
||||
if($start_time){
|
||||
$selfetch = $selfetch->where("{$a}start_time", '>=', $start_time);
|
||||
}
|
||||
if($end_time){
|
||||
$selfetch = $selfetch->where("{$a}end_time", '<=', $end_time);
|
||||
}
|
||||
}
|
||||
|
||||
// is_expire 是否查过期:1只查过期,2只查不过期,0全查
|
||||
if(isset($is_expire) && $is_expire) {
|
||||
if($is_expire == 1){
|
||||
$selfetch = $selfetch->where("{$a}end_time", '<', time());
|
||||
}else{
|
||||
$selfetch = $selfetch->where("{$a}end_time", '>=', time());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (isset($manystore_id) && $manystore_id) {
|
||||
$selfetch = $selfetch->where("{$a}manystore_id", 'in', ''.$manystore_id);
|
||||
}
|
||||
|
@ -995,12 +1018,14 @@ $user_unpaid_order = $user_paid_order =null;
|
|||
|
||||
|
||||
//不用审核允许修改的字段
|
||||
public $no_auth_fields = ['headimage','images','notice','content',"virtual_num","virtual_collect","underline_price"];
|
||||
public $no_auth_fields = ["user_id","teacher_id","classes_type","classes_cate_ids","classes_label_ids","self_label_tag",'headimage','images','notice','content',"virtual_num","virtual_collect","underline_price"];
|
||||
|
||||
|
||||
public function classesCheck(&$params,$shop_id=null,$row=null)
|
||||
{
|
||||
// if($row)$params["auth_status"] = $params["auth_status"] ?? $row["auth_status"];
|
||||
$params["auth_status"] = $params["auth_status"] ?? '0';
|
||||
|
||||
$params["status"] = $params["status"] ?? '3';
|
||||
if(!$shop_id)$shop_id = $params["shop_id"] ?? 0;
|
||||
|
||||
|
@ -1104,6 +1129,7 @@ $user_unpaid_order = $user_paid_order =null;
|
|||
$this->no_auth_fields_check($params,$row);
|
||||
|
||||
if($this->have_auth){
|
||||
|
||||
$params['status'] = "3";
|
||||
$params['auth_status'] = "0";
|
||||
}
|
||||
|
@ -1130,7 +1156,8 @@ $user_unpaid_order = $user_paid_order =null;
|
|||
foreach ($spec as $k=>&$v){
|
||||
$v["classes_lib_id"] = $row->id;
|
||||
//先不进行判定,交给提交后再判定
|
||||
(new ClassesSpec)->specCheck($v,$shop_id,empty($v["id"])? null : ClassesSpec::get($v["id"]),false);
|
||||
$classesSpec = new ClassesSpec;
|
||||
$classesSpec->specCheck($v,$shop_id,empty($v["id"])? null : ClassesSpec::get($v["id"]),false);
|
||||
|
||||
}
|
||||
$params["spec"] = $spec;
|
||||
|
|
|
@ -107,7 +107,7 @@ class ClassesSpec extends BaseModel
|
|||
|
||||
// 课程存在售后订单则不允许操作
|
||||
$order = \app\common\model\school\classes\hour\Order::where("classes_lib_spec_id",$id)->where("status","in","-1,0")->find();
|
||||
if($order)throw new \Exception("存在正在使用中的课时订单报名学员,课时规格无法继续操作,如规格有误请下架!");
|
||||
if($order)throw new \Exception("{$order['name']}存在正在使用中的课时订单报名学员,课时规格无法继续操作,如规格有误请下架!");
|
||||
}
|
||||
|
||||
|
||||
|
@ -117,14 +117,15 @@ class ClassesSpec extends BaseModel
|
|||
//限定人数必须大于0
|
||||
$limit_num = $params["limit_num"];
|
||||
if($limit_num<=0){
|
||||
throw new \Exception("限定人数必须大于0");
|
||||
throw new \Exception("{$params["name"]}限定人数必须大于0");
|
||||
}
|
||||
|
||||
|
||||
|
||||
//开始和结束时间不能为空
|
||||
$time = $params["time"];
|
||||
if(empty($time))throw new \Exception("请选择开始和结束时间");
|
||||
|
||||
if(empty($time))throw new \Exception("{$params["name"]}请选择开始和结束时间".$time);
|
||||
$split_line = " - ";
|
||||
$time_arr = explode($split_line,$time);
|
||||
$params["start_time"] = $time_arr[0] ;
|
||||
|
@ -135,14 +136,14 @@ class ClassesSpec extends BaseModel
|
|||
$end_time = $params["end_time"];
|
||||
|
||||
if(empty($start_time) || empty($end_time)){
|
||||
throw new \Exception("请选择开始和结束时间");
|
||||
throw new \Exception("{$params["name"]}请选择开始和结束时间".$time);
|
||||
}
|
||||
//转化时间戳
|
||||
$start_time = $params["start_time"] && !is_numeric($params["start_time"]) ? strtotime($params["start_time"]) : $params["start_time"];
|
||||
$end_time = $params["end_time"] && !is_numeric($params["end_time"]) ? strtotime($params["end_time"]) : $params["end_time"];
|
||||
//结束时间不能小于开始时间
|
||||
if($end_time<=$start_time){
|
||||
throw new \Exception("结束时间不能小于开始时间");
|
||||
throw new \Exception("{$params["name"]}结束时间不能小于开始时间");
|
||||
}
|
||||
|
||||
//结束时间不能是已经过去的时间
|
||||
|
@ -151,6 +152,16 @@ class ClassesSpec extends BaseModel
|
|||
// throw new \Exception("结束时间不能是已经过去的时间");
|
||||
}
|
||||
|
||||
|
||||
//开始和结束时间必须是同一天
|
||||
$start_time_date = date("Y-m-d",$start_time);
|
||||
$end_time_date = date("Y-m-d",$end_time);
|
||||
if($start_time_date!=$end_time_date){
|
||||
throw new \Exception("{$params["name"]}开始和结束时间必须是同一天");
|
||||
}
|
||||
|
||||
|
||||
|
||||
$params["start_time"] = $start_time;
|
||||
$params["end_time"] = $end_time;
|
||||
|
||||
|
|
|
@ -0,0 +1,520 @@
|
|||
<?php
|
||||
|
||||
namespace app\common\model\school\classes;
|
||||
|
||||
|
||||
use app\common\model\BaseModel;
|
||||
use app\common\model\dyqc\ManystoreShop;
|
||||
use app\common\model\school\classes\order\Order;
|
||||
use app\common\model\school\classes\order\OrderLog;
|
||||
use app\manystore\model\Manystore;
|
||||
use think\Model;
|
||||
|
||||
|
||||
class Evaluate extends BaseModel
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'school_classes_evaluate';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'evaluate_time_text',
|
||||
'status_text',
|
||||
'top_text'
|
||||
];
|
||||
|
||||
|
||||
protected static function init()
|
||||
{
|
||||
self::afterInsert(function ($row) {
|
||||
if (!$row['weigh']) {
|
||||
$pk = $row->getPk();
|
||||
$row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public function getStatusList()
|
||||
{
|
||||
return ['1' => __('Status 1'), '2' => __('Status 2')];
|
||||
}
|
||||
|
||||
public function getTopList()
|
||||
{
|
||||
return ['0' => __('Top 0'), '1' => __('Top 1')];
|
||||
}
|
||||
|
||||
|
||||
public function getEvaluateTimeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['evaluate_time']) ? $data['evaluate_time'] : '');
|
||||
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
|
||||
}
|
||||
|
||||
|
||||
public function getStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
|
||||
$list = $this->getStatusList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
|
||||
public function getTopTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['top']) ? $data['top'] : '');
|
||||
$list = $this->getTopList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
protected function setEvaluateTimeAttr($value)
|
||||
{
|
||||
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
|
||||
}
|
||||
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo('app\common\model\User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function lib()
|
||||
{
|
||||
return $this->belongsTo(ClassesLib::class, 'classes_lib_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function classesorder()
|
||||
{
|
||||
return $this->belongsTo(\app\common\model\school\classes\order\Order::class, 'classes_order_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function manystore()
|
||||
{
|
||||
return $this->belongsTo(Manystore::class, 'manystore_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function shop()
|
||||
{
|
||||
return $this->belongsTo(ManystoreShop::class, 'shop_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function teacher()
|
||||
{
|
||||
return $this->belongsTo(Teacher::class, 'teacher_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function getImageAttr($value, $data)
|
||||
{
|
||||
if (!empty($value)) return cdnurl($value, true);
|
||||
}
|
||||
|
||||
|
||||
/**得到基础条件
|
||||
* @param $status
|
||||
* @param null $model
|
||||
* @param string $alisa
|
||||
*/
|
||||
public static function getBaseWhere($whereData = [], $model = null, $alisa = '',$with = false)
|
||||
{
|
||||
|
||||
if (!$model) {
|
||||
$model = new static;
|
||||
if ($alisa&&!$with) $model = $model->alias($alisa);
|
||||
}
|
||||
if ($alisa) $alisa = $alisa . '.';
|
||||
$tableFields = (new static)->getTableFields();
|
||||
foreach ($tableFields as $fields)
|
||||
{
|
||||
if(in_array($fields, ['status']))continue;
|
||||
// if (isset($whereData[$fields]) && $whereData[$fields]) $model = $model->where("{$alisa}{$fields}", '=', $whereData[$fields]);
|
||||
|
||||
if (isset($whereData[$fields]) && $whereData[$fields]){
|
||||
if(is_array($whereData[$fields])){
|
||||
$model = $model->where("{$alisa}{$fields}", $whereData[$fields][0], $whereData[$fields][1]);
|
||||
}else{
|
||||
$model = $model->where("{$alisa}{$fields}", '=', $whereData[$fields]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (isset($whereData['status']) && $whereData['status']) $model = $model->where("{$alisa}status", 'in', $whereData['status']);
|
||||
if (isset($whereData['not_status']) && $whereData['not_status']) $model = $model->where("{$alisa}status", 'not in', $whereData['not_status']);
|
||||
|
||||
|
||||
if (isset($whereData['keywords'])&&$whereData['keywords']) $model = $model->where("{$alisa}message_text|{$alisa}nickname", 'like', "%". $whereData['keywords']."%");
|
||||
if (isset($whereData['time'])&&$whereData['time']){
|
||||
$model = $model->time(["{$alisa}evaluate_time",$whereData['time']]);
|
||||
}
|
||||
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static function evaluateList($page, $limit,$params=[]){
|
||||
$with_field = [
|
||||
'user'=>['nickname','mobile','avatar','realname'],
|
||||
'base'=>['*'],
|
||||
'shop'=>['name','logo'],
|
||||
'lib'=>['title','headimage'],
|
||||
'classesorder'=>['order_no'],
|
||||
'teacher'=>['name',"head_image"],
|
||||
];
|
||||
|
||||
$alisa = (new self)->getWithAlisaName();
|
||||
$sort = "{$alisa}.top desc,{$alisa}.weigh desc,{$alisa}.id desc";
|
||||
$serch_where = ["status"=>'1'];
|
||||
$serch_where = array_merge($serch_where,$params);
|
||||
return (new self)->getBaseList($serch_where, $page, $limit,$sort,$with_field);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 课程详情
|
||||
* @param $id
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function detail($id,$user_id=0,$oper_type='user',$trans=false){
|
||||
$self = self::get($id,['user','shop',"lib",'teacher','classesorder']);
|
||||
|
||||
if($user_id){
|
||||
if($self["user_id"] != $user_id) throw new \Exception("非法访问");
|
||||
}
|
||||
|
||||
$self->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$self->getRelation('shop')->visible(['name','logo']);
|
||||
$self->getRelation('lib')->visible(['title','headimage']);
|
||||
$self->getRelation('classesorder')->visible(['order_no']);
|
||||
$self->getRelation('teacher')->visible(['name',"head_image"]);
|
||||
//参与人数 = 虚拟人数 + 平台人数
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 课程反馈
|
||||
* @param $order_no
|
||||
* @param int $user_id
|
||||
* @param bool $check
|
||||
* @param bool $trans
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function evaluate($order_no,$message_text="系统自动评价,默认给与好评",$classes_star=5,$teacher_star=5,$shop_star=5,$user_id=0,$check=false,$oper_type='user',$oper_id=0,$trans=false){
|
||||
|
||||
//得到可取消订单
|
||||
$order = \app\common\model\school\classes\order\Order::getHaveEvaluateOrder($order_no);
|
||||
if($check){
|
||||
//用户操作权限检测
|
||||
\app\common\model\school\classes\hourorder\Order::checkOptionAuth($order['classes_order_id'],$user_id ?: $oper_id,$oper_type,true);
|
||||
}
|
||||
|
||||
$detail = $order->detail;
|
||||
$user = $order->user;
|
||||
if(!$detail)throw new \Exception("课程详情不存在");
|
||||
if(!$user)throw new \Exception("下单用户不存在");
|
||||
//已提交不让提交
|
||||
$self = self::where(['classes_order_id'=>$order['id'], "user_id"=>$order['user_id']])->find();
|
||||
if($self) throw new \Exception("课程已评价,想修改请去修改");
|
||||
//评价星级只能是数字0.5,1,1.5,2,2.5,3,3.5,4,4.5,5
|
||||
$classes_star = round($classes_star,1);
|
||||
$teacher_star = round($teacher_star,1);
|
||||
$shop_star = round($shop_star,1);
|
||||
if(!in_array($classes_star,[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5])) throw new \Exception("课程评价星级只能是数字,异常");
|
||||
if(!in_array($teacher_star,[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5])) throw new \Exception("老师评价星级只能是数字,异常");
|
||||
if(!in_array($shop_star,[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5])) throw new \Exception("上课环境星级只能是数字,异常");
|
||||
|
||||
$data = [
|
||||
'user_id'=>$order['user_id'],
|
||||
'classes_lib_id'=>$order['classes_lib_id'],
|
||||
'classes_order_id'=>$order['id'],
|
||||
'manystore_id'=>$order['manystore_id'],
|
||||
'shop_id'=>$order['shop_id'],
|
||||
'teacher_id' =>$detail['teacher_id'],
|
||||
'image'=>$user["avatar"],
|
||||
'nickname'=>$user["nickname"],
|
||||
'evaluate_time'=>time(),
|
||||
'status'=>'1',
|
||||
'weigh'=>0,
|
||||
'message_text'=>$message_text,
|
||||
'classes_star'=>$classes_star,
|
||||
'teacher_star'=>$teacher_star,
|
||||
'shop_star'=>$shop_star,
|
||||
];
|
||||
|
||||
|
||||
//判断逻辑
|
||||
if($trans){
|
||||
self::beginTrans();
|
||||
}
|
||||
$res = true;
|
||||
try{
|
||||
//事务逻辑
|
||||
$classes_evaluate = self::create($data);
|
||||
$classes_evaluate_id = $classes_evaluate->id;
|
||||
|
||||
|
||||
//更新订单评价状态
|
||||
$order = Order::updateEvaluate($order,$classes_evaluate_id);
|
||||
//插入订单取消日志
|
||||
if(!$user_id ||$order["user_id"] !=$user_id ){
|
||||
OrderLog::log($order['id'],"[系统操作]课程订单评价成功",$oper_type ?: 'user', $oper_id ?: $order['user_id']);
|
||||
}else{
|
||||
OrderLog::log($order['id'],"课程订单评价成功",$oper_type ?: 'user', $oper_id ?: $order['user_id']);
|
||||
}
|
||||
|
||||
//调用订单取消事件
|
||||
$data = ['order' => $order,"classes_evaluate"=>$classes_evaluate,"user_id"=>$user_id,"oper_type"=>$oper_type,"oper_id"=>$oper_id];
|
||||
\think\Hook::listen('classes_order_evaluate_after', $data);
|
||||
//执行课时数更新
|
||||
$res1 = order::statisticsAndUpdateClassesNumber($order['id']);
|
||||
|
||||
|
||||
if($trans){
|
||||
self::commitTrans();
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
if($trans){
|
||||
self::rollbackTrans();
|
||||
}
|
||||
throw new \Exception($e->getMessage());
|
||||
}
|
||||
return $res1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/** 课程反馈修改
|
||||
* @param $order_no
|
||||
* @param int $user_id
|
||||
* @param bool $check
|
||||
* @param bool $trans
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function evaluateUpdate($order_no,$message_text="系统自动评价,默认给与好评",$classes_star=5,$teacher_star=5,$shop_star=5,$user_id=0,$check=false,$oper_type='user',$oper_id=0,$trans=false){
|
||||
|
||||
//得到可取消订单
|
||||
$order = \app\common\model\school\classes\order\Order::getHaveEvaluateOrder($order_no);
|
||||
if($check){
|
||||
//用户操作权限检测
|
||||
\app\common\model\school\classes\hourorder\Order::checkOptionAuth($order['classes_order_id'],$user_id ?: $oper_id,$oper_type,true);
|
||||
}
|
||||
$detail = $order->detail;
|
||||
$user = $order->user;
|
||||
if(!$detail)throw new \Exception("课程详情不存在");
|
||||
if(!$user)throw new \Exception("下单用户不存在");
|
||||
//已提交不让提交
|
||||
$self = self::where(['classes_order_id'=>$order['id'], "user_id"=>$order['user_id']])->find();
|
||||
if(!$self) throw new \Exception("课程未评价,请先去评价");
|
||||
|
||||
//超出评价修改次数
|
||||
$classes_evaluate_number = config("site.classes_evaluate_number");
|
||||
if($self['update_number'] >= $classes_evaluate_number){
|
||||
throw new \Exception("已超过评价修改次数,无法继续修改");
|
||||
}
|
||||
|
||||
$classes_star = round($classes_star,1);
|
||||
$teacher_star = round($teacher_star,1);
|
||||
$shop_star = round($shop_star,1);
|
||||
if(!in_array($classes_star,[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5])) throw new \Exception("课程评价星级只能是数字,异常");
|
||||
if(!in_array($teacher_star,[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5])) throw new \Exception("老师评价星级只能是数字,异常");
|
||||
if(!in_array($shop_star,[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5])) throw new \Exception("上课环境星级只能是数字,异常");
|
||||
|
||||
|
||||
$data = [
|
||||
'user_id'=>$order['user_id'],
|
||||
'classes_lib_id'=>$order['classes_lib_id'],
|
||||
'classes_order_id'=>$order['id'],
|
||||
'manystore_id'=>$order['manystore_id'],
|
||||
'shop_id'=>$order['shop_id'],
|
||||
'teacher_id' =>$detail['teacher_id'],
|
||||
'image'=>$user["avatar"],
|
||||
'nickname'=>$user["nickname"],
|
||||
'message_text'=>$message_text,
|
||||
'classes_star'=>$classes_star,
|
||||
'teacher_star'=>$teacher_star,
|
||||
'shop_star'=>$shop_star,
|
||||
];
|
||||
|
||||
|
||||
|
||||
//判断逻辑
|
||||
if($trans){
|
||||
self::beginTrans();
|
||||
}
|
||||
$res = true;
|
||||
try{
|
||||
//修改次数+1
|
||||
$data['update_number'] = $self['update_number'] + 1;
|
||||
//事务逻辑
|
||||
$self->save($data);
|
||||
|
||||
$classes_evaluate = $self;
|
||||
$classes_evaluate_id = $self->id;
|
||||
|
||||
|
||||
//更新订单评价状态
|
||||
$order = Order::updateEvaluate($order,$classes_evaluate_id);
|
||||
//插入订单取消日志
|
||||
if(!$user_id ||$order["user_id"] !=$user_id ){
|
||||
OrderLog::log($order['id'],"[系统操作]课程订单评价修改成功",$oper_type ?: 'user', $oper_id ?: $order['user_id']);
|
||||
}else{
|
||||
OrderLog::log($order['id'],"课程订单评价修改成功",$oper_type ?: 'user', $oper_id ?: $order['user_id']);
|
||||
}
|
||||
|
||||
//调用订单取消事件
|
||||
$data = ['order' => $order,"classes_evaluate"=>$classes_evaluate,"user_id"=>$user_id,"oper_type"=>$oper_type,"oper_id"=>$oper_id];
|
||||
\think\Hook::listen('classes_order_evaluate_update_after', $data);
|
||||
//执行课时数更新
|
||||
$res1 = order::statisticsAndUpdateClassesNumber($order['id']);
|
||||
|
||||
|
||||
if($trans){
|
||||
self::commitTrans();
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
if($trans){
|
||||
self::rollbackTrans();
|
||||
}
|
||||
throw new \Exception($e->getMessage());
|
||||
}
|
||||
return $res1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** 课程评价统计
|
||||
* @param $order_no
|
||||
* @param int $user_id
|
||||
* @param bool $check
|
||||
* @param bool $trans
|
||||
* @return bool
|
||||
* @throws \Exception
|
||||
*/
|
||||
public static function evaluateStatistics($id,$trans=false){
|
||||
|
||||
$self = self::where(['id'=>$id])->find();
|
||||
if(!$self) return false;
|
||||
|
||||
|
||||
//判断逻辑
|
||||
if($trans){
|
||||
self::beginTrans();
|
||||
}
|
||||
$res = true;
|
||||
try{
|
||||
//统计老师评分
|
||||
$teacher = $self->teacher; //teacher_star
|
||||
if($teacher){
|
||||
|
||||
//求所有评价平均值,最终值必须四舍五入在0.5,1,1.5,2,2.5,3,3.5,4,4.5,5
|
||||
$count = self::where("teacher_id",$teacher['id'])->count();
|
||||
if($count){
|
||||
$teacher_star = self::where("teacher_id",$teacher['id'])->avg("teacher_star");
|
||||
$teacher_star = round($teacher_star,1);
|
||||
//最终值必须在0.5,1,1.5,2,2.5,3,3.5,4,4.5,5 这几个数字中
|
||||
$teacher_star_arr = [0.5,1,1.5,2,2.5,3,3.5,4,4.5,5];
|
||||
//循环$teacher_star_arr 找到最接近的
|
||||
foreach ($teacher_star_arr as $k=>$v){
|
||||
if(abs($v-$teacher_star) < 0.5){
|
||||
$teacher_star = $v;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$teacher_star = 5;
|
||||
}
|
||||
$teacher->save(['teacher_star'=>$teacher_star]);
|
||||
}
|
||||
|
||||
$shop = $self->shop; //shop_star
|
||||
if($shop){
|
||||
$count = self::where("shop_id",$shop['id'])->count();
|
||||
if($count){
|
||||
$shop_star = self::where("shop_id",$shop['id'])->avg("shop_star");
|
||||
$shop_star = round($shop_star,1);
|
||||
//最终值必须在0.5,1,1.5,2,2.5,3,3.5,4,4.5,5 这几个数字中
|
||||
$shop_star_arr = [0.5,1,1.5,2,2.5,3,3.5,4,4.5,5];
|
||||
//循环$teacher_star_arr 找到最接近的
|
||||
foreach ($shop_star_arr as $k=>$v){
|
||||
if(abs($v-$shop_star) < 0.5){
|
||||
$shop_star = $v;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
$shop_star = 5;
|
||||
}
|
||||
$shop->save(['shop_star'=>$shop_star]);
|
||||
}
|
||||
$lib = $self->lib; //classes_star
|
||||
if($lib){
|
||||
$count = self::where("classes_lib_id",$lib['id'])->count();
|
||||
if($count){
|
||||
$classes_star = self::where("classes_lib_id",$lib['id'])->avg("classes_star");
|
||||
$classes_star = round($classes_star,1);
|
||||
//最终值必须在0.5,1,1.5,2,2.5,3,3.5,4,4.5,5 这几个数字中
|
||||
$classes_star_arr = [0.5,1,1.5,2,2.5,3,3.5,4,4.5,5];
|
||||
//循环$teacher_star_arr 找到最接近的
|
||||
foreach ($classes_star_arr as $k=>$v){
|
||||
if(abs($v-$classes_star) < 0.5){
|
||||
$classes_star = $v;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
$classes_star = 5;
|
||||
}
|
||||
$lib->save(['classes_star'=>$classes_star]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if($trans){
|
||||
self::commitTrans();
|
||||
}
|
||||
}catch (\Exception $e){
|
||||
if($trans){
|
||||
self::rollbackTrans();
|
||||
}
|
||||
throw new \Exception($e->getMessage());
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -416,6 +416,16 @@ class Order extends BaseModel
|
|||
return Cache::rm($cacheNmae);
|
||||
}
|
||||
|
||||
/** 从是否有售后的角度判断是否可操作课时单
|
||||
* @param $classes_order_id
|
||||
* @return void
|
||||
*/
|
||||
public static function serverCheck($classes_order_id){
|
||||
$order = \app\common\model\school\classes\order\Order::where("id",$classes_order_id)->find();
|
||||
if(!$order)throw new \Exception("课程单不存在!");
|
||||
if($order["status"]!="3")throw new \Exception("当前课程单属于锁定状态,可能在售后或其他状态");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -468,11 +478,11 @@ class Order extends BaseModel
|
|||
* @return bool
|
||||
*/
|
||||
public function orderVaild($user_id,$classes_order_id,$order_no,$classes_lib_spec_id, $param,$check=false){
|
||||
if(!$user_id||!$classes_order_id)throw new \Exception("缺少必要参数");
|
||||
if(!$user_id)throw new \Exception("缺少必要参数");
|
||||
|
||||
|
||||
//代下单检测是否有代下单权限
|
||||
if(isset($param["help_user_id"]) && $param["help_user_id"]){
|
||||
if(isset($param["help_user_id"]) && $param["help_user_id"] && $classes_order_id){
|
||||
if(!isset($param["help_type"]) || !$param["help_type"])throw new \Exception("请选择代下单类型!");
|
||||
|
||||
//课程是否存在并上架
|
||||
|
@ -484,17 +494,19 @@ class Order extends BaseModel
|
|||
self::checkOptionAuth($classes_order_id,$param["help_user_id"],$param["help_type"]);
|
||||
|
||||
}
|
||||
|
||||
// $user_id = $classesOrder["user_id"];
|
||||
|
||||
|
||||
//默认校验订单是否已创建
|
||||
if($check){
|
||||
if(!$classes_order_id)throw new \Exception("缺少订单参数");
|
||||
//判断订单是否已创建
|
||||
$order_info = self::where(['order_no'=>$order_no])->find();
|
||||
if($order_info) throw new \Exception("订单已生成,如需重新下单请退出页面重新进入!");
|
||||
if(!$classes_lib_spec_id)throw new \Exception("请选择您要预约的课时信息!");
|
||||
}
|
||||
|
||||
if($classes_order_id){
|
||||
//校验订单参数
|
||||
//更新最近次数后进行验证
|
||||
\app\common\model\school\classes\order\Order::statisticsAndUpdateClassesNumber($classes_order_id);
|
||||
|
@ -515,9 +527,13 @@ class Order extends BaseModel
|
|||
//售后中
|
||||
if($classesOrder['server_status']=="3") throw new \Exception("该课程单正在售后中,请勿操作!");
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//判断课时信息
|
||||
if($classes_lib_spec_id){
|
||||
self::checkLibSpec($user_id,$detail["classes_lib_id"],$classes_lib_spec_id,true);
|
||||
self::checkLibSpec($user_id,$detail["classes_lib_id"] ?? $param["classes_lib_id"] ,$classes_lib_spec_id,true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -790,8 +806,10 @@ class Order extends BaseModel
|
|||
* @throws \Exception
|
||||
*/
|
||||
public function cancel($order_no,$user_id=0,$check=false,$oper_type='user',$oper_id=0,$trans=false){
|
||||
|
||||
//得到可取消订单
|
||||
$order = self::getHaveCancelOrder($order_no);
|
||||
|
||||
if($check){
|
||||
//用户操作权限检测
|
||||
self::checkOptionAuth($order['classes_order_id'],$user_id ?: $oper_id,$oper_type);
|
||||
|
@ -817,6 +835,7 @@ class Order extends BaseModel
|
|||
}
|
||||
|
||||
}
|
||||
self::serverCheck($order['classes_order_id']);
|
||||
}
|
||||
|
||||
//判断逻辑
|
||||
|
@ -1204,6 +1223,9 @@ class Order extends BaseModel
|
|||
if($check){
|
||||
//用户操作权限检测
|
||||
self::checkOptionAuth($order['classes_order_id'],$user_id ?: $oper_id,$oper_type);
|
||||
|
||||
self::serverCheck($order['classes_order_id']);
|
||||
|
||||
}
|
||||
//审核状态字段检测
|
||||
$auth_status_arr = [1,2];//0=待审核,1=审核通过,2=审核失败
|
||||
|
@ -1322,6 +1344,9 @@ class Order extends BaseModel
|
|||
if($check){
|
||||
//用户操作权限检测
|
||||
self::checkOptionAuth($order['classes_order_id'],$user_id ?: $oper_id,$oper_type);
|
||||
|
||||
self::serverCheck($order['classes_order_id']);
|
||||
|
||||
}
|
||||
|
||||
//判断逻辑
|
||||
|
@ -1382,6 +1407,8 @@ class Order extends BaseModel
|
|||
if($check){
|
||||
//用户操作权限检测
|
||||
self::checkOptionAuth($order['classes_order_id'],$user_id ?: $oper_id,$oper_type);
|
||||
|
||||
self::serverCheck($order['classes_order_id']);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ use app\common\model\BaseModel;
|
|||
use app\common\model\dyqc\ManystoreShop;
|
||||
use app\common\model\school\classes\ClassesLib;
|
||||
use app\common\model\school\classes\ClassesSpec;
|
||||
use app\common\model\school\classes\Evaluate;
|
||||
use app\common\model\User;
|
||||
use bw\Common;
|
||||
use fast\Random;
|
||||
|
@ -204,6 +205,11 @@ class Order extends BaseModel
|
|||
return $this->belongsTo(ServiceOrder::class, 'classes_service_order_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
public function evaluate()
|
||||
{
|
||||
return $this->hasOne(Evaluate::class, 'classes_order_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getCodeimageAttr($value, $data)
|
||||
|
@ -305,6 +311,8 @@ class Order extends BaseModel
|
|||
// 'text' => $data['code'],
|
||||
// 'size' => 200,
|
||||
// ]);
|
||||
//评价
|
||||
$data->evaluate;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
@ -367,8 +375,7 @@ class Order extends BaseModel
|
|||
try {
|
||||
//1订单执行创建
|
||||
$order = $this->createOrder($user_id,$orderInfo['classes_lib_id'],$order_no,$orderInfo['param'],$remark);
|
||||
//5删除缓存
|
||||
self::deleteOrderCache($user_id, $order_no);
|
||||
|
||||
|
||||
//如果是免费订单,则直接调用支付完成
|
||||
if ($order['totalprice'] == 0) {
|
||||
|
@ -376,6 +383,13 @@ class Order extends BaseModel
|
|||
$this->paySuccess($order_no,['platform'=>"miniapp",'pay_type'=>'yue']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//5删除缓存
|
||||
self::deleteOrderCache($user_id, $order_no);
|
||||
|
||||
|
||||
|
||||
if ($trans) {
|
||||
self::commitTrans();
|
||||
}
|
||||
|
@ -421,6 +435,21 @@ class Order extends BaseModel
|
|||
$res1->classes_order_detail_id = $orderDetail->id;
|
||||
$res1->save();
|
||||
|
||||
|
||||
if($res1["classes_lib_spec_id"]){
|
||||
|
||||
//记录代下单人信息
|
||||
$param = [
|
||||
"classes_lib_spec_id" =>$res1["classes_lib_spec_id"],
|
||||
];
|
||||
|
||||
//课时是否合法判断
|
||||
$res = (new \app\common\model\school\classes\hourorder\Order)->confirm($res1["user_id"],$res1['id'],null, $res1["classes_lib_spec_id"],$param, true);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//记录订单日志
|
||||
OrderLog::log($res1['id'],"课程订单创建成功,等待【学员】支付",'user',$user_id);
|
||||
//7事件
|
||||
|
@ -463,6 +492,9 @@ class Order extends BaseModel
|
|||
$classes_lib_info = ClassesLib::where('id',$classes_lib_id)->find();
|
||||
if(!$classes_lib_info || $classes_lib_info['status']!='1') throw new \Exception("该课程不存在或已下架!");
|
||||
|
||||
//往期课程无法下单
|
||||
$now_time = time();
|
||||
if($classes_lib_info['end_time'] <= $now_time) throw new \Exception("该课程已过期,是往期课程,无法购买!");
|
||||
//执行免费课黑名单判断
|
||||
//免费课才进行判断
|
||||
if($classes_lib_info && $classes_lib_info['feel']=='1'){
|
||||
|
@ -478,6 +510,25 @@ class Order extends BaseModel
|
|||
$user_info = User::where('id',$user_id)->find();
|
||||
if(!$user_info) throw new \Exception("用户不存在!");
|
||||
|
||||
|
||||
$classes_lib_spec_id = $param['classes_lib_spec_id'] ?? null;
|
||||
if($classes_lib_spec_id){
|
||||
//没有订单id无法判断
|
||||
// //记录代下单人信息
|
||||
// $param = [
|
||||
// "type" =>'2',
|
||||
// "help_user_id" =>$user_id,
|
||||
// "help_type" =>'admin',
|
||||
// "classes_lib_id" =>$classes_lib_id
|
||||
// ];
|
||||
//
|
||||
//
|
||||
// //确认订单
|
||||
// $res = (new \app\common\model\school\classes\hourorder\Order)->confirm($user_id,0,null, $classes_lib_spec_id,$param, true);
|
||||
//只简单判断课程和课时
|
||||
\app\common\model\school\classes\hourorder\Order::checkLibSpec($user_id,$classes_lib_id ,$classes_lib_spec_id,true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -514,6 +565,7 @@ class Order extends BaseModel
|
|||
$order_data["beforeprice"] = $classes_lib_info["price"];
|
||||
$order_data["totalprice"] = $classes_lib_info["price"];
|
||||
$order_data["payprice"] = $classes_lib_info["price"];
|
||||
$order_data["classes_lib_spec_id"] = $param['classes_lib_spec_id'] ?? 0;
|
||||
$order_data["status"] = '0';
|
||||
$order_type = "multiple";
|
||||
//如果课程只存在一个规格,则订单类型为单课
|
||||
|
@ -521,9 +573,14 @@ class Order extends BaseModel
|
|||
if($classes_spec_count==1){
|
||||
$order_type = "single";
|
||||
}
|
||||
$classes_lib_spec = null;
|
||||
$classes_lib_spec_id = $param['classes_lib_spec_id'] ?? null;
|
||||
if($classes_lib_spec_id){
|
||||
$classes_lib_spec = ClassesSpec::get($classes_lib_spec_id);
|
||||
}
|
||||
|
||||
|
||||
return compact('order_data','classes_lib_info','user_data','order_type');
|
||||
return compact('order_data','classes_lib_info','user_data','order_type',"classes_lib_spec");
|
||||
}
|
||||
|
||||
|
||||
|
@ -687,7 +744,24 @@ class Order extends BaseModel
|
|||
//不拆分订单,直接执行
|
||||
self::paySetData($order,$notify);
|
||||
|
||||
//如果是免费单且是单规格
|
||||
//如果需要快捷预约
|
||||
$classes_lib_spec_id = $order['classes_lib_spec_id'];
|
||||
if($classes_lib_spec_id){
|
||||
//记录代下单人信息
|
||||
$param = [
|
||||
"type" =>'2',
|
||||
"help_user_id" =>$order["user_id"] ,
|
||||
"help_type" => 'admin',
|
||||
];
|
||||
|
||||
//确认订单
|
||||
$res = (new \app\common\model\school\classes\hourorder\Order)->confirm($order["user_id"],$order['id'],null, $classes_lib_spec_id,$param, true);
|
||||
$remark = "订单支付完成同时快捷预约一个课时";
|
||||
//创建订单
|
||||
$result = (new \app\common\model\school\classes\hourorder\Order)->cacheCreateOrder($res['order_no'], $order["user_id"],$remark);
|
||||
|
||||
}
|
||||
|
||||
|
||||
if($trans){
|
||||
self::commitTrans();
|
||||
|
@ -794,7 +868,7 @@ class Order extends BaseModel
|
|||
$tableFields = (new static)->getTableFields();
|
||||
foreach ($tableFields as $fields)
|
||||
{
|
||||
if(in_array($fields, ['status','classes_lib_id']))continue;
|
||||
if(in_array($fields, ['status','classes_lib_id','has_evaluate']))continue;
|
||||
// if (isset($whereData[$fields]) && $whereData[$fields]) $model = $model->where("{$alisa}{$fields}", '=', $whereData[$fields]);
|
||||
|
||||
if (isset($whereData[$fields]) && $whereData[$fields]){
|
||||
|
@ -820,6 +894,21 @@ class Order extends BaseModel
|
|||
if (isset($whereData['classes_lib_ids']) && $whereData['classes_lib_ids']) $model = $model->where("{$alisa}classes_lib_id", 'in', $whereData['classes_lib_ids']);
|
||||
if (isset($whereData['classes_lib_id']) && $whereData['classes_lib_id']) $model = $model->where("{$alisa}classes_lib_id", 'in', $whereData['classes_lib_id']);
|
||||
|
||||
if (isset($whereData['has_evaluate'])&&$whereData['has_evaluate']){
|
||||
//1查已评价 2查未评价
|
||||
if($whereData['has_evaluate'] == 1){
|
||||
//1查已评价
|
||||
$model = $model->where("{$alisa}classes_evaluate_id", '<>', 0);
|
||||
}else{
|
||||
//2查未评价
|
||||
$model = $model->whereExists(function ($query) use ($alisa) {
|
||||
$order_table_name = (new \app\common\model\school\classes\hourorder\Order())->getQuery()->getTable();
|
||||
$query->table($order_table_name)->where($order_table_name . '.classes_order_id=' . $alisa . 'id')->where('status', '=', '3');
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
|
@ -828,7 +917,7 @@ class Order extends BaseModel
|
|||
|
||||
|
||||
|
||||
public static function allList($user_id,$page, $limit,$keywords,$status,$classes_lib_id=[]){
|
||||
public static function allList($user_id,$page, $limit,$keywords,$status,$classes_lib_id=[],$has_evaluate=0){
|
||||
$with_field = [
|
||||
'user'=>['nickname','mobile','avatar','realname'],
|
||||
'base'=>['*'],
|
||||
|
@ -842,7 +931,7 @@ class Order extends BaseModel
|
|||
$FINISH = '9';
|
||||
$alisa = (new self)->getWithAlisaName();
|
||||
$sort = "field({$alisa}.status,'{$NOPAY}','{$PAYED}','{$FINISH}','{$REFUND}','{$CANCEL}') asc,{$alisa}.id desc";
|
||||
$serch_where = ['status'=>$status,'user_id'=>$user_id,'keywords'=>$keywords,"classes_lib_id"=>$classes_lib_id];
|
||||
$serch_where = ['status'=>$status,'user_id'=>$user_id,'keywords'=>$keywords,"classes_lib_id"=>$classes_lib_id,"has_evaluate"=>$has_evaluate];
|
||||
// if($type)$serch_where['type'] = $type;
|
||||
return (new self)->getBaseList($serch_where, $page, $limit,$sort,$with_field);
|
||||
}
|
||||
|
@ -879,7 +968,7 @@ class Order extends BaseModel
|
|||
|
||||
|
||||
|
||||
public static function workList($page, $limit,$keywords,$status,$classes_lib_id=[],$classes_lib_ids=[]){
|
||||
public static function workList($page, $limit,$keywords,$status,$classes_lib_id=[],$classes_lib_ids=[],$has_evaluate=0){
|
||||
$with_field = [
|
||||
'user'=>['nickname','mobile','avatar','realname'],
|
||||
'base'=>['*'],
|
||||
|
@ -968,6 +1057,8 @@ class Order extends BaseModel
|
|||
self::statisticsAndUpdateOrderFinish($order->id);
|
||||
//将课程信息和课时信息同步到所有已下单的订单信息中
|
||||
ClassesLib::orderInfoSync($order["classes_lib_id"]);
|
||||
|
||||
//如果有评价执行评价更新
|
||||
return $order;
|
||||
}
|
||||
|
||||
|
@ -1028,10 +1119,35 @@ class Order extends BaseModel
|
|||
*/
|
||||
public static function getHaveCancelOrder($order_no){
|
||||
// $where = [self::STATUS_NOPAY,self::STATUS_PAYED];
|
||||
$order = self::where('order_no|id|pay_no|code',$order_no)
|
||||
->where("status","in",['0'])
|
||||
->find();
|
||||
$order = self::where('order_no|id|pay_no|code',$order_no)->find();
|
||||
$detail = $order->detail;
|
||||
if(!$detail) throw new \Exception("订单信息缺失!");
|
||||
if(!$order)throw new \Exception("只有待支付订单可取消,已支付请走售后申请,已取消请忽略!");
|
||||
//非免费单进行中无法取消
|
||||
if($detail["feel"] == "0" && $order['status'] != '0'){
|
||||
throw new \Exception("只有待支付订单可取消,已支付请走售后申请,已取消请忽略!");
|
||||
}
|
||||
if($detail["feel"] == "1" && !in_array($order['status'],['0','3'])){
|
||||
throw new \Exception("只有进行中订单可取消,已取消请忽重复取消!");
|
||||
}
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
||||
/** 得到可评价订单
|
||||
* @param $order_no
|
||||
* @return array|bool|\PDOStatement|string|Model
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function getHaveEvaluateOrder($order_no){
|
||||
$order = self::where('order_no|id|pay_no|code',$order_no)->whereExists(function ($query){
|
||||
$self_order_table_name = (new \app\common\model\school\classes\hourorder\Order())->getQuery()->getTable();
|
||||
$order_table_name = (new self())->getQuery()->getTable();
|
||||
$query->table($order_table_name)->where($order_table_name . '.classes_order_id=' . $self_order_table_name . '.id')->where('status', '=', '3');
|
||||
})->find();
|
||||
if(!$order)throw new \Exception("只有一次核销之后订单可评价!");
|
||||
|
||||
return $order;
|
||||
}
|
||||
|
@ -1053,6 +1169,21 @@ class Order extends BaseModel
|
|||
}
|
||||
|
||||
|
||||
/**更新订单评价
|
||||
* @param $order
|
||||
* @return array|false|\PDOStatement|string|Model
|
||||
* @throws \think\db\exception\DataNotFoundException
|
||||
* @throws \think\db\exception\ModelNotFoundException
|
||||
* @throws \think\exception\DbException
|
||||
*/
|
||||
public static function updateEvaluate($order,$classes_evaluate_id){
|
||||
if(is_string($order))$order = self::getHaveEvaluateOrder($order);
|
||||
$order->classes_evaluate_id = $classes_evaluate_id;
|
||||
$order->save();
|
||||
return $order;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1072,9 +1203,15 @@ class Order extends BaseModel
|
|||
//用户操作权限检测
|
||||
\app\common\model\school\classes\hourorder\Order::checkOptionAuth($order['id'],$user_id ?: $oper_id,$oper_type);
|
||||
|
||||
//进行中,用户自己无法操作取消
|
||||
if($order['status'] == '3' && $user_id == $order['user_id']){
|
||||
throw new \Exception("您无权操作取消!请您联系机构操作!");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
|
||||
|
||||
|
||||
//判断逻辑
|
||||
if($trans){
|
||||
|
@ -1083,6 +1220,17 @@ class Order extends BaseModel
|
|||
$res = true;
|
||||
try{
|
||||
//事务逻辑
|
||||
//有进行中的课时全部取消
|
||||
//查询所有存在的课时单,进行批量取消
|
||||
$hour_orders = \app\common\model\school\classes\hourorder\Order::where("classes_order_id",$order["id"])->
|
||||
where("status","in",["-1","0"])->select();
|
||||
foreach ($hour_orders as $hour_order){
|
||||
|
||||
(new \app\common\model\school\classes\hourorder\Order)->cancel($hour_order["id"],$hour_order["user_id"],false,'admin',0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//更新订单取消状态
|
||||
$order = Order::updateCancel($order);
|
||||
//插入订单取消日志
|
||||
|
@ -1106,7 +1254,7 @@ class Order extends BaseModel
|
|||
if($trans){
|
||||
self::rollbackTrans();
|
||||
}
|
||||
throw new \Exception($e->getMessage());
|
||||
throw new \Exception($e->getMessage().$e->getFile().$e->getLine());
|
||||
}
|
||||
return $res1;
|
||||
}
|
||||
|
|
|
@ -491,6 +491,9 @@ class ServiceOrder extends BaseModel
|
|||
if($count > 0) throw new \Exception("该订单已存在正在进行中的售后单,请等待售后处理!");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//用户存不存在
|
||||
$user_info = User::where('id',$user_id)->find();
|
||||
if(!$user_info) throw new \Exception("用户不存在!");
|
||||
|
@ -1448,6 +1451,14 @@ class ServiceOrder extends BaseModel
|
|||
//插入订单日志
|
||||
ServiceOrderLog::log($order['id'],"[系统操作]课程订单售后系统退款已原路退回", 'admin', 0);
|
||||
|
||||
//查询所有存在的课时单,进行批量取消
|
||||
$hour_orders = \app\common\model\school\classes\hourorder\Order::where("classes_order_id",$order["classes_order_id"])->
|
||||
where("status","in",["-1","0"])->select();
|
||||
foreach ($hour_orders as $hour_order){
|
||||
(new \app\common\model\school\classes\hourorder\Order)->cancel($hour_order["order_no"],$hour_order["user_id"],false,'admin',0);
|
||||
}
|
||||
|
||||
|
||||
//执行课时数更新
|
||||
$res1 = order::statisticsAndUpdateClassesNumber($order['classes_order_id']);
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ class ClassesLib extends ManystoreBase
|
|||
protected $model = null;
|
||||
|
||||
//不用审核允许修改的字段
|
||||
protected $no_auth_fields = ['headimage','images','notice','content',"virtual_num","virtual_collect","underline_price","selfhot","price","classes_num"];
|
||||
protected $no_auth_fields = ["classes_type","classes_cate_ids","classes_label_ids","self_label_tag",'headimage','images','notice','content',"virtual_num","virtual_collect","underline_price","selfhot","price","classes_num"];
|
||||
|
||||
//更新数据是否需要触发审核开关
|
||||
protected $need_auth = true;
|
||||
|
@ -56,6 +56,9 @@ class ClassesLib extends ManystoreBase
|
|||
$this->view->assign("newList", $this->model->getNewList());
|
||||
$this->view->assign("selfhotList", $this->model->getSelfhotList());
|
||||
|
||||
$this->view->assign("classesTypeList", $this->model->getClassesTypeList());
|
||||
$this->view->assign("classesTypeListJson", json_encode($this->model->getClassesTypeList(), JSON_UNESCAPED_UNICODE));
|
||||
|
||||
|
||||
|
||||
$this->view->assign("specStatusList", (new \app\manystore\model\school\classes\ClassesSpec)->getStatusList());
|
||||
|
@ -107,7 +110,14 @@ class ClassesLib extends ManystoreBase
|
|||
$row->getRelation('admin')->visible(['nickname','avatar']);
|
||||
}
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $list->items());
|
||||
$rows = $list->items();
|
||||
$types = \app\admin\model\school\classes\Type::column("name", 'id');
|
||||
|
||||
foreach ($rows as $k=>&$v){
|
||||
$v["classes_type_name"] = $types[$v["classes_type"]] ?? "无" ;
|
||||
}
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $rows);
|
||||
|
||||
return json($result);
|
||||
}
|
||||
|
@ -472,6 +482,8 @@ class ClassesLib extends ManystoreBase
|
|||
}
|
||||
//删除规格
|
||||
foreach ($delete_spec_ids as $k=>$delete_spec){
|
||||
(new \app\common\model\school\classes\ClassesSpec)->updateCheck($delete_spec["id"]);
|
||||
|
||||
$delete_spec->delete();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
|
||||
namespace app\manystore\controller\school\classes;
|
||||
|
||||
use app\common\controller\ManystoreBase;
|
||||
|
||||
/**
|
||||
* 课程反馈管理
|
||||
*
|
||||
* @icon fa fa-circle-o
|
||||
*/
|
||||
class Evaluate extends ManystoreBase
|
||||
{
|
||||
|
||||
/**
|
||||
* Evaluate模型对象
|
||||
* @var \app\manystore\model\school\classes\Evaluate
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
protected $qSwitch = true;
|
||||
protected $qFields = ["user_id","classes_lib_id","classes_order_id","manystore_id","shop_id","teacher_id"];
|
||||
|
||||
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
$this->model = new \app\manystore\model\school\classes\Evaluate;
|
||||
parent::_initialize();
|
||||
$this->view->assign("statusList", $this->model->getStatusList());
|
||||
$this->view->assign("topList", $this->model->getTopList());
|
||||
}
|
||||
|
||||
public function import()
|
||||
{
|
||||
parent::import();
|
||||
}
|
||||
|
||||
/**
|
||||
* 默认生成的控制器所继承的父类中有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(['user','schoolclasseslib','schoolclassesorder','manystore','manystoreshop','schoolteacher'])
|
||||
->where($where)
|
||||
->order($sort, $order)
|
||||
->paginate($limit);
|
||||
|
||||
foreach ($list as $row) {
|
||||
|
||||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('schoolclasseslib')->visible(['title','headimage']);
|
||||
$row->getRelation('schoolclassesorder')->visible(['order_no']);
|
||||
$row->getRelation('manystore')->visible(['nickname']);
|
||||
$row->getRelation('manystoreshop')->visible(['name','logo']);
|
||||
$row->getRelation('schoolteacher')->visible(['name','head_image']);
|
||||
}
|
||||
|
||||
$result = array("total" => $list->total(), "rows" => $list->items());
|
||||
|
||||
return json($result);
|
||||
}
|
||||
return $this->view->fetch();
|
||||
}
|
||||
|
||||
}
|
|
@ -101,9 +101,16 @@ class Teacher extends ManystoreBase
|
|||
}
|
||||
$params["manystore_id"] = $manystore["id"];
|
||||
$params["shop_id"] = $shop_id;
|
||||
$user = User::where("nickname|realname|mobile", $params["user_id"])->find();
|
||||
$user = User::where("id|nickname|realname|mobile", $params["user_id"])->find();
|
||||
if(!$user) $this->error("未找到用户请先让用户登录小程序再提交表单");
|
||||
|
||||
|
||||
//添加用户机构认证
|
||||
try {
|
||||
\app\common\model\manystore\UserAuth::auth(0,$shop_id,$user["id"],0,'shop',$this->auth->id);
|
||||
}catch (\Exception $e){
|
||||
|
||||
}
|
||||
//如果开启了检测用户授权,则检测用户是否授权
|
||||
if(config("site.shop_auth_user_check")){
|
||||
if(!UserAuth::authcheck($shop_id,$user["id"])) $this->error("用户未授权当前机构!请先让用户授权同意您再操作!");
|
||||
|
@ -156,6 +163,12 @@ class Teacher extends ManystoreBase
|
|||
$params['shop_id'] = SHOP_ID;
|
||||
}
|
||||
|
||||
try {
|
||||
$this->update_check($params,$row=null);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
try {
|
||||
|
@ -207,6 +220,14 @@ class Teacher extends ManystoreBase
|
|||
if ($params) {
|
||||
$params = $this->preExcludeFields($params);
|
||||
$result = false;
|
||||
|
||||
try {
|
||||
$this->update_check($params,$row);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
//是否采用模型验证
|
||||
|
|
|
@ -102,10 +102,15 @@ class Verification extends ManystoreBase
|
|||
}
|
||||
$params["manystore_id"] = $manystore["id"];
|
||||
$params["shop_id"] = $shop_id;
|
||||
$user = User::where("nickname|realname|mobile", $params["user_id"])->find();
|
||||
if(!$user) $this->error("未找到用户请先让用户登录小程序再提交表单");
|
||||
$user = User::where("id|nickname|realname|mobile", $params["user_id"])->find();
|
||||
if(!$user) $this->error("未找到用户请先让用户登录小程序再提交表单".$params["user_id"]);
|
||||
|
||||
|
||||
try {
|
||||
\app\common\model\manystore\UserAuth::auth(0,$shop_id,$user["id"],0,'shop',$this->auth->id);
|
||||
}catch (\Exception $e){
|
||||
|
||||
}
|
||||
//如果开启了检测用户授权,则检测用户是否授权
|
||||
if(config("site.shop_auth_user_check")){
|
||||
if(!UserAuth::authcheck($shop_id,$user["id"])) $this->error("用户未授权当前机构!请先让用户授权同意您再操作!");
|
||||
|
@ -156,6 +161,11 @@ class Verification extends ManystoreBase
|
|||
$params['shop_id'] = SHOP_ID;
|
||||
}
|
||||
|
||||
try {
|
||||
$this->update_check($params,$row=null);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
$result = false;
|
||||
Db::startTrans();
|
||||
try {
|
||||
|
@ -207,6 +217,14 @@ class Verification extends ManystoreBase
|
|||
if ($params) {
|
||||
$params = $this->preExcludeFields($params);
|
||||
$result = false;
|
||||
|
||||
try {
|
||||
$this->update_check($params,$row);
|
||||
} catch (ValidateException|PDOException|Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
//是否采用模型验证
|
||||
|
|
|
@ -73,7 +73,7 @@ class Order extends ManystoreBase
|
|||
$row->getRelation('schoolclassesorder')->visible(['order_no']);
|
||||
$row->getRelation('schoolclasseslibspec')->visible(['name']);
|
||||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('schoolclassesorderdetail')->visible(['title','headimage']);
|
||||
$row->getRelation('schoolclassesorderdetail')->visible(['title','headimage','feel']);
|
||||
$row->getRelation('schoolclasseslib')->visible(['title']);
|
||||
}
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ class Order extends ManystoreBase
|
|||
$row->getRelation('user')->visible(['nickname','realname','mobile','avatar']);
|
||||
$row->getRelation('manystoreshop')->visible(['name','image','address_city','province','city','district','address','address_detail']);
|
||||
$row->getRelation('schoolclasseslib')->visible(['title','headimage']);
|
||||
$row->getRelation('schoolclassesorderdetail')->visible(['title','headimage']);
|
||||
$row->getRelation('schoolclassesorderdetail')->visible(['title','headimage',"feel"]);
|
||||
$row->getRelation('admin')->visible(['nickname','avatar']);
|
||||
}
|
||||
|
||||
|
@ -97,7 +97,7 @@ class Order extends ManystoreBase
|
|||
if(isset($param['ids']))$ids = $param['ids'];
|
||||
//设置模拟资格
|
||||
$model = (new \app\common\model\school\classes\order\Order);
|
||||
$model->cancel($ids,0,true,'admin',$this->auth->id,true);;
|
||||
$model->cancel($ids,0,true,'shop',$this->auth->id,true);;
|
||||
|
||||
|
||||
}catch (\Exception $e){
|
||||
|
|
|
@ -172,7 +172,7 @@ return [
|
|||
'Second group 2' => '二级管理组2',
|
||||
'Third group 2' => '三级管理组2',
|
||||
'Dashboard tips' => '用于展示当前系统中的统计数据、统计报表及重要实时数据',
|
||||
'Config tips' => '可以在此增改系统的变量和分组,也可以自定义分组和变量,如果需要删除请从数据库中删除,获取方式config("manystore_config.$name")',
|
||||
'Config tips' => '提示:修改相关配置后,点击【确认】才会保存生效',
|
||||
'Category tips' => '用于统一管理网站的所有分类,分类可进行无限级分类,分类类型请在常规管理->系统配置->字典配置中添加',
|
||||
'Attachment tips' => '主要用于管理上传到服务器或第三方存储的数据',
|
||||
'Addon tips' => '可在线安装、卸载、禁用、启用插件,同时支持添加本地插件。FastAdmin已上线插件商店 ,你可以发布你的免费或付费插件:<a href="https://www.fastadmin.net/store.html" target="_blank">https://www.fastadmin.net/store.html</a>',
|
||||
|
|
|
@ -34,7 +34,7 @@ return [
|
|||
'Address_detail' => '详细地址',
|
||||
'Longitude' => '经度',
|
||||
'Latitude' => '纬度',
|
||||
'Yyzzdm' => '营业执照(个人认证不需要)',
|
||||
'Yyzzdm' => '企业统一信用代码(个人认证不需要)',
|
||||
'Yyzz_images' => '营业执照照片(个人认证不需要)',
|
||||
'hidden' => '禁用',
|
||||
'Tel' => '服务电话',
|
||||
|
|
|
@ -4,8 +4,13 @@ return [
|
|||
'Manystore_id' => '机构账号id',
|
||||
'Shop_id' => '机构店铺id',
|
||||
'User_id' => '主讲师用户id',
|
||||
'Classes_cate_ids' => '平台课程分类',
|
||||
'Classes_label_ids' => '平台课程热门标签',
|
||||
'Classes_cate_ids' => '标签',
|
||||
'Classes_label_ids' => '热门',
|
||||
|
||||
'Start_time' => '开始时间',
|
||||
'End_time' => '结束时间',
|
||||
|
||||
|
||||
'Self_label_tag' => '机构特色标签',
|
||||
'Add_type' => '添加人类型',
|
||||
'Add_type 1' => '机构',
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'User_id' => '评价用户id',
|
||||
'Classes_lib_id' => '课程id',
|
||||
'Classes_order_id' => '课程订单id',
|
||||
'Manystore_id' => '机构账号id',
|
||||
'Shop_id' => '机构店铺id',
|
||||
'Teacher_id' => '老师id',
|
||||
'Image' => '评价人头像',
|
||||
'Nickname' => '评价人昵称',
|
||||
'Classes_star' => '课程评分',
|
||||
'Teacher_star' => '讲师评分',
|
||||
'Shop_star' => '教师环境',
|
||||
'Message_text' => '评价内容',
|
||||
'Evaluate_time' => '评价时间',
|
||||
'Status' => '状态',
|
||||
'Status 1' => '上架',
|
||||
'Status 2' => '下架',
|
||||
'Top' => '是否置顶',
|
||||
'Top 0' => '否',
|
||||
'Top 1' => '是',
|
||||
'Weigh' => '权重',
|
||||
'Createtime' => '创建时间',
|
||||
'Updatetime' => '修改时间',
|
||||
'User.nickname' => '昵称',
|
||||
'User.realname' => '真实姓名',
|
||||
'User.mobile' => '手机号',
|
||||
'User.avatar' => '头像',
|
||||
'Schoolclasseslib.title' => '标题',
|
||||
'Schoolclasseslib.headimage' => '头图',
|
||||
'Schoolclassesorder.order_no' => '订单号',
|
||||
'Manystore.nickname' => '昵称',
|
||||
'Manystoreshop.name' => '店铺名称',
|
||||
'Manystoreshop.logo' => '品牌LOGO',
|
||||
'Schoolteacher.name' => '教师名',
|
||||
'Schoolteacher.head_image' => '教师头像'
|
||||
];
|
|
@ -5,8 +5,8 @@ return [
|
|||
'Manystore_id' => '机构账号id',
|
||||
'Shop_id' => '机构店铺id',
|
||||
'User_id' => '主讲师用户id',
|
||||
'Classes_cate_ids' => '平台课程分类ids',
|
||||
'Classes_label_ids' => '平台课程类型ids',
|
||||
'Classes_cate_ids' => '标签',
|
||||
'Classes_label_ids' => '热门',
|
||||
'Self_label_tag' => '机构特色标签',
|
||||
'Add_type' => '添加人类型',
|
||||
'Add_type 1' => '机构',
|
||||
|
|
|
@ -67,6 +67,12 @@ class ClassesLib extends Model
|
|||
}
|
||||
|
||||
|
||||
public function getClassesTypeList(){
|
||||
return \app\admin\model\school\classes\Type::column("name", 'id');
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function getAddTypeList()
|
||||
{
|
||||
return ['1' => __('Add_type 1'), '2' => __('Add_type 2')];
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
<?php
|
||||
|
||||
namespace app\manystore\model\school\classes;
|
||||
|
||||
use app\common\model\dyqc\ManystoreShop;
|
||||
use app\manystore\model\Manystore;
|
||||
use think\Model;
|
||||
|
||||
|
||||
class Evaluate extends Model
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'school_classes_evaluate';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'int';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'evaluate_time_text',
|
||||
'status_text',
|
||||
'top_text'
|
||||
];
|
||||
|
||||
|
||||
protected static function init()
|
||||
{
|
||||
self::afterInsert(function ($row) {
|
||||
$pk = $row->getPk();
|
||||
$row->getQuery()->where($pk, $row[$pk])->update(['weigh' => $row[$pk]]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public function getStatusList()
|
||||
{
|
||||
return ['1' => __('Status 1'), '2' => __('Status 2')];
|
||||
}
|
||||
|
||||
public function getTopList()
|
||||
{
|
||||
return ['0' => __('Top 0'), '1' => __('Top 1')];
|
||||
}
|
||||
|
||||
|
||||
public function getEvaluateTimeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['evaluate_time']) ? $data['evaluate_time'] : '');
|
||||
return is_numeric($value) ? date("Y-m-d H:i:s", $value) : $value;
|
||||
}
|
||||
|
||||
|
||||
public function getStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
|
||||
$list = $this->getStatusList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
|
||||
public function getTopTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ? $value : (isset($data['top']) ? $data['top'] : '');
|
||||
$list = $this->getTopList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
protected function setEvaluateTimeAttr($value)
|
||||
{
|
||||
return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
|
||||
}
|
||||
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo('app\common\model\User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function schoolclasseslib()
|
||||
{
|
||||
return $this->belongsTo(ClassesLib::class, 'classes_lib_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function schoolclassesorder()
|
||||
{
|
||||
return $this->belongsTo(\app\common\model\school\classes\order\Order::class, 'classes_order_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function manystore()
|
||||
{
|
||||
return $this->belongsTo(Manystore::class, 'manystore_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function manystoreshop()
|
||||
{
|
||||
return $this->belongsTo(ManystoreShop::class, 'shop_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
public function schoolteacher()
|
||||
{
|
||||
return $this->belongsTo(Teacher::class, 'teacher_id', 'id', [], 'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
}
|
|
@ -12,7 +12,7 @@ class Manystore extends Validate
|
|||
*/
|
||||
protected $rule = [
|
||||
'username' => 'require|regex:\w{3,12}|unique:manystore',
|
||||
'nickname' => 'require|length:0,10|regex:/^[\x{4e00}-\x{9fa5}a-zA-Z0-9_-]+$/u',
|
||||
'nickname' => 'require|length:0,30|regex:/^[\x{4e00}-\x{9fa5}a-zA-Z0-9_-]+$/u',
|
||||
'password' => 'require|regex:\S{32}',
|
||||
'email' => 'require|email|unique:manystore,email',
|
||||
];
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace app\manystore\validate\school\classes;
|
||||
|
||||
use think\Validate;
|
||||
|
||||
class Evaluate extends Validate
|
||||
{
|
||||
/**
|
||||
* 验证规则
|
||||
*/
|
||||
protected $rule = [
|
||||
];
|
||||
/**
|
||||
* 提示消息
|
||||
*/
|
||||
protected $message = [
|
||||
];
|
||||
/**
|
||||
* 验证场景
|
||||
*/
|
||||
protected $scene = [
|
||||
'add' => [],
|
||||
'edit' => [],
|
||||
];
|
||||
|
||||
}
|
|
@ -78,7 +78,7 @@
|
|||
<div class="form-group">
|
||||
<label for="nickname" class="control-label">{:__('Nickname')}:</label>
|
||||
<input type="text" class="form-control" id="nickname" name="row[nickname]"
|
||||
value="{$manystore.nickname|htmlentities}" data-rule="required;length(~10)"/>
|
||||
value="{$manystore.nickname|htmlentities}" data-rule="required;"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password" class="control-label">{:__('Password')}:</label>
|
||||
|
|
|
@ -32,38 +32,42 @@
|
|||
</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-classes_type" data-rule="required" data-params='{"custom[status]":"1"}' data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_cate_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-max-select-limit="3" data-params='{"custom[status]":"1"}' data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_label_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_label_ids" data-rule="required" data-source="school/classes/label/index" data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="">
|
||||
<input id="c-classes_label_ids" data-max-select-limit="3" data-params='{"custom[status]":"1"}' data-source="school/classes/label/index" data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="">
|
||||
</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-classes_type" data-rule="required" data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="">
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Self_label_tag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-self_label_tag" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text">
|
||||
<input id="c-self_label_tag" data-max-select-limit="3" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
|
@ -158,7 +162,7 @@
|
|||
</tr>
|
||||
<textarea name="row[spec]" id="spec" class="form-control hide" cols="30" rows="5">[{"name":"{:date('m-d号')} 上午课(名师巡讲!)","time":"{:date('Y/m/d 0:01')} - {:date('Y/m/d H:i')}","limit_num":"30","weigh":"0","status":"1"}]</textarea>
|
||||
</table>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,后续有变更将触发审核机制!)</span>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,单节课开始结束时间必须在同一天,后续有变更将触发审核机制!)</span>
|
||||
<!--定义模板-->
|
||||
<script type="text/html" id="testtpl">
|
||||
<tr class="form-inline">
|
||||
|
|
|
@ -73,34 +73,36 @@
|
|||
</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-classes_type" data-rule="required" data-params='{"custom[status]":"1"}' data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="{$row.classes_type|htmlentities}">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_cate_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_cate_ids" data-rule="required" data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="{$row.classes_cate_ids|htmlentities}">
|
||||
<input id="c-classes_cate_ids" data-max-select-limit="3" data-rule="required" data-params='{"custom[status]":"1"}' data-source="school/classes/cate/index" data-multiple="true" class="form-control selectpage" name="row[classes_cate_ids]" type="text" value="{$row.classes_cate_ids|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_label_ids')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_label_ids" data-rule="required" data-source="school/classes/label/index" data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="{$row.classes_label_ids|htmlentities}">
|
||||
<input id="c-classes_label_ids" data-max-select-limit="3" data-params='{"custom[status]":"1"}' data-source="school/classes/label/index" data-multiple="true" class="form-control selectpage" name="row[classes_label_ids]" type="text" value="{$row.classes_label_ids|htmlentities}">
|
||||
</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-classes_type" data-source="school/classes/type/index" class="form-control selectpage" name="row[classes_type]" type="text" value="{$row.classes_type|htmlentities}">
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Self_label_tag')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-self_label_tag" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text" value="{$row.self_label_tag|htmlentities}">
|
||||
<input id="c-self_label_tag" data-max-select-limit="3" class="form-control" data-role="tagsinput" name="row[self_label_tag]" type="text" value="{$row.self_label_tag|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="form-group">-->
|
||||
|
@ -198,7 +200,7 @@
|
|||
</textarea>
|
||||
|
||||
</table>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,后续有变更将触发审核机制!)</span>
|
||||
<span style="color: red">(每个课时规格为当前课程的一节课,课程总共多少节课就需要上多少个课时规格,每个课时的开始和结束时间不能有重叠,单节课开始结束时间必须在同一天,后续有变更将触发审核机制!)</span>
|
||||
<!--定义模板-->
|
||||
<script type="text/html" id="testtpl">
|
||||
<tr class="form-inline">
|
||||
|
|
|
@ -60,4 +60,5 @@
|
|||
var shop_id = {$shop_id};
|
||||
var store_id = {$store_id};
|
||||
var shop_user_id = {$shop_user_id};
|
||||
var classesTypeListJson = {$classesTypeListJson};
|
||||
</script>
|
|
@ -0,0 +1,120 @@
|
|||
<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">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_lib_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_lib_id" data-rule="required" data-source="classes/lib/index" class="form-control selectpage" name="row[classes_lib_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_order_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_order_id" data-rule="required" data-source="classes/order/index" class="form-control selectpage" name="row[classes_order_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Manystore_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-manystore_id" data-rule="required" data-source="manystore/index" class="form-control selectpage" name="row[manystore_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_id" data-rule="required" data-source="teacher/index" class="form-control selectpage" name="row[teacher_id]" type="text" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" data-rule="required" class="form-control" size="50" name="row[image]" type="text">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-image" class="btn btn-danger faupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_star" data-rule="required" class="form-control" step="0.1" name="row[classes_star]" type="number" value="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_star" data-rule="required" class="form-control" step="0.1" name="row[teacher_star]" type="number" value="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Shop_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-shop_star" data-rule="required" class="form-control" step="0.1" name="row[shop_star]" type="number" value="0.5">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Message_text')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-message_text" data-rule="required" class="form-control " rows="5" name="row[message_text]" cols="50"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Evaluate_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-evaluate_time" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[evaluate_time]" 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">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="1"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Top')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-top" class="form-control selectpicker" name="row[top]">
|
||||
{foreach name="topList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="0">
|
||||
</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-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1,120 @@
|
|||
<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">{:__('User_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-user_id" data-rule="required" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_lib_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_lib_id" data-rule="required" data-source="classes/lib/index" class="form-control selectpage" name="row[classes_lib_id]" type="text" value="{$row.classes_lib_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_order_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_order_id" data-rule="required" data-source="classes/order/index" class="form-control selectpage" name="row[classes_order_id]" type="text" value="{$row.classes_order_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Manystore_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-manystore_id" data-rule="required" data-source="manystore/index" class="form-control selectpage" name="row[manystore_id]" type="text" value="{$row.manystore_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_id')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_id" data-rule="required" data-source="teacher/index" class="form-control selectpage" name="row[teacher_id]" type="text" value="{$row.teacher_id|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<div class="input-group">
|
||||
<input id="c-image" data-rule="required" class="form-control" size="50" name="row[image]" type="text" value="{$row.image|htmlentities}">
|
||||
<div class="input-group-addon no-border no-padding">
|
||||
<span><button type="button" id="faupload-image" class="btn btn-danger faupload" data-input-id="c-image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
|
||||
<span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
|
||||
</div>
|
||||
<span class="msg-box n-right" for="c-image"></span>
|
||||
</div>
|
||||
<ul class="row list-inline faupload-preview" id="p-image"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Nickname')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-nickname" data-rule="required" class="form-control" name="row[nickname]" type="text" value="{$row.nickname|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Classes_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-classes_star" data-rule="required" class="form-control" step="0.1" name="row[classes_star]" type="number" value="{$row.classes_star|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Teacher_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-teacher_star" data-rule="required" class="form-control" step="0.1" name="row[teacher_star]" type="number" value="{$row.teacher_star|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Shop_star')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-shop_star" data-rule="required" class="form-control" step="0.1" name="row[shop_star]" type="number" value="{$row.shop_star|htmlentities}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Message_text')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-message_text" data-rule="required" class="form-control " rows="5" name="row[message_text]" cols="50">{$row.message_text|htmlentities}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Evaluate_time')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-evaluate_time" data-rule="required" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[evaluate_time]" type="text" value="{:$row.evaluate_time?datetime($row.evaluate_time):''}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<div class="radio">
|
||||
{foreach name="statusList" item="vo"}
|
||||
<label for="row[status]-{$key}"><input id="row[status]-{$key}" name="row[status]" type="radio" value="{$key}" {in name="key" value="$row.status"}checked{/in} /> {$vo}</label>
|
||||
{/foreach}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Top')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
|
||||
<select id="c-top" class="form-control selectpicker" name="row[top]">
|
||||
{foreach name="topList" item="vo"}
|
||||
<option value="{$key}" {in name="key" value="$row.top"}selected{/in}>{$vo}</option>
|
||||
{/foreach}
|
||||
</select>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Weigh')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<input id="c-weigh" class="form-control" name="row[weigh]" type="number" value="{$row.weigh|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-success btn-embossed disabled">{:__('OK')}</button>
|
||||
<button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
|
@ -0,0 +1,44 @@
|
|||
<div class="panel panel-default panel-intro">
|
||||
|
||||
<div class="panel-heading">
|
||||
{:build_heading(null,FALSE)}
|
||||
<ul class="nav nav-tabs" data-field="status">
|
||||
<li class="{:$Think.get.status === null ? 'active' : ''}"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
|
||||
{foreach name="statusList" item="vo"}
|
||||
<li class="{:$Think.get.status === (string)$key ? 'active' : ''}"><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<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('school/classes/evaluate/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('school/classes/evaluate/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('school/classes/evaluate/del')?'':'hide'}" title="{:__('Delete')}" ><i class="fa fa-trash"></i> {:__('Delete')}</a>
|
||||
|
||||
<div class="dropdown btn-group {:$auth->check('school/classes/evaluate/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>
|
||||
|
||||
|
||||
</div>
|
||||
<table id="table" class="table table-striped table-bordered table-hover table-nowrap"
|
||||
data-operate-edit="{:$auth->check('school/classes/evaluate/edit')}"
|
||||
data-operate-del="{:$auth->check('school/classes/evaluate/del')}"
|
||||
width="100%">
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -40,7 +40,7 @@
|
|||
<div class="form-group">
|
||||
<label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>
|
||||
<div class="col-xs-12 col-sm-8">
|
||||
<textarea id="c-content" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content|htmlentities}</textarea>
|
||||
<textarea id="c-content" class="form-control editor" rows="5" name="row[content]" cols="50">{$row.content}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -203,9 +203,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'shop.address_detail', title: __('Address_detail'), operate: 'LIKE',visible:false},
|
||||
|
||||
|
||||
{field: 'shop.yyzz_images', title: __('Yyzz_images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
|
||||
{field: 'shop.front_idcard_image', title: __('身份证正面'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'shop.reverse_idcard_image', title: __('身份证反面'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
// {field: 'shop.yyzz_images', title: __('Yyzz_images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
|
||||
// {field: 'shop.front_idcard_image', title: __('身份证正面'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
// {field: 'shop.reverse_idcard_image', title: __('身份证反面'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'shop.tel', title: __('Tel'), operate: 'LIKE'},
|
||||
|
||||
|
||||
|
|
|
@ -30,20 +30,20 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
|
||||
{checkbox: true},
|
||||
{field: 'operate', title: __('Operate'), table: table , buttons: [
|
||||
// {
|
||||
// name: 'classes_spec',
|
||||
// text: __('设置课程规格'),
|
||||
// title: __('设置课程规格'),
|
||||
// classname: 'btn btn-xs btn-danger btn-magic btn-dialog',
|
||||
// icon: 'fa fa-list',
|
||||
// url: classes_spec_url,
|
||||
// callback: function (data) {
|
||||
//
|
||||
// },
|
||||
// // visible: function (row) {
|
||||
// // return row.status == '2'||row.status == '3';
|
||||
// // }
|
||||
// },
|
||||
{
|
||||
name: 'classes_spec',
|
||||
text: __('课时查看'),
|
||||
title: __('课时查看'),
|
||||
classname: 'btn btn-xs btn-danger btn-magic btn-dialog',
|
||||
icon: 'fa fa-list',
|
||||
url: classes_spec_url,
|
||||
callback: function (data) {
|
||||
|
||||
},
|
||||
// visible: function (row) {
|
||||
// return row.status == '2'||row.status == '3';
|
||||
// }
|
||||
},
|
||||
{
|
||||
name: 'virtual_user',
|
||||
text: __('设置虚拟参与者'),
|
||||
|
@ -135,6 +135,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
{field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2'),"3":__('Status 3')}, formatter: Table.api.formatter.status},
|
||||
|
||||
// {field: 'classes_type_name', title: __('类型'), operate: false},
|
||||
{field: 'classes_type', title: __('类型'), searchList: classesTypeListJson, formatter: Table.api.formatter.normal},
|
||||
|
||||
|
||||
{field: 'classes_cate_title', title: __('Classes_cate_ids'), operate: false, formatter: Table.api.formatter.flag},
|
||||
{field: 'classes_label_title', title: __('Classes_label_ids'), operate: false, formatter: Table.api.formatter.flag},
|
||||
{field: 'classes_cate_ids', title: __('Classes_cate_ids'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content,visible:false},
|
||||
|
@ -144,6 +148,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'title', title: __('Title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'headimage', title: __('Headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'images', title: __('Images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
|
||||
|
||||
{field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
|
||||
{field: 'reason', title: __('Reason'), operate: 'LIKE' },
|
||||
{field: 'auth_time', title: __('Auth_time'), operate:'RANGE',visible:false, addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'school/classes/evaluate/index' + location.search,
|
||||
add_url: 'school/classes/evaluate/add',
|
||||
edit_url: 'school/classes/evaluate/edit',
|
||||
del_url: 'school/classes/evaluate/del',
|
||||
multi_url: 'school/classes/evaluate/multi',
|
||||
import_url: 'school/classes/evaluate/import',
|
||||
table: 'school_classes_evaluate',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'weigh',
|
||||
fixedColumns: true,
|
||||
fixedRightNumber: 1,
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'user_id', title: __('User_id')},
|
||||
{field: 'classes_lib_id', title: __('Classes_lib_id')},
|
||||
{field: 'classes_order_id', title: __('Classes_order_id')},
|
||||
{field: 'manystore_id', title: __('Manystore_id')},
|
||||
{field: 'shop_id', title: __('Shop_id')},
|
||||
{field: 'teacher_id', title: __('Teacher_id')},
|
||||
{field: 'image', title: __('Image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'nickname', title: __('Nickname'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'classes_star', title: __('Classes_star'), operate:'BETWEEN'},
|
||||
{field: 'teacher_star', title: __('Teacher_star'), operate:'BETWEEN'},
|
||||
{field: 'shop_star', title: __('Shop_star'), operate:'BETWEEN'},
|
||||
{field: 'evaluate_time', title: __('Evaluate_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2')}, formatter: Table.api.formatter.status},
|
||||
{field: 'top', title: __('Top'), searchList: {"0":__('Top 0'),"1":__('Top 1')}, formatter: Table.api.formatter.normal},
|
||||
{field: 'weigh', title: __('Weigh'), operate: false},
|
||||
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'},
|
||||
{field: 'user.realname', title: __('User.realname'), operate: 'LIKE'},
|
||||
{field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
|
||||
{field: 'user.avatar', title: __('User.avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'lib.title', title: __('Lib.title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'lib.headimage', title: __('Lib.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'classesorder.order_no', title: __('Order.order_no'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'manystore.nickname', title: __('Manystore.nickname'), operate: 'LIKE'},
|
||||
{field: 'shop.name', title: __('Shop.name'), operate: 'LIKE'},
|
||||
{field: 'shop.logo', title: __('Shop.logo'), operate: 'LIKE'},
|
||||
{field: 'teacher.name', title: __('Teacher.name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'teacher.head_image', title: __('Teacher.head_image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
|
||||
|
||||
|
||||
$("#c-classes_order_id").data("params", function (obj) {
|
||||
//obj为SelectPage对象
|
||||
return {custom: {shop_id: $("#c-shop_id").val(),classes_lib_id: $("#c-classes_lib_id").val()}};
|
||||
});
|
||||
|
||||
|
||||
//老师必须是上面机构中的
|
||||
$("#c-teacher_id").data("params", function (obj) {
|
||||
//obj为SelectPage对象
|
||||
return {custom: {shop_id: $("#c-shop_id").val(),classes_lib_id: $("#c-classes_lib_id").val()}};
|
||||
});
|
||||
|
||||
$("#c-classes_lib_id").data("params", function (obj) {
|
||||
//obj为SelectPage对象
|
||||
return {custom: {shop_id: $("#c-shop_id").val()}};
|
||||
});
|
||||
|
||||
//机构清除老师也要清除
|
||||
$("#c-shop_id").change(function () {
|
||||
$("#c-teacher_id").selectPageClear();
|
||||
$("#c-classes_lib_id").selectPageClear();
|
||||
$("#c-classes_order_id").selectPageClear();
|
||||
});
|
||||
|
||||
$("#c-classes_lib_id").change(function () {
|
||||
$("#c-teacher_id").selectPageClear();
|
||||
$("#c-classes_order_id").selectPageClear();
|
||||
});
|
||||
|
||||
$("#c-user_id").change(function () {
|
||||
console.log(this);
|
||||
});
|
||||
|
||||
|
||||
|
||||
$(document).on('click', '.btn-changeuser', function (event) {
|
||||
var url = $(this).attr('data-url');
|
||||
if(!url) return false;
|
||||
var title = $(this).attr('title');
|
||||
var width = $(this).attr('data-width');
|
||||
var height = $(this).attr('data-height');
|
||||
// var ids = $(this).attr('data-id');
|
||||
var area = ['98%','98%'];
|
||||
var options = {
|
||||
shadeClose: false,
|
||||
shade: [0.3, '#393D49'],
|
||||
area: area,
|
||||
callback:function(ret){//回调方法,需要在本页面Controller中增加方法监听且调用Fast.api.close(ret)传递结果;
|
||||
Fast.api.close(ret);
|
||||
}
|
||||
};
|
||||
Fast.api.open(url,title,options);
|
||||
});
|
||||
|
||||
|
||||
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
|
@ -119,6 +119,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
], events: Table.api.events.operate, formatter: Table.api.formatter.operate},
|
||||
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'detail.feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
|
||||
|
||||
{field: 'status', title: __('Status'), searchList: {"-3":__('Status -3'),"-1":__('Status -1'),"0":__('Status 0'),"3":__('Status 3')}, formatter: Table.api.formatter.status},
|
||||
|
||||
{field: 'name', title: __('Name'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
|
@ -126,6 +129,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
{field: 'auth_status', title: __('Auth_status'), searchList: {"0":__('Auth_status 0'),"1":__('Auth_status 1'),"2":__('Auth_status 2')}, formatter: Table.api.formatter.status},
|
||||
{field: 'detail.title', title: __('Detail.title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'detail.headimage', title: __('Detail.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
|
||||
|
||||
|
||||
|
@ -143,8 +148,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'user.realname', title: __('User.realname'), operate: 'LIKE'},
|
||||
{field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
|
||||
{field: 'user.avatar', title: __('User.avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'detail.title', title: __('Detail.title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'detail.headimage', title: __('Detail.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -45,10 +45,15 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
return false;
|
||||
},
|
||||
visible: function (row) {
|
||||
//显示条件 只能待入住订单
|
||||
if(row.status == '0'){
|
||||
//非免费订单只有未支付可取消
|
||||
if(row.status == '0' && row.detail.feel == '0'){
|
||||
return true;
|
||||
}
|
||||
//免费订单未支付和进行中都可取消
|
||||
if((row.status == '0' || row.status == '3' )&& row.detail.feel == '1'){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}},
|
||||
{
|
||||
|
@ -76,7 +81,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
|
||||
},
|
||||
visible: function (row) {
|
||||
return row.status == '3';
|
||||
//只有付费订单有售后
|
||||
return row.status == '3' && row.detail.feel == '0';
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -155,6 +161,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'status', title: __('Status'), searchList: {"-3":__('Status -3'),"0":__('Status 0'),"3":__('Status 3'),"4":__('Status 4'),"6":__('Status 6'),"9":__('Status 9')}, formatter: Table.api.formatter.status},
|
||||
|
||||
{field: 'pay_no',visible:false, title: __('Pay_no'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
|
||||
{field: 'detail.feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
|
||||
{field: 'detail.title', title: __('Detail.title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'detail.headimage', title: __('Detail.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
{field: 'classes_num', title: __('Classes_num')},
|
||||
{field: 'use_num', title: __('Use_num')},
|
||||
{field: 'sub_num', title: __('Sub_num')},
|
||||
|
|
|
@ -28,6 +28,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
{field: 'classes_service_order_id',visible:false, title: __('Classes_service_order_id')},
|
||||
{field: 'classes_order_id',visible:false, title: __('Classes_order_id')},
|
||||
{field: 'user_id',visible:false, title: __('User_id')},
|
||||
|
@ -41,7 +43,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'log_text', title: __('Log_text'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'oper_id', title: __('Oper_id')},
|
||||
{field: 'oper_type', title: __('Oper_type'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
// {field: 'serviceorder.order_no', title: __('Order.order_no'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
// {field: 'classesorder.order_no', title: __('Order.order_no'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
|
|
|
@ -42,6 +42,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'},
|
||||
{field: 'user.realname', title: __('User.realname'), operate: 'LIKE'},
|
||||
{field: 'user.mobile', title: __('用户手机号'), operate: 'LIKE'},
|
||||
{field: 'user.avatar', title: __('User.avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'manystore.nickname', title: __('Manystore.nickname'), operate: 'LIKE'},
|
||||
{field: 'shop.name', title: __('Shop.name'), operate: 'LIKE'},
|
||||
|
|
|
@ -29,20 +29,20 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
[
|
||||
{checkbox: true},
|
||||
{field: 'operate', title: __('Operate'), table: table , buttons: [
|
||||
// {
|
||||
// name: 'classes_spec',
|
||||
// text: __('设置课程规格'),
|
||||
// title: __('设置课程规格'),
|
||||
// classname: 'btn btn-xs btn-danger btn-magic btn-dialog',
|
||||
// icon: 'fa fa-list',
|
||||
// url: classes_spec_url,
|
||||
// callback: function (data) {
|
||||
//
|
||||
// },
|
||||
// // visible: function (row) {
|
||||
// // return row.status == '2'||row.status == '3';
|
||||
// // }
|
||||
// },
|
||||
{
|
||||
name: 'classes_spec',
|
||||
text: __('课时查看'),
|
||||
title: __('课时查看'),
|
||||
classname: 'btn btn-xs btn-danger btn-magic btn-dialog',
|
||||
icon: 'fa fa-list',
|
||||
url: classes_spec_url,
|
||||
callback: function (data) {
|
||||
|
||||
},
|
||||
// visible: function (row) {
|
||||
// return row.status == '2'||row.status == '3';
|
||||
// }
|
||||
},
|
||||
// {
|
||||
// name: 'virtual_user',
|
||||
// text: __('设置虚拟参与者'),
|
||||
|
@ -131,6 +131,10 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2'),"3":__('Status 3')}, formatter: Table.api.formatter.status},
|
||||
|
||||
|
||||
// {field: 'classes_type_name', title: __('类型'), operate: false},
|
||||
{field: 'classes_type', title: __('类型'), searchList: classesTypeListJson, formatter: Table.api.formatter.normal},
|
||||
|
||||
|
||||
{field: 'classes_cate_title', title: __('Classes_cate_ids'), operate: false, formatter: Table.api.formatter.flag},
|
||||
{field: 'classes_label_title', title: __('Classes_label_ids'), operate: false, formatter: Table.api.formatter.flag},
|
||||
{field: 'classes_cate_ids', title: __('Classes_cate_ids'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content,visible:false},
|
||||
|
@ -140,6 +144,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'title', title: __('Title'), operate: 'LIKE', table: table, class: 'autocontent', formatter: Table.api.formatter.content},
|
||||
{field: 'headimage', title: __('Headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'images', title: __('Images'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.images},
|
||||
|
||||
{field: 'start_time', title: __('Start_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'end_time', title: __('End_time'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
|
||||
|
||||
{field: 'reason', title: __('Reason'), operate: 'LIKE' },
|
||||
{field: 'auth_time', title: __('Auth_time'), operate:'RANGE',visible:false, addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
|
|
|
@ -0,0 +1,144 @@
|
|||
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
||||
|
||||
var Controller = {
|
||||
index: function () {
|
||||
// 初始化表格参数配置
|
||||
Table.api.init({
|
||||
extend: {
|
||||
index_url: 'school/classes/evaluate/index' + location.search,
|
||||
add_url: 'school/classes/evaluate/add',
|
||||
edit_url: 'school/classes/evaluate/edit',
|
||||
del_url: 'school/classes/evaluate/del',
|
||||
multi_url: 'school/classes/evaluate/multi',
|
||||
import_url: 'school/classes/evaluate/import',
|
||||
table: 'school_classes_evaluate',
|
||||
}
|
||||
});
|
||||
|
||||
var table = $("#table");
|
||||
|
||||
// 初始化表格
|
||||
table.bootstrapTable({
|
||||
url: $.fn.bootstrapTable.defaults.extend.index_url,
|
||||
pk: 'id',
|
||||
sortName: 'weigh',
|
||||
columns: [
|
||||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'user_id', title: __('User_id')},
|
||||
{field: 'classes_lib_id', title: __('Classes_lib_id')},
|
||||
{field: 'classes_order_id', title: __('Classes_order_id')},
|
||||
{field: 'manystore_id', title: __('Manystore_id')},
|
||||
{field: 'shop_id', title: __('Shop_id')},
|
||||
{field: 'teacher_id', title: __('Teacher_id')},
|
||||
{field: 'image', title: __('Image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'nickname', title: __('Nickname'), operate: 'LIKE'},
|
||||
{field: 'classes_star', title: __('Classes_star'), operate:'BETWEEN'},
|
||||
{field: 'teacher_star', title: __('Teacher_star'), operate:'BETWEEN'},
|
||||
{field: 'shop_star', title: __('Shop_star'), operate:'BETWEEN'},
|
||||
{field: 'evaluate_time', title: __('Evaluate_time')},
|
||||
{field: 'status', title: __('Status'), searchList: {"1":__('Status 1'),"2":__('Status 2')}, formatter: Table.api.formatter.status},
|
||||
{field: 'top', title: __('Top'), searchList: {"0":__('Top 0'),"1":__('Top 1')}, formatter: Table.api.formatter.normal},
|
||||
{field: 'weigh', title: __('Weigh'), operate: false},
|
||||
{field: 'createtime', title: __('Createtime')},
|
||||
{field: 'updatetime', title: __('Updatetime')},
|
||||
{field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'},
|
||||
{field: 'user.realname', title: __('User.realname'), operate: 'LIKE'},
|
||||
{field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
|
||||
{field: 'user.avatar', title: __('User.avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'schoolclasseslib.title', title: __('Schoolclasseslib.title'), operate: 'LIKE'},
|
||||
{field: 'schoolclasseslib.headimage', title: __('Schoolclasseslib.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'schoolclassesorder.order_no', title: __('Schoolclassesorder.order_no'), operate: 'LIKE'},
|
||||
{field: 'manystore.nickname', title: __('Manystore.nickname'), operate: 'LIKE'},
|
||||
{field: 'manystoreshop.name', title: __('Manystoreshop.name'), operate: 'LIKE'},
|
||||
{field: 'manystoreshop.logo', title: __('Manystoreshop.logo'), operate: 'LIKE'},
|
||||
{field: 'schoolteacher.name', title: __('Schoolteacher.name'), operate: 'LIKE'},
|
||||
{field: 'schoolteacher.head_image', title: __('Schoolteacher.head_image'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
|
||||
]
|
||||
]
|
||||
});
|
||||
|
||||
// 为表格绑定事件
|
||||
Table.api.bindevent(table);
|
||||
},
|
||||
add: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
edit: function () {
|
||||
Controller.api.bindevent();
|
||||
},
|
||||
api: {
|
||||
bindevent: function () {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$("#c-classes_order_id").data("params", function (obj) {
|
||||
//obj为SelectPage对象
|
||||
return {custom: {shop_id: $("#c-shop_id").val(),classes_lib_id: $("#c-classes_lib_id").val()}};
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
//老师必须是上面机构中的
|
||||
$("#c-teacher_id").data("params", function (obj) {
|
||||
//obj为SelectPage对象
|
||||
return {custom: {shop_id: $("#c-shop_id").val(),classes_lib_id: $("#c-classes_lib_id").val()}};
|
||||
});
|
||||
|
||||
$("#c-classes_lib_id").data("params", function (obj) {
|
||||
//obj为SelectPage对象
|
||||
return {custom: {shop_id: $("#c-shop_id").val()}};
|
||||
});
|
||||
|
||||
//机构清除老师也要清除
|
||||
$("#c-shop_id").change(function () {
|
||||
$("#c-teacher_id").selectPageClear();
|
||||
$("#c-classes_lib_id").selectPageClear();
|
||||
$("#c-classes_order_id").selectPageClear();
|
||||
});
|
||||
|
||||
$("#c-classes_lib_id").change(function () {
|
||||
$("#c-teacher_id").selectPageClear();
|
||||
$("#c-classes_order_id").selectPageClear();
|
||||
});
|
||||
|
||||
$("#c-user_id").change(function () {
|
||||
console.log(this);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$(document).on('click', '.btn-changeuser', function (event) {
|
||||
var url = $(this).attr('data-url');
|
||||
if(!url) return false;
|
||||
var title = $(this).attr('title');
|
||||
var width = $(this).attr('data-width');
|
||||
var height = $(this).attr('data-height');
|
||||
// var ids = $(this).attr('data-id');
|
||||
var area = ['98%','98%'];
|
||||
var options = {
|
||||
shadeClose: false,
|
||||
shade: [0.3, '#393D49'],
|
||||
area: area,
|
||||
callback:function(ret){//回调方法,需要在本页面Controller中增加方法监听且调用Fast.api.close(ret)传递结果;
|
||||
Fast.api.close(ret);
|
||||
}
|
||||
};
|
||||
Fast.api.open(url,title,options);
|
||||
});
|
||||
|
||||
|
||||
|
||||
Form.api.bindevent($("form[role=form]"));
|
||||
}
|
||||
}
|
||||
};
|
||||
return Controller;
|
||||
});
|
|
@ -117,6 +117,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
], events: Table.api.events.operate, formatter: Table.api.formatter.operate},
|
||||
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'schoolclassesorderdetail.feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
|
||||
|
||||
{field: 'status', title: __('Status'), searchList: {"-3":__('Status -3'),"-1":__('Status -1'),"0":__('Status 0'),"3":__('Status 3')}, formatter: Table.api.formatter.status},
|
||||
|
||||
|
||||
|
@ -126,6 +129,9 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
|
||||
{field: 'auth_status', title: __('Auth_status'), searchList: {"0":__('Auth_status 0'),"1":__('Auth_status 1'),"2":__('Auth_status 2')}, formatter: Table.api.formatter.status},
|
||||
|
||||
{field: 'schoolclassesorderdetail.title', title: __('Schoolclassesorderdetail.title'), operate: 'LIKE'},
|
||||
{field: 'schoolclassesorderdetail.headimage', title: __('Schoolclassesorderdetail.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
|
||||
|
||||
{field: 'order_no', title: __('Order_no'), operate: 'LIKE'},
|
||||
{field: 'classes_order_id',visible:false, title: __('Classes_order_id')},
|
||||
|
@ -139,8 +145,6 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'user.realname', title: __('User.realname'), operate: 'LIKE'},
|
||||
{field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
|
||||
{field: 'user.avatar', title: __('User.avatar'), operate: 'LIKE', events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
{field: 'schoolclassesorderdetail.title',visible:false, title: __('Schoolclassesorderdetail.title'), operate: 'LIKE'},
|
||||
{field: 'schoolclassesorderdetail.headimage',visible:false, title: __('Schoolclassesorderdetail.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -44,8 +44,12 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
return false;
|
||||
},
|
||||
visible: function (row) {
|
||||
//显示条件 只能待入住订单
|
||||
if(row.status == '0'){
|
||||
//非免费订单只有未支付可取消
|
||||
if(row.status == '0' && row.schoolclassesorderdetail.feel == '0'){
|
||||
return true;
|
||||
}
|
||||
//免费订单未支付和进行中都可取消
|
||||
if((row.status == '0' || row.status == '3' )&& row.schoolclassesorderdetail.feel == '1'){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -139,8 +143,11 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'status', title: __('Status'), searchList: {"-3":__('Status -3'),"0":__('Status 0'),"3":__('Status 3'),"4":__('Status 4'),"6":__('Status 6'),"9":__('Status 9')}, formatter: Table.api.formatter.status},
|
||||
|
||||
{field: 'pay_no', title: __('Pay_no'), operate: 'LIKE',visible:false},
|
||||
|
||||
{field: 'schoolclassesorderdetail.feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
{field: 'schoolclassesorderdetail.title', title: __('Schoolclassesorderdetail.title'), operate: 'LIKE'},
|
||||
{field: 'schoolclassesorderdetail.headimage', title: __('Schoolclassesorderdetail.headimage'), operate: false, events: Table.api.events.image, formatter: Table.api.formatter.image},
|
||||
|
||||
{field: 'user.nickname', title: __('User.nickname'), operate: 'LIKE'},
|
||||
{field: 'user.realname', title: __('User.realname'), operate: 'LIKE'},
|
||||
{field: 'user.mobile', title: __('User.mobile'), operate: 'LIKE'},
|
||||
|
|
|
@ -26,6 +26,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'feel', title: __('是否免费'), searchList: {"0":__('付费课程'),"1":__('免费课程')}, formatter: Table.api.formatter.normal},
|
||||
{field: 'classes_num', title: __('Classes_num')},
|
||||
{field: 'use_num', title: __('Use_num')},
|
||||
{field: 'sub_num', title: __('Sub_num')},
|
||||
|
|
|
@ -26,6 +26,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
[
|
||||
{checkbox: true},
|
||||
{field: 'id', title: __('Id')},
|
||||
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
|
||||
{field: 'classes_service_order_id',visible:false, title: __('Classes_service_order_id')},
|
||||
{field: 'classes_order_id',visible:false, title: __('Classes_order_id')},
|
||||
{field: 'user_id',visible:false, title: __('User_id')},
|
||||
|
@ -39,8 +41,7 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
|
|||
{field: 'log_text', title: __('Log_text'), operate: 'LIKE'},
|
||||
{field: 'oper_id', title: __('Oper_id')},
|
||||
{field: 'oper_type', title: __('Oper_type'), operate: 'LIKE'},
|
||||
{field: 'createtime', title: __('Createtime')},
|
||||
{field: 'updatetime', title: __('Updatetime')},
|
||||
{field: 'updatetime', title: __('Updatetime'), operate:'RANGE', addclass:'datetimerange', autocomplete:false, formatter: Table.api.formatter.datetime},
|
||||
{field: 'schoolclassesserviceorder.order_no',visible:false, title: __('Schoolclassesserviceorder.order_no'), operate: 'LIKE'},
|
||||
{field: 'schoolclassesorder.order_no',visible:false, title: __('Schoolclassesorder.order_no'), operate: 'LIKE'},
|
||||
{field: 'schoolclassesorder.pay_no',visible:false, title: __('Schoolclassesorder.pay_no'), operate: 'LIKE'},
|
||||
|
|
Loading…
Reference in New Issue