From 2e12809f4d16aa00239b5e2c6a13a9a51842d134 Mon Sep 17 00:00:00 2001
From: chengkun <chengkun@ishangstudy.com>
Date: Thu, 04 Sep 2025 18:20:17 +0800
Subject: [PATCH] 提交

---
 app/admin/controller/OnlineMessage.php         |   38 ++
 public/static/admin/js/online_message/index.js |   88 ++++++
 app/admin/controller/Blog.php                  |  135 ++++++++++
 app/admin/view/blog/add.html                   |   31 +
 app/admin/validate/Blog.php                    |   20 +
 app/admin/view/online_message/index.html       |   68 +++++
 public/static/admin/js/blog/index.js           |  105 +++++++
 app/admin/view/common/header.html              |    8 
 app/home/view/contact/index.html               |   64 ++++
 app/home/view/index/index.html                 |   61 ++++
 public/static/admin/js/blog/add.js             |   31 ++
 app/home/controller/Contact.php                |   36 ++
 app/admin/view/blog/index.html                 |   14 
 app/home/validate/Contact.php                  |   26 ++
 14 files changed, 678 insertions(+), 47 deletions(-)

diff --git a/app/admin/controller/Blog.php b/app/admin/controller/Blog.php
index b4c4f20..f7b120f 100644
--- a/app/admin/controller/Blog.php
+++ b/app/admin/controller/Blog.php
@@ -2,6 +2,7 @@
 
 namespace app\admin\controller;
 
+use think\facade\Db;
 use think\Exception;
 use think\exception\ValidateException;
 use think\facade\Filesystem;
@@ -13,10 +14,65 @@
         return View::fetch('index');
     }
     
