request); if ($gid) $where['gid'] = $gid; $this->assign('where', $where); $this->assign(compact("gid")); $this->assign(GroupModel::getField($gid)); $this->assign(GroupDataModel::getList($where)); return $this->fetch(); } /** * 显示创建资源表单页. * @return \think\Response */ public function create($gid) { $Fields = GroupModel::getField($gid); $f = array(); foreach ($Fields["fields"] as $key => $value) { $info = []; if (isset($value["param"])) { $value["param"] = str_replace("\r\n", "\n", $value["param"]);//防止不兼容 $params = explode("\n", $value["param"]); if (is_array($params) && !empty($params)) { foreach ($params as $index => $v) { $vl = explode('=>', $v); if (isset($vl[0]) && isset($vl[1])) { $info[$index]["value"] = $vl[0]; $info[$index]["label"] = $vl[1]; } } } } switch ($value["type"]) { case 'input': $f[] = Form::input($value["title"], $value["name"]); break; case 'textarea': $f[] = Form::input($value["title"], $value["name"])->type('textarea')->placeholder($value['param']); break; case 'radio': $f[] = Form::radio($value["title"], $value["name"], $info[0]["value"] ?? '')->options($info); break; case 'checkbox': $f[] = Form::checkbox($value["title"], $value["name"], $info[0] ?? '')->options($info); break; case 'select': $f[] = Form::select($value["title"], $value["name"], $info[0] ?? '')->options($info)->multiple(false); break; case 'upload': $f[] = Form::frameImageOne($value["title"], $value["name"], Url::buildUrl('admin/widget.images/index', array('fodder' => $value["title"], 'big' => 1)))->icon('image')->width('100%')->height('500px'); break; case 'uploads': $f[] = Form::frameImages($value["title"], $value["name"], Url::buildUrl('admin/widget.images/index', array('fodder' => $value["title"], 'big' => 1)))->maxLength(5)->icon('images')->width('100%')->height('500px')->spin(0); break; case 'number': $f[] = Form::number($value["title"], $value["name"])->precision('int'); break; default: $f[] = Form::input($value["title"], $value["name"]); break; } } $f[] = Form::number('sort', '排序', 1); $f[] = Form::radio('status', '状态', 1)->options([['value' => 1, 'label' => '显示'], ['value' => 2, 'label' => '隐藏']]); $form = Form::make_post_form('添加数据', $f, Url::buildUrl('save', compact('gid')), 2); $this->assign(compact('form')); return $this->fetch('public/form-builder'); } /** * 保存新建的资源 * * @param \think\Request $request * @return \think\Response */ public function save($gid) { $Fields = GroupModel::getField($gid); $params = request()->post(); $config_name = GroupModel::get(['id' => $gid])['config_name']; //秒杀时间短判断 if ($config_name == 'routine_seckill_time') { if ($params['time'] == '') { return Json::fail('请输入开始时间'); } if (!$params['continued']) { return Json::fail('请输入持续时间'); } if (!preg_match('/^(\d|1\d|2[0-3])$/', $params['time'])) { return Json::fail('请输入0-23点之前的整点数'); } if (!preg_match('/^([1-9]|1\d|2[0-4])$/', $params['continued'])) { return Json::fail('请输入1-24点之前的持续时间'); } if (($params['time'] + $params['continued']) > 24) { return Json::fail('开始时间+持续时间不能大于24小时'); } $list = GroupDataModel::where('gid', $gid)->column('value', 'id'); $times = $time = []; foreach ($list as $item) { $info = json_decode($item, true); for ($i = 0; $i < $info['continued']['value']; $i++) { $times[] = $info['time']['value'] + $i; } } for ($i = 0; $i < $params['continued']; $i++) { $time[] = $params['time'] + $i; } foreach ($time as $v) { if (in_array($v, $times)) return Json::fail('时段已占用'); } } //活动区域图片最多为3个 if ($config_name == 'routine_home_activity') { if (GroupDataModel::where('gid', $gid)->count() >= 3) return Json::fail('获取区域图片不能大于三个'); } foreach ($params as $key => $param) { foreach ($Fields['fields'] as $index => $field) { if ($key == $field["title"]) { if ($param == "") return Json::fail($field["name"] . "不能为空!"); else { $value[$key]["type"] = $field["type"]; $value[$key]["value"] = $param; } } } } $data = array("gid" => $gid, "add_time" => time(), "value" => htmlspecialchars_decode(json_encode($value)), "sort" => $params["sort"], "status" => $params["status"]); GroupDataModel::create($data); CacheService::clear(); return Json::successful('添加数据成功!'); } /** * 显示指定的资源 * * @param int $id * @return \think\Response */ public function read($id) { // } /** * 显示编辑资源表单页. * * @param int $id * @return \think\Response */ public function edit($gid, $id) { $GroupData = GroupDataModel::get($id); $GroupDataValue = json_decode($GroupData["value"], true); $Fields = GroupModel::getField($gid); $f = array(); if (!isset($Fields['fields'])) return $this->failed('数据解析失败!'); foreach ($Fields['fields'] as $key => $value) { $info = []; if (isset($value["param"])) { $value["param"] = str_replace("\r\n", "\n", $value["param"]);//防止不兼容 $params = explode("\n", $value["param"]); if (is_array($params) && !empty($params)) { foreach ($params as $index => $v) { $vl = explode('=>', $v); if (isset($vl[0]) && isset($vl[1])) { $info[$index]["value"] = $vl[0]; $info[$index]["label"] = $vl[1]; } } } } $fvalue = isset($GroupDataValue[$value['title']]['value']) ? $GroupDataValue[$value['title']]['value'] : ''; switch ($value['type']) { case 'input': $f[] = Form::input($value['title'], $value['name'], $fvalue); break; case 'textarea': $f[] = Form::input($value['title'], $value['name'], $fvalue)->type('textarea'); break; case 'radio': $f[] = Form::radio($value['title'], $value['name'], $fvalue)->options($info); break; case 'checkbox': $f[] = Form::checkbox($value['title'], $value['name'], $fvalue)->options($info); break; case 'upload': if (!empty($fvalue)) { $image = is_string($fvalue) ? $fvalue : $fvalue[0]; } else { $image = ''; } $f[] = Form::frameImageOne($value['title'], $value['name'], Url::buildUrl('admin/widget.images/index', array('fodder' => $value['title'], 'big' => 1)), $image)->icon('image')->width('100%')->height('500px'); break; case 'uploads': $images = !empty($fvalue) ? $fvalue : []; $f[] = Form::frameImages($value['title'], $value['name'], Url::buildUrl('admin/widget.images/index', array('fodder' => $value['title'], 'big' => 1)), $images)->maxLength(5)->icon('images')->width('100%')->height('500px')->spin(0); break; case 'select': $f[] = Form::select($value['title'], $value['name'], $fvalue)->setOptions($info); break; case 'number': $f[] = Form::number($value["title"], $value["name"])->precision('int'); break; default: $f[] = Form::input($value['title'], $value['name'], $fvalue); break; } } $f[] = Form::number('sort', '排序', $GroupData["sort"]); $f[] = Form::radio('status', '状态', $GroupData["status"])->options([['value' => 1, 'label' => '显示'], ['value' => 2, 'label' => '隐藏']]); $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('update', compact('id')), 2); $this->assign(compact('form')); return $this->fetch('public/form-builder'); } /** * 保存更新的资源 * * @param $id */ public function update($id) { $GroupData = GroupDataModel::get($id); $group = GroupModel::where('id', $GroupData['gid'])->find(); if (!$GroupData || !$group) { return Json::fail('请检查配置'); } $params = request()->post(); //秒杀 if ($group['config_name'] == 'routine_seckill_time') { if ($params['time'] == '') { return Json::fail('请输入开始时间'); } if (!$params['continued']) { return Json::fail('请输入持续时间'); } if (!preg_match('/^(\d|1\d|2[0-3])$/', $params['time'])) { return Json::fail('请输入0-23点之前的整点数'); } if (!preg_match('/^([1-9]|1\d|2[0-4])$/', $params['continued'])) { return Json::fail('请输入1-24点之前的持续时间'); } if (($params['time'] + $params['continued']) > 24) { return Json::fail('开始时间+持续时间不能大于24小时'); } $list = GroupDataModel::where('gid', $GroupData['gid'])->column('value', 'id'); $times = $time = []; if ($id) unset($list[$id]); foreach ($list as $item) { $info = json_decode($item, true); for ($i = 0; $i < $info['continued']['value']; $i++) { $times[] = $info['time']['value'] + $i; } } for ($i = 0; $i < $params['continued']; $i++) { $time[] = $params['time'] + $i; } foreach ($time as $v) { if (in_array($v, $times)) return Json::fail('时段已占用'); } } $Fields = json_decode($group['fields'], true) ?? []; foreach ($params as $key => $param) { foreach ($Fields as $index => $field) { if ($key == $field["title"]) { if (trim($param) == '') return Json::fail($field["name"] . "不能为空!"); else { $value[$key]["type"] = $field["type"]; $value[$key]["value"] = $param; } } } } $data = array("value" => htmlspecialchars_decode(json_encode($value)), "sort" => $params["sort"], "status" => $params["status"]); GroupDataModel::edit($data, $id); CacheService::clear(); return Json::successful('修改成功!'); } /** * 删除指定资源 * * @param int $id * @return \think\Response */ public function delete($id) { $gid = GroupDataModel::where('id', $id)->value('gid'); $config_name = GroupModel::where('id', $gid)->value('config_name'); if ($config_name == 'routine_seckill_time') { if (!StoreSeckill::where('is_del', 0)->find()) { if (!GroupDataModel::del($id)) return Json::fail(GroupDataModel::getErrorInfo('删除失败,请稍候再试!')); else { CacheService::clear(); return Json::successful('删除成功!'); } } else { return Json::fail('有秒杀活动,不能删除秒杀时段,请先删除活动'); } } else { if (!GroupDataModel::del($id)) return Json::fail(GroupDataModel::getErrorInfo('删除失败,请稍候再试!')); else { CacheService::clear(); return Json::successful('删除成功!'); } } } }