lqmac 1 year ago
parent d17ac6727f
commit 2f5e30e6d6
  1. BIN
      .DS_Store
  2. 3
      .gitignore
  3. BIN
      application/.DS_Store
  4. 497
      application/admin/controller/institution/Priselecturer.php
  5. 2
      application/admin/controller/live/AliyunLive.php
  6. 181
      application/admin/controller/store/StoreEntityCategory.php
  7. 94
      application/admin/model/store/StoreEntityCategory.php
  8. 411
      application/admin/view/institution/priselecturer/create.php
  9. 413
      application/admin/view/institution/priselecturer/index.php
  10. 133
      application/admin/view/institution/priselecturer/lecturer_order.php
  11. 206
      application/admin/view/institution/priselecturer/mercreate.php
  12. 2
      application/admin/view/special/lecturer/create.php
  13. 215
      application/admin/view/store/store_entity_category/create.php
  14. 224
      application/admin/view/store/store_entity_category/index.php
  15. 20
      application/common.php
  16. 269
      application/wap/controller/Clearance.php
  17. 36
      application/wap/controller/Index.php
  18. 74
      application/wap/controller/My.php
  19. 31
      application/wap/controller/Special.php
  20. 15
      application/wap/controller/Topic.php
  21. 25
      application/wap/model/activity/EventRegistration.php
  22. 2
      application/wap/model/institution/InstitutionFollow.php
  23. 2
      application/wap/model/merchant/MerchantFollow.php
  24. 2
      application/wap/model/store/StoreCart.php
  25. 11
      application/wap/model/topic/ExaminationRecord.php
  26. 26
      application/wap/model/user/Message.php
  27. 26
      application/wap/model/user/MessageType.php
  28. 26
      application/wap/model/wap/City.php
  29. 26
      application/wap/model/wap/Clearance.php
  30. 26
      application/wap/model/wap/ClearanceSubject.php
  31. 26
      application/wap/model/wap/ClearanceSubjectChapter.php
  32. 33
      application/wap/model/wap/Feedback.php
  33. 33
      application/wap/model/wap/Helpcenter.php
  34. 26
      application/wap/model/wap/UserClearance.php
  35. 26
      application/wap/model/wap/UserClearanceDetail.php
  36. 26
      application/wap/model/wap/UserStudy.php
  37. 4
      application/wap/view/first/live/index.html
  38. 87
      extend/service/ClearanceService.php
  39. 18
      extend/service/MessageService.php

BIN
.DS_Store vendored

Binary file not shown.

3
.gitignore vendored

@ -16,4 +16,5 @@
*.pid
/public/public/qrcode
/vendor/workerman/_www_wwwroot_zhishi.tczxkj.com_think.pid
sftp-config.json
sftp-config.json
*.DS_Store

Binary file not shown.

@ -0,0 +1,497 @@
<?php
namespace app\admin\controller\institution;
use app\admin\controller\AuthController;
use app\admin\model\special\Special;
use app\admin\model\system\WebRecommend;
use app\admin\model\system\WebRecommendRelation;
use app\admin\model\system\Recommend;
use app\admin\model\system\RecommendRelation;
use app\admin\model\special\LecturerInstitution as LecturerModel;
use app\admin\model\institution\Institution as InstitutionModel;
use app\admin\model\institution\InstitutionAdmin as InstitutionAdminModel;
use app\institution\model\institution\InstitutionMenus;
use app\admin\model\educational\Education as EducationModel;
use app\admin\model\user\User;
use service\JsonService;
use service\FormBuilder as Form;
use think\Db;
use think\Url;
/**
* 机构控制器
*/
class Priselecturer extends AuthController
{
/**
* 机构列表展示
* @return
* */
public function index()
{
return $this->fetch();
}
/**
* 机构列表获取
* @return
* */
public function lecturer_list()
{
$where = parent::getMore([
['page', 1],
['is_show', ''],
['limit', 20],
['title', ''],
['entry_type',2],
['mer_id',0]
]);
return JsonService::successlayui(LecturerModel::getLecturerList($where));
}
/**添加/编辑
* @param int $id
* @return mixed|void
* @throws \think\exception\DbException
*/
public function create($id = 0)
{
$select_list = EducationModel::getSelectList();
if ($id) {
$lecturer = LecturerModel::get($id);
$lecturer['label'] = json_decode($lecturer['label']);
$lecturer['introduction'] = htmlspecialchars_decode($lecturer['introduction']);
$qualifications = json_decode($lecturer['certificate'],true);
$cert_id = $lecturer['cert_id'];
if (!$lecturer) return JsonService::fail('机构信息不存在!');
} else {
$lecturer = [];
$qualifications = count($select_list) == 0 ? '' : json_decode($select_list[0]['qualifications'],true);
$cert_id = count($select_list) == 0 ? 0 : $select_list[0]['id'];
}
$this->assign('cert_id', $cert_id);
$this->assign('all', json_encode($select_list));
$this->assign('qualifications_list', json_encode($qualifications));
$this->assign(['lecturer' => json_encode($lecturer), 'id' => $id]);
return $this->fetch();
}
/**
* 添加和修改机构
* @param int $id 修改
* @return JsonService
* */
public function save_lecturer($id = 0)
{
$data = parent::postMore([
['lecturer_name', ''],
['lecturer_head', ''],
['label', []],
['phone', ''],
['explain', ''],
['introduction', ''],
['sort', 0],
['is_show', 1],
['certificate', ''],
['card_id', 0],
['business_license',''],
['corporate_name',''],
['credit_code',''],
['business_term',''],
['card_straight',''],
['card_side',''],
['card_straight',''],
['emial',''],
]);
$data['lecturer_name'] = preg_replace("#(^( |\s)+|( |\s)+$)#", "", $data['lecturer_name']);
$data['entry_type'] = 2;
if (!$data['lecturer_name']) return JsonService::fail('请输入机构名称');
if (mb_strlen($data['lecturer_name']) > 8) return JsonService::fail('机构名称不能超过8个字');
if (!$data['lecturer_head']) return JsonService::fail('请输入机构头像');
$data['label'] = json_encode($data['label']);
$data['introduction'] = htmlspecialchars($data['introduction']);
if ($id) {
LecturerModel::edit($data, $id);
return JsonService::successful('修改成功');
} else {
$data['add_time'] = time();
if (!LecturerModel::be(['lecturer_name' => $data['lecturer_name'], 'lecturer_head' => $data['lecturer_head'], 'label' => $data['label'], 'phone' => $data['phone'], 'is_del' => 0])) {
$res = LecturerModel::set($data);
} else {
return JsonService::fail('机构已存在');
}
if ($res)
return JsonService::successful('添加成功');
else
return JsonService::fail('添加失败');
}
}
/**
* 设置单个产品上架|下架
* @param int $is_show 是否显示
* @param int $id 修改的主键
* @return JsonService
*/
public function set_show($is_show = '', $id = '')
{
($is_show == '' || $id == '') && JsonService::fail('缺少参数');
$res = parent::getDataModification('lecturer_institution', $id, 'is_show', (int)$is_show);
if ($res) {
$mer_id = LecturerModel::where('id', $id)->value('mer_id');
if ($mer_id) {
$data['estate'] = $is_show;
InstitutionModel::edit($data, $mer_id, 'id');
}
return JsonService::successful($is_show == 1 ? '显示成功' : '隐藏成功');
} else {
return JsonService::fail($is_show == 1 ? '显示失败' : '隐藏失败');
}
}
/**
* 快速编辑
* @param string $field 字段名
* @param int $id 修改的主键
* @param string value 修改后的值
* @return JsonService
*/
public function set_value($field = '', $id = '', $value = '')
{
($field == '' || $id == '' || $value == '') && JsonService::fail('缺少参数');
$res = parent::getDataModification('lecturer', $id, $field, $value);
if ($res)
return JsonService::successful('保存成功');
else
return JsonService::fail('保存失败');
}
/**
* 删除机构
* @param int $id 修改的主键
* @return json
* */
public function delete($id = 0)
{
if (!$id) return JsonService::fail('缺少参数');
if (LecturerModel::delLecturer($id))
return JsonService::successful('删除成功');
else
return JsonService::fail(LecturerModel::getErrorInfo('删除失败'));
}
/**
* 机构课程订单
*/
public function lecturer_order($id = 0)
{
$this->assign([
'year' => getMonth('h'),
'lecturer_id' => $id,
]);
return $this->fetch();
}
/**机构课程购买记录
* @throws \think\exception\DbException
*/
public function lecturer_order_list()
{
$where = parent::getMore([
['lecturer_id', 0],
['page', 1],
['limit', 10],
['data', ''],
]);
if (!$where['lecturer_id']) return JsonService::fail('缺少参数!');
$lecturer = LecturerModel::get($where['lecturer_id']);
if (!$lecturer) return JsonService::fail('机构不存在!');
$list = LecturerModel::lecturerOrderList($where);
return JsonService::successlayui($list);
}
/**
* 机构盈利
*/
public function getBadge()
{
$where = parent::postMore([
['lecturer_id', 0],
['data', ''],
]);
if (!$where['lecturer_id']) return JsonService::fail('缺少参数!');
$lecturer = LecturerModel::get($where['lecturer_id']);
if (!$lecturer) return JsonService::fail('机构不存在!');
$list = LecturerModel::getBadge($where);
return JsonService::successful($list);
}
/**
* 添加推荐
* @param int $special_id
* @return mixed
* @throws \think\exception\DbException
*/
public function web_recommend($lecturer_id = 0)
{
if (!$lecturer_id) $this->failed('缺少参数');
$lecturer = LecturerModel::get($lecturer_id);
if (!$lecturer) $this->failed('没有查到此机构');
if ($lecturer->is_del) $this->failed('此机构已删除');
$form = Form::create(Url::build('save_web_recommend', ['lecturer_id' => $lecturer_id]), [
Form::select('recommend_id', '推荐')->setOptions(function () {
$model = WebRecommend::where(['is_show' => 1, 'type' => 2]);
$list = $model->field('title,id')->order('sort desc,add_time desc')->select();
$menus = [];
foreach ($list as $menu) {
$menus[] = ['value' => $menu['id'], 'label' => $menu['title']];
}
return $menus;
})->filterable(1),
Form::number('sort', '排序'),
]);
$form->setMethod('post')->setTitle('推荐设置')->setSuccessScript('parent.$(".J_iframe:visible")[0].contentWindow.location.reload(); setTimeout(function(){parent.layer.close(parent.layer.getFrameIndex(window.name));},800);');
$this->assign(compact('form'));
return $this->fetch('public/form-builder');
}
/**
* 保存推荐
* @param int $special_id
* @throws \think\exception\DbException
*/
public function save_web_recommend($lecturer_id = 0)
{
if (!$lecturer_id) $this->failed('缺少参数');
$data = parent::postMore([
['recommend_id', 0],
['sort', 0],
]);
if (!$data['recommend_id']) return JsonService::fail('请选择推荐');
$recommend = WebRecommend::get($data['recommend_id']);
if (!$recommend) return JsonService::fail('导航菜单不存在');
$data['add_time'] = time();
$data['type'] = $recommend->type;
$data['link_id'] = $lecturer_id;
if (WebRecommendRelation::be(['type' => $recommend->type, 'link_id' => $lecturer_id, 'recommend_id' => $data['recommend_id']])) return JsonService::fail('已推荐,请勿重复推荐');
if (WebRecommendRelation::set($data))
return JsonService::successful('推荐成功');
else
return JsonService::fail('推荐失败');
}
/**取消推荐
* @param int $id
*/
public function cancel_web_recommendation($id = 0, $lecturer_id = 0)
{
if (!$id || !$lecturer_id) return JsonService::fail('缺少参数');
if (WebRecommendRelation::be(['id' => $id, 'link_id' => $lecturer_id])) {
$res = WebRecommendRelation::where(['id' => $id, 'link_id' => $lecturer_id])->delete();
if ($res)
return JsonService::successful('取消推荐成功');
else
return JsonService::fail('取消推荐失败');
} else {
return JsonService::fail('推荐不存在');
}
}
/**
* 添加推荐
* @param int $special_id
* @return mixed
* @throws \think\exception\DbException
*/
public function recommend($lecturer_id = 0)
{
if (!$lecturer_id) $this->failed('缺少参数');
$lecturer = LecturerModel::get($lecturer_id);
if (!$lecturer) $this->failed('没有查到此机构');
if ($lecturer->is_del) $this->failed('此机构已删除');
$form = Form::create(Url::build('save_recommend', ['lecturer_id' => $lecturer_id]), [
Form::select('recommend_id', '推荐')->setOptions(function () {
$model = Recommend::where(['is_show' => 1, 'type' => 6]);
$list = $model->field('title,id')->order('sort desc,add_time desc')->select();
$menus = [];
foreach ($list as $menu) {
$menus[] = ['value' => $menu['id'], 'label' => $menu['title']];
}
return $menus;
})->filterable(1),
Form::number('sort', '排序'),
]);
$form->setMethod('post')->setTitle('推荐设置')->setSuccessScript('parent.$(".J_iframe:visible")[0].contentWindow.location.reload(); setTimeout(function(){parent.layer.close(parent.layer.getFrameIndex(window.name));},800);');
$this->assign(compact('form'));
return $this->fetch('public/form-builder');
}
/**
* 保存推荐
* @param int $special_id
* @throws \think\exception\DbException
*/
public function save_recommend($lecturer_id = 0)
{
if (!$lecturer_id) $this->failed('缺少参数');
$data = parent::postMore([
['recommend_id', 0],
['sort', 0],
]);
if (!$data['recommend_id']) return JsonService::fail('请选择推荐');
$recommend = Recommend::get($data['recommend_id']);
if (!$recommend) return JsonService::fail('导航菜单不存在');
$data['add_time'] = time();
$data['type'] = $recommend->type;
$data['link_id'] = $lecturer_id;
if (RecommendRelation::be(['type' => $recommend->type, 'link_id' => $lecturer_id, 'recommend_id' => $data['recommend_id']])) return JsonService::fail('已推荐,请勿重复推荐');
if (RecommendRelation::set($data))
return JsonService::successful('推荐成功');
else
return JsonService::fail('推荐失败');
}
/**取消推荐
* @param int $id
*/
public function cancel_recommendation($id = 0, $lecturer_id = 0)
{
if (!$id || !$lecturer_id) return JsonService::fail('缺少参数');
if (RecommendRelation::be(['id' => $id, 'link_id' => $lecturer_id])) {
$res = RecommendRelation::where(['id' => $id, 'link_id' => $lecturer_id])->delete();
if ($res)
return JsonService::successful('取消推荐成功');
else
return JsonService::fail('取消推荐失败');
} else {
return JsonService::fail('推荐不存在');
}
}
/**生成机构后台
* @return mixed
*/
public function mercreate($id)
{
$lecturer = LecturerModel::get($id);
$this->assign([
'title' => '添加机构后台',
'lecturer' => json_encode($lecturer),
'action' => Url::build('save'),
'menus' => json(InstitutionMenus::ruleList())->getContent()
]);
return $this->fetch();
}
/**
* 添加机构商户
*/
public function save()
{
$data = parent::postMore([
'account',
['id', 0],
['uid', 0],
'conf_pwd',
'pwd',
'mer_name',
'real_name',
'mer_phone',
'mer_avatar',
'mer_special_divide',
'mer_store_divide',
'mer_event_divide',
'mer_data_divide',
'mer_test_divide',
'gold_divide',
'mark',
'mer_address',
['checked_menus', [], '', 'rules'],
['is_source', 0],
['is_audit', 0],
['status', 0]
]);
if (!is_array($data['rules']) || !count($data['rules'])) return JsonService::fail('请选择最少一个权限');
$data['rules'] = implode(',', $data['rules']);
if (!$data['account']) return JsonService::fail('请输入机构后台账号');
if (InstitutionAdminModel::where('account', trim($data['account']))->where('is_del', 0)->count()) return JsonService::fail('商户账号已存在,请使用别的商户账号注册');
if (!$data['pwd']) return JsonService::fail('请输入机构后台登陆密码');
if ($data['pwd'] != $data['conf_pwd']) return JsonService::fail('两次输入密码不相同');
if (!$data['mer_name']) return JsonService::fail('请输入机构后台名称');
if (!$data['uid']) return JsonService::fail('请输入绑定的用户ID');
$user = User::where('uid', $data['uid'])->find();
if (!$user) {
return JsonService::fail('绑定的用户不存在');
} else {
if ($user['business'] == 1) {
return JsonService::fail('该用户已是讲师/机构');
}
}
$id = $data['id'];
$data['pwd'] = trim(md5($data['pwd']));
$data['reg_time'] = time();
$data['add_time'] = time();
$data['reg_admin_id'] = $this->adminId;
$data['lecturer_id'] = $id;
$data['estate'] = 1;
$admin = array();
$admin['account'] = trim($data['account']);
$admin['pwd'] = $data['pwd'];
unset($data['id']);
unset($data['conf_pwd']);
unset($data['account']);
unset($data['pwd']);
InstitutionModel::beginTrans();
$res = InstitutionModel::set($data);
$res1 = false;
if ($res) {
$admin['uid'] = $data['uid'];
$admin['mer_id'] = $res->id;
$admin['real_name'] = $data['mer_name'];
$admin['rules'] = $data['rules'];
$admin['phone'] = $data['mer_phone'];
$admin['add_time'] = time();
$admin['status'] = 1;
$admin['level'] = 0;
$res1 = InstitutionAdminModel::set($admin);
}
$bool = false;
if ($res1 && $res) $bool = true;
InstitutionModel::checkTrans($bool);
if ($bool) {
LecturerModel::where('id', $id)->update(['mer_id' => $res->id, 'lecturer_name' => $data['mer_name'], 'phone' => $data['mer_phone']]);
Special::where('lecturer_id', $id)->update(['mer_id' => $res->id]);
User::where('uid', $data['uid'])->update(['business' => 1]);
Db::name('cache_merchant')->insert(
[
'mer_id' => $res->id,
'add_time' => time(),
'key'=> 'wechat_menus',
'result' => '[{"type":"view","name":"\u8bb2\u5e08\u9996\u9875","sub_button":[],"url":"https:\/\/www.ideaketang.com\/\/h5"},{"type":"click","name":"\u5e73\u53f0\u9996\u9875","sub_button":[],"key":"https:\/\/www.ideaketang.com\/h5"},{"type":"view","name":"\u670d\u52a1\u4e2d\u5fc3","sub_button":[],"key":"https:\/\/www.ideaketang.com\/h5","url":"https:\/\/www.ideaketang.com\/h5"}]'
]
);
return JsonService::successful('添加机构后台成功!');
} else {
return JsonService::successful('添加机构后台失败!');
}
}
public function select_list(){
$data = parent::getMore([
['id', 0]
]);
$select_list = EducationModel::where('id',$data['id'])->find();
$select_list['qualifications'] = json_decode($select_list['qualifications'],true);
$data = $select_list['qualifications'];
foreach($data as &$item){
if($item['event_value'] == 3){
$item['eventValue'] = implode(',',$item['event_value']);
}
}
return JsonService::successful($select_list);
}
}