-    public function add(): string {
+    public function get_blog_list() {
+        try {
+            $page   = input('page', 1);
+            $limit  = input('limit', 10);
+            $where  = [];
+            $total  = Db::name('blog')->where($where)->count();
+            $list   = Db::name('blog')->where($where)->order('id desc')->page($page, $limit)->select()->toArray();
+            $result = [
+                'code'    => 200,
+                'message' => '获取成功',
+                'data'    => [
+                    'list'  => $list,
+                    'total' => $total,
+                ],
+            ];
+        } catch (Exception $exc) {
+            $result = [
+                'code'    => $exc->getCode(),
+                'message' => $exc->getMessage(),
+            ];
+        }
+        return json($result);
+        
+    }
+    
+    public function add($id = 0): string {
         header('Content-Type:text/html;charset=utf-8');
         View::assign('menuitem', strtolower('Blog-index'));
+        View::assign('id', $id);
         return View::fetch('add');
+    }
+    
+    /**
+     * 获取博客信息
+     * @return Json
+     */
+    public function get_blog_info(): Json {
+        try {
+            $id = input('id');
+            if (!is_numeric($id)) {
+                throw new Exception('参数错误');
+            }
+            $info = Db::name('blog')->field('id,title,en_title,desc,en_desc,cover_img,content,en_content')->where('id', $id)->find();
+            if (empty($info)) {
+                throw new Exception('信息不存在');
+            }
+            $result = [
+                'code'    => 200,
+                'message' => '获取成功',
+                'data'    => $info,
+            ];
+        } catch (Exception $exc) {
+            $result = [
+                'code'    => $exc->getCode(),
+                'message' => $exc->getMessage(),
+            ];
+        }
+        return json($result);
+        
     }
     
     /**
@@ -31,7 +87,7 @@
             
             $file    = request()->file('image');
             $files[] = $file;
-            validate(['image' => 'fileSize:10240|fileExt:jpg'])->check($files);
+            validate(['image' => 'fileSize:10240|fileExt:jpg,jpeg,png'])->check($files);
             // 上传到本地服务器
             $savename = (new Filesystem)::disk('public')->putFile('/images', $file);
             $savename = (new Filesystem)::disk('public')->url($savename); // 获取上传后的文件路径
@@ -71,7 +127,7 @@
             
             $file    = request()->file('file');
             $files[] = $file;
-            validate(['image' => 'fileSize:10240|fileExt:jpg'])->check($files);
+            validate(['image' => 'fileSize:10240|fileExt:jpg,jpeg,png'])->check($files);
             // 上传到本地服务器
             $savename = (new Filesystem)::disk('public')->putFile('/images', $file);
             $savename = (new Filesystem)::disk('public')->url($savename); // 获取上传后的文件路径
@@ -99,12 +155,50 @@
         return json($result);
     }
     
-    public function save_blog() {
+    /**
+     * 保存博客
+     * @return Json
+     */
+    public function save_blog(): Json {
         try {
             if (!request()->isPost()) {
                 throw new Exception('请求方式错误');
             }
             $data = request()->post();
+            
+            ///////验证////////////
+            $validate        = new \app\admin\validate\Blog();
+            $validate_result = $validate->scene('save_blog')->check($data);
+            if (!$validate_result) {
+                throw new Exception($validate->getError());
+            }
+            
+            if ($data['id'] && is_numeric($data['id'])) {
+                /////////更新////////////
+                $info = Db::name('blog')->field('id')->where('id', $data['id'])->find();
+                if (empty($info)) {
+                    throw new Exception('信息不存在');
+                }
+                unset($data['create_time']);
+                $update_result = Db::name('blog')->where('id', $data['id'])->save($data);
+                if (!$update_result) {
+                    throw new Exception('更新失败');
+                }
+            } else {
+                //////////添加////////////
+                $data['create_time'] = time();
+                $data['admin_id']    = $this->admin_id;
+                
+                $new_id = Db::name('blog')->insertGetId($data);
+                if (!$new_id) {
+                    throw new Exception('保存失败');
+                }
+            }
+            
+            $result = [
+                'code'    => 200,
+                'message' => '保存成功',
+            ];
             
         } catch (Exception $exc) {
             $result = [
@@ -114,4 +208,37 @@
         }
         return json($result);
     }
+    
+    /**
+     * 修改博客状态
+     * @return Json
+     */
+    public function change_blog_status() {
+        try {
+            $id = input('id');
+            if (!is_numeric($id)) {
+                throw new Exception('参数错误');
+            }
+            $info = Db::name('blog')->field('id,status')->where('id', $id)->find();
+            if (empty($info)) {
+                throw new Exception('信息不存在');
+            }
+            $status        = $info['status'] == 1 ? 0 : 1;
+            $update_result = Db::name('blog')->where('id', $id)->save(['status' => $status]);
+            if (!$update_result) {
+                throw new Exception('更新失败');
+            }
+            $result = [
+                'code'    => 200,
+                'message' => '更新成功',
+            ];
+        } catch (Exception $exc) {
+            $result = [
+                'code'    => $exc->getCode(),
+                'message' => $exc->getMessage(),
+            ];
+        }
+        return json($result);
+        
+    }
 }
\ No newline at end of file
diff --git a/app/admin/controller/OnlineMessage.php b/app/admin/controller/OnlineMessage.php
new file mode 100644
index 0000000..84ea7d8
--- /dev/null
+++ b/app/admin/controller/OnlineMessage.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace app\admin\controller;
+
+use think\Exception;
+use think\facade\Db;
+use think\facade\View;
+
+class OnlineMessage extends Common {
+    public function index() {
+        View::assign('menuitem', strtolower('onlineMessage-index'));
+        return View::fetch();
+    }
+    
+    public function get_online_message_list() {
+        try {
+            $page   = input('page', 1);
+            $limit  = input('limit', 10);
+            $where  = [];
+            $total  = Db::name('online_message')->where($where)->count();
+            $list   = Db::name('online_message')->where($where)->order('id desc')->page($page, $limit)->select()->toArray();
+            $result = [
+                'code'    => 200,
+                'message' => '获取成功',
+                'data'    => [
+                    'list'  => $list,
+                    'total' => $total,
+                ],
+            ];
+        } catch (Exception $exc) {
+            $result = [
+                'code'    => $exc->getCode(),
+                'message' => $exc->getMessage(),
+            ];
+        }
+        return json($result);
+    }
+}
\ No newline at end of file
diff --git a/app/admin/validate/Blog.php b/app/admin/validate/Blog.php
index 1a6d684..139282a 100644
--- a/app/admin/validate/Blog.php
+++ b/app/admin/validate/Blog.php
@@ -8,12 +8,24 @@
     
     protected $rule    = [
         'title'      => 'require',
-        'menu_index' => 'require',
+        'en_title'   => 'require',
+        'desc'       => 'require',
+        'en_desc'    => 'require',
+        'cover_img'  => 'require',
+        'content'    => 'require',
+        'en_content' => 'require',
     ];
     protected $message = [
-        'title.require'      => '请填写菜单名称',
-        'menu_index.require' => '请填写菜单索引',
+        'title.require'      => '请填写标题名称',
+        'en_title.require'   => '请填写英文标题名称',
+        'desc.require'       => '请填写标题描述',
+        'en_desc.require'    => '请填写英文标题描述',
+        'cover_img.require'  => '请上传封面图片',
+        'content.require'    => '请填写内容',
+        'en_content.require' => '请填写英文内容',
     ];
     
-    
+    protected $scene = [
+        'save_blog' => ['title', 'en_title', 'desc', 'en_desc', 'cover_img', 'content', 'en_content'], //保存博客
+    ];
 }
