main
liutk 2024-06-18 21:25:25 +08:00
parent de6765c50e
commit 20386fb4ab
18 changed files with 1916 additions and 97 deletions

View File

@ -64,8 +64,8 @@ class ArticleController extends AdminController
amis()->TableColumn('category', __('admin.articles.category'))->type('mapping')
->map(Keyword::allChildrenOfKey('article_category')->pluck('name', 'key')->toArray())
->itemSchema(amis()->Tag()->label('${item}')->color(Admin::setting()->get('system_theme_setting')['theme_color'] ?? '#1677ff')),
amis()->TableColumn('tags', __('admin.articles.tags'))->type('mapping')->map(Keyword::tagsMap('article_tag')),
amis()->TableColumn('cover', __('admin.articles.cover'))->type('image')->height('50px')->width('50px')->enlargeAble(true),
// amis()->TableColumn('tags', __('admin.articles.tags'))->type('mapping')->map(Keyword::tagsMap('article_tag')),
amis()->TableColumn('cover_url', __('admin.articles.cover'))->type('image')->height('50px')->width('50px')->enlargeAble(true),
amis()->TableColumn('published_at', __('admin.articles.published_at'))->remark(__('admin.articles.published_at_remark')),
amis()->TableColumn('is_enable', __('admin.articles.is_enable'))->type('switch'),
amis()->TableColumn('is_recommend', __('admin.articles.is_recommend'))->type('switch'),
@ -86,13 +86,13 @@ class ArticleController extends AdminController
amis()->Wrapper()->body([
amis()->TextControl('title', __('admin.articles.title'))->required(true),
Components::make()->parentControl(admin_url('api/keywords/tree-list?parent_name=article_category&has_owner=0'), 'category', __('admin.articles.category'), 'name', 'key'),
Components::make()->keywordsTagControl('t_ids', __('admin.articles.tags'), 'article_tag'),
// Components::make()->keywordsTagControl('t_ids', __('admin.articles.tags'), 'article_tag'),
Components::make()->cropImageControl('cover', __('admin.articles.cover')),
Components::make()->sortControl('sort', __('admin.articles.sort')),
amis()->DateTimeControl('published_at', __('admin.articles.published_at'))->format('YYYY-MM-DD HH:mm:ss')->description(__('admin.articles.published_at_remark')),
amis()->SwitchControl('is_enable', __('admin.articles.is_enable'))->value(false),
amis()->SwitchControl('is_recommend', __('admin.articles.is_recommend'))->value(false),
Components::make()->fileControl('appendixes', __('admin.articles.appendixes'), '.xsl,.xlsx,.txt,.doc,.docx,.pdf,.pptx'),
// Components::make()->fileControl('appendixes', __('admin.articles.appendixes'), '.xsl,.xlsx,.txt,.doc,.docx,.pdf,.pptx'),
])->md(4),
amis()->Wrapper()->body([
Components::make()->fuEditorControl('content', __('admin.articles.content')),

View File

@ -20,15 +20,15 @@ class HomeController extends AdminController
public function index(): JsonResponse|JsonResource
{
$page = $this->basePage()->css($this->css())->body([
// Grid::make()->columns([
// $this->frameworkInfo()->md(5),
// Flex::make()->items([
// $this->pieChart(),
// $this->cube(),
// ]),
// ]),
Grid::make()->columns([
$this->frameworkInfo()->md(5),
Flex::make()->items([
$this->pieChart(),
$this->cube(),
]),
]),
Grid::make()->columns([
$this->lineChart()->md(8),
$this->frameworkInfo()->md(8),
Flex::make()->className('h-full')->items([
$this->clock(),
$this->hitokoto(),
@ -111,27 +111,7 @@ JS
Flex::make()->className('h-full')->direction('column')->justify('center')->alignItems('center')->items([
Image::make()->src(url(config('admin.logo'))),
Wrapper::make()->className('text-3xl mt-9')->body(config('admin.name')),
Flex::make()->className('w-64 mt-5')->justify('space-around')->items([
Action::make()
->level('link')
->label('GitHub')
->blank(true)
->actionType('url')
->blank(true)
->link('https://github.com/slowlyo/owl-admin'),
Action::make()
->level('link')
->label('OwlAdmin 文档')
->blank(true)
->actionType('url')
->link('http://doc.owladmin.com'),
Action::make()
->level('link')
->label('Amis 文档')
->blank(true)
->actionType('url')
->link('https://aisuda.bce.baidu.com/amis/zh-CN/docs/index'),
]),
]),
])
);

View File

@ -10,6 +10,7 @@ use Slowlyo\OwlAdmin\Renderers\Alert;
use Slowlyo\OwlAdmin\Renderers\InputKV;
use Slowlyo\OwlAdmin\Renderers\TextControl;
use Slowlyo\OwlAdmin\Controllers\AdminController;
use App\Admin\Components;
class SettingController extends AdminController
{
@ -30,6 +31,13 @@ class SettingController extends AdminController
->data(settings()->all())
->body(
Tabs::make()->tabs([
Tab::make()->title('网站设置')->body([
amis()->TextControl('hot_keywords', '搜索热词')->size('lg'),
amis()->TextControl('conect_phone', '联系电话')->size('lg'),
amis()->TextControl('conect_address', '联系地址')->size('lg'),
Components::make()->fuEditorControl('company', '公司介绍'),
Components::make()->fuEditorControl('contactus', '联系我们'),
]),
Tab::make()->title('上传设置')->body([
amis()->RadiosControl('upload_disk', '上传驱动')->options([
'public'=>'本地存储',
@ -50,7 +58,11 @@ class SettingController extends AdminController
{
$data = $request->only([
'upload_disk',
'oss_config'
'oss_config',
'conect_phone',
'conect_address',
'company', 'contactus',
'hot_keywords'
]);
//上传设置-修改env文件内配置

View File

@ -5,15 +5,108 @@ namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use App\Models\Article;
use App\Models\Ad;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function index()
public function info(Article $article)
{
$banners = Ad::where('address', 'index-top')->show()->sort()->get();
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->get();
$nav = 'article';
$nav_title = '服务项目';
$nav_title_too = $article->title;
$list = [];
$banner = Ad::where('address','service-top')->show()->sort()->first();
return view('index',compact('banners', 'examples', 'news'));
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->limit(5)->get();
$content = $article->content;
return view('article', compact('banner','news','examples','nav', 'nav_title', 'nav_title_too', 'list', 'article', 'content'));
}
public function examples()
{
$nav = 'image_list';
$nav_title = '案例展示';
$nav_title_too = null;
$content = null;
$article = null;
$banner = Ad::where('address','examples-top')->show()->sort()->first();
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->limit(5)->get();
$list = Article::where('category', 'examples')->show()->sort()->get();
return view('article', compact('banner','news','examples','nav', 'nav_title', 'nav_title_too', 'list', 'article', 'content'));
}
public function company(){
$nav = 'article';
$nav_title = '公司介绍';
$nav_title_too = null;
$article = null;
$list = [];
$banner = Ad::where('address','companny-top')->show()->sort()->first();
$content = settings()->get('company', '');
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->limit(5)->get();
return view('article', compact('banner','news','examples','nav', 'nav_title', 'nav_title_too', 'list', 'article', 'content'));
}
public function contactus()
{
$nav = 'article';
$nav_title = '联系我们';
$nav_title_too = null;
$article = null;
$list = [];
$banner = Ad::where('address','contactus-top')->show()->sort()->first();
$content = settings()->get('contactus', '');
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->limit(5)->get();
return view('article', compact('banner','news','examples','nav', 'nav_title', 'nav_title_too', 'list', 'article', 'content'));
}
public function newsList()
{
$nav = 'news_list';
$nav_title = '资讯动态';
$nav_title_too = null;
$content = null;
$article = null;
$banner = Ad::where('address','news-top')->show()->sort()->first();
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->limit(5)->get();
$list = Article::where('category', 'news')->show()->sort()->get();
return view('article', compact('banner','news','examples','nav', 'nav_title', 'nav_title_too', 'list', 'article', 'content'));
}
public function searchList(Request $request)
{
$keywords = $request->input('keywords');
$nav = 'search_list';
$nav_title = '搜索';
$nav_title_too = null;
$content = null;
$article = null;
$banner = Ad::where('address','service-top')->show()->sort()->first();
$examples = Article::where('category', 'examples')->show()->recommend()->sort()->limit(10)->get();
$news = Article::where('category', 'news')->show()->recommend()->sort()->limit(5)->get();
$list = Article::where('title', 'like', $keywords.'%')->show()->sort()->get();
return view('article', compact('banner','news','examples','nav', 'nav_title', 'nav_title_too', 'list', 'article', 'content'));
}
}

View File

@ -21,6 +21,8 @@ class Ad extends Model
{
return $date->format('Y-m-d H:i:s');
}
protected $appends = ['resource_url'];
protected $casts = [
'created_at' => 'datetime',
@ -62,6 +64,12 @@ class Ad extends Model
];
}
protected function resourceUrl():Attribute {
return Attribute::make(
get: fn($value) => $this->resource ? (Str::startsWith($this->resource, ['http://', 'https://']) ? $this->resource : Storage::url($this->resource)) : null,
);
}
public function scopeShow($q){
$q->where('is_enable', true)->where('published_at', '<=', now());
}

View File

@ -24,5 +24,8 @@ class AppServiceProvider extends ServiceProvider
{
\Schema::defaultStringLength(191);
View::share('services', Article::where('category', 'services')->show()->recommend()->sort()->get());
view::share('conect_phone', settings()->get('conect_phone', ''));
view::share('hot_keywords', settings()->get('hot_keywords', ''));
view::share('current_nav', request()->path());
}
}

View File

@ -2,7 +2,7 @@
return [
// 应用名称
'name' => 'Owl Admin',
'name' => '富琳清洁',
// 应用 logo
'logo' => '/admin-assets/logo.png',
@ -86,7 +86,7 @@ return [
'layout' => [
// 浏览器标题, 功能名称使用 %title% 代替
'title' => '%title% | OwlAdmin',
'title' => '%title% | 富琳清洁',
'header' => [
// 是否显示 [刷新] 按钮
'refresh' => true,

View File

@ -18,13 +18,13 @@ class KeywordSeeder extends Seeder
Keyword::truncate();
$list = [
['key' => 'article_category', 'name' => '文章分类', 'list' => [
'examples'=>'案例', 'services' =>'服务', 'news'=> '咨询动态'
'examples'=>'案例', 'services' =>'服务', 'news'=> '资讯动态'
]],
['key' => 'article_tag', 'name' => '文章标签', 'list' => [//标签value填写色号指定标签颜色
// ['key' => 'article_tag', 'name' => '文章标签', 'list' => [//标签value填写色号指定标签颜色
]],
// ]],
['key' => 'banner_address', 'name' => '广告位置', 'list' => [
'index-top'=>'首页', 'service-top' =>'服务项目', 'examples-top'=> '案例展示', 'companny-top'=>'公司介绍','contactus-top'=>'联系我们','news-top'=>'资讯动态'
]],
];

View File

@ -0,0 +1,371 @@
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,section,article,aside,header,footer,nav,dialog,figure,hgroup {
margin: 0;
padding: 0
}
input,select,textarea {
font-size: 100%
}
table {
border-collapse: collapse;
border-spacing: 0
}
fieldset,img {
border: 0
}
caption,th {
text-align: left
}
h1,h2,h3,h4,h5,h6 {
font-size: 100%;
font-weight: 500
}
ul,ol,li {
list-style: none
}
em,i {
font-style: normal
}
del {
text-decoration: line-through
}
address,caption,cite,code,dfn,em,th,var {
font-style: normal;
font-weight: 500
}
img {
border: 0;
max-width: 100%
}
input,img {
vertical-align: middle
}
input:focus,a:focus {
outline: none
}
a {
color: #333;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0,0,0,0)
}
a:active {
opacity: .7
}
* {
outline: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-box-sizing: border-box;
box-sizing: border-box
}
html {
-webkit-text-size-adjust: none;
-ms-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
background: #f4f4f4;
color: #333;
font-family: "Helvetica Neue",Helvetica,Tahoma,sans-serif
}
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
html {
line-height: 1.3;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
article,aside,footer,header,nav,section {
display: block
}
h1 {
font-size: 2em;
margin: 0.67em 0
}
figcaption,figure,main {
display: block
}
figure {
margin: 1em 40px
}
hr {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 0;
overflow: visible
}
pre {
font-family: monospace, monospace;
font-size: 1em
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted
}
b,strong {
font-weight: inherit
}
b,strong {
font-weight: bolder
}
code,kbd,samp {
font-family: monospace, monospace;
font-size: 1em
}
dfn {
font-style: italic
}
mark {
background-color: #ff0;
color: #000
}
small {
font-size: 80%
}
sub,sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -0.25em
}
sup {
top: -0.5em
}
audio,video {
display: inline-block
}
audio:not([controls]) {
display: none;
height: 0
}
img {
border-style: none
}
svg:not(:root) {
overflow: hidden
}
button,input,optgroup,select,textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0
}
button,input {
overflow: visible
}
button,select {
text-transform: none
}
button,html [type="button"],[type="reset"],[type="submit"] {
-webkit-appearance: button
}
button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0
}
button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText
}
fieldset {
padding: 0.35em 0.75em 0.625em
}
legend {
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal
}
progress {
display: inline-block;
vertical-align: baseline
}
textarea {
overflow: auto
}
[type="checkbox"],[type="radio"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0
}
[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button {
height: auto
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px
}
[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
details,menu {
display: block
}
summary {
display: list-item
}
canvas {
display: inline-block
}
template {
display: none
}
[hidden] {
display: none
}
.bdr-btm,.bdr-top {
position: relative
}
.bdr-top::before {
content: ' ';
position: absolute;
width: 100%;
left: 0;
top: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.bdr-btm::after {
content: ' ';
position: absolute;
width: 100%;
left: 0;
bottom: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.fl {
float: left
}
.fr {
float: right
}
.clearfix:before,.clearfix:after {
display: table;
content: ''
}
.clearfix:after {
clear: both;
zoom:1}
.publicContRight {
width: 910px;
background-color: #ffffff;
-webkit-box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
padding: 19px 44px 19px 29px
}
.publicContRight .top {
font-size: 12px
}
.publicContRight .top a {
color: #51545c
}
.publicContRight .top span {
color: #9598a0
}
.publicContRight p {
font-size: 12px;
letter-spacing: 1px;
color: #727478;
margin-top: 30px;
width: 600px;
border-bottom: 1px dashed #d2d2d2;
padding-bottom: 10px;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap
}
.publicBottom {
display: flex;
}

View File

@ -0,0 +1,453 @@
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,section,article,aside,header,footer,nav,dialog,figure,hgroup {
margin: 0;
padding: 0
}
input,select,textarea {
font-size: 100%
}
table {
border-collapse: collapse;
border-spacing: 0
}
fieldset,img {
border: 0
}
caption,th {
text-align: left
}
h1,h2,h3,h4,h5,h6 {
font-size: 100%;
font-weight: 500
}
ul,ol,li {
list-style: none
}
em,i {
font-style: normal
}
del {
text-decoration: line-through
}
address,caption,cite,code,dfn,em,th,var {
font-style: normal;
font-weight: 500
}
img {
border: 0;
max-width: 100%
}
input,img {
vertical-align: middle
}
input:focus,a:focus {
outline: none
}
a {
color: #333;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0,0,0,0)
}
a:active {
opacity: .7
}
* {
outline: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-box-sizing: border-box;
box-sizing: border-box
}
html {
-webkit-text-size-adjust: none;
-ms-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
background: #f4f4f4;
color: #333;
font-family: "Helvetica Neue",Helvetica,Tahoma,sans-serif
}
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
html {
line-height: 1.3;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
article,aside,footer,header,nav,section {
display: block
}
h1 {
font-size: 2em;
margin: 0.67em 0
}
figcaption,figure,main {
display: block
}
figure {
margin: 1em 40px
}
hr {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 0;
overflow: visible
}
pre {
font-family: monospace, monospace;
font-size: 1em
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted
}
b,strong {
font-weight: inherit
}
b,strong {
font-weight: bolder
}
code,kbd,samp {
font-family: monospace, monospace;
font-size: 1em
}
dfn {
font-style: italic
}
mark {
background-color: #ff0;
color: #000
}
small {
font-size: 80%
}
sub,sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -0.25em
}
sup {
top: -0.5em
}
audio,video {
display: inline-block
}
audio:not([controls]) {
display: none;
height: 0
}
img {
border-style: none
}
svg:not(:root) {
overflow: hidden
}
button,input,optgroup,select,textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0
}
button,input {
overflow: visible
}
button,select {
text-transform: none
}
button,html [type="button"],[type="reset"],[type="submit"] {
-webkit-appearance: button
}
button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0
}
button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText
}
fieldset {
padding: 0.35em 0.75em 0.625em
}
legend {
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal
}
progress {
display: inline-block;
vertical-align: baseline
}
textarea {
overflow: auto
}
[type="checkbox"],[type="radio"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0
}
[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button {
height: auto
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px
}
[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
details,menu {
display: block
}
summary {
display: list-item
}
canvas {
display: inline-block
}
template {
display: none
}
[hidden] {
display: none
}
.bdr-btm,.bdr-top {
position: relative
}
.bdr-top::before {
content: ' ';
position: absolute;
width: 100%;
left: 0;
top: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.bdr-btm::after {
content: ' ';
position: absolute;
width: 100%;
left: 0;
bottom: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.fl {
float: left
}
.fr {
float: right
}
.clearfix:before,.clearfix:after {
display: table;
content: ''
}
.clearfix:after {
clear: both;
zoom:1}
.publicContRight {
width: 910px;
background-color: #ffffff;
-webkit-box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
padding: 19px 30px 19px 30px
}
.publicContRight .top {
font-size: 12px
}
.publicContRight .top a {
color: #51545c
}
.publicContRight .top span {
color: #9598a0
}
.publicContRight .rightItems {
width: 240px;
height: 360px;
background-color: #f6f6f6;
margin-top: 30px;
margin-right: 65px;
float: left;
position: relative
}
.publicContRight .rightItems:nth-child(3n+1) {
margin-right: 0
}
.publicContRight img {
width: 240px;
height: 240px
}
.publicContRight .show {
text-align: center;
padding: 0 18px;
height: 120px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
overflow: hidden
}
.publicContRight .more {
display: block;
width: 120px;
height: 30px;
background-color: #ffffff;
-webkit-border-radius: 15px;
border-radius: 15px;
opacity: 0.9;
color: #75cc85;
font-size: 16px;
text-align: center;
line-height: 30px;
margin: auto;
margin-top: 15px
}
.publicContRight .show:hover {
-webkit-animation: mymove 0.5s linear;
animation: mymove 0.5s linear;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards
}
.publicContRight h1 {
padding: 20px 0;
margin: 0;
font-size: 24px;
letter-spacing: 2px;
color: #999999
}
.publicContRight p {
font-size: 12px;
letter-spacing: 1px;
line-height: 18px;
color: #666666;
width: 100%;
height: 36px;
overflow: hidden
}
@-webkit-keyframes mymove {
from {
height: 120px;
background-color: #f6f6f6
}
to {
height: 160px;
background: #75cc85
}
}
@keyframes mymove {
from {
height: 120px;
background-color: #f6f6f6
}
to {
height: 160px;
background: #75cc85
}
}
.publicBottom {
display: flex;
}

View File

@ -0,0 +1,376 @@
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,section,article,aside,header,footer,nav,dialog,figure,hgroup {
margin: 0;
padding: 0
}
input,select,textarea {
font-size: 100%
}
table {
border-collapse: collapse;
border-spacing: 0
}
fieldset,img {
border: 0
}
caption,th {
text-align: left
}
h1,h2,h3,h4,h5,h6 {
font-size: 100%;
font-weight: 500
}
ul,ol,li {
list-style: none
}
em,i {
font-style: normal
}
del {
text-decoration: line-through
}
address,caption,cite,code,dfn,em,th,var {
font-style: normal;
font-weight: 500
}
img {
border: 0;
max-width: 100%
}
input,img {
vertical-align: middle
}
input:focus,a:focus {
outline: none
}
a {
color: #333;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0,0,0,0)
}
a:active {
opacity: .7
}
* {
outline: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-box-sizing: border-box;
box-sizing: border-box
}
html {
-webkit-text-size-adjust: none;
-ms-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
background: #f4f4f4;
color: #333;
font-family: "Helvetica Neue",Helvetica,Tahoma,sans-serif
}
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
html {
line-height: 1.3;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
article,aside,footer,header,nav,section {
display: block
}
h1 {
font-size: 2em;
margin: 0.67em 0
}
figcaption,figure,main {
display: block
}
figure {
margin: 1em 40px
}
hr {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 0;
overflow: visible
}
pre {
font-family: monospace, monospace;
font-size: 1em
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted
}
b,strong {
font-weight: inherit
}
b,strong {
font-weight: bolder
}
code,kbd,samp {
font-family: monospace, monospace;
font-size: 1em
}
dfn {
font-style: italic
}
mark {
background-color: #ff0;
color: #000
}
small {
font-size: 80%
}
sub,sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -0.25em
}
sup {
top: -0.5em
}
audio,video {
display: inline-block
}
audio:not([controls]) {
display: none;
height: 0
}
img {
border-style: none
}
svg:not(:root) {
overflow: hidden
}
button,input,optgroup,select,textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0
}
button,input {
overflow: visible
}
button,select {
text-transform: none
}
button,html [type="button"],[type="reset"],[type="submit"] {
-webkit-appearance: button
}
button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0
}
button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText
}
fieldset {
padding: 0.35em 0.75em 0.625em
}
legend {
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal
}
progress {
display: inline-block;
vertical-align: baseline
}
textarea {
overflow: auto
}
[type="checkbox"],[type="radio"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0
}
[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button {
height: auto
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px
}
[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
details,menu {
display: block
}
summary {
display: list-item
}
canvas {
display: inline-block
}
template {
display: none
}
[hidden] {
display: none
}
.bdr-btm,.bdr-top {
position: relative
}
.bdr-top::before {
content: ' ';
position: absolute;
width: 100%;
left: 0;
top: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.bdr-btm::after {
content: ' ';
position: absolute;
width: 100%;
left: 0;
bottom: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.fl {
float: left
}
.fr {
float: right
}
.clearfix:before,.clearfix:after {
display: table;
content: ''
}
.clearfix:after {
clear: both;
zoom:1}
.publicContRight {
width: 910px;
background-color: #ffffff;
-webkit-box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
padding: 19px 30px 68px 30px
}
.publicContRight .top {
font-size: 12px
}
.publicContRight .top a {
color: #51545c
}
.publicContRight .top span {
color: #9598a0
}
.publicContRight .title {
font-size: 18px;
letter-spacing: 1px;
color: #303338;
text-align: center;
margin: 30px 0 16px 0
}
.publicContRight img {
width: 850px;
height: 430px;
margin-top: 20px
}
.publicBottom {
display: flex;
}
/* .publicBottom .publicBottomCont{
display: flex;
} */

View File

@ -0,0 +1,408 @@
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,section,article,aside,header,footer,nav,dialog,figure,hgroup {
margin: 0;
padding: 0
}
input,select,textarea {
font-size: 100%
}
table {
border-collapse: collapse;
border-spacing: 0
}
fieldset,img {
border: 0
}
caption,th {
text-align: left
}
h1,h2,h3,h4,h5,h6 {
font-size: 100%;
font-weight: 500
}
ul,ol,li {
list-style: none
}
em,i {
font-style: normal
}
del {
text-decoration: line-through
}
address,caption,cite,code,dfn,em,th,var {
font-style: normal;
font-weight: 500
}
img {
border: 0;
max-width: 100%
}
input,img {
vertical-align: middle
}
input:focus,a:focus {
outline: none
}
a {
color: #333;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0,0,0,0)
}
a:active {
opacity: .7
}
* {
outline: none;
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-box-sizing: border-box;
box-sizing: border-box
}
html {
-webkit-text-size-adjust: none;
-ms-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0,0,0,0);
background: #f4f4f4;
color: #333;
font-family: "Helvetica Neue",Helvetica,Tahoma,sans-serif
}
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
html {
line-height: 1.3;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
article,aside,footer,header,nav,section {
display: block
}
h1 {
font-size: 2em;
margin: 0.67em 0
}
figcaption,figure,main {
display: block
}
figure {
margin: 1em 40px
}
hr {
-webkit-box-sizing: content-box;
box-sizing: content-box;
height: 0;
overflow: visible
}
pre {
font-family: monospace, monospace;
font-size: 1em
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted
}
b,strong {
font-weight: inherit
}
b,strong {
font-weight: bolder
}
code,kbd,samp {
font-family: monospace, monospace;
font-size: 1em
}
dfn {
font-style: italic
}
mark {
background-color: #ff0;
color: #000
}
small {
font-size: 80%
}
sub,sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -0.25em
}
sup {
top: -0.5em
}
audio,video {
display: inline-block
}
audio:not([controls]) {
display: none;
height: 0
}
img {
border-style: none
}
svg:not(:root) {
overflow: hidden
}
button,input,optgroup,select,textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0
}
button,input {
overflow: visible
}
button,select {
text-transform: none
}
button,html [type="button"],[type="reset"],[type="submit"] {
-webkit-appearance: button
}
button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0
}
button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText
}
fieldset {
padding: 0.35em 0.75em 0.625em
}
legend {
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal
}
progress {
display: inline-block;
vertical-align: baseline
}
textarea {
overflow: auto
}
[type="checkbox"],[type="radio"] {
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding: 0
}
[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button {
height: auto
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px
}
[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
details,menu {
display: block
}
summary {
display: list-item
}
canvas {
display: inline-block
}
template {
display: none
}
[hidden] {
display: none
}
.bdr-btm,.bdr-top {
position: relative
}
.bdr-top::before {
content: ' ';
position: absolute;
width: 100%;
left: 0;
top: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.bdr-btm::after {
content: ' ';
position: absolute;
width: 100%;
left: 0;
bottom: 0;
border-top: 1px solid #ddd;
color: #ddd;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5)
}
.fl {
float: left
}
.fr {
float: right
}
.clearfix:before,.clearfix:after {
display: table;
content: ''
}
.clearfix:after {
clear: both;
zoom:1}
.publicContRight {
width: 910px;
background-color: #ffffff;
-webkit-box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
box-shadow: 0px 2px 16px 0px rgba(64,64,71,0.15);
padding: 19px 60px 40px 30px
}
.publicContRight .top {
font-size: 12px
}
.publicContRight .top a {
color: #51545c
}
.publicContRight .top span {
color: #9598a0
}
.publicContRight .items {
width: 820px;
height: 240px;
border-bottom: 1px solid #eeeeee;
padding: 40px 78px 30px 0;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex
}
.publicContRight img {
width: 240px;
height: 160px;
background-color: #f4f4f4
}
.publicContRight .itemCont {
margin-left: 20px
}
.publicContRight .itemCont .title {
font-size: 16px;
letter-spacing: 1px;
color: #5d616c;
width: 550px;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap
}
.publicContRight .itemCont .cont {
margin-top: 22px;
font-size: 12px;
letter-spacing: 1px;
color: #a4a6aa;
width: 530px;
height: 73px;
overflow: hidden;
line-height: 18px
}
.publicContRight .itemCont .link {
font-size: 12px;
letter-spacing: 1px;
color: #60bd90;
margin-top: 22px;
display: block
}
.publicBottom {
display: flex;
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,110 @@
@extends('layouts.main')
@section('style')
@switch($nav)
@case('article')
<link rel="stylesheet" href="/web/css/services.css">
<link rel="stylesheet" href="/web/css/projectdetail.css">
@break
@case('news_list')
<link rel="stylesheet" href="/web/css/news.css">
@break
@case('search_list')
<link rel="stylesheet" href="/web/css/search.css">
@break
@case('image_list')
<link rel="stylesheet" href="/web/css/portfolio.css">
@break
@endswitch
@endsection
@section('content')
<!-- 公共图片 -->
<img src="{{$banner?->resource_url}}" class="pic" alt="">
<!-- 公共中间内容 -->
<div class="publicCont">
<!-- 公共左边 -->
<div class="publicContLeft">
@if($nav == 'article' && $article?->category == 'services')
<div class="sever">
<div class="top">服务项目</div>
<ul class="list">
@foreach($services as $service)
<li class="{{ $article->id == $service->id ? 'active' :''}}"><a href="{{url('articles/'.$service->id.'/info')}}">{{$service->title}}</a></li>
@endforeach
</ul>
</div>
@endif
<div class="contLeftTop">
<div class="top">推荐资讯</div>
<ul class="list">
@foreach($news as $item)
<p><a href="{{url('articles/'.$item->id.'/info')}}">{{$item->title}}</a></p>
@endforeach
</ul>
</div>
<div class="contLeftBottom">
<div class="top">推荐产品</div>
@foreach($examples as $example)
<a href="{{url('articles/'.$example->id.'/info')}}">
<div class="item">
<img src="{{$example->cover_url}}" alt="">
<p>{{$item->title}}</p>
</div>
</a>
@endforeach
</div>
</div>
<div class="publicContRight">
<div class="top">
<a href="">首页 &nbsp > &nbsp</a>
@if($nav_title_too)
<a href="">{{$nav_title}} &nbsp > &nbsp</a>
<span>{{$nav_title_too}}</span>
@else
<span>{{$nav_title}}</span>
@endif
</div>
@switch($nav)
@case('article')
{!! $content !!}
@break
@case('news_list')
@foreach($list as $item)
<div class="items">
<a href="{{url('articles/'.$item->id.'/info')}}" >
<div class="itemCont">
<p class="title">{{$item->title}}</p>
</div>
</a>
</div>
@endforeach
@break
@case('search_list')
@foreach($list as $item)
<div class="items">
<img src="{{$item->cover_url}}" alt="">
<a href="{{url('articles/'.$item->id.'/info')}}" >
<div class="itemCont">
<p class="title">{{$item->title}}</p>
</div>
</a>
</div>
@endforeach
@break
@case('image_list')
@foreach($list as $item)
<div class="rightItems">
<img src="{{$item->cover_url}}" alt="">
<div class="show">
<h1>-{{$item->id}}-</h1>
<p>{{$item->title}}</p>
<a href="{{url('articles/'.$item->id.'/info')}}" class="more">更多</a>
</div>
</div>
@endforeach
@break
@endswitch
</div>
</div>
@endsection

View File

@ -10,7 +10,7 @@
<div class="swiper-wrapper">
@foreach($banners as $banner)
<div class="swiper-slide">
<img src="{{$banner->resource}}">
<img src="{{$banner->resource_url}}">
</div>
@endforeach
</div>
@ -29,7 +29,6 @@
@foreach($services as $k => $service)
@if($k < 6)
<div class="item">
<!-- cases/index?id= -->
<a href="{{url('articles/'.$service->id.'/info')}}">{{$service->title}} ></a>
</div>
@endif
@ -41,7 +40,6 @@
<img src="{{$service->cover_url}}" alt="">
<div class="moreAll">
<span>{{$service->title}}</span>
<!-- cases/index?id= -->
<a href="{{url('articles/'.$service->id.'/info')}}" class="more">更多</a>
</div>
</div>
@ -55,7 +53,6 @@
<a href="/" class="go"><img src="/web/images/baseicons9.png" alt=""></a>
@foreach($examples as $i => $example)
<div class="suContItems">
<!-- cases/index?id= -->
<a href="{{url('articles/'.$example->id.'/info')}}">
<img src="{{$example->cover_url}}" alt="">
<div class="show">
@ -80,14 +77,12 @@
<div class="cont">
15165163165
</div>
<!-- cases/company -->
<a href="/">更多</a>
<a href="/company">更多</a>
</div>
</div>
<div class="dongtai">
<p class="title">公司动态</p>
@foreach($news as $item)
<!-- cases/index?id= -->
<a href="{{url('articles/'.$item->id.'/info')}}" class="cont">· {{$item->title}}</a>
@endforeach
</div>
@ -97,11 +92,11 @@
<div class="lianxi">
<img src="/web/images/title4.png" alt="">
<!-- cases/contactus -->
<a href="/" class="go"><img src="/web/images/baseicons9.png" alt=""></a>
<a href="/contactus" class="go"><img src="/web/images/baseicons9.png" alt=""></a>
<img class="pic11" src="/web/images/pic11.png" alt="">
<p class="hezuo">合作共赢</p>
<p class="text">富琳全体员工竭诚以待</p>
<a href="/" class="link">联系我们</a>
<a href="/contactus" class="link">联系我们</a>
</div>
<!-- <div id="form">
<p class="liuyan">给我们留言</p>
@ -118,4 +113,29 @@
@section('script')
<script src="{{asset('/web/js/swiper.js')}}"></script>
<script>
var swiper = new Swiper('.swiper-container', {
loop: true,
loopedSlides: 3,
autoplay: {
delay: 10000,
stopOnLastSlide: false,
disableOnInteraction: true,
},
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
$("#returnTop").click(function () {
$(document).click = null;
$('html , body').animate({
scrollTop: 0
}, 'slow');
})
</script>
@endsection

View File

@ -1,30 +1,7 @@
<script src="{{asset('js/jquery.1.8.2.min.js')}}"></script>
<script src="{{asset('/web/js/public.js')}}"></script>
<script>
var swiper = new Swiper('.swiper-container', {
loop: true,
loopedSlides: 3,
autoplay: {
delay: 10000,
stopOnLastSlide: false,
disableOnInteraction: true,
},
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
$("#returnTop").click(function () {
$(document).click = null;
$('html , body').animate({
scrollTop: 0
}, 'slow');
})
function addFavorite2() {
function addFavorite2() {
var url = window.location;
var title = document.title;
var ua = navigator.userAgent.toLowerCase();
@ -86,4 +63,4 @@
// console.log($("#searchValue").val())
// $.ajax
// })
</script>
</script>

View File

@ -27,35 +27,35 @@
<img src="/web/images/icon_phone.png" alt="">
<div class="lian">
<p class="all">全国咨询热线</p>
<p class="phone">aaaaaa</p>
<p class="phone">{{$conect_phone}}</p>
</div>
</div>
</div>
<!-- 公共NAV -->
<div class="nav">
<div class="navCont">
<div class="item active">
<a href="/"><span class="items">网站首页<span></a>
<div class="item {{ $current_nav === '' ? 'active' : ''}}">
<a href="/" ><span class="items">网站首页<span></a>
</div>
<div class="item ">
<a href="#0"><span class="items">服务项目<span></a>
<div class="item {{ strpos($current_nav, 'articles') !== false ? 'active' : ''}}">
<a href=""><span class="items">服务项目<span></a>
<ul class="itemCont">
@foreach($services as $service)
<li><a href="/">{{$service->title}}</a></li>
<li><a href="{{url('articles/'.$service->id.'/info')}}">{{$service->title}}</a></li>
@endforeach
</ul>
</div>
<div class="item ">
<a href="/"><span class="items">案列展示</span></a>
<div class="item {{ strpos($current_nav, 'examples') !== false ? 'active' : ''}}">
<a href="/examples" ><span class="items">案列展示</span></a>
</div>
<div class="item ">
<a href="/"><span class="items">公司介绍<span></a>
<div class="item {{ strpos($current_nav, 'company') !== false ? 'active' : ''}}">
<a href="/company"><span class="items">公司介绍<span></a>
</div>
<div class="item ">
<a href="/"><span class="items">资讯动态<span></a>
<div class="item {{ strpos($current_nav, 'news') !== false ? 'active' : ''}}">
<a href="/news"><span class="items">资讯动态<span></a>
</div>
<div class="item ">
<a href="/"><span class="items" style="border-right:none">联系我们<span></a>
<div class="item {{ strpos($current_nav, 'contactus') !== false ? 'active' : ''}}">
<a href="/contactus"><span class="items" style="border-right:none">联系我们<span></a>
</div>
</div>
</div>
@ -64,11 +64,11 @@
<div class="searchCont">
<div class="searchLeft">
<span class="active">热点搜索词:</span>
<span>{{$hot_keywords}}</span>
</div>
<div class="searchRight">
<form action="/" method="get">
<input type="text" name="search" id="searchValue" placeholder="请输入搜索关键字!">
<form action="/search" method="get">
<input type="text" name="keywords" id="searchValue" placeholder="请输入搜索关键字!">
<button type="submit" class="btnSearch"></button>
</form>
</div>

View File

@ -14,4 +14,11 @@ use Illuminate\Support\Facades\Route;
*/
Route::get('/', [App\Http\Controllers\IndexController::class, 'index']);
Route::get('/articles/{id}/info', [App\Http\Controllers\ArticleController::class, 'index']);
//服务项目
Route::get('/examples', [App\Http\Controllers\ArticleController::class, 'examples']);
Route::get('/company', [App\Http\Controllers\ArticleController::class, 'company']);
Route::get('/contactus', [App\Http\Controllers\ArticleController::class, 'contactus']);
Route::get('/news', [App\Http\Controllers\ArticleController::class, 'newsList']);
Route::get('/search', [App\Http\Controllers\ArticleController::class, 'searchList']);
Route::get('/articles/{article}/info', [App\Http\Controllers\ArticleController::class, 'info']);