@ -97,7 +97,7 @@ class AliyunLive extends AuthController
{
if (!$field || !$id) return Json::fail('缺少参数');
$value = str_replace('免密', '', $value);
$res = parent::getDataModification('studio', $id, $field, $value);
$res = parent::getDataModification('live_studio', $id, $field, $value);
if ($res)
return Json::successful('修改成功');
else

@ -0,0 +1,181 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\admin\controller\store;
use app\admin\controller\AuthController;
use service\JsonService as Json;
use app\admin\model\store\StoreEntityCategory as StoreEntityCategoryModel;
/**
* 商品分类
* Class GoodsCategory
*/
class StoreEntityCategory extends AuthController
{
public function index()
{
return $this->fetch();
}
public function get_category_list()
{
$where = parent::getMore([
['page', 1],
['limit', 20],
['grade_id', 0],
['name', '']
]);
return Json::successful(StoreEntityCategoryModel::getAllList($where));
}
/**
* 创建分类
* @param int $id
* @return mixed
* @throws \think\exception\DbException
*/
public function create($id = 0)
{
$cate = $id > 0 ? StoreEntityCategoryModel::get($id) : [];
// var_dump($cate);
// exit();
$this->assign(['cate' => json_encode($cate), 'id' => $id]);
return $this->fetch();
}
public function get_cate_list()
{
$category = StoreEntityCategoryModel::taskCategoryAll(2);
return Json::successful($category);
}
public function add_cate_list()
{
$category = StoreEntityCategoryModel::where(['grade_id' => 0, 'is_del' => 0])->select();
$category = count($category) > 0 ? $category->toArray() : [];
$array = [];
$oneCate['id'] = 0;
$oneCate['name'] = '顶级分类';
array_push($array, $oneCate);
foreach ($category as $key => $value) {
array_push($array, $value);
}
return Json::successful($array);
}
/**
* 快速编辑
*
* @return json
*/
public function set_value($field = '', $id = '', $value = '')
{
$field == '' || $id == '' || $value == '' && Json::fail('缺少参数');
$res = parent::getDataModification('store_entity_category', $id, $field, $value);
if ($res)
return Json::successful('保存成功');
else
return Json::fail('保存失败');
}
/**
* 新增或者修改
*
* @return json
*/
public function save($id = 0)
{
$post = parent::postMore([
['name', ''],
['grade_id', ''],
['is_recommend', ''],
['is_show', ''],
['pic', ''],
['sort', 0]
]);
if (!$post['name']) return Json::fail('请输入分类名称');
if ($id) {
$cate = StoreEntityCategoryModel::get($id);
if (!$cate['grade_id'] && $post['grade_id'] && StoreEntityCategoryModel::be(['grade_id' => $id, 'is_del' => 0])) return Json::fail('无法移动有下级的分类');
if (StoreEntityCategoryModel::where(['name' => $post['name'], 'is_del' => 0])->where('id', '<>', $id)->count() >= 1) return Json::fail('分类名称已存在');
$res = StoreEntityCategoryModel::edit($post, $id);
if ($res)
return Json::successful('修改成功');
else
return Json::fail('修改失败');
} else {
$post['add_time'] = time();
if (StoreEntityCategoryModel::be(['name' => $post['name'], 'is_del' => 0])) {
return Json::fail('分类名称已存在!');
}
$res = StoreEntityCategoryModel::set($post);
if ($res)
return Json::successful('添加成功');
else
return Json::fail('添加失败');
}
}
/**
* 删除
*
* @return json
*/
public function delete($id = 0)
{
if (!$id) return Json::fail('缺少参数');
$cate = StoreEntityCategoryModel::get($id);
if (!$cate['grade_id']) {
$count = StoreEntityCategoryModel::where('grade_id', $id)->where(['is_del' => 0])->count();
if ($count) return Json::fail('暂无法删除,请删除下级分类');
}
// if (QuestionsModel::where('pid', $id)->where(['is_del' => 0, 'mer_id' => 0])->count()) return Json::fail('暂无法删除,请先删除题目');
$res = parent::getDataModification('store_entity_category', $id, 'is_del', 1);
if ($res)
return Json::successful('删除成功');
else
return Json::fail('删除失败');
}
/**二级分是否显示快捷操作
* @param string $is_show
* @param string $id
* @return mixed
*/
public function set_show($is_show = '', $id = '')
{
($is_show == '' || $id == '') && Json::fail('缺少参数');
$res = parent::getDataModification('store_entity_category', $id, 'is_show', (int)$is_show);
if ($res) {
return Json::successful($is_show == 1 ? '显示成功' : '隐藏成功');
} else {
return Json::fail($is_show == 1 ? '显示失败' : '隐藏失败');
}
}
/**二级分是否显示快捷操作
* @param string $is_show
* @param string $id
* @return mixed
*/
public function set_recommend($is_recommend = '', $id = '')
{
($is_recommend == '' || $id == '') && Json::fail('缺少参数');
$res = parent::getDataModification('store_entity_category', $id, 'is_recommend', (int)$is_recommend);
if ($res) {
return Json::successful($is_recommend == 1 ? '显示成功' : '隐藏成功');
} else {
return Json::fail($is_recommend == 1 ? '显示失败' : '隐藏失败');
}
}
}

@ -0,0 +1,94 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\admin\model\store;
use traits\ModelTrait;
use basic\ModelBasic;
use service\UtilService as Util;
// use app\admin\model\questions\Questions as QuestionsModel;
/**
* 试题分类 Model
* Class QuestionsCategpry
* @package app\admin\model\questions
*/
class StoreEntityCategory extends ModelBasic
{
use ModelTrait;
/**
* 全部试题分类
*/
public static function taskCategoryAll($type = 0)
{
$model = self::where(['is_del' => 0]);
if ($type == 1) {
$model = $model->where('grade_id', 0);
}
$list = $model->order('sort desc,add_time desc')->select();
$list = count($list) > 0 ? $list->toArray() : [];
$list = Util::sortListTier($list);
return $list;
}
/**
* 试题分类列表
*/
public static function getAllList($where)
{
$data = self::setWhere($where)->column('id,grade_id');
$list = [];
foreach ($data as $ket => $item) {
$cate = self::where('id', $ket)->find();
if ($cate) {
$cate = $cate->toArray();
// if ($item > 0) {
// $cate['sum'] = QuestionsModel::where(['is_del' => 0])->where('grade_id', $ket)->count();
// } else {
// $pids = self::categoryId($ket);
// $cate['sum'] = QuestionsModel::where(['is_del' => 0,])->where('grade_id', 'in', $pids)->count();
// }
array_push($list, $cate);
unset($cate);
}
if ($item > 0 && !array_key_exists($item, $data)) {
$cate = self::where('id', $item)->find();
if ($cate) {
$cate = $cate->toArray();
$pids = self::categoryId($item);
//$cate['sum'] = QuestionsModel::where(['is_del' => 0])->where('grade_id', 'in', $pids)->count();
array_push($list, $cate);
}
}
}
return $list;
}
public static function setWhere($where)
{
$model = self::order('sort desc,add_time desc')->where(['is_del' => 0]);
if ($where['grade_id']) $model = $model->where('id', $where['grade_id']);
if ($where['name'] != '') $model = $model->where('name', 'like', "%$where[name]%");
return $model;
}
/**获取一个分类下的所有分类ID
* @param int $pid
*/
public static function categoryId($pid = 0)
{
$data = self::where(['is_del' => 0])->where('grade_id', $pid)->column('id');
array_push($data, $pid);
return $data;
}
}

@ -0,0 +1,411 @@
{extend name="public/container"}
{block name='head_top'}
<style>
.layui-form-item .special-label i{display: inline-block;width: 18px;height: 18px;font-size: 18px;color: #fff;}
.layui-form-item .label-box p{line-height: inherit;}
.m-t-5{margin-top:5px;}
#app .layui-barrage-box{margin-bottom: 10px;margin-top: 10px;margin-left: 10px;border: 1px solid #0092DC;border-radius: 5px;cursor: pointer;position: relative;}
#app .layui-barrage-box.border-color{border-color: #0bb20c;}
#app .layui-barrage-box .del-text{position: absolute;top: 0;left: 0;background-color: rgba(0,0,0,0.5);color: #ffffff;width: 92%;text-align: center;}
#app .layui-barrage-box p{padding:5px 5px; }
#app .layui-empty-text{text-align: center;font-size: 18px;}
#app .layui-empty-text p{padding: 10px 10px;}
.edui-default .edui-for-image .edui-icon {background-position: -380px 0px;}
.layui-form-item .special-label {width: 50px;float: left;height: 30px;line-height: 38px;margin-left: 10px;margin-top: 5px;border-radius: 5px;background-color: #0092DC;text-align: center;}
.layui-form-item .special-label i {display: inline-block;width: 18px;height: 18px;font-size: 18px;color: #fff;}
.layui-form-item .label-box {border: 1px solid;border-radius: 10px;position: relative;padding: 10px;height: 30px;color: #fff;background-color: #393D49;text-align: center;cursor: pointer;display: inline-block;line-height: 10px;}
.layui-form-item .label-box p {line-height: inherit;}
</style>
<script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/third-party/zeroclipboard/ZeroClipboard.js"></script>
<script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/ueditor.config.js"></script>
<script type="text/javascript" charset="utf-8" src="{__ADMIN_PATH}plug/ueditor/ueditor.all.min.js"></script>
<script src="{__PLUG_PATH}reg-verify.js"></script>
{/block}
{block name="content"}
<div class="layui-fluid" id="app" v-cloak>
<div class="layui-card">
<!-- <div class="layui-card-header">{{id ? '编辑讲师':'添加讲师'}}</div> -->
<div class="layui-card-body">
<form action="" class="layui-form">
<div class="layui-form-item">
<div class="layui-form-item required">
<label class="layui-form-label">法人名称:</label>
<div class="layui-input-inline">
<input type="text" name="lecturer_name" v-model.trim="formData.lecturer_name" required autocomplete="off" placeholder="请输入法人名称" maxlength="8" class="layui-input">
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">法人身份证号:</label>
<div class="layui-input-inline">
<input type="text" name="card_id" v-model.trim="formData.card_id" required autocomplete="off" placeholder="请输入法人身份证号" maxlength="18" class="layui-input">
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">统一社会信用代码:</label>
<div class="layui-input-inline">
<input type="text" name="credit_code" v-model.trim="formData.credit_code" required autocomplete="off" placeholder="请输入统一社会信用代码" class="layui-input">
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">营业期限:</label>
<div class="layui-input-inline">
<input type="text" name="business_term" v-model.trim="formData.business_term" required autocomplete="off" placeholder="营业期限:长期输入长期即可" class="layui-input">
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">身份证正面:</label>
<div class="layui-input-block">
<div class="upload-image-box" v-if="formData.card_straight" >
<img :src="formData.card_straight" alt="">
<div class="mask" style="display: block">
<p>
<i class="fa fa-eye" @click="look(formData.card_straight)"></i>
<i class="fa fa-trash-o" @click="delect('card_straight')"></i>
</p>
</div>
</div>
<div class="upload-image" v-show="!formData.card_straight" @click="upload('card_straight')">
<div class="fiexd"><i class="fa fa-plus"></i></div>
<p>选择图片</p>
</div>
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">身份证徽面:</label>
<div class="layui-input-block">
<div class="upload-image-box" v-if="formData.card_side" >
<img :src="formData.card_side" alt="">
<div class="mask" style="display: block">
<p>
<i class="fa fa-eye" @click="look(formData.card_side)"></i>
<i class="fa fa-trash-o" @click="delect('card_side')"></i>
</p>
</div>
</div>
<div class="upload-image" v-show="!formData.card_side" @click="upload('card_side')">
<div class="fiexd"><i class="fa fa-plus"></i></div>
<p>选择图片</p>
</div>
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">邮箱:</label>
<div class="layui-input-inline">
<input type="text" name="emial" v-model.trim="formData.emial" required autocomplete="off" placeholder="请输入邮箱" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">教育领域:</label>
<div class="layui-input-block" style="width:190px;">
<select name="cert_id" lay-search="" lay-filter="cert_id" v-model="formData.cert_id">
<option v-for="(items,idx) in select_list" :key="items.id" :value="items.id">{{items.title}}</option>
</select>
</div>
</div>
<div class="layui-form-item" :class="item.is_required == 1 ? 'required' : ''" v-for="(item,index) in qualifications_list" :key="index">
<label class="layui-form-label">{{item.event_name}}</label>
<div class="layui-input-inline" v-if="item.event_type == 1">
<input type="text" name="lecturer_name" v-model.trim="item.event_value" autocomplete="off" :placeholder="'请输入'+item.event_name" class="layui-input">
</div>
<div class="layui-input-inline" style="width: 380px;" v-if="item.event_type == 4">
<input type="text" v-model.trim="item.event_value" class="layui-input" autocomplete="off" :id="'date'+index" :placeholder="'请输入'+item.event_name + ':长期输入长期即可'">
</div>
<div class="layui-input-inline" v-if="item.event_type == 3">
<select :name="'event_value_id'+index" lay-search="" :lay-filter="'event_value_id'+index" v-model="item.event_value">
<option v-for="(items,idx) in item.eventValue" :key="idx" :value="idx">{{items}}</option>
</select>
</div>
<div class="layui-input-block" v-if="item.event_type == 2">
<div class="upload-image-box" v-if="item.event_value" >
<img :src="item.event_value" alt="">
<div class="mask" style="display: block">
<p>
<i class="fa fa-eye" @click="look(item.event_value)"></i>
<i class="fa fa-trash-o" @click="delect('event_value',index)"></i>
</p>
</div>
</div>
<div class="upload-image" v-if="!item.event_value" @click="upload('event_value',0,index)">
<div class="fiexd"><i class="fa fa-plus"></i></div>
<p>选择图片</p>
</div>
</div>
</div>
<div v-if="formData.label.length" class="layui-form-item">
<div class="layui-input-block">
<button v-for="item in formData.label" :key="item" type="button" class="layui-btn layui-btn-normal layui-btn-sm" @click="delLabel(item)">{{item}}</button>
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">头像:(200*200)</label>
<div class="layui-input-block">
<div class="upload-image-box" v-if="formData.lecturer_head" >
<img :src="formData.lecturer_head" alt="">
<div class="mask" style="display: block">
<p>
<i class="fa fa-eye" @click="look(formData.lecturer_head)"></i>
<i class="fa fa-trash-o" @click="delect('lecturer_head')"></i>
</p>
</div>
</div>
<div class="upload-image" v-show="!formData.lecturer_head" @click="upload('lecturer_head')">
<div class="fiexd"><i class="fa fa-plus"></i></div>
<p>选择图片</p>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">手机:</label>
<div class="layui-input-inline">
<input type="text" name="phone" v-model.trim="formData.phone" required autocomplete="off" maxlength="11" placeholder="请输入手机号" class="layui-input">
</div>
</div>
<div class="layui-form-item submit">
<label class="layui-form-label">排序:</label>
<div class="layui-input-inline">
<input type="number" name="sort" v-model="formData.sort" min="0" max="9999" class="layui-input" v-sort>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">状态:</label>
<div class="layui-input-block">
<input type="radio" name="is_show" value="1" title="显示" v-model="formData.is_show" lay-filter="is_show" >
<input type="radio" name="is_show" value="0" title="隐藏" v-model="formData.is_show" lay-filter="is_show">
</div>
</div>
<div class="layui-form-item submit">
<div class="layui-input-block">
<button class="layui-btn layui-btn-normal" type="button" @click="save">{{id ? '立即修改':'立即提交'}}</button>
<button class="layui-btn layui-btn-primary clone" type="button" @click="clone_form">取消</button>
</div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript" src="{__ADMIN_PATH}js/layuiList.js"></script>
{/block}
{block name='script'}
<script>
var id={$id},lecturer=<?=isset($lecturer) ? $lecturer : []?>;
var all={$all};
var qualifications_list={$qualifications_list};
var cert_id = {$cert_id};
require(['vue','helper','zh-cn','request','plupload','aliyun-oss','OssUpload'],function(Vue,$h) {
new Vue({
el: "#app",
directives: {
sort: {
bind: function (el, binding, vnode) {
var vm = vnode.context;
el.addEventListener('change', function () {
if (!this.value || this.value < 0) {
vm.formData.sort = 0;
} else if (this.value > 9999) {
vm.formData.sort = 9999;
} else {
vm.formData.sort = parseInt(this.value);
}
});
}
}
},
data: {
formData:{
cert_id:cert_id,
lecturer_name:lecturer.lecturer_name || '',
lecturer_head: lecturer.lecturer_head || '',
label: lecturer.label || [],
phone: lecturer.phone || '',
explain: lecturer.explain || '',
introduction: lecturer.introduction || '',
sort:Number(lecturer.sort) || 0,
is_show:lecturer.is_show || 1,
emial:lecturer.emial ||'',
business_license:lecturer.business_license ||'',
corporate_name:lecturer.corporate_name ||'',
credit_code:lecturer.credit_code ||"",
business_term:lecturer.business_term ||'',
card_straight:lecturer.card_straight ||'',
card_side:lecturer.card_side ||'',
card_id:lecturer.card_id ||""
},
label: '',
select_list:all,
qualifications_list:qualifications_list || [],
event_index:0
},
methods:{
//查看图片
look: function (pic) {
parent.$eb.openImage(pic);
},
//上传图片
upload: function (key, count,index) {
this.event_index = index;
ossUpload.createFrame('请选择图片', {fodder: key, max_count: count === undefined ? 0 : count},{w:800,h:550});
},
// 删除领域
delLabel: function (label) {
this.formData.label.splice(this.formData.label.indexOf(label), 1);
},
// 添加领域
addLabrl: function () {
if (this.label) {
var length = this.formData.label.length;
for (var i = 0; i < length; i++) {
if (this.formData.label[i] == this.label) return layList.msg('请勿重复添加');
}
this.formData.label.push(this.label);
this.label = '';
}
},
clone_form: function () {
var that = this;
if (parseInt(id) == 0) {
parent.layer.closeAll();
}
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
},
save:function () {
var that=this;
// that.formData.introduction = that.ue.getContent();
that.$nextTick(function () {
if (!that.formData.lecturer_name) return layList.msg('请法人名称');
for (var i = 0, len = this.qualifications_list.length; i < len; i++) {
if (!this.qualifications_list[i].is_required) {
continue;
}
switch (this.qualifications_list[i].event_type) {
case 1:
if (!this.qualifications_list[i].event_value) {
layList.msg('请输入'+this.qualifications_list[i].event_name);
return;
}
break;
case 2:
if (!this.qualifications_list[i].event_value) {
layList.msg('请上传'+this.qualifications_list[i].event_name);
return;
}
break;
}
}
// if (!that.formData.label.length) return layList.msg('请输入领域');
if (!that.formData.lecturer_head) return layList.msg('请上传机构头像');
if (!that.formData.phone) return layList.msg('请输入手机号');
if(!$reg.isPhone(that.formData.phone)){
return layList.msg('请输入正确的手机号');
}
that.formData.certificate = JSON.stringify(that.qualifications_list);
layList.loadFFF();
layList.basePost(layList.U({a: 'save_lecturer', q: {id: id}}), that.formData, function (res) {
layList.loadClear();
if (parseInt(id) == 0) {
layList.layer.confirm('添加成功,您要继续添加机构吗?', {
btn: ['继续添加', '立即提交']
}, function (index) {
layList.layer.close(index);
}, function (index) {
layList.layer.close(index);
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
});
} else {
layList.msg('修改成功', function () {
parent.layer.closeAll();
})
}
}, function (res) {
layList.msg(res.msg);
layList.loadClear();
});
})
},
delect:function(key,index = 0){
var that=this;
if(key == 'event_value'){
that.qualifications_list[index].event_value = ""
}else{
that.formData[key]='';
}
},
changeIMG: function (key, value, multiple) {
if(key == "event_value"){
this.qualifications_list[this.event_index].event_value = value;
}else{
if (multiple) {
var that = this;
value.map(function (v) {
that.formData[key].push({pic: v, is_show: false});
});
this.$set(this.formData, key, this.formData[key]);
} else {
this.$set(this.formData, key, value);
}
}
},
},
mounted:function () {
var that=this;
window.changeIMG = that.changeIMG;
//选择图片插入到编辑器中
window.insertEditor = function(list,fodder){
that.ue.execCommand('insertimage', list);
};
// that.qualifications_list.forEach((item,index) => {
// if(item.event_type == 3){
// that.qualifications_list[index].eventValue = that.qualifications_list[index].event_value.split('#');
// }
// });
this.$nextTick(function () {
layList.form.render();
layui.config({
base: '{__ADMIN_PATH}mods/',
version: '1.0'
});
layui.use([
'layarea',
'laydate',
'form',
'element'
], function () {
var layarea = layui.layarea;
var laydate = layui.laydate;
var form = layui.form;
var layer = layui.layer;
var element = layui.element;
form.render();
});
});
layList.form.on('radio(is_show)',function (data) {
that.formData.is_show=data.value;
});
layList.form.on('select(cert_id)', function (data) {
that.formData.cert_id = Number(data.elem.value);
layList.baseGet(layList.Url({
a: 'select_list',
q: {id: that.formData.cert_id}
}), function (res) {
that.qualifications_list =res.data.qualifications;
});
});
// that.qualifications_list.forEach((item,index) => {
// if(item.event_type == 3){
// layList.form.on(`select(event_value_id${index})`,function (data) {
// that.qualifications_list[index].event_value = data.elem.value;
// });
// }
// });
}
})
})
</script>
{/block}

@ -0,0 +1,413 @@
{extend name="public/container"}
{block name="content"}
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-header">机构列表</div>
<div class="layui-card-body">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">机构名称</label>
<div class="layui-input-inline">
<input type="text" name="title" class="layui-input" placeholder="请输入机构名称">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">显示状态</label>
<div class="layui-input-inline">
<select name="is_show">
<option value="">全部</option>
<option value="1">显示</option>
<option value="0">隐藏</option>
</select>
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<button class="layui-btn layui-btn-normal layui-btn-sm" lay-submit="search" lay-filter="search">
<i class="layui-icon layui-icon-search"></i>搜索
</button>
</div>
</div>
</div>
</form>
<div class="layui-btn-container">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" data-type="add">
<i class="layui-icon layui-icon-add-1"></i>添加机构
</button>
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" data-type="refresh">
<i class="layui-icon layui-icon-refresh-1"></i>刷新
</button>
</div>
<table id="List" lay-filter="List"></table>
<script type="text/html" id="is_show">
<input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show' lay-text='显示|隐藏' {{ d.is_show == 1 ? 'checked' : '' }}>
</script>
<script type="text/html" id="recommend">
<div class="layui-btn-container">
{{# layui.each(d.recommend, function(index, item){ }}
<button type="button" class="layui-btn layui-btn-yd layui-btn-normal layui-btn-xs" data-type="recommend" data-id="{{index}}" data-pid="{{d.id}}">yd-{{item}}</button>
{{# }); }}
</div>
<div class="layui-btn-container">
{{# layui.each(d.web_recommend, function(index, item){ }}
<button type="button" class="layui-btn layui-btn-pc layui-btn-normal layui-btn-xs" data-type="recommend" data-id="{{index}}" data-pid="{{d.id}}">pc-{{item}}</button>
{{# }); }}
</div>
</script>
<script type="text/html" id="lecturer_name">
<p>{{d.lecturer_name}}/{{d.mer_id}}</p>
</script>
<script type="text/html" id="lecturer_head">
<img width="50" height="50" lay-event='open_image' src="{{d.lecturer_head}}">
</script>
<script type="text/html" id="mer_id">
<div class="layui-btn-group">
{{# if(d.mer_id==0){ }}
<button type="button" class="layui-btn layui-btn-normal layui-btn-xs" data-type="mercreate" data-id="{{d.id}}">生成机构后台</button>
{{# }else{ }}
<a class="layui-btn layui-btn-warm layui-btn-xs" target="_blank" href="{:url('institution.institution/login')}?id={{d.mer_id}}">访问</a>
<button class="layui-btn layui-btn-normal layui-btn-xs" onclick="$eb.createModalFrame('编辑机构信息','{:Url('institution.institution/edit')}?id={{d.mer_id}}',{h:700,w:800})">编辑</button>
<button class="layui-btn success layui-btn-xs" lay-event='reset_pwd'>重置密码</button>
{{# } }}
</div>
</script>
<script type="text/html" id="status">
{{# if(d.status==1){ }}
<button lay-event='modify_error' class="modify layui-btn layui-btn-normal layui-btn-xs zsff-success" type="button">[正常]</button>
{{# }else{ }}
<button lay-event='modify_success' class="modify layui-btn layui-btn-danger layui-btn-xs zsff-fail" type="button">[锁定]</button>
{{# } }}
</script>
<script type="text/html" id="is_source">
{{# if(d.is_source==1){ }}
入驻
{{# }else{ }}
平台
{{# } }}
</script>
<script type="text/html" id="act">
<button type="button" class="layui-btn layui-btn-normal layui-btn-xs" onclick="dropdown(this)">
<i class="layui-icon">&#xe625;</i>操作
</button>
<ul class="layui-nav-child layui-anim layui-anim-upbit">
<li>
<a href="javascript:void(0)" lay-event="edit">
<i class="iconfont icon-bianji"></i> 编辑机构
</a>
</li>
<li>
<a lay-event='delstor' href="javascript:void(0)">
<i class="iconfont icon-shanchu"></i> 删除机构
</a>
</li>
</ul>
</script>
</div>
</div>
</div>
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
{/block}
{block name="script"}
<script>
var $ = layui.jquery;
var layer = layui.layer;
//实例化form
layList.form.render();
//加载列表
layList.tableList({o:'List', done:function () {
$('.layui-btn').on('mouseover', function (event) {
var target = event.target;
var type = target.dataset.type;
if ('recommend' === type) {
layer.tips('点击即可取消此推荐', target, {
tips: [1, '#0093dd']
});
}
});
$('.modify').on('mouseover', function (event) {
var target = event.target;
layer.tips('点击即可切换后台状态', target, {
tips: [1, '#0093dd']
});
});
$('.layui-btn').on('mouseout', function (event) {
var target = event.target;
var type = target.dataset.type;
if ('recommend' === type) {
layer.closeAll();
}
});
$('.layui-btn-yd').on('click', function (event) {
var target = event.target;
var type = target.dataset.type;
if ('recommend' === type) {
var id = target.dataset.id;
var pid = target.dataset.pid;
var url = layList.U({ a: 'cancel_recommendation', q: { id: id, lecturer_id: pid } });
$eb.$swal(
'delete',
function () {
$eb.axios
.get(url)
.then(function (res) {
if (res.data.code == 200) {
$eb.$swal('success', res.data.msg);
layList.reload()
} else {
return Promise.reject(res.data.msg || '取消失败');
}
})
.catch(function (err) {
$eb.$swal('error', err);
});
},
{
title: '确定取消此推荐?',
text: '取消后无法撤销,请谨慎操作!',
confirm: '确定取消'
}
);
}
});
$('.layui-btn-pc').on('click', function (event) {
var target = event.target;
var type = target.dataset.type;
if ('recommend' === type) {
var id = target.dataset.id;
var pid = target.dataset.pid;
var url = layList.U({ a: 'cancel_web_recommendation', q: { id: id, lecturer_id: pid } });
$eb.$swal(
'delete',
function () {
$eb.axios
.get(url)
.then(function (res) {
if (res.data.code == 200) {
$eb.$swal('success', res.data.msg);
layList.reload()
} else {
return Promise.reject(res.data.msg || '取消失败');
}
})
.catch(function (err) {
$eb.$swal('error', err);
});
},
{
title: '确定取消此推荐?',
text: '取消后无法撤销,请谨慎操作!',
confirm: '确定取消'
}
);
}
});
}},"{:Url('lecturer_list')}",function (){
return [
{field: 'id', title: '编号', align: 'center'},
{field: 'lecturer_name', title: '名称/机构编号',templet:'#lecturer_name',align: 'left'},
{field: 'is_source', title: '来源',align: 'center',templet:'#is_source'},
{field: 'lecturer_head', title: '头像',templet:'#lecturer_head',align:'center',minWidth:84},
{field: 'recommend', title: '推荐[yd:移动端,pc:PC端]',templet:'#recommend',align: 'center',minWidth:100},
{field: 'phone', title: '手机号',align:'center'},
{field: 'curriculum', title: '课程数量',align:'center'},
{field: 'status', title: '后台状态',align: 'center',templet:'#status'},
{field: 'is_show', title: '机构状态',templet:'#is_show',align: 'center',minWidth:92},
{field: 'sort', title: '排序',sort: true,event:'sort',edit:'sort',align: 'center'},
{field: 'mer_id', title: '机构后台',templet:'#mer_id',align:'center',minWidth:166},
{field: 'right', title: '操作',align:'center',toolbar:'#act',minWidth:81},
];
});
//下拉框
$(document).click(function (e) {
$('.layui-nav-child').hide();
})
function dropdown(that){
var oEvent = arguments.callee.caller.arguments[0] || event;
oEvent.stopPropagation();
var offset = $(that).offset();
var top=offset.top-$(window).scrollTop();
var index = $(that).parents('tr').data('index');
$('.layui-nav-child').each(function (key) {
if (key != index) {
$(this).hide();
}
})
if($(document).height() < top+$(that).next('ul').height()){
$(that).next('ul').css({
'padding': 10,
'top': - ($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height()/2),
'min-width': 'inherit',
'position': 'absolute'
}).toggle();
}else{
$(that).next('ul').css({
'padding': 10,
'top':$(that).parent('td').height() / 2 + $(that).height(),
'min-width': 'inherit',
'position': 'absolute'
}).toggle();
}
}
//自定义方法
var action= {
set_value: function (field, id, value) {
layList.baseGet(layList.Url({
a: 'set_value',
q: {field: field, id: id, value: value}
}), function (res) {
layList.msg(res.msg);
});
},
}
//查询
layList.search('search',function(where){
layList.reload(where,true);
});
//快速编辑
layList.edit(function (obj) {
var id=obj.data.id,value=obj.value;
switch (obj.field) {
case 'sort':
if (value.trim()) {
if (isNaN(value.trim())) {
layList.msg('请输入正确的数字');
} else {
if (value.trim() < 0) {
layList.msg('排序不能小于0');
} else if (value.trim() > 9999) {
layList.msg('排序不能大于9999');
} else if (parseInt(value.trim()) != value.trim()) {
layList.msg('排序不能为小数');
} else {
action.set_value('sort', id, value.trim());
}
}
} else {
layList.msg('排序不能为空');
}
break;
}
});
//监听并执行排序
layList.sort(['id','sort'],true);
//点击事件绑定
layList.tool(function (event,data,obj) {
switch (event) {
case 'delstor':
var url=layList.U({a:'delete',q:{id:data.id}});
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
if(res.status == 200 && res.data.code == 200) {
$eb.$swal('success',res.data.msg);
obj.del();
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
});
})
break;
case 'open_image':
$eb.openImage(data.lecturer_head);
break;
case 'open_images':
$eb.openImage(data.image);
break;
case 'edit':
layer.open({
type: 2,
title: '编辑机构',
content: '{:Url('create')}?id=' + data.id,
area: ['100%', '100%'],
maxmin: true
});
break;
case 'reset_pwd':
if(!data.mer_id) return layList.msg('请先生成机构后台');
var url=layList.U({c:'institution.institution',a:'reset_pwd',q:{id:data.mer_id}});
$eb.$swal('delete',function(){
$eb.axios.post(url).then(function(res){
if(res.data.code == 200) {
window.location.reload();
$eb.$swal('success', res.data.msg);
}else
$eb.$swal('error',res.data.msg||'操作失败!');
});
},{'title':'您确定重置选择机构后台的密码吗?','text':'重置后的密码为1234567','confirm':'您确定重置密码吗?'});
break;
case 'modify_success':
if(!data.mer_id) return layList.msg('请先生成机构后台');
var url=layList.U({c:'institution.institution',a:'modify',q:{id:data.mer_id,status:1}});
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
if(res.status == 200 && res.data.code == 200) {
window.location.reload();
$eb.$swal('success',res.data.msg);
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
});
},{'title':'您确定要修改机构后台的状态吗?','text':'请谨慎操作!','confirm':'是的,我要修改'});
break;
case 'modify_error':
if(!data.mer_id) return layList.msg('请先生成机构后台');
var url=layList.U({c:'institution.institution',a:'modify',q:{id:data.mer_id,status:0}});
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
if(res.status == 200 && res.data.code == 200) {
window.location.reload();
$eb.$swal('success',res.data.msg);
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
});
},{'title':'您确定要修改机构后台的状态吗?','text':'请谨慎操作!','confirm':'是的,我要修改'});
break;
}
})
//是否显示快捷按钮操作
layList.switch('is_show',function (odj,value) {
if(odj.elem.checked==true){
layList.baseGet(layList.Url({a:'set_show',p:{is_show:1,id:value}}),function (res) {
layList.msg(res.msg);
});
}else{
layList.baseGet(layList.Url({a:'set_show',p:{is_show:0,id:value}}),function (res) {
layList.msg(res.msg);
});
}
});
$(document).on('click', '.layui-btn', function (event) {
var type = $(this).data('type');
var id = $(this).data('id');
if (type === 'mercreate') {
layer.open({
type: 2,
title: '生成机构后台',
content: "{:Url('mercreate')}?id=" + id,
area: ['800px', '700px'],
end: function () {
location.reload();
}
});
} else if (type === 'add') {
layer.open({
type: 2,
title: '添加机构',
content: "{:Url('create')}",
area: ['100%', '100%'],
maxmin: true,
end: function () {
location.reload();
}
});
} else if (type === 'refresh') {
layList.reload();
}
});
</script>
{/block}

@ -0,0 +1,133 @@
{extend name="public/container"}
{block name="content"}
<div class="layui-fluid">
<div class="layui-row layui-col-space15" >
<div class="layui-col-md12" id="app" v-cloak>
<div class="layui-card">
<div class="layui-card-header">搜索条件</div>
<div class="layui-card-body">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-col-lg12">
<label class="layui-form-label">创建时间:</label>
<div class="layui-input-block" data-type="data">
<button class="layui-btn layui-btn-normal layui-btn-sm" type="button" v-for="item in dataList" @click="setData(item)" :class="{'layui-btn-primary':where.data!=item.value}">{{item.name}}</button>
<button class="layui-btn layui-btn-sm" type="button" ref="time" @click="setData({value:'zd',is_zd:true})" :class="{'layui-btn-primary':where.data!='zd'}">自定义</button>
<button type="button" class="layui-btn layui-btn-sm layui-btn-primary" v-show="showtime==true" ref="date_time">{$year.0} - {$year.1}</button>
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<button class="layui-btn layui-btn-sm layui-btn-normal" type="button" @click="search"><i class="layui-icon layui-icon-search"></i>搜索</button>
<button class="layui-btn layui-btn-sm layui-btn-normal" type="button" @click="refresh"><i class="layui-icon layui-icon-refresh" ></i>刷新</button>
</div>
</div>
</div>
</form>
</div>
</div>
<!--end-->
<!-- 中间详细信息-->
<div :class="item.col!=undefined ? 'layui-col-sm'+item.col+' '+'layui-col-md'+item.col:'layui-col-sm6 layui-col-md4'" v-for="item in badge" v-if="item.count > 0">
<div class="layui-card">
<div class="layui-card-header">
{{item.name}}
<span class="layui-badge layuiadmin-badge" :class="item.background_color">{{item.field}}</span>
</div>
<div class="layui-card-body">
<p class="layuiadmin-big-font">{{item.count}}</p>
<p v-show="item.content!=undefined">
{{item.content}}
<span class="layuiadmin-span-color">{{item.sum}}<i :class="item.class"></i></span>
</p>
</div>
</div>
</div>
<!--enb-->
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">课程订单</div>
<div class="layui-card-body">
<table class="layui-hide" id="userList" lay-filter="userList"></table>
</div>
</div>
</div>
</div>
</div>
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
<script>
var lecturer_id={$lecturer_id};
layList.tableList('userList',"{:Url('lecturer_order_list')}?lecturer_id={$lecturer_id}",function () {
return [
{field: 'order_id', title: '订单号', sort: true,event:'order_id',width:'20%',templet:'#order_id'},
{field: 'nickname', title: '昵称',align: 'center'},
{field: 'title', title: '专题名称',width:'21%',align: 'center'},
{field: 'total_price', title: '专题价格',width:'10%',align: 'center'},
{field: 'pay_price', title: '实际支付',width:'10%',align: 'center'},
{field: 'pay_type_name', title: '支付方式',width:'10%',align: 'center'},
{field: 'status_name', title: '支付状态',templet:'#paid',width:'8%',align: 'center'},
];
});
require(['vue'],function(Vue) {
new Vue({
el: "#app",
data: {
badge: [],
dataList: [
{name: '全部', value: ''},
{name: '昨天', value: 'yesterday'},
{name: '今天', value: 'today'},
{name: '本周', value: 'week'},
{name: '本月', value: 'month'},
{name: '本季度', value: 'quarter'},
{name: '本年', value: 'year'},
],
where:{
data:''
},
showtime: false,
},
methods: {
setData:function(item){
var that=this;
if(item.is_zd==true){
that.showtime=true;
this.where.data=this.$refs.date_time.innerText;
}else{
this.showtime=false;
this.where.data=item.value;
}
},
getBadge:function() {
var that=this;
this.where.lecturer_id=lecturer_id;
layList.basePost(layList.Url({c:'special.lecturer',a:'getBadge'}),this.where,function (rem) {
that.badge=rem.data;
});
},
search:function () {
this.getBadge();
layList.reload(this.where,true);
},
refresh:function () {
window.location.reload();
}
},
mounted:function () {
var that=this;
that.getBadge();
layList.laydate.render({
elem:this.$refs.date_time,
trigger:'click',
range:true,
type: 'datetime',
change:function (value){
that.where.data=value;
}
});
}
})
});
</script>
{/block}

@ -0,0 +1,206 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
{include file="public/head"}
<title>{$title|default=''}</title>
<script src="{__PLUG_PATH}jquery-1.10.2.min.js"></script>
<script src="{__PLUG_PATH}reg-verify.js"></script>
</head>
<body>
<div id="form-add" class="mp-form" v-cloak>
<i-Form :model="formData" :rules="ruleValidate" :label-width="120">
<Form-Item label="机构后台账号" prop="account">
<i-input v-model="formData.account" placeholder="请输入机构后台账号(手机号)"></i-input>
</Form-Item>
<Form-Item label="绑定用户UID" prop="uid">
<i-input v-model="formData.uid" placeholder="请输入绑定的用户UID"></i-input>
</Form-Item>
<Form-Item label="机构后台密码(默认:123456)">
<i-input type="password" v-model="formData.pwd" placeholder="请输入机构后台密码"></i-input>
</Form-Item>
<Form-Item label="确认密码">
<i-input type="password" v-model="formData.conf_pwd" placeholder="请输入确认密码"></i-input>
</Form-Item>
<Form-Item label="机构后台名称">
<i-input v-model="formData.mer_name" placeholder="请输入机构后台名称"></i-input>
</Form-Item>
<Form-Item label="专题分成[5=5%]">
<i-input v-model="formData.mer_special_divide" placeholder="请输入专题分成[5=5%]"></i-input>
</Form-Item>
<Form-Item label="商品分成[5=5%]">
<i-input v-model="formData.mer_store_divide" placeholder="请输入商品分成[5=5%]"></i-input>
</Form-Item>
<Form-Item label="活动分成[5=5%]">
<i-input v-model="formData.mer_event_divide" placeholder="请输入活动分成[5=5%]"></i-input>
</Form-Item>
<Form-Item label="资料分成[5=5%]">
<i-input v-model="formData.mer_data_divide" placeholder="请输入资料分成[5=5%]"></i-input>
</Form-Item>
<Form-Item label="试卷分成[5=5%]">
<i-input v-model="formData.mer_test_divide" placeholder="请输入试卷分成[5=5%]"></i-input>
</Form-Item>
<Form-Item label="直播收益分成[5=5%]">
<i-input v-model="formData.gold_divide" placeholder="请输入直播收益分成[5=5%]"></i-input>
</Form-Item>
<Form-Item label="联系人">
<i-input v-model="formData.real_name" placeholder="请输入联系人"></i-input>
</Form-Item>
<Form-Item label="联系电话" prop="mer_phone">
<i-input v-model="formData.mer_phone" placeholder="请输入联系电话"></i-input>
</Form-Item>
<Form-Item label="联系地址">
<i-input v-model="formData.mer_address" placeholder="请输入联系地址"></i-input>
</Form-Item>
<Form-Item label="备注">
<i-input type="textarea" v-model="formData.mark" placeholder="请输入备注"></i-input>
</Form-Item>
<Form-Item label="来源">
<Radio-Group v-model="formData.is_source">
<Radio :label="1">入驻</Radio>
<Radio :label="0">平台</Radio>
</Radio-Group>
</Form-Item>
<Form-Item label="状态">
<Radio-Group v-model="formData.status">
<Radio :label="1">开启</Radio>
<Radio :label="0">关闭</Radio>
</Radio-Group>
</Form-Item>
<Form-Item label="是否审核">
<Radio-Group v-model="formData.is_audit">
<Radio :label="1">开启</Radio>
<Radio :label="0">关闭</Radio>
</Radio-Group>
</Form-Item>
<Form-Item label="可用权限" prop="checked_menus">
<Tree :data="menus" show-checkbox ref="tree"></Tree>
</Form-Item>
<Form-Item :class="'add-submit-item'">
<i-Button :type="'primary'" :html-type="'submit'" :size="'large'" :long="true" :loading="loading" @click.prevent="submit">提交</i-Button>
</Form-Item>
</i-Form>
</div>
<script>
$eb = parent._mpApi;
var lecturer = <?php echo $lecturer; ?> || [];
var menus = <?php echo $menus; ?> || [];
mpFrame.start(function(Vue){
new Vue({
el:'#form-add',
data:{
formData:{
account:'',
pwd:'123456',
conf_pwd:'123456',
mer_name:lecturer.lecturer_name,
mer_phone:'',
mark:'',
real_name:lecturer.lecturer_name,
mer_avatar:lecturer.lecturer_head,
mer_address:'',
status:0,
is_source:0,
is_audit:0,
mer_special_divide:0,
mer_store_divide:0,
mer_event_divide:0,
mer_data_divide:0,
mer_test_divide:0,
gold_divide:0,
checked_menus:[],
uid:0,
id:lecturer.id
},
menus:[],
loading:false,
ruleValidate: {
account: [
{ required: true, message: '请输入机构后台账号', trigger: 'blur' }
],
uid: [
{ required: true, message: '请输入绑定的用户ID', trigger: 'blur' }
],
mer_phone: [
{ required: true, message: '请输入联系电话', trigger: 'blur' }
],
checked_menus: [
{ required: true, message: '至少选择一项权限', trigger: 'blur' }
]
}
},
methods:{
tidyRes:function(){
var data = [];
menus.map((menu)=>{
data.push(this.initMenu(menu));
});
this.$set(this,'menus',data);
},
initMenu:function(menu){
var data = {};
data.title = menu.menu_name;
data.id = menu.id;
data.expand = false;
if(menu.child && menu.child.length >0){
data.children = [];
menu.child.map((child)=>{
data.children.push(this.initMenu(child));
})
}
return data;
},
submit:function(){
this.formData.checked_menus = [];
this.$refs.tree.getCheckedNodes().map((node)=>{
this.formData.checked_menus.push(node.id);
});
if(!this.formData.account){
return layer.msg('请输入机构后台账号');
}
if(!this.formData.uid){
return layer.msg('请输入绑定的用户ID');
}
if(this.formData.mer_phone){
if(!$reg.isPhone(this.formData.mer_phone)){
return layer.msg('请输入正确的手机号');
}
}else{
return layer.msg('请输入手机号');
}
if(!this.formData.checked_menus.length){
return layer.msg('请至少选择一项权限');
}
this.loading = true;
var that = this;
$.ajax({
url: '{$action}',
type: 'post',
data: this.formData,
dataType: 'json',
success: function (res) {
that.loading = false;
if (res.code === 200) {
layer.msg(res.msg || '操作成功', { icon: 1 }, function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
});
} else {
layer.msg(res.msg || '操作失败,请稍后再试', { icon: 5 });
}
},
error: function (err) {
that.loading = false;
layer.msg(err, { icon: 5 });
}
});
}
},
mounted:function(){
t = this;
this.tidyRes();
}
});
});
</script>
</body>

@ -113,7 +113,7 @@
{block name='script'}
<script>
var id={$id},lecturer=<?=isset($lecturer) ? $lecturer : []?>;
require(['vue','helper','zh-cn','request','plupload','aliyun-oss','OssUpload'],function(Vue,$h) {
require(['vue','helper','request','plupload','aliyun-oss','OssUpload'],function(Vue,$h) {
new Vue({
el: "#app",
directives: {

@ -0,0 +1,215 @@
{extend name="public/container"}
{block name='head_top'}
<style>
.layui-form-item .special-label i{display: inline-block;width: 18px;height: 18px;font-size: 18px;color: #fff;}
.layui-form-item .label-box p{line-height: inherit;}
.m-t-5{margin-top:5px;}
#app .layui-barrage-box{margin-bottom: 10px;margin-top: 10px;margin-left: 10px;border: 1px solid #0092DC;border-radius: 5px;cursor: pointer;position: relative;}
#app .layui-barrage-box.border-color{border-color: #0bb20c;}
#app .layui-barrage-box .del-text{position: absolute;top: 0;left: 0;background-color: rgba(0,0,0,0.5);color: #ffffff;width: 92%;text-align: center;}
#app .layui-barrage-box p{padding:5px 5px; }
#app .layui-empty-text{text-align: center;font-size: 18px;}
#app .layui-empty-text p{padding: 10px 10px;}
.layui-form-label{width:150px;}
.layui-input-block{margin-left:150px;}
</style>
{/block}
{block name="content"}
<div class="layui-fluid">
<div class="layui-row layui-col-space15" id="app" v-cloak>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body">
<form action="" class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label required">商品分类名称:</label>
<div class="layui-input-block">
<input type="text" name="name" v-model.trim="formData.name" autocomplete="off" placeholder="请输入商品分类名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">顶级商品分类:</label>
<div class="layui-input-block">
<select name="grade_id" v-model="formData.grade_id" lay-search="" lay-filter="grade_id">
<option v-for="item in cateList" :value="item.id">{{item.html}}{{item.name}}</option>
</select>
</div>
</div>
<div class="layui-form-item required">
<label class="layui-form-label">头像:(200*200)</label>
<div class="layui-input-block">
<div class="upload-image-box" v-if="formData.pic" >
<img :src="formData.pic" alt="">
<div class="mask" style="display: block">
<p>
<i class="fa fa-eye" @click="look(formData.pic)"></i>
<i class="fa fa-trash-o" @click="delect('pic')"></i>
</p>
</div>
</div>
<div class="upload-image" v-show="!formData.pic" @click="upload('pic')">
<div class="fiexd"><i class="fa fa-plus"></i></div>
<p>选择图片</p>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序:</label>
<div class="layui-input-block">
<input type="number" name="sort" v-model="formData.sort" autocomplete="off" class="layui-input" v-sort>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">状态:</label>
<div class="layui-input-inline">
<input type="checkbox" name="is_show" lay-skin="switch" lay-text="显示|隐藏" lay-filter="is_show" :checked="formData.is_show">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">是否推荐:</label>
<div class="layui-input-inline">
<input type="checkbox" name="is_recommend" lay-skin="switch" lay-text="是|否" lay-filter="is_recommend" :checked="formData.is_recommend">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal" type="button" @click="save">{{id ? '立即修改':'立即提交'}}</button>
<button class="layui-btn layui-btn-primary clone" type="button" @click="clone_form">取消</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="{__ADMIN_PATH}js/request.js"></script>
<script type="text/javascript" src="{__ADMIN_PATH}js/layuiList.js"></script>
<script type="text/javascript" src="{__MODULE_PATH}widget/OssUpload.js"></script>
{/block}
{block name='script'}
<script>
var id={$id},cate=<?=isset($cate) ? $cate : []?>;
require(['vue','helper','zh-cn','request','plupload','aliyun-oss','OssUpload'],function(Vue, $h) {
new Vue({
el: "#app",
directives: {
sort: {
bind: function (el, binding, vnode) {
var vm = vnode.context;
el.addEventListener('change', function () {
if (!this.value || this.value < 0) {
vm.formData.sort = 0;
} else if (this.value > 9999) {
vm.formData.sort = 9999;
} else {
vm.formData.sort = parseInt(this.value);
}
});
}
}
},
data: {
cateList:[],
formData:{
name:cate.name || '',
pic: cate.pic || '',
grade_id: cate.grade_id || 0,
is_show: Array.isArray(cate) ? 1 : cate.is_show,
is_recommend: Array.isArray(cate) ? 1 : cate.is_recommend,
sort:Number(cate.sort) || 0
}
},
methods:{
//查看图片
look: function (pic) {
parent.$eb.openImage(pic);
},
//上传图片
upload: function (key, count,index) {
this.event_index = index;
ossUpload.createFrame('请选择图片', {fodder: key, max_count: count === undefined ? 0 : count},{w:800,h:550});
},
clone_form: function () {
var that = this;
if (parseInt(id) == 0) {
parent.layer.closeAll();
}
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
},
//获取分类
get_subject_list: function () {
var that = this;
layList.baseGet(layList.U({a: 'add_cate_list'}), function (res) {
that.$set(that, 'cateList', res.data);
that.$nextTick(function () {
layList.form.render('select');
})
});
},
save:function () {
var that=this;
if(!that.formData.name) return layList.msg('请输入分类名称');
layList.loadFFF();
layList.basePost(layList.U({a:'save',q:{id:id}}),that.formData,function (res) {
layList.loadClear();
if(parseInt(id) == 0) {
layList.layer.confirm('添加成功,您要继续添加分类吗?', {
btn: ['继续添加', '立即提交'] //按钮
}, function (index) {
layList.layer.close(index);
}, function () {
parent.layer.closeAll();
});
}else{
layList.msg('修改成功',function () {
parent.layer.closeAll();
})
}
},function (res) {
layList.msg(res.msg);
layList.loadClear();
});
},
delect:function(key){
var that=this;
that.formData[key]='';
},
changeIMG: function (key, value, multiple) {
if (multiple) {
var that = this;
value.map(function (v) {
that.formData[key].push({pic: v, is_show: false});
});
this.$set(this.formData, key, this.formData[key]);
} else {
this.$set(this.formData, key, value);
}
},
},
mounted:function () {
var that=this;
this.$nextTick(function () {
layList.form.render();
});
window.changeIMG = that.changeIMG;
layList.select('grade_id', function (obj) {
if(id==obj.value){
layList.msg('上级分类不能是自己',function () {
location.reload();
});
}else{
that.formData.grade_id = obj.value;
}
});
that.get_subject_list();
}
})
})
</script>
{/block}

@ -0,0 +1,224 @@
{extend name="public/container"}
{block name="head"}
<style>
.single-line {
padding: 0;
border: none;
background: none;
}
</style>
{/block}
{block name="content"}
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header">商品分类</div>
<div class="layui-card-body">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">分类名称</label>
<div class="layui-input-inline">
<input type="text" name="name" class="layui-input" placeholder="请输入分类名称">
</div>
</div>
<div class="layui-inline">
<div class="layui-input-inline">
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
<i class="layui-icon">&#xe615;</i>搜索
</button>
</div>
</div>
</div>
</form>
</div>
<div class="layui-col-md12">
<div class="layui-btn-group">
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" data-type="add">
<i class="layui-icon">&#xe608;</i>添加商品分类
</button>
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" data-type="refresh">
<i class="layui-icon">&#xe669;</i>刷新
</button>
</div>
<table id="List" lay-filter="List"></table>
<script type="text/html" id="is_show">
<input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show' lay-text='显示|隐藏' {{ d.is_show == 1 ? 'checked' : '' }}>
</script>
<script type="text/html" id="act">
<button type="button" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit">
<i class="layui-icon">&#xe642;</i>编辑
</button>
<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">
<i class="layui-icon">&#xe640;</i>删除
</button>
</script>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="{__ADMIN_PATH}js/layuiList.js"></script>
{/block}
{block name="script"}
<script>
//实例化form
layList.form.render();
layui.use(['treeTable'], function () {
var $ = layui.jquery;
var treeTable = layui.treeTable;
var insTb = treeTable.render({
elem: '#List',
tree: {
iconIndex: 1,
isPidData: true,
idName: 'id',
pidName: 'grade_id',
getIcon: function (d) {
return '';
}
},
cols: [[
{field: 'id', title: '编号', align: 'center', width: '6%'},
{field: 'name', title: '分类名称'},
{field: 'sort', title: '排序', align: 'center'},
{field: 'is_show', title: '状态', templet:'#is_show', align: 'center'},
// {field: 'is_recommend', title: '推荐', templet:'#is_recommend', align: 'center'},
// {field: 'sum', title: '题目数量', align: 'center'},
{field: 'right', title: '操作', align:'center', toolbar:'#act'},
]],
reqData: function(data, callback) {
$.get('{:Url('get_category_list')}', function (res) {
if (res.code == 200) {
callback(res.data)
} else {
callback(res.msg)
}
}, 'json');
}
});
treeTable.on('tool(List)', function(obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'edit') {
$eb.createModalFrame('编辑', '{:Url('create')}?id=' + data.id, { h: 500, w: 800 });
} else if (layEvent === 'del') {
var url=layList.U({a:'delete',q:{id:data.id}});
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
if(res.status == 200 && res.data.code == 200) {
$eb.$swal('success',res.data.msg);
obj.del();
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
});
})
}
});
$('.layui-btn').on('click', function(event) {
var target = event.target;
var type = target.dataset.type;
if (type === 'add') {
$eb.createModalFrame('添加商品分类', '{:Url('create')}',{ h: 500 ,w: 800 });
} else if (type === 'refresh') {
insTb.refresh();
}
});
//查询
layList.search('search',function(where){
insTb = treeTable.render({
elem: '#List',
tree: {
iconIndex: 1,
isPidData: true,
idName: 'id',
pidName: 'grade_id',
getIcon: function (d) {
return '';
}
},
cols: [[
{field: 'id', title: '编号', align: 'center', width:'6%'},
{field: 'name', title: '分类名称'},
{field: 'sort', title: '排序', align: 'center'},
{field: 'is_show', title: '状态', templet:'#is_show', align: 'center'},
// {field: 'is_recommend', title: '推荐', templet:'#is_recommend', align: 'center'},
// {field: 'sum', title: '题目数量', align: 'center'},
{field: 'right', title: '操作', align:'center', toolbar:'#act'},
]],
reqData: function(data, callback) {
$.get('{:Url('get_category_list')}', where, function (res) {
if (res.code == 200) {
callback(res.data)
} else {
callback(res.msg)
}
}, 'json');
}
});
});
});
//自定义方法
var action= {
set_value: function (field, id, value) {
layList.baseGet(layList.Url({
a: 'set_value',
q: {field: field, id: id, value: value}
}), function (res) {
layList.msg(res.msg);
});
},
};
//点击事件绑定
layList.tool(function (event,data,obj) {
switch (event) {
case 'delstor':
var url=layList.U({a:'delete',q:{id:data.id}});
$eb.$swal('delete',function(){
$eb.axios.get(url).then(function(res){
if(res.status == 200 && res.data.code == 200) {
$eb.$swal('success',res.data.msg);
obj.del();
}else
return Promise.reject(res.data.msg || '删除失败')
}).catch(function(err){
$eb.$swal('error',err);
});
});
break;
}
});
//是否显示快捷按钮操作
layList.switch('is_show',function (odj,value) {
if(odj.elem.checked==true){
layList.baseGet(layList.Url({a:'set_show',p:{is_show:1,id:value}}),function (res) {
layList.msg(res.msg);
});
}else{
layList.baseGet(layList.Url({a:'set_show',p:{is_show:0,id:value}}),function (res) {
layList.msg(res.msg);
});
}
});
//是否显示快捷按钮操作
layList.switch('is_recommend',function (odj,value) {
if(odj.elem.checked==true){
layList.baseGet(layList.Url({a:'set_recommend',p:{is_recommend:1,id:value}}),function (res) {
layList.msg(res.msg);
});
}else{
layList.baseGet(layList.Url({a:'set_recommend',p:{is_recommend:0,id:value}}),function (res) {
layList.msg(res.msg);
});
}
});
</script>
{/block}

@ -242,3 +242,23 @@ function getversion()
}
return $version_arr;
}
/**
* 数据多层级
* @param array $data
* @param int $pid
* @return array
*/
function subTree(array $data, int $pid = 0) {
// 返回的结果
$arr = [];
foreach ($data as $val) {
// 给定的PID是当前记录的上级ID
if ($pid == $val['pid']) {
// 递归
$val['children'] = subTree($data,$val['id']);
$arr[] = $val;
}
}
return $arr;
}

@ -0,0 +1,269 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\controller;
use app\wap\model\user\User;
use service\JsonService;
use think\cache\driver\Redis;
use think\Cookie;
use think\exception\HttpException;
use think\response\Json;
use think\Session;
use think\Url;
use think\Db;
use think\Request;
use think\Log;
use app\wap\model\wap\Clearance as ClearanceModel;
use app\wap\model\wap\ClearanceSubject;
use app\wap\model\wap\UserStudy;
use app\wap\model\wap\ClearanceSubjectChapter;
use app\wap\model\wap\UserClearanceDetail;
use app\wap\model\wap\UserClearance;
use app\wap\model\special\SpecialSubject;
use app\wap\model\activity\EventRegistration;
use app\wap\model\special\Special as SpecialModel;
use app\wap\model\topic\TestPaper;
use service\GroupDataService;
use service\ClearanceService;
/**过关
* Class Special
* @package app\wap\controller
*/
class Clearance extends AuthController
{
/**
* 白名单
* */
public static function WhiteList()
{
return [
'grade_index'
];
}
/**
* 学习中心首页
* [grade_index description]
* @param integer $subject_id [description]
* @param string $city [description]
* @return [type] [description]
*/
public function grade_index($subject_id = 0, $city = "")
{
//背诵
$recite = ClearanceModel::where('type',1)->where('status',1)->order('sort DESC,id desc')->select();
//刷题
$brush_questions = ClearanceModel::where('type',2)->where('status',1)->order('sort DESC,id desc')->select();
$activity = EventRegistration::eventRegistrationList(1, 4, $city, $subject_id, 0);
$uid = $this->uid;
$where = [
'grade_id' => 1,
'subject_id' => $subject_id,
'search' => '',
'page' => 1,
'limit' => 4,
'type' => 0,
'special_type' => 3,
'is_member' => 0,
'uid' => $uid,
];
$video = SpecialModel::getSpecialList($where);
$where['special_type'] = 4;
$live = SpecialModel::getSpecialList($where);
$sql = "SELECT rank,days FROM (SELECT @rank:=@rank+1 as rank, user_id, days,cate_id FROM tc_user_clearance, (SELECT @rank:=0) r ORDER BY days DESC ) t WHERE user_id = ".$uid ." and cate_id = ".$subject_id;
$userClearance = Db::query($sql);
$sql = "SELECT rank,recite_num FROM (SELECT @rank:=@rank+1 as rank, user_id, recite_num,cate_id FROM tc_user_clearance, (SELECT @rank:=0) r ORDER BY recite_num DESC ) t WHERE user_id = ".$uid ." and cate_id = ".$subject_id;
$userClearance1 = Db::query($sql);
$sql = "SELECT rank,accuracy FROM (SELECT @rank:=@rank+1 as rank, user_id, accuracy,cate_id FROM tc_user_clearance, (SELECT @rank:=0) r ORDER BY accuracy DESC ) t WHERE user_id = ".$uid ." and cate_id = ".$subject_id;
$userClearance2 = Db::query($sql);
//用户进入学习中心展示哪个科目问题处理
if (!$subject_id) {
$userStudy = UserStudy::where('user_id', $this->uid)->find();
if ($userStudy) {
$subject_id = $userStudy['cate_id'];
} else {
$specialSubject = SpecialSubject::where('is_show', 1)->where('is_del', 0)->find();
$subject_id = $specialSubject['id'];
}
}
$specialSubject = SpecialSubject::where('id', $subject_id)->find();
$test_paper = TestPaper::where('id',$specialSubject['exam_id'])->field('id,title as name')->select();
// var_dump($res);
// var_dump($userClearance);
// exit();
$date = date("Y-m-d");
$recite_num = UserClearanceDetail::where('user_id', $this->uid)->where('type', 1)->group('section_id')->count();
$brush_question_num = UserClearanceDetail::where('user_id', $this->uid)->where('type', 2)->group('item_id')->count();
$total_num = $specialSubject['recite_num'] + $specialSubject['brush_question_num'];
return JsonService::successful('ok', [
'exam' => [
'grade_id' => $specialSubject['grade_id'],
'subject_id' => $subject_id,
'name' => $specialSubject['name'],
'date' => date("Y-m-d", $specialSubject['exam_time'] ?? 0),
'distance_exam_day' => ceil((($specialSubject['exam_time'] ?? 0) - time()) / 86400),
],
'user_study' => [
'days' => $userClearance[0]['days'] ?? 0,
'rank' => $userClearance[0]['rank'] ?? 0,
],
'user_recite' => [
'points' => $userClearance1[0]['recite_num'] ?? 0,
'rank' => $userClearance1[0]['rank'] ?? 0,
],
'user_brush_questions' => [
'accuracy' => ($userClearance2[0]['accuracy'] ?? 0)."%",
'rank' => $userClearance2[0]['rank'] ?? 0,
],
'user_clock_in' => [
'progress' => $total_num ? round(($recite_num + $brush_question_num) / $total_num ) : 0,
'list' => $this->dealClockInRecord("", 1, 2),
],
'exam_list' => $test_paper,
'banner' => GroupDataService::getData('mxtk_banner') ?: [],
'recite' => $recite,
'brush_questions' => $brush_questions,
'video' => $video,
'live' => $live,
'offline_courses' => $activity,
]);
}
/**
* 背诵过关
* [clearanceSubject description]
* @return [type] [description]
*/
public function clearanceSubject($recite_id = 0){
$recite_subject_list = ClearanceSubject::where('status',1)->where('recite_id',$recite_id)->order('sort DESC,id desc')->select();
return JsonService::successful('ok', $recite_subject_list);
}
/**
* 背诵章节
* [clearanceSubjectChapter description]
* @param integer $recite_subject_id [description]
* @return [type] [description]
*/
public function clearanceSubjectChapter($recite_subject_id = 0){
$chapters = ClearanceSubjectChapter::where('status',1)->where('recite_subject_id',$recite_subject_id)->order('sort DESC,id desc')->select();
$chapters = subTree($chapters->toArray());
return JsonService::successful('ok', $chapters);
}
/**
* 背诵接口
* [recite description]
* @param integer $chapter_id [description]
* @param integer $section_id [description]
* @return [type] [description]
*/
public function recite($chapter_id = 0, $section_id = 0){
//var_dump($this->uid);exit();
$info = ClearanceSubjectChapter::where('id', $section_id)->where('pid', $chapter_id)->find();
if (!$info) {
return JsonService::fail('背诵内容不存在');
}
$recite_subject = ClearanceSubject::where('id', $info['recite_subject_id'])->find();
if (!$recite_subject) {
return JsonService::fail('背诵内容不存在');
}
$recite = ClearanceModel::where('id', $recite_subject['recite_id'])->find();
if (!$recite) {
return JsonService::fail('背诵内容不存在');
}
ClearanceService::clockIn($this->uid, $recite['subject_id'], 1, $recite['id'], $recite_subject['id'], $chapter_id, $section_id);
return JsonService::successful('ok');
}
protected function dealClockInRecord($date = "", $page = 1, $limit = 10){
$date = $date ? $date : date("Y-m-d");
$list = UserClearanceDetail::where('user_id', $this->uid)->where('date', $date)->order("id desc")->page($page, $limit)->select();
foreach ($list as &$value) {
if ($value['type'] == 1) {
$chapter = ClearanceSubjectChapter::where('id',$value['chapter_id'])->find();
$section = ClearanceSubjectChapter::where('id',$value['section_id'])->find();
$value['name'] = ($chapter['name'] ?? "")." ".($section['name'] ?? "");
} else {
$test_paper = TestPaper::where('id',$value['item_id'])->field('id,title as name')->find();
$value['name'] = $test_paper['name'] ?? "";
$hour = round($value['use_time'] / 3600);
$result = $value['use_time'] % 3600;
$minute = round($result / 60);
$value['use_time'] = $hour."小时".$minute."分";
}
}
return $list;
}
public function getMonthRecord($month){
$start_time = strtotime("{$month}-01"); // 月份的开始时间
$end_time = strtotime("+1 month", $start_time) - 1; // 月份的结束时间
$list = UserClearanceDetail::where('user_id', $this->uid)->where('add_time', ">=", $start_time)->where('add_time', "<=", $end_time)->field('date')->group('date')->select();
return JsonService::successful('ok', $list);
}
/**
* 用户打卡记录
* [clockInRecord description]
* @return [type] [description]
*/
public function clockInRecord($date = "", $page = 1, $limit = 10){
$list = $this->dealClockInRecord($date, $page, $limit);
return JsonService::successful('ok', $list);
}
/**
* 学习项目切换
* [study description]
* @param integer $cate_id [description]
* @return [type] [description]
*/
public function study($subject_id = 0){
$info = UserStudy::where('user_id', $this->uid)->find();
if ($info) {
UserStudy::where('id', $info['id'])->update(['cate_id' => $subject_id, 'update_time' => time()]);
return JsonService::successful('ok');
}
UserStudy::create(['user_id' => $this->uid, 'cate_id' => $subject_id, 'add_time' => time(), 'update_time' => time()]);
return JsonService::successful('ok');
}
}

@ -22,6 +22,7 @@ use app\wap\model\special\SpecialSubject;
use app\wap\model\user\PhoneUser;
use app\wap\model\user\User;
use app\wap\model\wap\Search;
use app\wap\model\wap\City;
use service\GroupDataService;
use service\JsonService;
use service\SystemConfigService;
@ -34,7 +35,6 @@ use think\Cookie;
use think\Url;
use think\Db;
use service\JwtService;
/**首页控制器
* Class Index
* @package app\wap\controller
@ -65,10 +65,32 @@ class Index extends AuthController
'qcode_login',
'get_search_history',
'agreeMa',
'index_data'
'index_data',
'city_list',
];
}
/**
* @return mixed
*/
public function city_list($search = "")
{
$model = City::where('status', 1);
if ($search) {
$model = $model->where('name|first_letter', 'like', "%$search%");
}
$city_list = $model->select();
$hotList = [];
$list = [];
foreach ($city_list as $seq => &$item) {
if ($item['is_hot'] == 1) {
$hotList[] = $item;
}
$list[$item['first_letter']][] = $item;
}
$result = ['hotList'=>$hotList, "cityList"=>$list];
return JsonService::successful($result);
}
/**
* @return mixed
*/
@ -136,14 +158,14 @@ class Index extends AuthController
//获取推荐列表
$exists_recommend_reids = false;
$this->redisModel->HEXISTS($this->subjectUrl . "wap_index_has", "recommend_list");
if (!$exists_recommend_reids) {
//if (!$exists_recommend_reids) {
$is_member = isset($this->userInfo['level']) ? $this->userInfo['level'] : 0;
$recommend_list = json_encode(Recommend::getContentRecommend($this->uid, $is_member));
$this->redisModel->hset($this->subjectUrl . "wap_index_has", "recommend_list", $recommend_list);
$this->redisModel->expire($this->subjectUrl . "wap_index_has", 120);
} else {
$recommend_list = $this->redisModel->hget($this->subjectUrl . "wap_index_has", "recommend_list");
}
// } else {
// $recommend_list = $this->redisModel->hget($this->subjectUrl . "wap_index_has", "recommend_list");
// }
} catch (\Exception $e) {
}

@ -32,6 +32,8 @@ use app\wap\model\user\UserBill;
use app\wap\model\user\UserExtract;
use app\wap\model\user\UserAddress;
use app\wap\model\user\UserSign;
use app\wap\model\user\Message;
use app\wap\model\user\MessageType;
use service\CacheService;
use service\GroupDataService;
use service\JsonService;
@ -44,7 +46,8 @@ use think\Url;
use app\wap\model\recommend\Recommend;
use app\wap\model\merchant\Merchant as MerchantModel;
use app\wap\model\institution\Institution as InstitutionModel;
use app\wap\model\wap\Feedback;
use app\wap\model\wap\Helpcenter;
/**my 控制器
* Class My
* @package app\wap\controller
@ -62,10 +65,43 @@ class My extends AuthController
'about_us',
'getPersonalCenterMenu',
'questionModule',
'base_data_api'
'base_data_api',
'helpcenter',
];
}
/**
* 未读消息总数
* [unReadMsgNum description]
* @return [type] [description]
*/
public function unReadMsgNum(){
$unReadMsgNum = Message::where('user_id', $this->uid)->where('is_read', 0)->count();
return JsonService::successful(['unReadMsgNum' => $unReadMsgNum]);
}
/**
* 消息列表
* [messageList description]
* @param integer $page [description]
* @param integer $limit [description]
* @return [type] [description]
*/
public function messageList($page = 1, $limit = 10){
$list = Message::where('user_id', $this->uid)->page($page, $limit)->select()->toArray();
if (!$list) {
return JsonService::successful($list);
}
$message_types = array_column($list, "message_type");
$types = MessageType::whereIn('id', $message_types)->select()->toArray();
$types = array_column($types, null, "id");
foreach ($list as &$value) {
$value['message_types'] = $types[$value['message_type']] ?? [];
}
return JsonService::successful($list);
}
public function setReaded($id = 0){
Message::where('id', $id)->update(['is_read' => 1,'update_time' => time()]);
return JsonService::successful("ok");
}
/**
* 退出手机号码登录
*/
@ -572,7 +608,37 @@ class My extends AuthController
'content' => get_config_content('about_us'),
]);
}
/**
* 帮助中心
* [helpcenter description]
* @return [type] [description]
*/
public function helpcenter(){
$list = Helpcenter::where('status', 1)->order('sort DESC,add_time DESC')->select();
return JsonService::successful([
'helpcenter' => $list
]);
}
/**
* 提交反馈
* [addfeedback description]
* @return [type] [description]
*/
public function addfeedback(){
$data = UtilService::postMore([
['content', ''],
], $this->request);
$inData = [
'content' => $data['content'],
'user_id' => $this->uid,
'add_time' => time(),
];
if (Feedback::create($inData)){
return JsonService::successful('提交成功');
} else {
return JsonService::fail('提交失败');
}
}
public function getUserGoldBill()
{
$user_info = $this->userInfo;

@ -121,10 +121,25 @@ class Special extends AuthController
'data_details',
'exchange',
'question_index',
'getSpecialSubject',
'special_validity'
];
}
/**获取分类 new
* @throws \think\exception\DbException
*/
public function getSpecialSubject()
{
$category = SpecialSubject::with('children')->where(['is_show' => 1, 'is_del' => 0])->order('sort desc,id desc')->where('grade_id', 0)->select();
$recommend = SpecialSubject::where(['is_show' => 1, 'is_del' => 0, 'is_recommend' => 1])->where('grade_id', 'neq', 0)->order('sort desc,id desc')->select();
return JsonService::successful([
'category_list' => $category,
'recommend' => $recommend
]);
}
/**获取视频上传地址和凭证
* @param string $videoId
* @param int $type
@ -177,6 +192,7 @@ class Special extends AuthController
if ($order->total_num == $order->gift_count) return JsonService::fail('礼物已被领取完');
}
$special = SpecialModel::getOneSpecial($this->uid, $id);
if ($special === false) return JsonService::fail(SpecialModel::getErrorInfo('无法访问'));
$is_member = isset($this->userInfo['level']) ? $this->userInfo['level'] : 0;
if (!isset($special['special'])) $this->failed('专题信息未获得', Url::build('index/index'));
@ -1833,10 +1849,11 @@ class Special extends AuthController
*/
public function grade_index()
{
$category = SpecialSubject::where(['is_show' => 1, 'is_del' => 0])->order('sort desc,id desc')->where('grade_id', 1)->limit(7)->select();
$category = SpecialSubject::where(['is_show' => 1, 'is_del' => 0])->order('sort desc,id desc')->where('is_recommend', 1)->limit(7)->select();
$is_member = isset($this->userInfo['level']) ? $this->userInfo['level'] : 0;
$my = SpecialModel::getMyGradeList(1, 4, $this->uid, $is_member, 0);
$offlineCourse = (new \app\wap\model\special\OfflineCourse)->order('id desc')->limit(4)->select();
//$offlineCourse = (new \app\wap\model\special\OfflineCourse)->order('id desc')->limit(4)->select();
$activity = EventRegistration::eventRegistrationList(1, 4, "", 0 ,0);
$uid = $this->uid;
$hot = SpecialModel::getSpecialList(['grade_id' => 0, 'subject_id' => 0, 'search' => '', 'page' => 1, 'limit' => 4, 'type' => 0, 'uid' => $uid, 'is_hot' => 1]);
@ -1846,7 +1863,7 @@ class Special extends AuthController
'category_list' => $category->toArray(),
'my_course' => $my['list'],
'hot_course' => $hot,
'offline_courses' => $offlineCourse,
'offline_courses' => $activity,
]);
}
@ -2330,8 +2347,12 @@ class Special extends AuthController
*/
public function getOrderPrice($cartId = '', $cateNum = 1)
{
$res = StoreCart::changeUserCartNum($cartId, $cateNum, $this->uid);
if (!$res) return JsonService::fail('商品数量修改失败!');
$cartIds = explode(",", $cartId);
$cateNums = explode(",", $cateNum);
foreach ($cartIds as $seq => $value) {
$res = StoreCart::changeUserCartNum($value, $cateNums[$seq] ?? 1, $this->uid);
if (!$res) return JsonService::fail('商品数量修改失败!');
}
$user = $this->userInfo;
$cartGroup = StoreCart::getUserProductCartList($this->uid, $cartId, 1, $user['level']);
$vip_price_subtract = bcmul($cartGroup['valid'][0]['productInfo']['vip_price'], $cateNum, 2);

@ -523,21 +523,26 @@ class Topic extends AuthController
*/
public function specialTestPaper()
{
list($special_id, $type) = UtilService::PostMore([
list($special_id, $type, $relationship) = UtilService::PostMore([
['special_id', 0],
['type', 1],
['type', 1],//试卷类型 1练习2考试
['relationship', 1],
], $this->request, true);
if (!$special_id) return JsonService::fail('缺少参数,无法访问');
$data = [];
switch ($type) {
case 1:
$relationship = 1;
$relationship1 = 1;
break;
case 2:
$relationship = 2;
$relationship1 = 2;
break;
}
$test_ids = Relation::setWhere($relationship, $special_id)->column('relation_id');
//兼容刷题过关的试卷
if ($relationship > 2) {
$relationship1 = $relationship;
}
$test_ids = Relation::setWhere($relationship1, $special_id)->column('relation_id');
if (count($test_ids)) {
$data = TestPaper::PreExercisesWhere()->where('type', $type)->where('id', 'in', $test_ids)->order('sort desc,id desc')->select();
$data = count($data) > 0 ? $data->toArray() : [];

@ -28,15 +28,36 @@ class EventRegistration extends ModelBasic
* @param int $limit
* @return array
*/
public static function eventRegistrationList($page = 1, $limit = 10)
public static function eventRegistrationList($page = 1, $limit = 10, $city = "", $subject_id = 0, $type = "")
{
$list = self::PreWhere()->order('sort DESC,add_time DESC')->page((int)$page, (int)$limit)->select();
$where = [];
if ($city) {
$where['city'] = ['like',"%".$city."%"];
}
if ($subject_id) {
$where['subject_id'] = $subject_id;
}
if ($type !== "") {
$where['type'] = $type;
}
$list = self::PreWhere()->where($where)->order('sort DESC,add_time DESC')->page((int)$page, (int)$limit)->select();
$list = count($list) > 0 ? $list->toArray() : [];
foreach ($list as &$v) {
$v = self::singleActivity($v);
$start_time = date('y/m/d H:i', $v['start_time']);
$end_time = date('y/m/d H:i', $v['end_time']);
$v['time'] = $start_time . '~' . $end_time;
$v['baoming'] = $start_time . '~' . $end_time;
$v['start'] = date('y/m/d H:i', $v['signup_start_time']) . '~' . date('y/m/d H:i', $v['signup_end_time']);
$activity_status = 0;
if ($v['start_time'] < time()) {
$activity_status = 0;
} elseif ($v['start_time'] > time() && $v['end_time'] > time()) {
$activity_status = 1;
} elseif ($v['end_time'] < time()) {
$activity_status = 2;
}
$v['activity_status'] = $activity_status;
$v['count'] = EventSignUp::signUpCount($v['id']);
}
return $list;

@ -53,7 +53,7 @@ class InstitutionFollow extends ModelBasic
$data = self::alias('f')->where(['f.uid' => $uid, 'f.is_follow' => 1,'l.is_show' => 1, 'l.is_del' => 0])
->join('Lecturer l', 'f.mer_id=l.mer_id')
->where('l.mer_id','>',0)->page((int)$page, (int)$limit)
->order('f.follow_time desc')->field('f.uid,f.mer_id,f.is_follow,l.id,l.mer_id,l.is_show,l.is_del,l.lecturer_name,l.lecturer_head,l.label,l.introduction,l.study,l.curriculum')
->order('f.follow_time desc')->field('f.uid,f.mer_id,f.is_follow,l.id,l.mer_id,l.is_show,l.is_del,l.lecturer_name,l.lecturer_head,l.label,l.introduction,l.study,l.curriculum,l.explain')
->select();
$data = count($data) > 0 ? $data->toArray() : [];
return $data;

@ -53,7 +53,7 @@ class MerchantFollow extends ModelBasic
$data = self::alias('f')->where(['f.uid' => $uid, 'f.is_follow' => 1,'l.is_show' => 1, 'l.is_del' => 0])
->join('Lecturer l', 'f.mer_id=l.mer_id')
->where('l.mer_id','>',0)->page((int)$page, (int)$limit)
->order('f.follow_time desc')->field('f.uid,f.mer_id,f.is_follow,l.id,l.mer_id,l.is_show,l.is_del,l.lecturer_name,l.lecturer_head,l.label,l.introduction,l.study,l.curriculum')
->order('f.follow_time desc')->field('f.uid,f.mer_id,f.is_follow,l.id,l.mer_id,l.is_show,l.is_del,l.lecturer_name,l.lecturer_head,l.label,l.introduction,l.study,l.curriculum,l.explain')
->select();
$data = count($data) > 0 ? $data->toArray() : [];
return $data;

@ -82,7 +82,7 @@ class StoreCart extends ModelBasic
*/
public static function removeUserCart($uid, $ids)
{
return self::where('uid', $uid)->where('id', 'IN', $ids)->update(['is_del' => 1]);
return self::where('uid', $uid)->where('id', 'IN', explode(",", $ids))->update(['is_del' => 1]);
}
/**获取购物车数量

@ -18,6 +18,9 @@ use app\wap\model\topic\ExaminationWrongBank;
use app\wap\model\topic\TestPaper;
use app\wap\model\topic\TestPaperObtain;
use app\admin\model\questions\TestPaperScoreGrade;
use app\wap\model\wap\Clearance;
use service\ClearanceService;
/**
* 用户考试记录 Model
@ -76,10 +79,18 @@ class ExaminationRecord extends ModelBasic
$array['yes_questions'] = $yes_questions;
$array['wrong_question'] = $wrong_question;
$array['is_submit'] = 1;
$array['end_time'] = time();
$array['duration'] = $data['duration'];
$array['score'] = ExaminationTestRecord::where(['e_id' => $record['id'], 'type' => $record['type'], 'is_correct' => 2])->sum('score');
$array['grade'] = TestPaperScoreGrade::getTestPaperScoreGrade($record['test_id'], $array['score']);
$res = self::edit($array, $record['id']);
//记录打卡记录
$clearance = Clearance::where('id', $data['special_id'] ?? 0)->find();
if ($clearance) {
ClearanceService::clockIn($uid, $clearance['subject_id'], 2, $clearance['id'], $data['examination_id'], 0, 0, $array['score'], $array['accuracy'], $array['end_time'] - $record['start_time']);
}
if (!$res) return self::setErrorInfo('记录修改错误!');
$res1 = ExaminationWrongBank::addWrongBank($record['id'], $record['test_id'], $record['type'], $uid);
$res2 = TestPaper::PreExercisesWhere()->where(['id' => $record['test_id']])->setInc('answer');

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\user;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class Message extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\user;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class MessageType extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class City extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class Clearance extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class ClearanceSubject extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class ClearanceSubjectChapter extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,33 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class Feedback extends ModelBasic
{
use ModelTrait;
public static function cidByArticleList($cid, $first, $limit, $field = '*')
{
$model = Db::name('article');
if ($cid) $model->where("CONCAT(',',cid,',') LIKE '%,$cid,%'", 'exp');
return $model->field($field)->where('status', 1)->where('hide', 0)->order('sort DESC,add_time DESC')->limit($first, $limit)->select();
}
}

@ -0,0 +1,33 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class Helpcenter extends ModelBasic
{
use ModelTrait;
public static function cidByArticleList($cid, $first, $limit, $field = '*')
{
$model = Db::name('article');
if ($cid) $model->where("CONCAT(',',cid,',') LIKE '%,$cid,%'", 'exp');
return $model->field($field)->where('status', 1)->where('hide', 0)->order('sort DESC,add_time DESC')->limit($first, $limit)->select();
}
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class UserClearance extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class UserClearanceDetail extends ModelBasic
{
use ModelTrait;
}

@ -0,0 +1,26 @@
<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\wap\model\wap;
use think\Db;
use traits\ModelTrait;
use basic\ModelBasic;
/**新闻分类
* Class ArticleCategory
* @package app\wap\model
*/
class UserStudy extends ModelBasic
{
use ModelTrait;
}

@ -265,9 +265,9 @@
<button v-show="navActive === 1" class="btn barrage-btn" type="button" @click="barrage = !barrage">
<img :src="barrage ? '{__WAP_PATH}zsff/images/barrage1.png' : '{__WAP_PATH}zsff/images/barrage2.png'">
</button>
<button v-show="giftList.length" class="btn" type="button" @click="giftShow = true">
<!-- <button v-show="giftList.length" class="btn" type="button" @click="giftShow = true">
<img class="img" src="{__WAP_PATH}zsff/images/gift1.png">
</button>
</button> -->
</div>
<!-- 礼物特效 -->
<div v-if="giftFloat" :class="{ on: giftFloat }" class="gift-float">

@ -0,0 +1,87 @@
<?php
namespace service;
use app\wap\model\wap\Clearance;
use app\wap\model\wap\ClearanceSubject;
use app\wap\model\wap\ClearanceSubjectChapter;
use app\wap\model\wap\UserClearance;
use app\wap\model\wap\UserClearanceDetail;
class ClearanceService
{
/**
* 用户打卡记录
* [clockIn description]
* @param [type] $user_id [description]
* @param [type] $type [description]
* @param [type] $clearance_id [description]
* @param integer $item_id [description]
* @param integer $chapter_id [description]
* @param integer $section_id [description]
* @param integer $score [description]
* @return [type] [description]
*/
public static function clockIn($user_id, $cate_id, $type, $clearance_id, $item_id = 0, $chapter_id = 0, $section_id = 0, $score = 0, $accuracy = 0, $use_time = 0){
$date = date("Y-m-d");
//如果当前背诵过了
if ($type == 1) {
$detail = UserClearanceDetail::where('user_id',$user_id)
->where('cate_id', $cate_id)
->where('clearance_id', $clearance_id)
->where('item_id', $item_id)
->where('chapter_id', $chapter_id)
->where('section_id', $section_id)
->where('date',$date)->find();
if ($detail) {
return true;
}
}
//写入打卡记录
$clearance_data = [
'user_id' => $user_id,
'cate_id' => $cate_id,
'type' => $type,
'clearance_id' => $clearance_id,
'item_id' => $item_id,
'chapter_id' => $chapter_id,
'section_id' => $section_id,
'score' => $score,
'accuracy' => $accuracy,
'use_time' => $use_time,
'add_time' => time(),
'date' => $date,
];
UserClearanceDetail::create($clearance_data);
//判断是否写了总记录
$info = UserClearance::where('user_id',$user_id)->where('cate_id', $cate_id)->find();
if (!$info) {
$userClearance = [
'user_id' => $user_id,
'cate_id' => $cate_id,
'add_time' => time(),
'days' => 1,
'recite_num' => 1,
'accuracy' => $accuracy,
];
UserClearance::create($userClearance);
} else {
$detail = UserClearanceDetail::where('user_id',$user_id)->where('cate_id', $cate_id)->where('date',$date)->find();
//当前没打卡,天数+1
if (!$detail) {
$update_data['days'] = $info['days'] + 1;
}
//背诵
if ($type == 1) {
$update_data['recite_num'] = $info['recite_num'] + 1;
}
if ($type == 2) {
$update_data['accuracy'] = $accuracy;//round(($info['accuracy'] + $accuracy) / 2);
}
UserClearance::where('id', $info['id'])->update($update_data);
}
}
}

@ -0,0 +1,18 @@
<?php
namespace service;
use app\wap\model\user\Message;
use app\wap\model\user\MessageType;
class MessageService
{
public static function sendmsg($user_id, $message_type = 1, $content = ""){
$msg = [
'user_id' => $user_id,
'message_type' => $message_type,
'content' => $content,
'add_time' => time(),
];
Message::create($msg);
return true;
}
}
Loading…
Cancel
Save