\ No newline at end of file
diff --git a/app/admin/view/blog/add.html b/app/admin/view/blog/add.html
index ffbc55a..091dce7 100644
--- a/app/admin/view/blog/add.html
+++ b/app/admin/view/blog/add.html
@@ -8,6 +8,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
     <include file="common:element-plus" />
+    <link rel="stylesheet" href="/static/admin/css/blog/add.css">
     <!-- 富文本编辑器 -->
     <link rel="stylesheet" href="/static/plugin/wangeditor/style.css" media="all">
     <script type="text/javascript" src="/static/plugin/wangeditor/index.js"></script>
@@ -53,6 +54,7 @@
 </head>
 
 <body>
+    <input type="hidden" id="id" value="{$id}">
     <div id="vue_item" v-cloak>
         <el-container>
             <el-aside class="el-menu-container" :width="el_aside_width">
@@ -90,14 +92,15 @@
                                     <div id="toolbar-container"><!-- 工具栏 --></div>
                                     <div id="editor-container" style="height: calc(100% - 40px);"><!-- 编辑器 --></div>
                                 </div>
-                                <!-- <div id="editer_data" style="width: 100%;">{{addBlogForm.content}}</div>
-                                <textarea name="content" id="content" style="display:none;" v-model="addBlogForm.content"></textarea> -->
+                                <!-- <div id="editer_data" style="width: 100%;" v-html="addBlogForm.content"></div> -->
+                                <!-- <textarea id="editer_data" style="display:none;" v-model="addBlogForm.content"></textarea> -->
                             </el-form-item>
                             <el-form-item label="内容(英文)">
                                 <div id="editor—wrapper-en" class="editor—wrapper" style="height: 500px;">
                                     <div id="toolbar-container-en"><!-- 工具栏 --></div>
                                     <div id="editor-container-en" style="height: calc(100% - 40px);"><!-- 编辑器 --></div>
                                 </div>
+                                <!-- <div id="editer_data_en" style="width: 100%;" v-html="addBlogForm.en_content"></div> -->
                             </el-form-item>
                             <el-form-item label="封面图">
                                 <el-upload class="avatar-uploader" action="/admin/blog/upload_cover_img.html" :show-file-list="false" :on-success="handleCoverImgSuccess" :before-upload="beforeCoverImgUpload">
@@ -133,7 +136,7 @@
         placeholder: '请输入中文内容...',
         onChange(editor) {
             const html = editor.getHtml();
-            setHtmlValue(html);
+            getHtmlValue(html);
         },
         MENU_CONF: {},
     }
@@ -167,6 +170,10 @@
         },
     }
 
+    var editor_data = $("#editer_data").html();
+    if (editor_data == '') {
+        editor_data = '<p><br></p>';
+    }
     const editor = createEditor({
         selector: '#editor-container',
         html: '<p><br></p>',
@@ -197,7 +204,7 @@
         placeholder: '请输入英文内容...',
         onChange(editor) {
             const html = editor.getHtml();
-            setHtmlValue(html, 2);
+            getHtmlValue(html, 2);
         },
         MENU_CONF: {},
     }
@@ -233,7 +240,10 @@
         },
     }
 
-
+    var editor_data_en = document.getElementById('editer_data_en');
+    if (editor_data_en == '') {
+        editor_data_en = '<p><br></p>';
+    }
     const editor_en = createEditor({
         selector: '#editor-container-en',
         html: '<p><br></p>',
@@ -255,7 +265,16 @@
         selector: '#toolbar-container-en',
         config: toolbarConfigEn,
         mode: 'default', // or 'simple'
-    })
+    });
+
+
+    function setHtmlValue(html, type = 1) {
+        if (type == 1) {
+            editor.setHtml(html);
+        } else {
+            editor_en.setHtml(html);
+        }
+    }
 </script>
 
 </html>
\ No newline at end of file
diff --git a/app/admin/view/blog/index.html b/app/admin/view/blog/index.html
index 67c054f..191970d 100644
--- a/app/admin/view/blog/index.html
+++ b/app/admin/view/blog/index.html
@@ -25,30 +25,34 @@
                     <el-card>
                         <template #header>
                             <div class="card-header">
-                                <span>文章列表</span>
+                                <span>文章列表({{listCount}})</span>
                                 &emsp;
                                 <el-link href="/admin/blog/add.html" type="primary" class="header_add_btn" icon="CirclePlusFilled" :underline="false">添加</el-link>
                             </div>
                         </template>
