完成内容管理

This commit is contained in:
augushong
2020-04-18 16:01:27 +08:00
parent dc15576de8
commit 84c1a51b86
18 changed files with 1548 additions and 253 deletions

View File

@@ -125,7 +125,10 @@ abstract class BaseController
if(\request()->isAjax()){
$data['jump_to_url'] = (string)$jump_to_url;
throw new HttpResponseException(json_message($data,0,$msg));
if($code == 200){
$code = 0;
}
throw new HttpResponseException(json_message($data,$code,$msg));
}
View::assign($data);
@@ -154,7 +157,10 @@ abstract class BaseController
if(\request()->isAjax()){
$data['jump_to_url'] = (string)$jump_to_url;
throw new HttpResponseException(json_message($data,0,$msg));
if($code == 200){
$code = 0;
}
throw new HttpResponseException(json_message($data,$code,$msg));
}
View::assign($data);

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace app\admin\controller;
use app\model\Category as ModelCategory;
use think\facade\View;
use think\Request;
@@ -18,6 +19,14 @@ class Category extends Common
{
//
$list = ModelCategory::getListLevel();
if($this->request->isAjax()){
return json_message($list);
}
View::assign('list',$list);
return View::fetch();
}
@@ -30,6 +39,10 @@ class Category extends Common
{
//
$list = ModelCategory::getListLevel();
View::assign('list_category',$list);
return View::fetch();
}
@@ -42,6 +55,33 @@ class Category extends Common
public function save(Request $request)
{
//
$post_data = $request->post();
if(empty($post_data['title'])){
return $this->error('标题不能为空',null,500);
}
$model_category = ModelCategory::where('title',$post_data['title'])
->where('pid',$post_data['pid'])
->find();
if(!empty($model_category)){
$this->error('相同名称相同级别不能出现两次',null,500);
}
if($post_data['pid'] != 0){
$model_parent_category = ModelCategory::where('id',$post_data['pid'])->find();
$post_data['level'] = $model_parent_category->level + 1;
}
ModelCategory::create($post_data);
return $this->success('添加成功','index');
}
/**
@@ -64,6 +104,15 @@ class Category extends Common
public function edit($id)
{
//
$model_category = ModelCategory::find($id);
$list = ModelCategory::getListLevel();
View::assign('list_category',$list);
View::assign('category',$model_category);
return View::fetch();
}
/**
@@ -76,6 +125,36 @@ class Category extends Common
public function update(Request $request, $id)
{
//
$post_data = $request->post();
$model_category = ModelCategory::where('title',$post_data['title'])
->where('pid',$post_data['pid'])
->where('id','<>',$id)
->find();
if(!empty($model_category)){
$this->error('相同名称相同级别不能出现两次');
}
if($post_data['pid'] != 0){
$model_parent_category = ModelCategory::where('id',$post_data['pid'])->find();
$post_data['level'] = $model_parent_category->level + 1;
}else{
$post_data['level'] = 1;
}
$model_category = ModelCategory::find($id);
$model_category->save($post_data);
return $this->success('保存成功','index');
}
/**
@@ -87,5 +166,25 @@ class Category extends Common
public function delete($id)
{
//
if($id == 0){
return json_message('错误');
}
$model_category = ModelCategory::find($id);
$pid = 0;
if($model_category->pid != 0){
$pid = $model_category->pid;
}
ModelCategory::where('pid',$id)->update(['pid'=>$pid]);
$model_category->delete();
return json_message();
}
}

View File

@@ -4,7 +4,11 @@ declare(strict_types=1);
namespace app\admin\controller;
use app\model\Category;
use app\model\Post as ModelPost;
use app\model\PostCategory;
use app\model\PostTag;
use app\model\Tag;
use think\facade\View;
use think\Request;
@@ -21,7 +25,7 @@ class Post extends Common
$list = ModelPost::paginate();
View::assign('list',$list);
View::assign('list', $list);
return View::fetch();
}
@@ -47,6 +51,35 @@ class Post extends Common
public function save(Request $request)
{
//
$post_data = $request->post();
$categorys = [];
$tags = [];
if (isset($post_data['categorys'])) {
$categorys = $post_data['categorys'];
unset($post_data['categorys']);
}
if (isset($post_data['tags'])) {
$tags = $post_data['tags'];
unset($post_data['tags']);
}
$model_post = ModelPost::create($post_data);
foreach ($categorys as $category) {
PostCategory::create([
'post_id' => $model_post->id,
'category_id' => $category
]);
}
foreach ($tags as $tag) {
PostTag::create([
'post_id' => $model_post->id,
'tag_id' => $tag
]);
}
return $this->success('添加成功', 'index');
}
/**
@@ -69,6 +102,13 @@ class Post extends Common
public function edit($id)
{
//
$model_post = ModelPost::find($id);
View::assign('post', $model_post);
return View::fetch();
}
/**
@@ -81,6 +121,63 @@ class Post extends Common
public function update(Request $request, $id)
{
//
$post_data = $request->post();
$model_post = ModelPost::find($id);
$categorys = [];
$tags = [];
if (isset($post_data['categorys'])) {
$categorys = $post_data['categorys'];
unset($post_data['categorys']);
}
if (isset($post_data['tags'])) {
$tags = $post_data['tags'];
unset($post_data['tags']);
}
$model_post->save($post_data);
$old_category_list = PostCategory::where('post_id', $id)->select();
$old_category_id_list = array_column((array)$old_category_list, 'id');
$old_tag_list = PostTag::where('post_id', $id)->select();
$old_tag_id_list = array_column((array)$old_tag_list, 'id');
// 旧的有新的没有
foreach ($old_category_list as $model_category) {
if (!in_array($model_category->id, $categorys)) {
$model_category->delete();
}
}
foreach ($old_tag_list as $model_tag) {
if (!in_array($model_tag->id, $tags)) {
$model_tag->delete();
}
}
// 旧的没有新的有
foreach ($categorys as $category) {
if (!in_array($category, $old_category_id_list)) {
PostCategory::create([
'post_id' => $model_post->id,
'category_id' => $category
]);
}
}
foreach ($tags as $tag) {
if (!in_array($tag, $old_tag_id_list)) {
PostTag::create([
'post_id' => $model_post->id,
'tag_id' => $tag
]);
}
}
return $this->success('保存成功', 'index');
}
/**

View File

@@ -1,85 +1,125 @@
<?php
declare (strict_types = 1);
declare(strict_types=1);
namespace app\admin\controller;
use app\model\Tag as ModelTag;
use think\facade\View;
use think\Request;
class Tag
class Tag extends Common
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
//
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
//
$list_tag = ModelTag::order('id desc')->paginate();
if($this->request->isAjax()){
return json_message($list_tag);
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
View::assign('list',$list_tag);
return View::fetch();
}
/**
* 显示创建资源表单页.
*
* @return \think\Response
*/
public function create()
{
//
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
//
$post_data = $request->post();
$arr = explode(' ',$post_data['tags']);
$arr = array_unique(array_filter($arr));
foreach ($arr as $tag) {
$model_tag = ModelTag::where('title',$tag)->find();
if(empty($model_tag)){
ModelTag::create(['title'=>$tag]);
}
}
/**
* 保存新建的资源
*
* @param \think\Request $request
* @return \think\Response
*/
public function save(Request $request)
{
//
}
return json_message();
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示指定的资源
*
* @param int $id
* @return \think\Response
*/
public function read($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
}
/**
* 显示编辑资源表单页.
*
* @param int $id
* @return \think\Response
*/
public function edit($id)
{
//
/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
}
}
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
}
/**
* 保存更新的资源
*
* @param \think\Request $request
* @param int $id
* @return \think\Response
*/
public function update(Request $request, $id)
{
//
$post_data = $request->post();
$post_data['title'] = str_replace(' ','',$post_data['title']);
$model_tag = ModelTag::find($id);
$model_tag->save($post_data);
return json_message();
}
/**
* 删除指定资源
*
* @param int $id
* @return \think\Response
*/
public function delete($id)
{
//
}
}