-                        <el-table :data="list" :tree-props="{children: 'children'}" row-key="id" default-expand-all border style="width: 100%" ref="tableRef">
+                        <el-table :data="blogList" :tree-props="{children: 'children'}" row-key="id" default-expand-all border style="width: 100%" ref="tableRef">
                             <el-table-column label="名称" prop="title"></el-table-column>
                             <!-- <el-table-column label="菜单索引" prop="menu_index"></el-table-column> -->
                             <el-table-column label="添加时间" prop="create_time" width="150">
                                 <template #default="scope">
-                                   {{formatDate(scope.row['create_time'])}}
+                                    {{formatDate(scope.row['create_time'])}}
                                 </template>
                             </el-table-column>
                             <el-table-column label="状态" width="150" align="center">
                                 <template #default="scope">
-                                    <el-switch v-model="scope.row.show_menu" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0" inline-prompt active-text="发布" inactive-text="下架" @change="updateShowMenu(scope.row)" />
+                                    <el-switch v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0" inline-prompt active-text="发布" inactive-text="未发布" @change="changeBlogStatus(scope.row.id)" />
                                 </template>
                             </el-table-column>
                             <el-table-column label="操作选项" fixed="right" width="150" :align="alignValue(200)">
                                 <template #default="scope">
-                                    <el-button icon="edit" type="primary" @click="Edit(scope.row)"></el-button>
+                                    <el-button icon="edit" type="primary" @click="editBlog(scope.row.id)" circle></el-button>
+                                    <el-button icon="Delete" type="danger" @click="deleteBlog(scope.row.id)" circle></el-button>
                                 </template>
                             </el-table-column>
                         </el-table>
+                        <div style="text-align: right;margin-top: 15px">
+                            <el-pagination background @current-change="getBlogList" layout="prev, pager, next" :page-size="searchForm.limit" hide-on-single-page="true" :total="listCount"></el-pagination>
+                        </div>
                     </el-card>
                 </el-main>
                 <el-footer></el-footer>
diff --git a/app/admin/view/common/header.html b/app/admin/view/common/header.html
index 6017d02..33a8296 100644
--- a/app/admin/view/common/header.html
+++ b/app/admin/view/common/header.html
@@ -1,7 +1,7 @@
 <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
-<link rel="stylesheet" href="/static/supplier/css/reset.css?t=20180921-1" media="all">
+<!-- <link rel="stylesheet" href="/static/supplier/css/reset.css?t=20180921-1" media="all">
 <link id="layuicss-layuiAdmin" rel="stylesheet" href="/static/admin/css/admin.css?v=1.1.0 pro-1" media="all">
-<link rel="stylesheet" href="/static/admin/css/layui.css?t=20180921-3" media="all">
-<script type="text/javascript" src="/static/jquery/jquery-3.7.1.min.js"></script>
+<link rel="stylesheet" href="/static/admin/css/layui.css?t=20180921-3" media="all"> -->
+<!-- <script type="text/javascript" src="/static/jquery/jquery-3.7.1.min.js"></script>
 <script type="text/javascript" src="/static/admin/js/jquery.config.js"></script>
-<script type="text/javascript" src="/static/admin/js/function.js"></script>
\ No newline at end of file
+<script type="text/javascript" src="/static/admin/js/function.js"></script> -->
\ No newline at end of file
diff --git a/app/admin/view/online_message/index.html b/app/admin/view/online_message/index.html
new file mode 100644
index 0000000..b7dde14
--- /dev/null
+++ b/app/admin/view/online_message/index.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang="zh-cn">
+
+<head>
+    <meta charset="utf-8">
+    <include file="common:title" />
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <include file="common:element-plus" />
+</head>
+
+<body>
+    <div id="vue_item" v-cloak>
+        <el-container>
+            <el-aside class="el-menu-container" :width="el_aside_width">
+                <!-- 侧边菜单 -->
+                <include file="common:side_menu" />
+            </el-aside>
+            <el-container>
+                <el-header>
+                    <include file="common:guide" one_word="在线留言" two_word="官网留言 " />
+                </el-header>
+                <el-main>
+                    <el-card style="width: 100%">
+                        <template #header>
+                            <div class="card-header">官网留言({{count}})</div>
+                        </template>
+                        <el-form :model="searchForm" label-width="auto" size="large">
+                            <el-input v-model="searchForm.kw" placeholder="请输入标题" style="width: 300px;" clearable></el-input>
+                            &ensp;
+                            <el-button type="success" icon="Search" @click="getOnlineMessageList()">搜索</el-button>
+                        </el-form>
+                        <br />
+                        <el-table :data="list" border style="width: 100%;position: relative;z-index: 0 !important;" ref="tableRef">
+                            <el-table-column prop="name" label="姓名" width="180" show-overflow-tooltip align="center"></el-table-column>
+                            <el-table-column prop="phone" label="电话" show-overflow-tooltip width="180" align="center"></el-table-column>
+                            <el-table-column prop="email" label="邮箱" width="180" align="center"></el-table-column>
+                            <el-table-column prop="subject" label="主题" width="180" align="center"></el-table-column>
+                            <el-table-column prop="message" label="内容" align="left"></el-table-column>
+                            <el-table-column prop="create_time" label="提交时间" width="180" align="center">
+                                <template #default="scope">
+                                    {{formatDate(scope.row.create_time)}}
+                                </template>
+                            </el-table-column>
+                            <el-table-column label="状态" width="150" align="center">
+                                <template #default="scope">
+                                    <el-switch @change="updateExt(scope.row,'status')" v-model="scope.row.status" style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ccc" :active-value="1" :inactive-value="0" inline-prompt active-text="已处理" inactive-text="未处理" />
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                        <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="searchForm.page" :page-sizes="[20, 30, 40, 50]" :page-size="searchForm.limit" layout="total, sizes, prev, pager, next" :total="count">
+                        </el-pagination>
+                    </el-card>
+                </el-main>
+            </el-container>
+        </el-container>
+    </div>
+</body>
+<!-- 共用的方法 -->
+<script language="JavaScript">
+    const viewPath = '{$viewPath}';
+</script>
+<script src="/static/vue/mixin_admin.js"></script>
+<script src="/static/admin/js/online_message/index.js?v=<?php echo rand(1000,9999)?>"></script>
+
+
+</html>
\ No newline at end of file
diff --git a/app/home/controller/Contact.php b/app/home/controller/Contact.php
index 7aa63a2..857559c 100644
--- a/app/home/controller/Contact.php
+++ b/app/home/controller/Contact.php
@@ -2,12 +2,48 @@
 
 namespace app\home\controller;
 
+use think\Exception;
+use think\facade\Db;
 use think\facade\View;
 use think\facade\Request;
 use app\BaseController;
+use think\response\Json;
 
 class Contact extends BaseController {
     public function index() {
         return View::fetch('index');
     }
+    
+    /**
+     * 保存留言
+     * @return Json
+     */
+    public function save_message(): Json {
+        try {
+            if (!Request::isPost()) {
+                throw new Exception('请求方式错误');
+            }
+            $data            = Request::post();
+            $validate        = new \app\home\validate\Contact();
+            $validate_result = $validate->check($data);
+            if (!$validate_result) {
+                throw new Exception($validate->getError());
+            }
+            $data['create_time'] = time();
+            $new_id              = Db::name('online_message')->insertGetId($data);
+            if (!$new_id) {
+                throw new Exception('保存失败');
+            }
+            $result = [
+                'code'    => 200,
+                'message' => '保存成功',
+            ];
+        } catch (Exception $exc) {
+            $result = [
+                'code'    => $exc->getCode(),
+                'message' => $exc->getMessage(),
+            ];
+        }
+        return json($result);
+    }
 }
\ No newline at end of file
diff --git a/app/home/validate/Contact.php b/app/home/validate/Contact.php
new file mode 100644
index 0000000..2ec3eb1
--- /dev/null
+++ b/app/home/validate/Contact.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace app\home\validate;
+
+use think\Validate;
+
+class Contact extends Validate {
+    protected $rule    = [
+        'name'    => 'require',
+        'phone'   => 'require',
+        'email'   => 'require',
+        'subject' => 'require',
+        'message' => 'require',
+    ];
+    protected $message = [
+        'name.require'    => '请填写姓名',
+        'phone.require'   => '请填写联系方式',
+        'email.require'   => '请填写邮箱',
+        'subject.require' => '请填写主题',
+        'message.require' => '请填写内容',
+    ];
+    
+    protected $scene = [
+        'save_message' => ['name', 'phone', 'message'], //保存博客
+    ];
+}
\ No newline at end of file
diff --git a/app/home/view/contact/index.html b/app/home/view/contact/index.html
index 1daa4ea..4c9367d 100644
--- a/app/home/view/contact/index.html
+++ b/app/home/view/contact/index.html
@@ -94,7 +94,8 @@
                 </div>
             </div>
         </div>
-        <!-- contact area2 -->
+
+        <!-- 提交在线咨询 -->
         <div class="contact_area2">
             <div class="container">
                 <div class="row">
@@ -106,33 +107,33 @@
                                 <h2>{{ $t('message.common.submit-contact-information') }}</h2>
                             </div>
                             <div class="witr_apartment_form">