View File

@@ -17,147 +17,175 @@ use think\File;
use think\facade\Filesystem;
use app\model\UploadFiles;
function json_message($data = [],$code = 0,$msg = '')
function json_message($data = [], $code = 0, $msg = '')
{
if(is_string($data)){
$code = $code === 0 ? 500 : $code;
$msg = $data;
$data = [];
}
if (is_string($data)) {
return json([
'code'=>$code,
'msg'=>$msg,
'data'=>$data
]);
$code = $code === 0 ? 500 : $code;
$msg = $data;
$data = [];
}
return json([
'code' => $code,
'msg' => $msg,
'data' => $data
]);
}
function get_system_config($name = '',$default = '')
function get_system_config($name = '', $default = '')
{
$list = Cache::get('system_config');
$list = Cache::get('system_config');
if(empty($list)){
$list = SystemConfig::column('value','name');
}
if (empty($list)) {
$list = SystemConfig::column('value', 'name');
}
if($name === ''){
return $list;
}
if ($name === '') {
return $list;
}
if(isset($list[$name])){
return $list[$name];
}
if (isset($list[$name])) {
return $list[$name];
}
return $default;
return $default;
}
function get_source_link($url)
{
if(strpos($url,'/') === 0){
return $url;
}if(strpos($url,'http') === 0){
return $url;
}else{
$resource_domain = get_system_config('resource_domain');
if (strpos($url, '/') === 0) {
return $url;
}
if (strpos($url, 'http') === 0) {
return $url;
} else {
$resource_domain = get_system_config('resource_domain');
if(empty($resource_domain)){
$resource_domain = request()->host();
}
return 'http://'.$resource_domain.'/'.$url;
if (empty($resource_domain)) {
$resource_domain = request()->host();
}
return 'http://' . $resource_domain . '/' . $url;
}
}
function de_source_link($url)
{
$domain = 'http://'.get_system_config('resource_domain').'/';
if(strpos($url,$domain) === 0){
return str_replace($domain,'',$url);
}
return false;
$domain = 'http://' . get_system_config('resource_domain') . '/';
if (strpos($url, $domain) === 0) {
return str_replace($domain, '', $url);
}
return false;
}
function save_url_file($url,$type)
function save_url_file($url, $type)
{
$file_data = geturl($url);
$mime_type = MimeType::detectByContent($file_data);
$ext_name = array_search($mime_type,MimeType::getExtensionToMimeTypeMap());
$temp_file = tempnam(app()->getRuntimePath(),'url_save_').'.'.$ext_name;
file_put_contents($temp_file,$file_data);
$file = new File($temp_file);
$save_name = Filesystem::putFile('wx_public_account/qrcode_url',$file,'unique');
$model_file = new UploadFiles();
$model_file->file_name = $file->getFilename();
$model_file->mime_type = $mime_type;
$model_file->ext_name = $file->extension();
$model_file->file_size = $file->getSize();
$model_file->file_md5 = $file->md5();
$model_file->file_sha1 = $file->sha1();
$model_file->create_time = time();
$model_file->type = $type;
$model_file->save_name = $save_name;
$model_file->save();
$file_data = geturl($url);
return $save_name;
$mime_type = MimeType::detectByContent($file_data);
$ext_name = array_search($mime_type, MimeType::getExtensionToMimeTypeMap());
$temp_file = tempnam(app()->getRuntimePath(), 'url_save_') . '.' . $ext_name;
file_put_contents($temp_file, $file_data);
$file = new File($temp_file);
$save_name = Filesystem::putFile('wx_public_account/qrcode_url', $file, 'unique');
$model_file = new UploadFiles();
$model_file->file_name = $file->getFilename();
$model_file->mime_type = $mime_type;
$model_file->ext_name = $file->extension();
$model_file->file_size = $file->getSize();
$model_file->file_md5 = $file->md5();
$model_file->file_sha1 = $file->sha1();
$model_file->create_time = time();
$model_file->type = $type;
$model_file->save_name = $save_name;
$model_file->save();
return $save_name;
}
function geturl($url){
$headerArray =array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
$output = curl_exec($ch);
curl_close($ch);
return $output;
function geturl($url)
{
$headerArray = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function posturl($url,$data){
$data = json_encode($data);
$headerArray =array();
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
function posturl($url, $data)
{
$data = json_encode($data);
$headerArray = array();
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
function format_size($filesize) {
function format_size($filesize)
{
if($filesize >= 1073741824) {
if ($filesize >= 1073741824) {
$filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
$filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
} elseif ($filesize >= 1048576) {
} elseif($filesize >= 1048576) {
$filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
} elseif ($filesize >= 1024) {
$filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
$filesize = round($filesize / 1024 * 100) / 100 . ' KB';
} else {
} elseif($filesize >= 1024) {
$filesize = $filesize . ' 字节';
}
$filesize = round($filesize / 1024 * 100) / 100 . ' KB';
return $filesize;
}
} else {
$filesize = $filesize . ' 字节';
/**
* 数组层级缩进转换
* @param array $array 源数组
* @param int $pid
* @param int $level
* @return array
*/
function array2level($array, $pid = 0, $level = 1)
{
static $list = [];
if ($level == 0) {
$list = [];
$level = 1;
}
foreach ($array as $v) {
if ($v['pid'] == $pid) {
$v['level'] = $level;
$list[] = $v;
array2level($array, $v['id'], $level + 1);
}
}
// halt($list);
return $filesize;
return $list;
}

View File

@@ -1,5 +1,6 @@
<?php
declare (strict_types = 1);
declare(strict_types=1);
namespace app\model;
@@ -10,5 +11,13 @@ use think\Model;
*/
class Category extends Model
{
//
//
public static function getListLevel()
{
$model_list = Category::select();
// return $model_list;
return array2level($model_list,0,0);
}
}

View File

@@ -17,4 +17,38 @@ class Post extends Model
use SoftDelete;
protected $defaultSoftDelete = 0;
public function categorys()
{
return $this->hasMany(PostCategory::class,'post_id');
}
public function tags()
{
return $this->hasMany(PostTag::class,'post_id');
}
public function setPubishTimeAttr($value)
{
return strtotime($value);
}
public function setContentAttr($value)
{
return json_encode($value);
}
public function getContentAttr($value)
{
return json_decode($value,true);
}
public function getPosterAttr($value)
{
if(empty($value)){
$value = '/static/images/avatar.jpeg';
}
return get_source_link($value);
}
}

View File

@@ -0,0 +1,14 @@
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin think\Model
*/
class PostCategory extends Model
{
//
}

14
app/model/PostTag.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
declare (strict_types = 1);
namespace app\model;
use think\Model;
/**
* @mixin think\Model
*/
class PostTag extends Model
{
//
}

View File

@@ -1,5 +1,6 @@
<?php
declare (strict_types = 1);
declare(strict_types=1);
namespace app\model;
@@ -10,5 +11,6 @@ use think\Model;
*/
class Tag extends Model
{
//
//
}