-                                <form action="mail.php" method="post" id="contact-form">
+                                <form method="post" id="contact-form">
                                     <div class="row">
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="text" name="name" :placeholder="$t('message.common.name')">
+                                                <input type="text" name="name" :placeholder="$t('message.common.name')" v-model="form.name">
                                             </div>
                                         </div>
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="email" name="email" :placeholder="$t('message.common.email')">
+                                                <input type="email" name="email" :placeholder="$t('message.common.email')" v-model="form.email">
                                             </div>
                                         </div>
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="number" name="number" :placeholder="$t('message.common.phone')">
+                                                <input type="number" name="number" :placeholder="$t('message.common.phone')" v-model="form.phone">
                                             </div>
                                         </div>
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="text" name="subject" :placeholder="$t('message.common.subject')">
+                                                <input type="text" name="subject" :placeholder="$t('message.common.subject')" v-model="form.subject">
                                             </div>
                                         </div>
                                         <div class="col-lg-12 col-md-12">
                                             <div class="twr_form_box ">
-                                                <textarea name="textarea" :placeholder="$t('message.common.message')"></textarea>
+                                                <textarea name="textarea" :placeholder="$t('message.common.message')" v-model="form.message"></textarea>
                                             </div>
-                                            <button type="submit" name="ok" class="btn ">{{ $t('message.common.submit') }}</button>
+                                            <button type="button" name="ok" class="btn" @click="submitForm" :disabled="submitDisabled">{{ $t('message.common.submit') }}</button>
                                         </div>
                                         <div class="col-lg-12 text-center">
                                             <p class="form-messege"></p>
@@ -155,7 +156,13 @@
             mixins: [sharedMixin],
             data() {
                 return {
-
+                    form: {
+                        name: '',
+                        email: '',
+                        phone: '',
+                        subject: '',
+                        message: '',
+                    }
                 };
             },
             computed: {
@@ -166,6 +173,45 @@
             created() {
             },
             methods: {
+                submitForm() {
+                    var that = this;
+                    that.submitDisabled = true;
+                    const loading = this.$loading({
+                        lock: true,
+                        text: '提交中',
+                        spinner: 'el-icon-loading',
+                        background: 'rgba(0, 0, 0, 0.2)'
+                    });
+                    let url = "/home/contact/save_message.html";
+                    postRequest(url, that.form).then(res => {
+                        loading.close();
+                        if (res.data.code == 200) {
+                            that.$message({
+                                message: res.data.message,
+                                type: 'success',
+                                duration: 1000,
+                                center: true,
+                                onClose: function () {
+                                    that.form = {
+                                        name: '',
+                                        email: '',
+                                        phone: '',
+                                        subject: '',
+                                        message: '',
+                                    }
+                                }
+                            });
+                        } else {
+                            that.submitDisabled = false;
+                            that.$message({
+                                message: res.data.message,
+                                type: 'error',
+                                duration: 1500,
+                                center: true
+                            });
+                        }
+                    });
+                }
 
             },
         };
diff --git a/app/home/view/index/index.html b/app/home/view/index/index.html
index 4773df8..5061afa 100644
--- a/app/home/view/index/index.html
+++ b/app/home/view/index/index.html
@@ -1307,29 +1307,29 @@
                                     <div class="row">
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="text" name="name" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required form-control" :placeholder="$t('message.common.name')">
+                                                <input type="text" name="name" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required form-control" :placeholder="$t('message.common.name')" v-model="form.name">
                                             </div>
                                         </div>
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="email" name="email" class="wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email form-control" :placeholder="$t('message.common.email')">
+                                                <input type="email" name="email" class="wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email form-control" :placeholder="$t('message.common.email')" v-model="form.email">
                                             </div>
                                         </div>
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="number" name="number" class="wpcf7-form-control wpcf7-number wpcf7-validates-as-required wpcf7-validates-as-number form-control" :placeholder="$t('message.common.phone')">
+                                                <input type="number" name="number" class="wpcf7-form-control wpcf7-number wpcf7-validates-as-required wpcf7-validates-as-number form-control" :placeholder="$t('message.common.phone')" v-model="form.phone">
                                             </div>
                                         </div>
                                         <div class="col-lg-6 col-md-6">
                                             <div class="twr_form_box">
-                                                <input type="text" name="subject" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required form-control" :placeholder="$t('message.common.subject')">
+                                                <input type="text" name="subject" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required form-control" :placeholder="$t('message.common.subject')" v-model="form.subject">
                                             </div>
                                         </div>
                                         <div class="col-lg-12 col-md-12">
                                             <div class="twr_form_box ">
-                                                <textarea name="textarea" class="wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required form-control" :placeholder="$t('message.common.message')"></textarea>
+                                                <textarea name="textarea" class="wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required form-control" :placeholder="$t('message.common.message')" v-model="form.message"></textarea>
                                             </div>
-                                            <button type="submit" name="ok" class="btn">{{ $t('message.common.submit') }}</button>
+                                            <button type="button" name="ok" class="btn" @click="submitForm" :disabled="submitDisabled">{{ $t('message.common.submit') }}</button>
                                         </div>
                                         <div class="col-lg-12 text-center">
                                             <p class="form-messege"></p>
@@ -1410,7 +1410,13 @@
             mixins: [sharedMixin],
             data() {
                 return {
-
+                    form: {
+                        name: '',
+                        email: '',
+                        phone: '',
+                        subject: '',
+                        message: '',
+                    }
                 };
             },
             computed: {
@@ -1421,6 +1427,46 @@
             created() {
             },
             methods: {
+
+                submitForm() {
+                    var that = this;
+                    that.submitDisabled = true;
+                    const loading = this.$loading({
+                        lock: true,
+                        text: '提交中',
+                        spinner: 'el-icon-loading',
+                        background: 'rgba(0, 0, 0, 0.2)'
+                    });
+                    let url = "/home/contact/save_message.html";
+                    postRequest(url, that.form).then(res => {
+                        loading.close();
+                        if (res.data.code == 200) {
+                            that.$message({
+                                message: res.data.message,
+                                type: 'success',
+                                duration: 1000,
+                                center: true,
+                                onClose: function () {
+                                    that.form = {
+                                        name: '',
+                                        email: '',
+                                        phone: '',
+                                        subject: '',
+                                        message: '',
+                                    }
+                                }
+                            });
+                        } else {
+                            that.submitDisabled = false;
+                            that.$message({
+                                message: res.data.message,
+                                type: 'error',
+                                duration: 1500,
+                                center: true
+                            });
+                        }
+                    });
+                }
 
             },
         };
@@ -1436,4 +1482,5 @@
     </script>
 </body>
 <include file="common:html-css-js" />
+
 </html>
\ No newline at end of file
diff --git a/public/static/admin/js/blog/add.js b/public/static/admin/js/blog/add.js
index f0de19b..a9f4e7b 100644
--- a/public/static/admin/js/blog/add.js
+++ b/public/static/admin/js/blog/add.js
@@ -1,7 +1,9 @@
+var id = $("#id").val();
 const App = {
     mixins: [sharedMixin],/////共用的方法/////
     data() {
         return {
+            blog_id: id,
             addBlogForm: {
                 title: '',
                 en_title: '',
@@ -17,11 +19,14 @@
     mounted() {
     },
     created() {
-        window.setHtmlValue = this.setHtmlValue;
+        window.getHtmlValue = this.getHtmlValue;
+        if (this.blog_id > 0) {
+            this.getBlogInfo();
+        }
     },
     methods: {
         /////获取富文本内容/////
-        setHtmlValue(value, type = 1) {
+        getHtmlValue(value, type = 1) {
             if (type == 1) {
                 this.addBlogForm.content = value;
             } else {
@@ -64,6 +69,28 @@
             }
             return true;
         },
+
+        /////获取博客信息/////
+        getBlogInfo() {
+            let that = this;
+            let url = "/admin/blog/get_blog_info.html";
+            postRequest(url, { id: that.blog_id }).then(res => {
+                if (res.data.code == 200) {
+                    that.addBlogForm = res.data.data;
+                    setTimeout(function () {
+                        window.setHtmlValue(res.data.data.content, 1);
+                        window.setHtmlValue(res.data.data.en_content, 2);
+                    })
+                } else {
+                    that.$message({
+                        message: res.data.message,
+                        type: 'error',
+                        duration: 1500,
+                        center: true
+                    });
+                }
+            })
+        },
         /////保存/////
         onSubmit() {
             var that = this;
diff --git a/public/static/admin/js/blog/index.js b/public/static/admin/js/blog/index.js
index d0d0654..72e071b 100644
--- a/public/static/admin/js/blog/index.js
+++ b/public/static/admin/js/blog/index.js
@@ -2,19 +2,112 @@
     mixins: [sharedMixin],/////共用的方法/////
     data() {
         return {
-            list: [],
+            blogList: [],
+            listCount: 0,
+            searchForm: {
+                keyword: "",
+                page: 1,
+                limit: 20,
+            },
+            ifsubmit: false,
         };
     },
     mounted() {
     },
-    created() { },
+    created() {
+        this.getBlogList();
+    },
     methods: {
-        index() {
+        formatDate(time) {
+            return moment(time * 1000).format("YYYY-MM-DD H:m");
+        },
+
+        /////改变状态/////
+        changeBlogStatus(id) {
             let that = this;
-            let url = "/admin/adminmenu/index.html"
-            postRequest(url, {}).then(res => {
+            let loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
+            let url = "/admin/blog/change_blog_status.html";
+            postRequest(url, { id: id }).then(res => {
+                loading.close()
                 if (res.data.code == 200) {
-                    that.list = res.data.list;
+                    that.$message({
+                        message: res.data.message,
+                        type: 'success',
+                        duration: 1000,
+                        center: true,
+                        onClose: function () {
+                            that.getBlogList();
+                        }
+                    })
+                } else {
+                    that.$message({
+                        message: res.data.message,
+                        type: 'error',
+                        duration: 2000,
+                        center: true
+                    });
+                }
+            })
+        },
+
+        /////进入编辑页面/////
+        editBlog(id) {
+            window.location.href = "/admin/blog/add/id/" + id + ".html";
+        },
+
+        /////删除文章/////
+        deleteBlog(id) {
+            let that = this;
+            let loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+            });
+            let url = "/admin/blog/delete_blog.html";
+            postRequest(url, { id: id }).then(res => {
+                loading.close()
+                if (res.data.code == 200) {
+                    that.$message({
+                        message: res.data.message,
+                        type: 'success',
+                        duration: 1000,
+                        center: true,
+                        onClose: function () {
+                            that.getBlogList();
+                        }
+                    })
+                } else {
+                    that.$message({
+                        message: res.data.message,
+                        type: 'error',
+                        duration: 2000,
+                        center: true
+                    });
+                }
+            })
+        },
+
+        /////获取文章列表/////
+        getBlogList(page = 1) {
+            let that = this;
+            that.searchForm.page = page;
+            let loading = this.$loading({
+                lock: true,
+                text: 'Loading',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.7)'
+            });
+            let url = "/admin/blog/get_blog_list.html"
+            postRequest(url, that.searchForm).then(res => {
+                loading.close()
+                if (res.data.code == 200) {
+                    that.blogList = res.data.data.list;
+                    that.listCount = +res.data.data.total;
                 }
             });
         },
diff --git a/public/static/admin/js/online_message/index.js b/public/static/admin/js/online_message/index.js
new file mode 100644
index 0000000..703fcab
--- /dev/null
+++ b/public/static/admin/js/online_message/index.js
@@ -0,0 +1,88 @@
+
+
+const App = {
+    mixins: [sharedMixin],/////共用的方法/////
+    data() {
+        return {
+            list: [],
+            count: 0,
+            searchForm: {
+                page: 1,
+                page_size: 20,
+                kw: '',
+            },
+        };
+    },
+    mounted() {
+        this.getOnlineMessageList();
+    },
+    created() { },
+    methods: {
+        formatDate(time) {
+            return moment(time * 1000).format("YYYY-MM-DD H:m");
+        },
+        ///修改扩展字段的值////
+        updateExt(row, field) {
+            if (row.id) {
+                let that = this;
+                let url = "/admin/" + viewPath + "/updateExt.html"
+                postRequest(url, { id: row.id, [field]: row[field] }).then(res => {
+                    if (res.data.code == 200) {
+                        that.$notify({
+                            title: "成功",
+                            message: res.data.message,
+                            position: "top-left",
+                            type: "success",
+                        });
+                    }
+                    else {
+                        that.$notify.error({
+                            title: "错误",
+                            position: "top-left",
+                            message: res.data.message,
+                        });
+                    }
+                });
+            }
+        },
+
+        handleSizeChange(val) {
+            //////设置每页多少条
+            this.searchForm.page_size = val
+            this.getOnlineMessageList();
+        },
+        handleCurrentChange(val) {
+            ///改变当前页///////
+            this.searchForm.page = val
+            this.getOnlineMessageList();
+        },
+        // 获取公告列表
+        getOnlineMessageList() {
+            let that = this;
+            const loading = this.$loading({
+                lock: true,
+                text: '获取中',
+                spinner: 'el-icon-loading',
+                background: 'rgba(0, 0, 0, 0.2)'
+            });
+            let url = "/admin/onlineMessage/get_online_message_list.html"
+            postRequest(url, that.searchForm).then(res => {
+                loading.close();
+                if (res.data.code == 200) {
+                    that.list = res.data.data.list;
+                    that.count = +res.data.data.total;
+                }
+            }).catch(() => {
+                //取消,不做处理
+            });
+        },
+    }
+};
+const app = Vue.createApp(App);
+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+    app.component(key, component)
+}
+app.use(ElementPlus, {
+    locale: ElementPlusLocaleZhCn,
+});
+app.mount("#vue_item");
\ No newline at end of file

--
Gitblit v1.9.0